diff options
author | Dan Sandler <dsandler@android.com> | 2014-03-11 01:32:47 -0400 |
---|---|---|
committer | Dan Sandler <dsandler@android.com> | 2014-03-12 14:15:09 -0400 |
commit | 347f944a22513d8fb6b41ef185fd8ea872ebcfee (patch) | |
tree | a34a7b81b058da693e984acada1b06ef081d7be3 | |
parent | deb49d0f09533202a048a40b58cceec21f282b25 (diff) | |
download | packages_apps_Settings-347f944a22513d8fb6b41ef185fd8ea872ebcfee.tar.gz packages_apps_Settings-347f944a22513d8fb6b41ef185fd8ea872ebcfee.tar.bz2 packages_apps_Settings-347f944a22513d8fb6b41ef185fd8ea872ebcfee.zip |
Finally, a place for notification settings.
Consolidated under the new Notifications settings are:
- Ringtone (from Sound)
- Zen Mode (from Sound)
- Pulse LED (from Display)
- Heads-Up Notifications (from Display)
- Notification Access (from Security)
- Show when locked (from Security)
Change-Id: I214d03ba1e356e088323a3058d98d390b8a8f988
21 files changed, 402 insertions, 187 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml index cc1208e2a..deebc57e0 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -575,7 +575,7 @@ <meta-data android:name="com.android.settings.FRAGMENT_CLASS" android:value="com.android.settings.ZenModeSettings" /> <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID" - android:resource="@id/sound_settings" /> + android:resource="@id/notification_settings" /> </activity> <activity android:name="Settings$DisplaySettingsActivity" @@ -1708,6 +1708,24 @@ android:resource="@id/security_settings" /> </activity> + <activity android:name="Settings$NotificationSettingsActivity" + android:label="@string/notification_settings" + android:exported="true" + android:taskAffinity="" + android:excludeFromRecents="true"> + <intent-filter> + <action android:name="android.intent.action.MAIN" /> + <action android:name="android.settings.NOTIFICATION_SETTINGS" /> + <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.NotificationSettings" /> + <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID" + android:resource="@id/notification_settings" /> + </activity> + + <!-- Show regulatory info (from settings item or dialing "*#07#") --> <activity android:name="RegulatoryInfoDisplayActivity" android:label="@string/regulatory_information" diff --git a/CleanSpec.mk b/CleanSpec.mk index b84e1b65e..be2e22198 100644 --- a/CleanSpec.mk +++ b/CleanSpec.mk @@ -44,6 +44,8 @@ #$(call add-clean-step, find $(OUT_DIR) -type f -name "IGTalkSession*" -print0 | xargs -0 rm -f) #$(call add-clean-step, rm -rf $(PRODUCT_OUT)/data/*) +$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/Settings_intermediates) + # ************************************************ # NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST # ************************************************ diff --git a/res/drawable-hdpi/ic_settings_notifications.png b/res/drawable-hdpi/ic_settings_notifications.png Binary files differindex aefb57ba7..5041ebba0 100644 --- a/res/drawable-hdpi/ic_settings_notifications.png +++ b/res/drawable-hdpi/ic_settings_notifications.png diff --git a/res/drawable-mdpi/ic_settings_notifications.png b/res/drawable-mdpi/ic_settings_notifications.png Binary files differindex fa7a07c02..b8022fde8 100644 --- a/res/drawable-mdpi/ic_settings_notifications.png +++ b/res/drawable-mdpi/ic_settings_notifications.png diff --git a/res/drawable-xhdpi/ic_settings_notifications.png b/res/drawable-xhdpi/ic_settings_notifications.png Binary files differindex c6c5c43e4..4a21a1bed 100644 --- a/res/drawable-xhdpi/ic_settings_notifications.png +++ b/res/drawable-xhdpi/ic_settings_notifications.png diff --git a/res/drawable-xxhdpi/ic_settings_notifications.png b/res/drawable-xxhdpi/ic_settings_notifications.png Binary files differnew file mode 100644 index 000000000..6f5d5c120 --- /dev/null +++ b/res/drawable-xxhdpi/ic_settings_notifications.png diff --git a/res/values/strings.xml b/res/values/strings.xml index f95f881fa..5b50de001 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -5006,25 +5006,37 @@ <!-- Notifications on lockscreen --> <!-- Label for checkbox controlling the contents of notifications shown on - the secure lockscreen [CHAR LIMIT=16] --> - <string name="lock_screen_notifications">Show notifications</string> + the secure lockscreen [CHAR LIMIT=25] --> + <string name="lock_screen_notifications">Show when locked</string> <!-- Summary for lock_screen_notifications: sensitive information will be hidden or redacted from notifications shown on a secure lock screen [CHAR LIMIT=50] --> - <string name="lock_screen_notifications_summary_off">Sensitive notification contents will be hidden when locked</string> + <string name="lock_screen_notifications_summary_off">Sensitive notification contents will be hidden on the lock screen</string> <!-- Summary for lock_screen_notifications: all information will be shown in notifications shown on a secure lock screen [CHAR LIMIT=50] --> - <string name="lock_screen_notifications_summary_on">All notification contents will be shown when locked</string> + <string name="lock_screen_notifications_summary_on">All notification contents will be shown on the lock screen</string> <!-- [CHAR LIMIT=30] Sound settings screen, setting option name to change zen mode --> - <string name="title_zen_mode">Zen mode</string> - <!-- [CHAR LIMIT=30] Sound settings screen, setting option summary displaying the currently selected zen mode --> - <string name="summary_zen_mode" translatable="false">%1$s</string> - <!-- [CHAR LIMIT=40] Sound settings screen, title of dialog for picking zen mode --> - <string name="dialog_title_zen_mode">Zen mode</string> + <string name="title_zen_mode">Limited interruptions</string> <!-- [CHAR LIMIT=30] Sound settings screen, description for configuring zen mode --> - <string name="configure_zen_mode_description">Configure Zen mode</string> + <string name="configure_zen_mode_description">Configure limited interruptions</string> <!-- [CHAR LIMIT=30] Zen mode settings screen, activity title --> <string name="zen_mode_settings_title">Limited Interruptions</string> + + <!-- [CHAR LIMIT=20] Notifications settings header --> + <string name="notification_settings">Notifications</string> + + <!-- [CHAR LIMIT=20] Notifications settings: General section header --> + <string name="notification_settings_general">General</string> + + <!-- [CHAR LIMIT=20] Notifications settings: Security section header --> + <string name="notification_settings_security">Security</string> + + <!-- [CHAR LIMIT=20] Notifications settings: Tweaks section header (eng + builds only) --> + <string name="notification_settings_tweaks">Tweaks</string> + + <!-- [CHAR LIMIT=20] Notifications settings: Apps section header --> + <string name="notification_settings_apps">Apps</string> </resources> diff --git a/res/xml/display_settings.xml b/res/xml/display_settings.xml index 53d9915ce..67cd7d380 100644 --- a/res/xml/display_settings.xml +++ b/res/xml/display_settings.xml @@ -48,17 +48,6 @@ android:entryValues="@array/entryvalues_font_size" android:dialogTitle="@string/dialog_title_font_size" /> - <CheckBoxPreference - android:key="notification_pulse" - android:title="@string/notification_pulse_title" - android:persistent="false" /> - - <CheckBoxPreference - android:key="heads_up" - android:title="@string/heads_up_enabled_title" - android:summary="@string/heads_up_enabled_summary" - android:persistent="false" /> - <PreferenceScreen android:key="wifi_display" android:title="@string/wifi_display_settings_title" diff --git a/res/xml/notification_settings.xml b/res/xml/notification_settings.xml new file mode 100644 index 000000000..edea08ffd --- /dev/null +++ b/res/xml/notification_settings.xml @@ -0,0 +1,88 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2014 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. +--> + +<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" + android:title="@string/notification_settings" + android:key="notification_settings" + xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"> + + <PreferenceCategory + android:key="category_general" + android:title="@string/notification_settings_general"> + + <com.android.settings.DefaultRingtonePreference + android:key="notification_sound" + android:title="@string/notification_sound_title" + android:dialogTitle="@string/notification_sound_dialog_title" + android:persistent="false" + android:ringtoneType="notification" /> + + <CheckBoxPreference + android:key="notification_pulse" + android:title="@string/notification_pulse_title" + android:persistent="false" /> + + <CheckBoxPreference + android:key="heads_up" + android:title="@string/heads_up_enabled_title" + android:summary="@string/heads_up_enabled_summary" + android:persistent="false" /> + + <PreferenceScreen + android:key="zen_mode" + android:title="@string/title_zen_mode" + android:fragment="com.android.settings.ZenModeSettings" /> + + </PreferenceCategory> + + <PreferenceCategory + android:key="category_security" + android:title="@string/notification_settings_security"> + + <CheckBoxPreference + android:key="toggle_lock_screen_notifications" + android:title="@string/lock_screen_notifications" + android:summaryOff="@string/lock_screen_notifications_summary_off" + android:summaryOn="@string/lock_screen_notifications_summary_on" + android:persistent="false" /> + + <Preference + android:key="manage_notification_access" + android:title="@string/manage_notification_access" + android:persistent="false" + android:fragment="com.android.settings.NotificationAccessSettings"/> + + </PreferenceCategory> + +<!-- + <PreferenceCategory + android:key="category_tweaks" + android:title="@string/notification_settings_tweaks"/> + + <Preference + android:title="Coming soon" + /> + + <PreferenceCategory + android:key="category_apps" + android:title="@string/notification_settings_apps"/> + + <Preference + android:title="Coming soon" + /> +--> + +</PreferenceScreen> diff --git a/res/xml/security_settings_biometric_weak.xml b/res/xml/security_settings_biometric_weak.xml index d99492231..c2e8ab7cb 100644 --- a/res/xml/security_settings_biometric_weak.xml +++ b/res/xml/security_settings_biometric_weak.xml @@ -66,13 +66,6 @@ android:title="@string/nfc_unlock_title" android:persistent="false"/> - <CheckBoxPreference - android:key="toggle_lock_screen_notifications" - android:title="@string/lock_screen_notifications" - android:summaryOff="@string/lock_screen_notifications_summary_off" - android:summaryOn="@string/lock_screen_notifications_summary_on" - android:persistent="false" /> - </PreferenceCategory> </PreferenceScreen> diff --git a/res/xml/security_settings_misc.xml b/res/xml/security_settings_misc.xml index 21cf88f34..299bdf65f 100644 --- a/res/xml/security_settings_misc.xml +++ b/res/xml/security_settings_misc.xml @@ -59,12 +59,6 @@ android:summaryOn="@string/verify_applications_summary" android:persistent="false" /> - <Preference - android:key="manage_notification_access" - android:title="@string/manage_notification_access" - android:persistent="false" - android:fragment="com.android.settings.NotificationAccessSettings"/> - </PreferenceCategory> <PreferenceCategory android:key="credentials_management" diff --git a/res/xml/security_settings_password.xml b/res/xml/security_settings_password.xml index 20d764420..a102efa9c 100644 --- a/res/xml/security_settings_password.xml +++ b/res/xml/security_settings_password.xml @@ -53,13 +53,6 @@ android:title="@string/nfc_unlock_title" android:persistent="false"/> - <CheckBoxPreference - android:key="toggle_lock_screen_notifications" - android:title="@string/lock_screen_notifications" - android:summaryOff="@string/lock_screen_notifications_summary_off" - android:summaryOn="@string/lock_screen_notifications_summary_on" - android:persistent="false" /> - </PreferenceCategory> </PreferenceScreen> diff --git a/res/xml/security_settings_pattern.xml b/res/xml/security_settings_pattern.xml index c02df7a42..0584e4ae2 100644 --- a/res/xml/security_settings_pattern.xml +++ b/res/xml/security_settings_pattern.xml @@ -57,13 +57,6 @@ android:title="@string/nfc_unlock_title" android:persistent="false"/> - <CheckBoxPreference - android:key="toggle_lock_screen_notifications" - android:title="@string/lock_screen_notifications" - android:summaryOff="@string/lock_screen_notifications_summary_off" - android:summaryOn="@string/lock_screen_notifications_summary_on" - android:persistent="false" /> - </PreferenceCategory> </PreferenceScreen> diff --git a/res/xml/security_settings_pin.xml b/res/xml/security_settings_pin.xml index 2636fa41e..1417e2178 100644 --- a/res/xml/security_settings_pin.xml +++ b/res/xml/security_settings_pin.xml @@ -53,13 +53,6 @@ android:title="@string/nfc_unlock_title" android:persistent="false"/> - <CheckBoxPreference - android:key="toggle_lock_screen_notifications" - android:title="@string/lock_screen_notifications" - android:summaryOff="@string/lock_screen_notifications_summary_off" - android:summaryOn="@string/lock_screen_notifications_summary_on" - android:persistent="false" /> - </PreferenceCategory> </PreferenceScreen> diff --git a/res/xml/settings_headers.xml b/res/xml/settings_headers.xml index 19cff9050..c4b5eac73 100644 --- a/res/xml/settings_headers.xml +++ b/res/xml/settings_headers.xml @@ -89,6 +89,13 @@ android:fragment="com.android.settings.DisplaySettings" android:title="@string/display_settings" /> + <!-- Notifications --> + <header + android:id="@+id/notification_settings" + android:icon="@drawable/ic_settings_notifications" + android:fragment="com.android.settings.NotificationSettings" + android:title="@string/notification_settings" /> + <!-- Storage --> <header android:id="@+id/storage_settings" diff --git a/res/xml/sound_settings.xml b/res/xml/sound_settings.xml index 580b6d5cf..26e2e2053 100644 --- a/res/xml/sound_settings.xml +++ b/res/xml/sound_settings.xml @@ -109,13 +109,4 @@ android:title="@string/dock_sounds_enable_title" android:defaultValue="false" /> - <com.android.settings.ZenModeListPreference - android:key="zen_mode" - android:persistent="false" - android:title="@string/title_zen_mode" - android:summary="@string/summary_zen_mode" - android:entries="@array/entries_zen_mode" - android:entryValues="@array/entryvalues_zen_mode" - android:dialogTitle="@string/dialog_title_zen_mode" /> - </PreferenceScreen> diff --git a/src/com/android/settings/DisplaySettings.java b/src/com/android/settings/DisplaySettings.java index efd470595..afe5b6819 100644 --- a/src/com/android/settings/DisplaySettings.java +++ b/src/com/android/settings/DisplaySettings.java @@ -49,21 +49,17 @@ public class DisplaySettings extends SettingsPreferenceFragment implements private static final String KEY_SCREEN_TIMEOUT = "screen_timeout"; private static final String KEY_FONT_SIZE = "font_size"; - private static final String KEY_NOTIFICATION_PULSE = "notification_pulse"; - private static final String KEY_HEADS_UP = "heads_up"; private static final String KEY_SCREEN_SAVER = "screensaver"; private static final int DLG_GLOBAL_CHANGE_WARNING = 1; private WarnedListPreference mFontSizePref; - private CheckBoxPreference mNotificationPulse; private final Configuration mCurConfig = new Configuration(); private final Handler mHandler = new Handler(); private ListPreference mScreenTimeoutPreference; private Preference mScreenSaverPreference; - private CheckBoxPreference mHeadsUp; @Override public void onCreate(Bundle savedInstanceState) { @@ -90,33 +86,6 @@ public class DisplaySettings extends SettingsPreferenceFragment implements mFontSizePref = (WarnedListPreference) findPreference(KEY_FONT_SIZE); mFontSizePref.setOnPreferenceChangeListener(this); mFontSizePref.setOnPreferenceClickListener(this); - mNotificationPulse = (CheckBoxPreference) findPreference(KEY_NOTIFICATION_PULSE); - if (mNotificationPulse != null - && getResources().getBoolean( - com.android.internal.R.bool.config_intrusiveNotificationLed) == false) { - getPreferenceScreen().removePreference(mNotificationPulse); - } else { - try { - mNotificationPulse.setChecked(Settings.System.getInt(resolver, - Settings.System.NOTIFICATION_LIGHT_PULSE) == 1); - mNotificationPulse.setOnPreferenceChangeListener(this); - } catch (SettingNotFoundException snfe) { - Log.e(TAG, Settings.System.NOTIFICATION_LIGHT_PULSE + " not found"); - } - } - mHeadsUp = (CheckBoxPreference) findPreference(KEY_HEADS_UP); - if (mHeadsUp != null) { - updateHeadsUpMode(resolver); - mHeadsUp.setOnPreferenceChangeListener(this); - resolver.registerContentObserver( - Settings.Global.getUriFor(Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED), - false, new ContentObserver(mHandler) { - @Override - public void onChange(boolean selfChange) { - updateHeadsUpMode(resolver); - } - }); - } } private void updateTimeoutPreferenceDescription(long currentTimeout) { @@ -250,16 +219,6 @@ public class DisplaySettings extends SettingsPreferenceFragment implements } } - private void updateHeadsUpMode(ContentResolver resolver) { - mHeadsUp.setChecked(Settings.Global.HEADS_UP_ON == Settings.Global.getInt(resolver, - Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED, Settings.Global.HEADS_UP_OFF)); - } - - private void setHeadsUpMode(ContentResolver resolver, boolean value) { - Settings.Global.putInt(resolver, Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED, - value ? Settings.Global.HEADS_UP_ON : Settings.Global.HEADS_UP_OFF); - } - public void writeFontSizePreference(Object objValue) { try { mCurConfig.fontScale = Float.parseFloat(objValue.toString()); @@ -271,18 +230,6 @@ public class DisplaySettings extends SettingsPreferenceFragment implements @Override public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { - if (preference == mNotificationPulse) { - boolean value = mNotificationPulse.isChecked(); - Settings.System.putInt(getContentResolver(), Settings.System.NOTIFICATION_LIGHT_PULSE, - value ? 1 : 0); - return true; - } - if (preference == mHeadsUp) { - final boolean value = mHeadsUp.isChecked(); - Log.d(TAG, "onPreferenceTreeClick mHeadsUp: " + value); - setHeadsUpMode(getContentResolver(), value); - return true; - } return super.onPreferenceTreeClick(preferenceScreen, preference); } diff --git a/src/com/android/settings/NotificationSettings.java b/src/com/android/settings/NotificationSettings.java new file mode 100644 index 000000000..c8ba39a00 --- /dev/null +++ b/src/com/android/settings/NotificationSettings.java @@ -0,0 +1,255 @@ +/* + * Copyright (C) 2014 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.content.ContentResolver; +import android.content.pm.PackageManager; +import android.database.ContentObserver; +import android.media.RingtoneManager; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.preference.CheckBoxPreference; +import android.preference.Preference; +import android.preference.Preference.OnPreferenceClickListener; +import android.preference.PreferenceGroup; +import android.preference.PreferenceScreen; +import android.provider.Settings; +import android.util.Log; + +public class NotificationSettings extends SettingsPreferenceFragment implements + Preference.OnPreferenceChangeListener, OnPreferenceClickListener { + private static final String TAG = "NotificationSettings"; + + private static final String KEY_NOTIFICATION_SOUND = "notification_sound"; + private static final String KEY_ZEN_MODE = "zen_mode"; + private static final String KEY_NOTIFICATION_ACCESS = "manage_notification_access"; + private static final String KEY_LOCK_SCREEN_NOTIFICATIONS = "toggle_lock_screen_notifications"; + private static final String KEY_HEADS_UP = "heads_up"; + private static final String KEY_NOTIFICATION_PULSE = "notification_pulse"; + + private static final String KEY_SECURITY_CATEGORY = "category_security"; + private static final String KEY_TWEAKS_CATEGORY = "category_tweaks"; // power toys, eng only + + private static final int MSG_UPDATE_SOUND_SUMMARY = 2; + + private PackageManager mPM; + + private Preference mNotificationSoundPreference; + private Preference mNotificationAccess; + private CheckBoxPreference mLockscreenNotifications; + private CheckBoxPreference mHeadsUp; + private CheckBoxPreference mNotificationPulse; + + private final Runnable mRingtoneLookupRunnable = new Runnable() { + @Override + public void run() { + if (mNotificationSoundPreference != null) { + final CharSequence summary = SoundSettings.updateRingtoneName( + getActivity(), RingtoneManager.TYPE_NOTIFICATION); + if (summary != null) { + mHandler.sendMessage( + mHandler.obtainMessage(MSG_UPDATE_SOUND_SUMMARY, summary)); + } + } + } + }; + + private final Handler mHandler = new Handler() { + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case MSG_UPDATE_SOUND_SUMMARY: + mNotificationSoundPreference.setSummary((CharSequence) msg.obj); + break; + } + } + }; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + final ContentResolver resolver = getActivity().getContentResolver(); + + mPM = getActivity().getPackageManager(); + + addPreferencesFromResource(R.xml.notification_settings); + + final PreferenceScreen root = getPreferenceScreen(); + final PreferenceGroup securityCategory = (PreferenceGroup) + root.findPreference(KEY_SECURITY_CATEGORY); + + PreferenceGroup tweaksCategory = (PreferenceGroup) + root.findPreference(KEY_TWEAKS_CATEGORY); + + if (tweaksCategory != null + && !(Build.TYPE.equals("eng") || Build.TYPE.equals("userdebug"))) { + root.removePreference(tweaksCategory); + tweaksCategory = null; + } + + mNotificationSoundPreference = findPreference(KEY_NOTIFICATION_SOUND); + + mNotificationAccess = findPreference(KEY_NOTIFICATION_ACCESS); + refreshNotificationListeners(); + + mLockscreenNotifications + = (CheckBoxPreference) root.findPreference(KEY_LOCK_SCREEN_NOTIFICATIONS); + if (mLockscreenNotifications != null) { + if (!getDeviceLockscreenNotificationsEnabled()) { + if (securityCategory != null) { + securityCategory.removePreference(mLockscreenNotifications); + } + } else { + mLockscreenNotifications.setChecked(getLockscreenAllowPrivateNotifications()); + } + } + + mHeadsUp = (CheckBoxPreference) findPreference(KEY_HEADS_UP); + if (mHeadsUp != null) { + updateHeadsUpMode(resolver); + mHeadsUp.setOnPreferenceChangeListener(this); + resolver.registerContentObserver( + Settings.Global.getUriFor(Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED), + false, new ContentObserver(mHandler) { + @Override + public void onChange(boolean selfChange) { + updateHeadsUpMode(resolver); + } + }); + } + mNotificationPulse = (CheckBoxPreference) findPreference(KEY_NOTIFICATION_PULSE); + + if (mNotificationPulse != null + && getResources().getBoolean( + com.android.internal.R.bool.config_intrusiveNotificationLed) == false) { + getPreferenceScreen().removePreference(mNotificationPulse); + } else { + try { + mNotificationPulse.setChecked(Settings.System.getInt(resolver, + Settings.System.NOTIFICATION_LIGHT_PULSE) == 1); + mNotificationPulse.setOnPreferenceChangeListener(this); + } catch (Settings.SettingNotFoundException snfe) { + Log.e(TAG, Settings.System.NOTIFICATION_LIGHT_PULSE + " not found"); + } + } + } + + @Override + public void onResume() { + super.onResume(); + + refreshNotificationListeners(); + lookupRingtoneNames(); + } + + @Override + public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { + final String key = preference.getKey(); + + if (KEY_LOCK_SCREEN_NOTIFICATIONS.equals(key)) { + Settings.Secure.putInt(getContentResolver(), + Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, + mLockscreenNotifications.isChecked() ? 1 : 0); + } else if (KEY_HEADS_UP.equals(key)) { + setHeadsUpMode(getContentResolver(), mHeadsUp.isChecked()); + } else if (KEY_NOTIFICATION_PULSE.equals(key)) { + Settings.System.putInt(getContentResolver(), + Settings.System.NOTIFICATION_LIGHT_PULSE, + mNotificationPulse.isChecked() ? 1 : 0); + } else { + return super.onPreferenceTreeClick(preferenceScreen, preference); + } + + return true; + } + + @Override + public boolean onPreferenceChange(Preference preference, Object objValue) { + return true; + } + + @Override + public boolean onPreferenceClick(Preference preference) { + return false; + } + + // === Heads-up notifications === + + private void updateHeadsUpMode(ContentResolver resolver) { + mHeadsUp.setChecked(Settings.Global.HEADS_UP_ON == Settings.Global.getInt(resolver, + Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED, Settings.Global.HEADS_UP_OFF)); + } + + private void setHeadsUpMode(ContentResolver resolver, boolean value) { + Settings.Global.putInt(resolver, Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED, + value ? Settings.Global.HEADS_UP_ON : Settings.Global.HEADS_UP_OFF); + } + + // === Lockscreen (public / private) notifications === + + private boolean getDeviceLockscreenNotificationsEnabled() { + return 0 != Settings.Global.getInt(getContentResolver(), + Settings.Global.LOCK_SCREEN_SHOW_NOTIFICATIONS, 0); + } + + private boolean getLockscreenAllowPrivateNotifications() { + return 0 != Settings.Secure.getInt(getContentResolver(), + Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, 0); + } + + // === Notification listeners === + + private int getNumEnabledNotificationListeners() { + final String flat = Settings.Secure.getString(getContentResolver(), + Settings.Secure.ENABLED_NOTIFICATION_LISTENERS); + if (flat == null || "".equals(flat)) return 0; + final String[] components = flat.split(":"); + return components.length; + } + + private void refreshNotificationListeners() { + if (mNotificationAccess != null) { + final PreferenceGroup securityCategory + = (PreferenceGroup) getPreferenceScreen().findPreference(KEY_SECURITY_CATEGORY); + + final int total = NotificationAccessSettings.getListenersCount(mPM); + if (total == 0) { + if (securityCategory != null) { + securityCategory.removePreference(mNotificationAccess); + } + } else { + final int n = getNumEnabledNotificationListeners(); + if (n == 0) { + mNotificationAccess.setSummary(getResources().getString( + R.string.manage_notification_access_summary_zero)); + } else { + mNotificationAccess.setSummary(String.format(getResources().getQuantityString( + R.plurals.manage_notification_access_summary_nonzero, + n, n))); + } + } + } + } + + // === Ringtone === + + private void lookupRingtoneNames() { + new Thread(mRingtoneLookupRunnable).start(); + } +} diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java index 84a07f235..c4f0c7f42 100644 --- a/src/com/android/settings/SecuritySettings.java +++ b/src/com/android/settings/SecuritySettings.java @@ -84,8 +84,6 @@ public class SecuritySettings extends RestrictedSettingsFragment private static final String KEY_TOGGLE_VERIFY_APPLICATIONS = "toggle_verify_applications"; private static final String KEY_POWER_INSTANTLY_LOCKS = "power_button_instantly_locks"; private static final String KEY_CREDENTIALS_MANAGER = "credentials_management"; - private static final String KEY_NOTIFICATION_ACCESS = "manage_notification_access"; - private static final String KEY_LOCK_SCREEN_NOTIFICATIONS = "toggle_lock_screen_notifications"; private static final String PACKAGE_MIME_TYPE = "application/vnd.android.package-archive"; private PackageManager mPM; @@ -109,9 +107,6 @@ public class SecuritySettings extends RestrictedSettingsFragment private CheckBoxPreference mPowerButtonInstantlyLocks; private CheckBoxPreference mEnableKeyguardWidgets; - private Preference mNotificationAccess; - private CheckBoxPreference mLockscreenNotifications; - private boolean mIsPrimary; public SecuritySettings() { @@ -330,26 +325,6 @@ public class SecuritySettings extends RestrictedSettingsFragment } } - mNotificationAccess = findPreference(KEY_NOTIFICATION_ACCESS); - if (mNotificationAccess != null) { - final int total = NotificationAccessSettings.getListenersCount(mPM); - if (total == 0) { - if (deviceAdminCategory != null) { - deviceAdminCategory.removePreference(mNotificationAccess); - } - } else { - final int n = getNumEnabledNotificationListeners(); - if (n == 0) { - mNotificationAccess.setSummary(getResources().getString( - R.string.manage_notification_access_summary_zero)); - } else { - mNotificationAccess.setSummary(String.format(getResources().getQuantityString( - R.plurals.manage_notification_access_summary_nonzero, - n, n))); - } - } - } - if (shouldBePinProtected(RESTRICTIONS_PIN_SET)) { protectByRestrictions(mToggleAppInstallation); protectByRestrictions(mToggleVerifyApps); @@ -357,41 +332,9 @@ public class SecuritySettings extends RestrictedSettingsFragment protectByRestrictions(root.findPreference(KEY_CREDENTIALS_INSTALL)); } - mLockscreenNotifications - = (CheckBoxPreference) root.findPreference(KEY_LOCK_SCREEN_NOTIFICATIONS); - if (mLockscreenNotifications != null) { - if (!getDeviceLockscreenNotificationsEnabled()) { - final PreferenceGroup lockscreenCategory = - (PreferenceGroup) root.findPreference(KEY_SECURITY_CATEGORY); - if (lockscreenCategory != null) { - lockscreenCategory.removePreference(mLockscreenNotifications); - } - } else { - mLockscreenNotifications.setChecked(getLockscreenAllowPrivateNotifications()); - } - } - return root; } - private boolean getDeviceLockscreenNotificationsEnabled() { - return 0 != Settings.Global.getInt(getContentResolver(), - Settings.Global.LOCK_SCREEN_SHOW_NOTIFICATIONS, 0); - } - - private boolean getLockscreenAllowPrivateNotifications() { - return 0 != Settings.Secure.getInt(getContentResolver(), - Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, 0); - } - - private int getNumEnabledNotificationListeners() { - final String flat = Settings.Secure.getString(getContentResolver(), - Settings.Secure.ENABLED_NOTIFICATION_LISTENERS); - if (flat == null || "".equals(flat)) return 0; - final String[] components = flat.split(":"); - return components.length; - } - private boolean isNonMarketAppsAllowed() { return Settings.Global.getInt(getContentResolver(), Settings.Global.INSTALL_NON_MARKET_APPS, 0) > 0; @@ -617,10 +560,6 @@ public class SecuritySettings extends RestrictedSettingsFragment } else if (KEY_TOGGLE_VERIFY_APPLICATIONS.equals(key)) { Settings.Global.putInt(getContentResolver(), Settings.Global.PACKAGE_VERIFIER_ENABLE, mToggleVerifyApps.isChecked() ? 1 : 0); - } else if (KEY_LOCK_SCREEN_NOTIFICATIONS.equals(key)) { - Settings.Secure.putInt(getContentResolver(), - Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, - mLockscreenNotifications.isChecked() ? 1 : 0); } else { // If we didn't handle it, let preferences handle it. return super.onPreferenceTreeClick(preferenceScreen, preference); diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java index 1c7bb59c4..0d5839b2d 100644 --- a/src/com/android/settings/Settings.java +++ b/src/com/android/settings/Settings.java @@ -86,6 +86,7 @@ public class Settings extends SettingsActivity { public static class PrintSettingsActivity extends SettingsActivity { /* empty */ } public static class PrintJobSettingsActivity extends SettingsActivity { /* empty */ } public static class ZenModeSettingsActivity extends SettingsActivity { /* empty */ } + public static class NotificationSettingsActivity extends SettingsActivity { /* empty */ } public static class TopLevelSettings extends SettingsActivity { /* empty */ } } diff --git a/src/com/android/settings/SoundSettings.java b/src/com/android/settings/SoundSettings.java index d50686486..45fd0dbee 100644 --- a/src/com/android/settings/SoundSettings.java +++ b/src/com/android/settings/SoundSettings.java @@ -75,7 +75,6 @@ public class SoundSettings extends SettingsPreferenceFragment implements private static final String KEY_DOCK_AUDIO_SETTINGS = "dock_audio"; private static final String KEY_DOCK_SOUNDS = "dock_sounds"; private static final String KEY_DOCK_AUDIO_MEDIA_ENABLED = "dock_audio_media_enabled"; - private static final String KEY_ZEN_MODE = "zen_mode"; private static final String[] NEED_VOICE_CAPABILITY = { KEY_RINGTONE, KEY_DTMF_TONE, KEY_CATEGORY_CALLS, @@ -102,7 +101,6 @@ public class SoundSettings extends SettingsPreferenceFragment implements private CheckBoxPreference mDockSounds; private Intent mDockIntent; private CheckBoxPreference mDockAudioMediaEnabled; - private ZenModeListPreference mZenModeListPreference; private Handler mHandler = new Handler() { public void handleMessage(Message msg) { @@ -229,9 +227,6 @@ public class SoundSettings extends SettingsPreferenceFragment implements }; initDockSettings(); - - mZenModeListPreference = (ZenModeListPreference) findPreference(KEY_ZEN_MODE); - mZenModeListPreference.init(); } @Override @@ -253,8 +248,13 @@ public class SoundSettings extends SettingsPreferenceFragment implements private void updateRingtoneName(int type, Preference preference, int msg) { if (preference == null) return; - Context context = getActivity(); - if (context == null) return; + final CharSequence summary = updateRingtoneName(getActivity(), type); + if (summary == null) return; + mHandler.sendMessage(mHandler.obtainMessage(msg, summary)); + } + + public static CharSequence updateRingtoneName(Context context, int type) { + if (context == null) return null; Uri ringtoneUri = RingtoneManager.getActualDefaultRingtoneUri(context, type); CharSequence summary = context.getString(com.android.internal.R.string.ringtone_unknown); // Is it a silent ringtone? @@ -275,7 +275,7 @@ public class SoundSettings extends SettingsPreferenceFragment implements // Unknown title for the ringtone } } - mHandler.sendMessage(mHandler.obtainMessage(msg, summary)); + return summary; } private void lookupRingtoneNames() { |