Merge "Use updated enterprise API"
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 78b16bb..e68a068 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -62,6 +62,7 @@
     <uses-permission android:name="android.permission.READ_PROFILE" />
     <uses-permission android:name="android.permission.CONFIGURE_WIFI_DISPLAY" />
     <uses-permission android:name="android.permission.SET_TIME" />
+    <uses-permission android:name="android.permission.ACCESS_NOTIFICATIONS" />
 
     <application android:label="@string/settings_label"
             android:icon="@mipmap/ic_launcher_settings"
@@ -768,6 +769,19 @@
                 android:resource="@id/application_settings" />
         </activity>
 
+        <activity android:name="Settings$NotificationStationActivity"
+                android:label="@string/sound_category_notification_title"
+                android:taskAffinity=""
+                android:excludeFromRecents="true">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.DEFAULT" />
+                <category android:name="com.android.settings.SHORTCUT" />
+            </intent-filter>
+            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+                android:value="com.android.settings.NotificationStation" />
+        </activity>
+
         <activity android:name="Settings$AppOpsSummaryActivity"
                 android:label="@string/app_ops_settings"
                 android:taskAffinity=""
diff --git a/res/drawable-hdpi/ic_settings_notifications.png b/res/drawable-hdpi/ic_settings_notifications.png
new file mode 100644
index 0000000..aefb57b
--- /dev/null
+++ b/res/drawable-hdpi/ic_settings_notifications.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_settings_notifications.png b/res/drawable-mdpi/ic_settings_notifications.png
new file mode 100644
index 0000000..fa7a07c
--- /dev/null
+++ b/res/drawable-mdpi/ic_settings_notifications.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_settings_notifications.png b/res/drawable-xhdpi/ic_settings_notifications.png
new file mode 100644
index 0000000..c6c5c43
--- /dev/null
+++ b/res/drawable-xhdpi/ic_settings_notifications.png
Binary files differ
diff --git a/res/layout/notification_info_row.xml b/res/layout/notification_info_row.xml
new file mode 100644
index 0000000..bc71ef2
--- /dev/null
+++ b/res/layout/notification_info_row.xml
@@ -0,0 +1,115 @@
+<!--
+     Copyright (C) 2013 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content" >
+
+    <!-- Dream selectable row (icon, caption, radio button) -->
+
+    <RelativeLayout
+        android:id="@android:id/widget_frame"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_toStartOf="@+id/divider"
+        android:background="?android:attr/selectableItemBackground" >
+
+        <!-- Dream icon -->
+
+        <ImageView
+            android:id="@+id/pkgicon"
+            android:layout_width="@*android:dimen/status_bar_icon_size"
+            android:layout_height="@*android:dimen/status_bar_icon_size"
+            android:layout_centerVertical="true"
+            android:layout_marginBottom="6dp"
+            android:layout_marginStart="0dp"
+            android:layout_marginEnd="6dp"
+            android:layout_marginTop="6dp"
+            android:contentDescription="@null"
+            android:maxHeight="@*android:dimen/status_bar_icon_size"
+            android:maxWidth="@*android:dimen/status_bar_icon_size"
+            android:scaleType="fitCenter" />
+
+        <ImageView
+            android:id="@android:id/icon"
+            android:layout_width="@*android:dimen/status_bar_icon_size"
+            android:layout_height="@*android:dimen/status_bar_icon_size"
+            android:layout_centerVertical="true"
+            android:layout_toEndOf="@id/pkgicon"
+            android:layout_marginBottom="6dp"
+            android:layout_marginStart="0dp"
+            android:layout_marginEnd="8dp"
+            android:layout_marginTop="6dp"
+            android:contentDescription="@null"
+            android:maxHeight="@*android:dimen/status_bar_icon_size"
+            android:maxWidth="@*android:dimen/status_bar_icon_size"
+            android:scaleType="fitCenter" />
+
+        <!-- Dream caption -->
+
+        <TextView
+            android:id="@android:id/title"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_centerVertical="true"
+            android:layout_toStartOf="@android:id/button1"
+            android:layout_toEndOf="@android:id/icon"
+            android:ellipsize="end"
+            android:singleLine="true"
+            android:textAppearance="?android:attr/textAppearanceSmall"
+            android:textAlignment="viewStart"
+            android:labelFor="@android:id/button2" />
+
+        <!-- Dream radio button -->
+
+        <!--<RadioButton
+            android:id="@android:id/button1"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:layout_alignParentEnd="true"
+            android:layout_centerVertical="true"
+            android:duplicateParentState="true"
+            android:clickable="false"
+            android:focusable="false" />-->
+    </RelativeLayout>
+
+    <!-- Divider -->
+
+    <ImageView
+        android:id="@id/divider"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:layout_centerVertical="true"
+        android:layout_toStartOf="@android:id/button2"
+        android:contentDescription="@null"
+        android:src="@drawable/nav_divider" />
+
+    <!-- Settings icon -->
+
+    <ImageView
+        android:id="@android:id/button2"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:layout_alignBottom="@android:id/widget_frame"
+        android:layout_alignParentEnd="true"
+        android:layout_alignTop="@android:id/widget_frame"
+        android:layout_centerVertical="true"
+        android:layout_margin="0dip"
+        android:background="?android:attr/selectableItemBackground"
+        android:contentDescription="@string/screensaver_settings_button"
+        android:padding="8dip"
+        android:src="@drawable/ic_bt_config" />
+
+</RelativeLayout>
\ No newline at end of file
diff --git a/res/layout/notification_log_row.xml b/res/layout/notification_log_row.xml
new file mode 100644
index 0000000..26e72cb
--- /dev/null
+++ b/res/layout/notification_log_row.xml
@@ -0,0 +1,96 @@
+<!--
+     Copyright (C) 2013 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@android:id/widget_frame"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:layout_toStartOf="@+id/divider"
+    android:background="?android:attr/selectableItemBackground" >
+
+    <!-- Dream icon -->
+
+    <ImageView
+        android:id="@+id/pkgicon"
+        android:layout_width="@*android:dimen/status_bar_icon_size"
+        android:layout_height="@*android:dimen/status_bar_icon_size"
+        android:layout_centerVertical="true"
+        android:layout_marginBottom="6dp"
+        android:layout_marginStart="0dp"
+        android:layout_marginEnd="6dp"
+        android:layout_marginTop="6dp"
+        android:contentDescription="@null"
+        android:adjustViewBounds="true"
+        android:maxHeight="@*android:dimen/status_bar_icon_size"
+        android:maxWidth="@*android:dimen/status_bar_icon_size"
+        android:scaleType="fitCenter" />
+
+    <ImageView
+        android:id="@android:id/icon"
+        android:layout_width="@*android:dimen/status_bar_icon_size"
+        android:layout_height="@*android:dimen/status_bar_icon_size"
+        android:layout_centerVertical="true"
+        android:layout_toEndOf="@id/pkgicon"
+        android:layout_marginBottom="6dp"
+        android:layout_marginStart="0dp"
+        android:layout_marginEnd="8dp"
+        android:layout_marginTop="6dp"
+        android:contentDescription="@null"
+        android:adjustViewBounds="true"
+        android:maxHeight="@*android:dimen/status_bar_icon_size"
+        android:maxWidth="@*android:dimen/status_bar_icon_size"
+        android:scaleType="fitCenter" />
+
+    <!-- Dream caption -->
+
+    <TextView
+        android:id="@android:id/title"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_centerVertical="true"
+        android:layout_toStartOf="@+id/timestamp"
+        android:layout_toEndOf="@android:id/icon"
+        android:ellipsize="end"
+        android:singleLine="true"
+        android:textAppearance="?android:attr/textAppearanceSmall"
+        android:textAlignment="viewStart"
+        android:labelFor="@android:id/button2" />
+
+    <!-- Dream radio button -->
+
+    <!--<RadioButton
+        android:id="@android:id/button1"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:layout_alignParentEnd="true"
+        android:layout_centerVertical="true"
+        android:duplicateParentState="true"
+        android:clickable="false"
+        android:focusable="false" />-->
+
+    <DateTimeView
+        android:id="@+id/timestamp"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:layout_alignBottom="@android:id/widget_frame"
+        android:layout_alignParentEnd="true"
+        android:layout_alignTop="@android:id/widget_frame"
+        android:layout_centerVertical="true"
+        android:ellipsize="end"
+        android:singleLine="true"
+        android:textAppearance="?android:attr/textAppearanceSmall"
+        android:textAlignment="viewEnd"
+        />
+</RelativeLayout>
\ No newline at end of file
diff --git a/res/values-af/arrays.xml b/res/values-af/arrays.xml
index 24c9c5d..ef94dcf 100644
--- a/res/values-af/arrays.xml
+++ b/res/values-af/arrays.xml
@@ -231,11 +231,11 @@
     <item msgid="1061584358377390581">"GPS"</item>
     <item msgid="5387405117297558954">"vibreer"</item>
     <item msgid="3434165993711230924">"lees kontakte"</item>
-    <item msgid="616161687718081936">"wysig kontakte"</item>
+    <item msgid="616161687718081936">"verander kontakte"</item>
     <item msgid="7638002295329050091">"lees oproeprekord"</item>
-    <item msgid="6546959730920410907">"wysig oproeprekord"</item>
+    <item msgid="6546959730920410907">"verander oproeprekord"</item>
     <item msgid="446877710771379667">"lees kalender"</item>
-    <item msgid="7674458294386319722">"wysig kalender"</item>
+    <item msgid="7674458294386319722">"verander kalender"</item>
     <item msgid="8281201165558093009">"Wi-Fi-skandering"</item>
     <item msgid="8694611243479480497">"kennisgewing"</item>
     <item msgid="7776439107987345446">"sel-skandering"</item>
@@ -249,7 +249,7 @@
     <item msgid="7125408150230860501">"stuur SMS"</item>
     <item msgid="7080337936612188061">"lees ICC-SMS"</item>
     <item msgid="587124103118495063">"skryf ICC-SMS"</item>
-    <item msgid="2320577158869025503">"wysig instellings"</item>
+    <item msgid="2320577158869025503">"verander instellings"</item>
     <item msgid="1545733463471924009">"teken bo-op"</item>
   </string-array>
   <string-array name="app_ops_labels">
@@ -258,11 +258,11 @@
     <item msgid="1660743989948992916">"Ligging"</item>
     <item msgid="8791172739860195290">"Vibreer"</item>
     <item msgid="383413555642128046">"Lees kontakte"</item>
-    <item msgid="3654594895269697313">"Wysig kontakte"</item>
+    <item msgid="3654594895269697313">"Verander kontakte"</item>
     <item msgid="7928393476362362538">"Lees oproeprekord"</item>
-    <item msgid="6248591205254641116">"Wysig oproeprekord"</item>
+    <item msgid="6248591205254641116">"Verander oproeprekord"</item>
     <item msgid="6093344633066170692">"Lees kalender"</item>
-    <item msgid="1334886368750347692">"Wysig kalender"</item>
+    <item msgid="1334886368750347692">"Verander kalender"</item>
     <item msgid="1638204101698708656">"Ligging"</item>
     <item msgid="2154671955760380322">"Plaas kennisgewing"</item>
     <item msgid="4282477730595931828">"Ligging"</item>
@@ -276,7 +276,7 @@
     <item msgid="1407766984645388488">"Stuur SMS/MMS"</item>
     <item msgid="1530132603376027248">"Ontvang SMS/MMS"</item>
     <item msgid="1188256962149204607">"Stuur SMS/MMS"</item>
-    <item msgid="4218544235221631789">"Wysig instellings"</item>
+    <item msgid="4218544235221631789">"Verander instellings"</item>
     <item msgid="736541391767350377">"Teken bo-op"</item>
   </string-array>
   <string-array name="long_press_timeout_selector_titles">
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 9e69b70..1601b4e 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -560,7 +560,7 @@
     <string name="wifi_other_network" msgid="1048006316504242214">"شبکه‌ای دیگر…"</string>
     <string name="wifi_more" msgid="3195296805089107950">"بیشتر"</string>
     <string name="wifi_setup_wps" msgid="8128702488486283957">"تنظیم خودکار (WPS)"</string>
-    <string name="wifi_required_info_text" msgid="4080969509965288881">"برای تکمیل تنظیم، رایانه لوحی شما نیاز به دسترسی به Wi-Fi دارد. پس از تنظیم، می‌توانید داده‌های تلفن همراه و Wi-Fi را تعویض نمایید."</string>
+    <string name="wifi_required_info_text" msgid="4080969509965288881">"برای تکمیل تنظیم، رایانه لوحی شما نیاز به دسترسی به Wi-Fi دارد. پس از تنظیم، می‌توانید داده‌های تلفن همراه و Wi-Fi را با یکدیگر تعویض نمایید."</string>
     <string name="wifi_show_advanced" msgid="1793703023711426246">"نمایش گزینه‌های پیشرفته"</string>
     <string name="wifi_wps_setup_title" msgid="8207552222481570175">"Wi‑Fi Protected Setup"</string>
     <string name="wifi_wps_setup_msg" msgid="315174329121275092">"راه‌اندازی WPS…"</string>
@@ -1275,7 +1275,7 @@
     <string name="allow_mock_location_summary" msgid="317615105156345626">"مکان‌های کاذب مجاز هستند"</string>
     <string name="adb_warning_title" msgid="6234463310896563253">"رفع عیب USB انجام شود؟"</string>
     <string name="adb_warning_message" msgid="7316799925425402244">"رفع عیب USB فقط برای اهداف برنامه‌نویسی در نظر گرفته شده است. از آن برای رونوشت‌برداری داده بین رایانه و دستگاه خود، نصب برنامه‌ها در دستگاه خود بدون اعلان و خواندن داده‌های گزارش استفاده کنید."</string>
-    <string name="adb_keys_warning_message" msgid="6932230298032192937">"لغو دسترسی به اشکال‌زدایی USB از تمام رایانه‌هایی که قبلاً مجاز دانسته‌اید انجام شود؟"</string>
+    <string name="adb_keys_warning_message" msgid="6932230298032192937">"دسترسی به اشکال‌زدایی USB از تمام رایانه‌هایی که قبلاً مجاز دانسته‌اید لغو شود؟"</string>
     <string name="dev_settings_warning_title" msgid="7244607768088540165">"تنظیمات برنامه‌نویسی مجاز باشد؟"</string>
     <string name="dev_settings_warning_message" msgid="2298337781139097964">"این تنظیمات فقط برای برنامه‌نویسی در نظر گرفته شده است. ممکن است استفاده از این تنظیمات موجب خرابی یا عملکرد نادرست دستگاه یا برنامه‌های شما شود."</string>
     <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"تأیید برنامه‌های نصب شده از طریق USB"</string>
@@ -1726,7 +1726,7 @@
     <string name="data_usage_total_during_range_mobile" product="tablet" msgid="5961720793603268572">"<xliff:g id="RANGE">%2$s</xliff:g>: در حدود <xliff:g id="TOTAL">%1$s</xliff:g>، براساس محاسبه رایانهٔ لوحی شما، استفاده شده است. ممکن است روش محاسبهٔ مقدار استفاده از داده توسط شرکت مخابراتی شما متفاوت باشد."</string>
     <string name="data_usage_total_during_range_mobile" product="default" msgid="1625833170144610767">"<xliff:g id="RANGE">%2$s</xliff:g>: در حدود <xliff:g id="TOTAL">%1$s</xliff:g>، براساس محاسبه گوشی شما، استفاده شده است. ممکن است روش محاسبهٔ مقدار استفاده از داده توسط شرکت مخابراتی شما متفاوت باشد."</string>
     <string name="data_usage_metered_title" msgid="6204750602856383278">"نقاط اتصال تلفن همراه"</string>
-    <string name="data_usage_metered_body" msgid="4959032833706695848">"آن دسته از شبکه‌های Wi-Fi را انتخاب کنید که نقاط اتصال تلفن همراه هستند. هنگامی که برنامه‌ها در پس‌زمینه اجرا می‌شوند، استفاده آن‌ها از این شبکه‌ها ممکن است محدود شود. همچنین زمانی که بخواهید از این شبکه‌ها برای دانلودهای بزرگ استفاده کنید، برنامه‌ها ممکن است هشدار دهند."</string>
+    <string name="data_usage_metered_body" msgid="4959032833706695848">"آن دسته از شبکه‌های Wi-Fi را انتخاب کنید که نقاط اتصال تلفن همراه هستند. هنگامی که برنامه‌ها در پس‌زمینه اجرا می‌شوند، می‌توان استفاده آن‌ها از این شبکه‌ها را محدود کرد. همچنین زمانی که بخواهید از این شبکه‌ها برای دانلودهای بزرگ استفاده کنید، برنامه‌ها ممکن است هشدار دهند."</string>
     <string name="data_usage_metered_mobile" msgid="5423305619126978393">"شبکه‌های تلفن همراه"</string>
     <string name="data_usage_metered_wifi" msgid="8540872226614404873">"شبکه‌های Wi-Fi"</string>
     <string name="data_usage_metered_wifi_disabled" msgid="5502020778468643732">"برای انتخاب نقاط اتصال تلفن همراه، Wi-Fi را روشن کنید."</string>
@@ -1796,7 +1796,7 @@
     <string name="user_owner" msgid="3879126011135546571">"مالک"</string>
     <string name="user_nickname" msgid="5148818000228994488">"نام مستعار"</string>
     <string name="user_add_user_title" msgid="3961861593718285403">"اضافه کردن کاربر جدید"</string>
-    <string name="user_add_user_message_long" msgid="3086244205384741788">"شما می‌توانید با ایجاد کاربران اضافی، این دستگاه را با سایر افراد به اشتراک بگذارید. هر کاربر فضای مخصوص به خود را دارد و می‌تواند این فضا را با برنامه‌ها، تصاویر زمینه و موارد دیگر خود سفارشی کند. کاربران همچنین می‌توانند تنظیماتی، مانند Wi-Fi، را در رایانه لوحی ایجاد کنند که بر همه کاربران تأثیر می‌گذارد."\n\n"بعد از ایجاد یک کاربر جدید، آن شخص باید مرحله تنظیم را انجام دهد."\n\n"هر کاربر می‌تواند مجوزهای برنامه به‌روز شده را از طرف همه کاربران دیگر بپذیرد."</string>
+    <string name="user_add_user_message_long" msgid="3086244205384741788">"شما می‌توانید با ایجاد کاربران اضافی، این دستگاه را با سایر افراد به اشتراک بگذارید. هر کاربر فضای مخصوص به خود را دارد و می‌تواند این فضا را با برنامه‌ها، تصاویر زمینه و موارد دیگر خود سفارشی کند. کاربران همچنین می‌توانند تنظیماتی، مانند Wi-Fi، را در رایانه لوحی ایجاد کنند که بر همه کاربران تأثیر می‌گذارد."\n\n"بعد از ایجاد یک کاربر جدید، آن شخص باید مرحله تنظیم را انجام دهد."\n\n"هر کاربر می‌تواند مجوزهای برنامه به‌روز شده را از طرف سایر کاربران بپذیرد."</string>
     <string name="user_add_user_message_short" msgid="3310933423737035428">"بعد از ایجاد یک کاربر جدید، آن شخص باید مرحله تنظیم را انجام دهد."\n\n"هر کاربر می‌تواند مجوزهای برنامه به‌روز شده را از طرف سایر کاربران بپذیرد."</string>
     <string name="user_setup_dialog_title" msgid="1765794166801864563">"هم اکنون کاربر تنظیم شود؟"</string>
     <string name="user_setup_dialog_message" msgid="614037943337008555">"اطمینان حاصل کنید که فرد برای گرفتن رایانه لوحی و تنظیم فضای خود، در دسترس است"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index eb1bc79..0b05347 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -832,7 +832,7 @@
     <string name="sd_ejecting_title" msgid="8824572198034365468">"Inaangua"</string>
     <string name="sd_ejecting_summary" msgid="2028753069184908491">"Shughuli ya kuanguliwa inaendelea"</string>
     <string name="storage_low_title" msgid="1388569749716225155">"Nafasi ya kuhifadhi inakwisha"</string>
-    <string name="storage_low_summary" msgid="7737465774892563129">"Baadhi ya vipengee vya mfumo, kama vile ulandanishaji, huenda visifanye kazi vizuri. Jaribu kuweka nafasi kwa kufuta au kubanua vipengee, kama vile programu au maudhui ya vyombo vya habari."</string>
+    <string name="storage_low_summary" msgid="7737465774892563129">"Baadhi ya vipengee vya mfumo, kama vile usawazishaji, huenda visifanye kazi vizuri. Jaribu kuongeza nafasi kwa kufuta au kubanua vipengee, kama vile programu au maudhui ya vyombo vya habari."</string>
     <string name="storage_menu_usb" msgid="5708207885333243384">"Muunganisho wa kompyuta ya USB"</string>
     <string name="storage_title_usb" msgid="679612779321689418">"Muunganisho wa kompyuta ya USB"</string>
     <string name="usb_connection_category" msgid="7805945595165422882">"Unganisha kama"</string>
@@ -1458,7 +1458,7 @@
     <string name="gadget_wifi" msgid="4712584536500629417">"Wi-Fi"</string>
     <string name="gadget_bluetooth" msgid="8998572807378694410">"Bluetooth"</string>
     <string name="gadget_gps" msgid="1558173602059236567">"GPS"</string>
-    <string name="gadget_sync" msgid="858895763714222152">"Landanisha"</string>
+    <string name="gadget_sync" msgid="858895763714222152">"Sawazisha"</string>
     <string name="gadget_brightness_template" msgid="930541920933123603">"Ung`avu <xliff:g id="ID_1">%1$s</xliff:g>"</string>
     <string name="gadget_brightness_state_auto" msgid="6667967252426515446">"otomatiki"</string>
     <string name="gadget_brightness_state_full" msgid="6814570109772137631">"Imejaa"</string>
@@ -1563,7 +1563,7 @@
     <string name="background_data_summary" msgid="8328521479872763452">"Programu inaweza kusawazisha, kutuma, na kupokea data wakati wowote"</string>
     <string name="background_data_dialog_title" msgid="6059217698124786537">"Lemaza data ya usuli?"</string>
     <string name="background_data_dialog_message" msgid="6981661606680941633">"Kulemaza data za usuli huongeza maisha ya betri na hupunguza utumiaji wa data. Programu zingine za kompyuta huenda bado zikatumia muunganisho wa data za usuli."</string>
-    <string name="sync_automatically" msgid="1682730255435062059">"Oto-landanisha programu ya  data"</string>
+    <string name="sync_automatically" msgid="1682730255435062059">"Sawazisha kiotomatiki programu ya data"</string>
     <string name="sync_enabled" msgid="4551148952179416813">"Kusawazishwa Kumewezeshwa"</string>
     <string name="sync_disabled" msgid="8511659877596511991">"Sawazisha Kumezimwa"</string>
     <string name="sync_error" msgid="5060969083117872149">"Hitilafu ya usawazishaji"</string>
diff --git a/res/values-tr/arrays.xml b/res/values-tr/arrays.xml
index cb211b9..ae32da0 100644
--- a/res/values-tr/arrays.xml
+++ b/res/values-tr/arrays.xml
@@ -246,7 +246,7 @@
     <item msgid="5958926493289432745">"acil SMS al"</item>
     <item msgid="4945269495221089540">"MMS al"</item>
     <item msgid="5570472453573929087">"WAP push al"</item>
-    <item msgid="7125408150230860501">"SMS al"</item>
+    <item msgid="7125408150230860501">"SMS gönder"</item>
     <item msgid="7080337936612188061">"ICC SMS oku"</item>
     <item msgid="587124103118495063">"ICC SMS yaz"</item>
     <item msgid="2320577158869025503">"ayarları değiştir"</item>
diff --git a/res/values-uk/arrays.xml b/res/values-uk/arrays.xml
index 6187831..38da09c 100644
--- a/res/values-uk/arrays.xml
+++ b/res/values-uk/arrays.xml
@@ -250,7 +250,7 @@
     <item msgid="7080337936612188061">"читати ICC SMS"</item>
     <item msgid="587124103118495063">"писати ICC SMS"</item>
     <item msgid="2320577158869025503">"змінювати налаштування"</item>
-    <item msgid="1545733463471924009">"відображатися зверху"</item>
+    <item msgid="1545733463471924009">"відображати зверху"</item>
   </string-array>
   <string-array name="app_ops_labels">
     <item msgid="6602854600289714121">"Місцезнаходження"</item>
@@ -277,7 +277,7 @@
     <item msgid="1530132603376027248">"Отримувати SMS/MMS"</item>
     <item msgid="1188256962149204607">"Надсилати SMS/MMS"</item>
     <item msgid="4218544235221631789">"Змінювати налаштування"</item>
-    <item msgid="736541391767350377">"Відображатися зверху"</item>
+    <item msgid="736541391767350377">"Відображати зверху"</item>
   </string-array>
   <string-array name="long_press_timeout_selector_titles">
     <item msgid="3511504869290423954">"Коротка"</item>
diff --git a/res/values-zh-rCN/arrays.xml b/res/values-zh-rCN/arrays.xml
index bb9cd25..49febed 100644
--- a/res/values-zh-rCN/arrays.xml
+++ b/res/values-zh-rCN/arrays.xml
@@ -241,7 +241,7 @@
     <item msgid="7776439107987345446">"手机网络扫描"</item>
     <item msgid="514615766544675057">"拨打电话"</item>
     <item msgid="8181415497109310680">"读取短信"</item>
-    <item msgid="6816551144382117307">"写入短信"</item>
+    <item msgid="6816551144382117307">"编写短信"</item>
     <item msgid="4600463921908905030">"接收短信"</item>
     <item msgid="5958926493289432745">"接收紧急短信"</item>
     <item msgid="4945269495221089540">"接收彩信"</item>
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 4c3d4b7..ccd803d 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -588,6 +588,7 @@
         <item>write ICC SMS</item>
         <item>modify settings</item>
         <item>draw on top</item>
+        <item>access notifications</item>
     </string-array>
 
     <!-- User display names for app ops codes -->
@@ -617,6 +618,7 @@
         <item>Send SMS/MMS</item>
         <item>Modify settings</item>
         <item>Draw on top</item>
+        <item>Access notifications</item>
     </string-array>
 
     <!-- Titles for the list of long press timeout options. -->
diff --git a/src/com/android/settings/NotificationStation.java b/src/com/android/settings/NotificationStation.java
new file mode 100644
index 0000000..62f1c30
--- /dev/null
+++ b/src/com/android/settings/NotificationStation.java
@@ -0,0 +1,321 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings;
+
+import android.app.Activity;
+import android.app.ActivityManager;
+import android.app.INotificationManager;
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.app.TaskStackBuilder;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.pm.PackageManager;
+import android.content.res.Resources;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteException;
+import android.graphics.drawable.Drawable;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.os.UserHandle;
+import android.provider.*;
+import android.util.Log;
+import android.util.Slog;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.View.OnTouchListener;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.DateTimeView;
+import android.widget.ImageView;
+import android.widget.ListView;
+import android.widget.RadioButton;
+import android.widget.TextView;
+import com.android.internal.statusbar.StatusBarNotification;
+import com.android.settings.DreamBackend.DreamInfo;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class NotificationStation extends SettingsPreferenceFragment {
+    private static final String TAG = NotificationStation.class.getSimpleName();
+    static final boolean DEBUG = true;
+    private static final String PACKAGE_SCHEME = "package";
+
+    private final PackageReceiver mPackageReceiver = new PackageReceiver();
+    private INotificationManager mNoMan;
+
+    private NotificationHistoryAdapter mAdapter;
+    private Context mContext;
+
+    @Override
+    public void onAttach(Activity activity) {
+        logd("onAttach(%s)", activity.getClass().getSimpleName());
+        super.onAttach(activity);
+        mContext = activity;
+        mNoMan = INotificationManager.Stub.asInterface(
+                ServiceManager.getService(Context.NOTIFICATION_SERVICE));
+    }
+
+    @Override
+    public void onCreate(Bundle icicle) {
+        logd("onCreate(%s)", icicle);
+        super.onCreate(icicle);
+        Activity activity = getActivity();
+    }
+
+    @Override
+    public void onDestroyView() {
+        super.onDestroyView();
+    }
+
+    @Override
+    public void onActivityCreated(Bundle savedInstanceState) {
+        logd("onActivityCreated(%s)", savedInstanceState);
+        super.onActivityCreated(savedInstanceState);
+
+        ListView listView = getListView();
+
+//        TextView emptyView = (TextView) getView().findViewById(android.R.id.empty);
+//        emptyView.setText(R.string.screensaver_settings_disabled_prompt);
+//        listView.setEmptyView(emptyView);
+
+        mAdapter = new NotificationHistoryAdapter(mContext);
+        listView.setAdapter(mAdapter);
+    }
+
+    @Override
+    public void onPause() {
+        logd("onPause()");
+        super.onPause();
+        mContext.unregisterReceiver(mPackageReceiver);
+    }
+
+    @Override
+    public void onResume() {
+        logd("onResume()");
+        super.onResume();
+        refreshFromBackend();
+
+        // listen for package changes
+        IntentFilter filter = new IntentFilter();
+        filter.addAction(Intent.ACTION_PACKAGE_ADDED);
+        filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
+        filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
+        filter.addAction(Intent.ACTION_PACKAGE_REPLACED);
+        filter.addDataScheme(PACKAGE_SCHEME);
+        mContext.registerReceiver(mPackageReceiver , filter);
+    }
+
+    private void refreshFromBackend() {
+        List<HistoricalNotificationInfo> infos = loadNotifications();
+        if (infos != null) {
+            logd("adding %d infos", infos.size());
+            mAdapter.clear();
+            mAdapter.addAll(infos);
+        }
+    }
+
+    private static void logd(String msg, Object... args) {
+        if (DEBUG)
+            Log.d(TAG, args == null || args.length == 0 ? msg : String.format(msg, args));
+    }
+
+    private static class HistoricalNotificationInfo {
+        public String pkg;
+        public Drawable pkgicon;
+        public Drawable icon;
+        public CharSequence title;
+        public int priority;
+        public int user;
+        public long timestamp;
+    }
+
+    private List<HistoricalNotificationInfo> loadNotifications() {
+        final int currentUserId = ActivityManager.getCurrentUser();
+        try {
+            StatusBarNotification[] nions = mNoMan.getHistoricalNotifications(
+                    mContext.getPackageName(), 100);
+            List<HistoricalNotificationInfo> list
+                    = new ArrayList<HistoricalNotificationInfo>(nions.length);
+
+            for (StatusBarNotification sbn : nions) {
+                final HistoricalNotificationInfo info = new HistoricalNotificationInfo();
+                info.pkg = sbn.pkg;
+                info.user = sbn.getUserId();
+                info.icon = loadIconDrawable(info.pkg, info.user, sbn.notification.icon);
+                info.pkgicon = loadPackageIconDrawable(info.pkg, info.user);
+                if (sbn.notification.extras != null) {
+                    info.title = sbn.notification.extras.getString(Notification.EXTRA_TITLE);
+                }
+                info.timestamp = sbn.postTime;
+                info.priority = sbn.notification.priority;
+                logd("   [%d] %s: %s", info.timestamp, info.pkg, info.title);
+
+                if (info.user == UserHandle.USER_ALL
+                        || info.user == currentUserId) {
+                    list.add(info);
+                }
+            }
+
+            return list;
+        } catch (RemoteException e) {
+            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+        }
+        return null;
+    }
+
+    private Resources getResourcesForUserPackage(String pkg, int userId) {
+        Resources r = null;
+
+        if (pkg != null) {
+            try {
+                if (userId == UserHandle.USER_ALL) {
+                    userId = UserHandle.USER_OWNER;
+                }
+                r = mContext.getPackageManager()
+                        .getResourcesForApplicationAsUser(pkg, userId);
+            } catch (PackageManager.NameNotFoundException ex) {
+                Log.e(TAG, "Icon package not found: " + pkg);
+                return null;
+            }
+        } else {
+            r = mContext.getResources();
+        }
+        return r;
+    }
+
+    private Drawable loadPackageIconDrawable(String pkg, int userId) {
+        Drawable icon = null;
+        try {
+            icon = mContext.getPackageManager().getApplicationIcon(pkg);
+        } catch (PackageManager.NameNotFoundException e) {
+        }
+
+        return icon;
+    }
+
+    private Drawable loadIconDrawable(String pkg, int userId, int resId) {
+        Resources r = getResourcesForUserPackage(pkg, userId);
+
+        if (resId == 0) {
+            return null;
+        }
+
+        try {
+            return r.getDrawable(resId);
+        } catch (RuntimeException e) {
+            Log.w(TAG, "Icon not found in "
+                    + (pkg != null ? resId : "<system>")
+                    + ": " + Integer.toHexString(resId));
+        }
+
+        return null;
+    }
+
+    private class NotificationHistoryAdapter extends ArrayAdapter<HistoricalNotificationInfo> {
+        private final LayoutInflater mInflater;
+
+        public NotificationHistoryAdapter(Context context) {
+            super(context, 0);
+            mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+        }
+
+        @Override
+        public View getView(int position, View convertView, ViewGroup parent) {
+            HistoricalNotificationInfo info = getItem(position);
+            logd("getView(%s/%s)", info.pkg, info.title);
+            final View row = convertView != null ? convertView : createRow(parent, info.pkg);
+            row.setTag(info);
+
+            // bind icon
+            if (info.icon != null) {
+                ((ImageView) row.findViewById(android.R.id.icon)).setImageDrawable(info.icon);
+            }
+            if (info.pkgicon != null) {
+                ((ImageView) row.findViewById(R.id.pkgicon)).setImageDrawable(info.pkgicon);
+            }
+
+            ((DateTimeView) row.findViewById(R.id.timestamp)).setTime(info.timestamp);
+
+            // bind caption
+            ((TextView) row.findViewById(android.R.id.title)).setText(info.title);
+
+//            // bind radio button
+//            RadioButton radioButton = (RadioButton) row.findViewById(android.R.id.button1);
+//            radioButton.setChecked(dreamInfo.isActive);
+//            radioButton.setOnTouchListener(new OnTouchListener() {
+//                @Override
+//                public boolean onTouch(View v, MotionEvent event) {
+//                    row.onTouchEvent(event);
+//                    return false;
+//                }});
+
+            // bind settings button + divider
+//            boolean showSettings = info.
+//                    settingsComponentName != null;
+//            View settingsDivider = row.findViewById(R.id.divider);
+//            settingsDivider.setVisibility(false ? View.VISIBLE : View.INVISIBLE);
+//
+//            ImageView settingsButton = (ImageView) row.findViewById(android.R.id.button2);
+//            settingsButton.setVisibility(false ? View.VISIBLE : View.INVISIBLE);
+//            settingsButton.setAlpha(info.isActive ? 1f : Utils.DISABLED_ALPHA);
+//            settingsButton.setEnabled(info.isActive);
+//            settingsButton.setOnClickListener(new OnClickListener(){
+//                @Override
+//                public void onClick(View v) {
+//                    mBackend.launchSettings((DreamInfo) row.getTag());
+//                }});
+
+            return row;
+        }
+
+        private View createRow(ViewGroup parent, final String pkg) {
+            final View row =  mInflater.inflate(R.layout.notification_log_row, parent, false);
+            row.setOnClickListener(new OnClickListener(){
+                @Override
+                public void onClick(View v) {
+                    v.setPressed(true);
+                    startApplicationDetailsActivity(pkg);
+                }});
+            return row;
+        }
+
+    }
+
+    private void startApplicationDetailsActivity(String packageName) {
+        Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
+                Uri.fromParts("package", packageName, null));
+        intent.setComponent(intent.resolveActivity(mContext.getPackageManager()));
+        startActivity(intent);
+    }
+
+    private class PackageReceiver extends BroadcastReceiver {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            logd("PackageReceiver.onReceive");
+            //refreshFromBackend();
+        }
+    }
+}
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 149561d..f3cceb8 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -825,4 +825,5 @@
     public static class AndroidBeamSettingsActivity extends Settings { /* empty */ }
     public static class WifiDisplaySettingsActivity extends Settings { /* empty */ }
     public static class DreamSettingsActivity extends Settings { /* empty */ }
+    public static class NotificationStationActivity extends Settings { /* empty */ }
 }
diff --git a/src/com/android/settings/applications/AppOpsState.java b/src/com/android/settings/applications/AppOpsState.java
index 288977d..47c4fdf 100644
--- a/src/com/android/settings/applications/AppOpsState.java
+++ b/src/com/android/settings/applications/AppOpsState.java
@@ -148,6 +148,7 @@
     public static final OpsTemplate DEVICE_TEMPLATE = new OpsTemplate(
             new int[] { AppOpsManager.OP_VIBRATE,
                     AppOpsManager.OP_POST_NOTIFICATION,
+                    AppOpsManager.OP_ACCESS_NOTIFICATIONS,
                     AppOpsManager.OP_CALL_PHONE,
                     AppOpsManager.OP_WRITE_SETTINGS,
                     AppOpsManager.OP_SYSTEM_ALERT_WINDOW },