diff options
author | John Spurlock <jspurlock@google.com> | 2014-07-07 23:27:13 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-07-07 19:25:01 +0000 |
commit | 1d607861f31e4496e803ac66ba8e0f50220b4581 (patch) | |
tree | 654cdc37abe1429a56b048536bc9779640d5acb6 | |
parent | 379a1d1f73ed9a0c0b2536389a3b7a69152c9dd9 (diff) | |
parent | 07f7efba67a5f261fca31890a1b60f23021325f5 (diff) | |
download | packages_apps_Settings-1d607861f31e4496e803ac66ba8e0f50220b4581.zip packages_apps_Settings-1d607861f31e4496e803ac66ba8e0f50220b4581.tar.gz packages_apps_Settings-1d607861f31e4496e803ac66ba8e0f50220b4581.tar.bz2 |
Merge "Settings: Update to follow new volume design."
18 files changed, 534 insertions, 632 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 61b965e..0ec6098 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1698,21 +1698,6 @@ android:resource="@id/notification_settings" /> </activity-alias> - <activity android:name="Settings$NotificationDisplaySettingsActivity" - android:label="@string/notification_display_settings" - android:exported="true" - android:taskAffinity=""> - <intent-filter> - <action android:name="android.intent.action.MAIN" /> - <action android:name="android.settings.ACTION_NOTIFICATION_DISPLAY_SETTINGS" /> - <category android:name="android.intent.category.DEFAULT" /> - </intent-filter> - <meta-data android:name="com.android.settings.FRAGMENT_CLASS" - android:value="com.android.settings.notification.NotificationDisplaySettings" /> - <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID" - android:resource="@id/notification_settings" /> - </activity> - <activity android:name="Settings$OtherSoundSettingsActivity" android:label="@string/other_sound_settings" android:exported="true" diff --git a/res/layout/zen_mode_section_first.xml b/res/layout/zen_downtime_day.xml index e43a4d2..076ad4c 100644..100755 --- a/res/layout/zen_mode_section_first.xml +++ b/res/layout/zen_downtime_day.xml @@ -1,5 +1,5 @@ -<!-- - Copyright (C) 2014 The Android Open Source Project +<?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. @@ -13,18 +13,13 @@ See the License for the specific language governing permissions and limitations under the License. --> -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + +<CheckBox xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" - android:orientation="vertical" - android:paddingStart="?android:attr/listPreferredItemPaddingStart" - android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"> - - <TextView - android:id="@android:id/title" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:textAllCaps="true" - android:textStyle="bold" /> - -</LinearLayout>
\ No newline at end of file + android:minHeight="?android:attr/listPreferredItemHeightSmall" + android:textAppearance="?android:attr/textAppearanceMedium" + android:gravity="center_vertical" + android:paddingStart="@dimen/zen_downtime_checkbox_padding" + android:layout_marginStart="@dimen/zen_downtime_margin" + android:layout_marginEnd="@dimen/zen_downtime_margin" /> diff --git a/res/layout/zen_mode_section.xml b/res/layout/zen_mode_section.xml deleted file mode 100644 index c9daedc..0000000 --- a/res/layout/zen_mode_section.xml +++ /dev/null @@ -1,37 +0,0 @@ -<!-- - 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. ---> -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:paddingStart="?android:attr/listPreferredItemPaddingStart" - android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" - android:orientation="vertical" > - - <View - android:layout_width="match_parent" - android:layout_height="2dip" - android:layout_marginBottom="4dip" - android:alpha="?android:attr/disabledAlpha" - android:background="#000" /> - - <TextView - android:id="@android:id/title" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:textAllCaps="true" - android:textStyle="bold" /> - -</LinearLayout>
\ No newline at end of file diff --git a/res/layout/notification_app_section.xml b/res/values/aliases.xml index 144ea11..97a50c5 100644 --- a/res/layout/notification_app_section.xml +++ b/res/values/aliases.xml @@ -1,5 +1,5 @@ -<!-- - Copyright (C) 2014 The Android Open Source Project +<?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. @@ -13,8 +13,9 @@ See the License for the specific language governing permissions and limitations under the License. --> -<TextView xmlns:android="http://schemas.android.com/apk/res/android" - style="?android:attr/listSeparatorTextViewStyle" - android:id="@android:id/title" - android:layout_width="match_parent" - android:layout_height="wrap_content" /> + +<resources> + <item name="notification_app_section" type="layout">@*android:layout/preference_category_material + </item> +</resources> + diff --git a/res/values/dimens.xml b/res/values/dimens.xml index cb2a9f0..992e57f 100755 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -86,6 +86,8 @@ <dimen name="notification_app_icon_badge_margin">4dp</dimen> <dimen name="notification_app_settings_divider_height">48dp</dimen> <dimen name="zen_mode_dropdown_width">160dp</dimen> + <dimen name="zen_downtime_checkbox_padding">7dp</dimen> + <dimen name="zen_downtime_margin">10dp</dimen> <!-- Default text size for caption preview samples. Uses dp rather than sp because captions are not scaled. --> <dimen name="caption_preview_text_size">48dp</dimen> diff --git a/res/values/strings.xml b/res/values/strings.xml index 1110553..611801c 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -5139,113 +5139,113 @@ <string name="default_sound">Default sound</string> - <!-- Sounds and Notifications --> + <!-- Sounds and Notification --> - <!-- Sound & notifications: Settings header. [CHAR LIMIT=20] --> - <string name="notification_settings">Sound & Notifications</string> + <!-- Sound & notification: Settings header. [CHAR LIMIT=20] --> + <string name="notification_settings">Sound & Notification</string> - <!-- Sound & notifications: Title for the option managing media volume. [CHAR LIMIT=30] --> + <!-- Sound & notification > Sound section: Title for the option managing media volume. [CHAR LIMIT=30] --> <string name="media_volume_option_title">Media volume</string> - <!-- Sound & notifications: Title for the option managing alarm volume. [CHAR LIMIT=30] --> + <!-- Sound & notification > Sound section: Title for the option managing alarm volume. [CHAR LIMIT=30] --> <string name="alarm_volume_option_title">Alarm volume</string> - <!-- Sound & notifications: Title for the option managing ringer volume. [CHAR LIMIT=30] --> + <!-- Sound & notification > Sound section: Title for the option managing ringer volume. [CHAR LIMIT=30] --> <string name="ring_volume_option_title">Ring volume</string> - <!-- Sound & notifications: Title for the option managing notification volume. [CHAR LIMIT=30] --> + <!-- Sound & notification > Sound section: Title for the option managing notification volume. [CHAR LIMIT=30] --> <string name="notification_volume_option_title">Notification volume</string> - <!-- Sound & notifications: Title for the Do not disturb option and associated settings page. [CHAR LIMIT=30] --> - <string name="zen_mode_settings_title">Do not disturb</string> + <!-- Sound & notification > Sound section: Title for the Interruptions option and associated settings page. [CHAR LIMIT=30] --> + <string name="zen_mode_settings_title">Interruptions</string> - <!-- Sound & notifications: Title for the ringer mode option. [CHAR LIMIT=60] --> - <string name="ringer_mode_title">When calls and notifications arrive</string> + <!-- Sound & notification > Sound section: Title for the zen mode option. [CHAR LIMIT=60] --> + <string name="zen_mode_option_title">When calls and notifications arrive</string> - <!-- Sound & notifications: Title for the ringer mode option on devices without voice. [CHAR LIMIT=30] --> - <string name="ringer_mode_title_novoice">When notifications arrive</string> + <!-- Sound & notification > Sound section: Title for the zen mode option for devices without voice. [CHAR LIMIT=60] --> + <string name="zen_mode_option_title_novoice">When notifications arrive</string> - <!-- Sound & notifications: Value for the ringer mode option when audible. [CHAR LIMIT=30] --> - <string name="ringer_mode_audible">Ring</string> + <!-- Sound & notification > Sound section: Zen mode option: Off [CHAR LIMIT=60] --> + <string name="zen_mode_option_off">Always interrupt</string> - <!-- Sound & notifications: Value for the ringer mode option when vibrate. [CHAR LIMIT=30] --> - <string name="ringer_mode_vibrate">Vibrate instead of ringing</string> + <!-- Sound & notification > Sound section: Zen mode option: Important interruptions [CHAR LIMIT=60] --> + <string name="zen_mode_option_important_interruptions">Allow only priority interruptions</string> - <!-- Sound & notifications: Value for the ringer mode option when silent. [CHAR LIMIT=30] --> - <string name="ringer_mode_silent">Don\'t ring or vibrate</string> + <!-- Sound & notification > Sound section: Zen mode option: No interruptions [CHAR LIMIT=60] --> + <string name="zen_mode_option_no_interruptions">Don\'t interrupt</string> - <!-- Sound & notifications: Title for the option defining the phone ringtone. [CHAR LIMIT=30] --> + <!-- Sound & notification > Sound section: Title for the option defining the phone ringtone. [CHAR LIMIT=30] --> <string name="ringtone_title">Phone ringtone</string> - <!-- Sound & notifications: Title for the option defining the default notification ringtone. [CHAR LIMIT=30] --> + <!-- Sound & notification > Sound section: Title for the option defining the default notification ringtone. [CHAR LIMIT=30] --> <string name="notification_ringtone_title">Default notification ringtone</string> - <!-- Sound & notifications: Title for the option managing whether or not to vibrate when ringing. [CHAR LIMIT=30] --> - <string name="vibrate_when_ringing_title">Vibrate when ringing</string> + <!-- Sound & notification > Sound section: Title for the option managing whether or not to vibrate when ringing. [CHAR LIMIT=30] --> + <string name="vibrate_when_ringing_title">Also vibrate for calls</string> - <!-- Sound & notifications: Title for the showing notifications option and associated settings page. [CHAR LIMIT=30] --> - <string name="notification_display_settings">Showing notifications</string> + <!-- Sound & notification: Notification section header [CHAR LIMIT=30] --> + <string name="notification_section_header">Notification</string> - <!-- Sound & notifications > Showing notifications: Title for the pulse notification light option. [CHAR LIMIT=30] --> + <!-- Sound & notification > Notification section: Title for the pulse notification light option. [CHAR LIMIT=30] --> <string name="notification_pulse_title">Pulse notification light</string> - <!-- Sound & notifications > Showing notifications: Title for the option controlling notifications on the lockscreen. [CHAR LIMIT=30] --> + <!-- Sound & notification > Notification section: Title for the option controlling notifications on the lockscreen. [CHAR LIMIT=30] --> <string name="lock_screen_notifications_title">When device is locked</string> - <!-- Sound & notifications > Showing notifications: Value for lockscreen notifications: all information will be + <!-- Sound & notification > Notification section: Value for lockscreen notifications: all information will be shown in notifications shown on a secure lock screen [CHAR LIMIT=50] --> <string name="lock_screen_notifications_summary_show">Show all notification content</string> - <!-- Sound & notifications > Showing notifications: Value for lockscreen notifications: sensitive information will be + <!-- Sound & notification > Notification section: Value for lockscreen 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_hide">Hide sensitive notification content</string> - <!-- Sound & notifications > Showing notifications: Value for lockscreen notifications: notifications will not appear on a secure lock screen + <!-- Sound & notification > Notification section: Value for lockscreen notifications: notifications will not appear on a secure lock screen [CHAR LIMIT=50] --> <string name="lock_screen_notifications_summary_disable">Don\'t show notifications at all</string> - <!-- Sound & notifications > Showing notifications: Title for the option managing notifications per application. [CHAR LIMIT=30] --> + <!-- Sound & notification > Notification section: Title for the option managing notifications per application. [CHAR LIMIT=30] --> <string name="app_notifications_title">App notifications</string> - <!-- Sound & notifications: Title for the other sounds option and associated settings page. [CHAR LIMIT=30] --> + <!-- Sound & notification > Sound section: Title for the other sounds option and associated settings page. [CHAR LIMIT=30] --> <string name="other_sound_settings">Other sounds</string> - <!-- Sound & notifications > Other sounds: Title for the option enabling touch sounds for dial pad tones. [CHAR LIMIT=30] --> + <!-- Sound & notification > Other sounds: Title for the option enabling touch sounds for dial pad tones. [CHAR LIMIT=30] --> <string name="dial_pad_tones_title">Dial pad tones</string> - <!-- Sound & notifications > Other sounds: Title for the option enabling touch sounds for screen locking sounds. [CHAR LIMIT=30] --> + <!-- Sound & notification > Other sounds: Title for the option enabling touch sounds for screen locking sounds. [CHAR LIMIT=30] --> <string name="screen_locking_sounds_title">Screen locking sounds</string> - <!-- Sound & notifications > Other sounds: Title for the option enabling docking sounds. [CHAR LIMIT=30] --> + <!-- Sound & notification > Other sounds: Title for the option enabling docking sounds. [CHAR LIMIT=30] --> <string name="docking_sounds_title">Docking sounds</string> - <!-- Sound & notifications > Other sounds: Title for the option enabling touch sounds. [CHAR LIMIT=30] --> + <!-- Sound & notification > Other sounds: Title for the option enabling touch sounds. [CHAR LIMIT=30] --> <string name="touch_sounds_title">Touch sounds</string> - <!-- Sound & notifications > Other sounds: Title for the option enabling haptic feedback on touch. [CHAR LIMIT=30] --> + <!-- Sound & notification > Other sounds: Title for the option enabling haptic feedback on touch. [CHAR LIMIT=30] --> <string name="vibrate_on_touch_title">Vibrate on touch</string> - <!-- Sound & notifications > Other sounds: Title for the option enabling dock audio media. [CHAR LIMIT=30] --> + <!-- Sound & notification > Other sounds: Title for the option enabling dock audio media. [CHAR LIMIT=30] --> <string name="dock_audio_media_title">Dock speaker plays</string> - <!-- Sound & notifications > Other sounds: Value for the dock audio media with value 0: disabled. [CHAR LIMIT=30] --> + <!-- Sound & notification > Other sounds: Value for the dock audio media with value 0: disabled. [CHAR LIMIT=30] --> <string name="dock_audio_media_disabled">All audio</string> - <!-- Sound & notifications > Other sounds: Value for the dock audio media with value 1: enabled. [CHAR LIMIT=30] --> + <!-- Sound & notification > Other sounds: Value for the dock audio media with value 1: enabled. [CHAR LIMIT=30] --> <string name="dock_audio_media_enabled">Media audio only</string> - <!-- Sound & notifications > Other sounds: Value for the emergency tone option with value 0: silent. [CHAR LIMIT=30] --> + <!-- Sound & notification > Other sounds: Value for the emergency tone option with value 0: silent. [CHAR LIMIT=30] --> <string name="emergency_tone_silent">Silent</string> - <!-- Sound & notifications > Other sounds: Value for the emergency tone option with value 1: alert. [CHAR LIMIT=30] --> + <!-- Sound & notification > Other sounds: Value for the emergency tone option with value 1: alert. [CHAR LIMIT=30] --> <string name="emergency_tone_alert">Alert</string> - <!-- Sound & notifications > Other sounds: Value for the emergency tone option with value 2: vibrate. [CHAR LIMIT=30] --> + <!-- Sound & notification > Other sounds: Value for the emergency tone option with value 2: vibrate. [CHAR LIMIT=30] --> <string name="emergency_tone_vibrate">Vibrate</string> - <!-- Sound & notifications: Title for managing notification listeners option. [CHAR LIMIT=30] --> + <!-- Sound & notification > Notification section: Title for managing notification listeners option. [CHAR LIMIT=30] --> <string name="manage_notification_access_title">Notification access</string> <!-- Summary of preference to manage notification listeners, when none are enabled --> @@ -5327,14 +5327,20 @@ <!-- [CHAR LIMIT=30] Zen mode settings: Exit condition selection dialog, default option --> <string name="zen_mode_default_option">Until you turn this off</string> - <!-- [CHAR LIMIT=40] Zen mode settings: General category text --> - <string name="zen_mode_general_category">Block all interruptions except</string> + <!-- [CHAR LIMIT=40] Zen mode settings: Important category text --> + <string name="zen_mode_important_category">Priority interruptions</string> - <!-- [CHAR LIMIT=40] Zen mode settings: Automatic category text --> - <string name="zen_mode_automatic_category">At night</string> + <!-- [CHAR LIMIT=40] Zen mode settings: Downtime category text --> + <string name="zen_mode_downtime_category">Downtime (priority interruptions only)</string> + + <!-- [CHAR LIMIT=40] Zen mode settings: Downtime days option title --> + <string name="zen_mode_downtime_days">Days</string> + + <!-- [CHAR LIMIT=40] Zen mode settings: Downtime days option value, no days set --> + <string name="zen_mode_downtime_days_none">None</string> <!-- [CHAR LIMIT=40] Zen mode settings: Automation category text --> - <string name="zen_mode_automation_category">Other automation</string> + <string name="zen_mode_automation_category">Automation</string> <!-- [CHAR LIMIT=40] Zen mode settings: Entry conditions option: title --> <string name="zen_mode_entry_conditions_title">Automatically turn on</string> @@ -5364,7 +5370,7 @@ <string name="zen_mode_from_starred">Starred contacts only</string> <!-- [CHAR LIMIT=60] Zen mode settings: Reminder text about alarms --> - <string name="zen_mode_alarm_info">Alarms and timers are never blocked</string> + <string name="zen_mode_alarm_info">Alarms and timers are always priority interruptions</string> <!-- [CHAR LIMIT=20] Zen mode settings: When option --> <string name="zen_mode_when">Automatically turn on</string> diff --git a/res/xml/notification_display_settings.xml b/res/xml/notification_display_settings.xml deleted file mode 100644 index 2dbe4b3..0000000 --- a/res/xml/notification_display_settings.xml +++ /dev/null @@ -1,42 +0,0 @@ -<?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_display_settings" - android:key="notification_display_settings" - xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"> - - <!-- Pulse notification light --> - <SwitchPreference - android:key="notification_pulse" - android:title="@string/notification_pulse_title" - android:switchTextOff="" - android:switchTextOn="" - android:persistent="false" /> - - <!-- When device is locked --> - <com.android.settings.notification.DropDownPreference - android:key="lock_screen_notifications" - android:title="@string/lock_screen_notifications_title" - android:persistent="false" /> - - <!-- App notifications --> - <PreferenceScreen - android:key="app_notifications" - android:title="@string/app_notifications_title" - android:fragment="com.android.settings.notification.AppNotificationSettings" /> - -</PreferenceScreen> diff --git a/res/xml/notification_settings.xml b/res/xml/notification_settings.xml index 176c822..af9ab6c 100644 --- a/res/xml/notification_settings.xml +++ b/res/xml/notification_settings.xml @@ -19,85 +19,102 @@ android:key="notification_settings" xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"> - <!-- Media volume --> - <com.android.settings.notification.VolumeSeekBarPreference - android:key="media_volume" - android:icon="@*android:drawable/ic_audio_vol" - android:title="@string/media_volume_option_title" /> - - <!-- Alarm volume --> - <com.android.settings.notification.VolumeSeekBarPreference - android:key="alarm_volume" - android:icon="@*android:drawable/ic_audio_alarm" - android:title="@string/alarm_volume_option_title" /> - - <!-- Ring volume --> - <com.android.settings.notification.VolumeSeekBarPreference - android:key="ring_volume" - android:icon="@*android:drawable/ic_audio_ring_notif" - android:title="@string/ring_volume_option_title" /> - - <!-- Notification volume --> - <com.android.settings.notification.VolumeSeekBarPreference - android:key="notification_volume" - android:icon="@*android:drawable/ic_audio_ring_notif" - android:title="@string/notification_volume_option_title" /> - - <!-- Do not disturb --> - <PreferenceScreen - android:key="zen_mode" - android:title="@string/zen_mode_settings_title" - android:fragment="com.android.settings.notification.ZenModeSettings" /> - - <!-- When calls and notifications arrive --> - <com.android.settings.notification.DropDownPreference - android:key="ringer_mode" - android:title="@string/ringer_mode_title" - android:persistent="false" /> - - <!-- Phone ringtone --> - <com.android.settings.DefaultRingtonePreference - android:key="ringtone" - android:title="@string/ringtone_title" - android:dialogTitle="@string/ringtone_title" - android:persistent="false" - android:ringtoneType="ringtone" /> - - <!-- Default notification ringtone --> - <com.android.settings.DefaultRingtonePreference - android:key="notification_ringtone" - android:title="@string/notification_ringtone_title" - android:dialogTitle="@string/notification_ringtone_title" - android:persistent="false" - android:ringtoneType="notification" /> - - <!-- Vibrate when ringing --> - <SwitchPreference - android:key="vibrate_when_ringing" - android:title="@string/vibrate_when_ringing_title" - android:switchTextOff="" - android:switchTextOn="" - android:persistent="false" /> - - <!-- Showing notifications --> - <Preference - android:key="showing_notifications" - android:title="@string/notification_display_settings" - android:persistent="false" - android:fragment="com.android.settings.notification.NotificationDisplaySettings" /> - - <!-- Touch sounds --> - <Preference - android:key="other_sounds" - android:title="@string/other_sound_settings" - android:persistent="false" - android:fragment="com.android.settings.notification.OtherSoundSettings" /> - - <!-- Notification access --> - <Preference - android:key="manage_notification_access" - android:title="@string/manage_notification_access_title" - android:persistent="false" - android:fragment="com.android.settings.notification.NotificationAccessSettings" /> + <PreferenceCategory + android:key="sound" + android:title="@string/sound_settings" > + + <!-- Media volume --> + <com.android.settings.notification.VolumeSeekBarPreference + android:key="media_volume" + android:icon="@*android:drawable/ic_audio_vol" + android:title="@string/media_volume_option_title" /> + + <!-- Alarm volume --> + <com.android.settings.notification.VolumeSeekBarPreference + android:key="alarm_volume" + android:icon="@*android:drawable/ic_audio_alarm" + android:title="@string/alarm_volume_option_title" /> + + <!-- Ring volume --> + <com.android.settings.notification.VolumeSeekBarPreference + android:key="ring_volume" + android:icon="@*android:drawable/ic_audio_ring_notif" + android:title="@string/ring_volume_option_title" /> + + <!-- Notification volume --> + <com.android.settings.notification.VolumeSeekBarPreference + android:key="notification_volume" + android:icon="@*android:drawable/ic_audio_ring_notif" + android:title="@string/notification_volume_option_title" /> + + <!-- Also vibrate for calls --> + <SwitchPreference + android:key="vibrate_when_ringing" + android:title="@string/vibrate_when_ringing_title" + android:persistent="false" /> + + <!-- Interruptions --> + <PreferenceScreen + android:key="zen_mode" + android:title="@string/zen_mode_settings_title" + android:fragment="com.android.settings.notification.ZenModeSettings" /> + + <!-- Phone ringtone --> + <com.android.settings.DefaultRingtonePreference + android:key="ringtone" + android:title="@string/ringtone_title" + android:dialogTitle="@string/ringtone_title" + android:persistent="false" + android:ringtoneType="ringtone" /> + + <!-- Default notification ringtone --> + <com.android.settings.DefaultRingtonePreference + android:key="notification_ringtone" + android:title="@string/notification_ringtone_title" + android:dialogTitle="@string/notification_ringtone_title" + android:persistent="false" + android:ringtoneType="notification" /> + + <!-- Other sounds --> + <Preference + android:key="other_sounds" + android:title="@string/other_sound_settings" + android:persistent="false" + android:fragment="com.android.settings.notification.OtherSoundSettings" /> + + </PreferenceCategory> + + <PreferenceCategory + android:key="notification" + android:title="@string/notification_section_header" > + + <!-- Pulse notification light --> + <SwitchPreference + android:key="notification_pulse" + android:title="@string/notification_pulse_title" + android:switchTextOff="" + android:switchTextOn="" + android:persistent="false" /> + + <!-- When device is locked --> + <com.android.settings.notification.DropDownPreference + android:key="lock_screen_notifications" + android:title="@string/lock_screen_notifications_title" + android:persistent="false" /> + + <!-- App notifications --> + <PreferenceScreen + android:key="app_notifications" + android:title="@string/app_notifications_title" + android:fragment="com.android.settings.notification.AppNotificationSettings" /> + + <!-- Notification access --> + <Preference + android:key="manage_notification_access" + android:title="@string/manage_notification_access_title" + android:persistent="false" + android:fragment="com.android.settings.notification.NotificationAccessSettings" /> + + </PreferenceCategory> </PreferenceScreen> diff --git a/res/xml/zen_mode_settings.xml b/res/xml/zen_mode_settings.xml index 35732d6..6f2fc2e 100644 --- a/res/xml/zen_mode_settings.xml +++ b/res/xml/zen_mode_settings.xml @@ -19,42 +19,58 @@ android:key="zen_mode_settings" android:title="@string/zen_mode_settings_title" > + <!-- When calls and notifications arrive --> + <com.android.settings.notification.DropDownPreference + android:key="zen_mode" + android:title="@string/zen_mode_option_title" + android:persistent="false" /> + <PreferenceCategory - android:key="general" - android:layout="@layout/zen_mode_section_first" - android:title="@string/zen_mode_general_category" > + android:key="important" + android:title="@string/zen_mode_important_category" > + <SwitchPreference android:key="phone_calls" android:persistent="false" android:switchTextOff="" android:switchTextOn="" android:title="@string/zen_mode_phone_calls" /> + <SwitchPreference android:key="messages" android:persistent="false" android:switchTextOff="" android:switchTextOn="" android:title="@string/zen_mode_messages" /> + </PreferenceCategory> <PreferenceCategory - android:key="automatic" - android:layout="@layout/zen_mode_section" - android:title="@string/zen_mode_automatic_category" /> + android:key="downtime" + android:title="@string/zen_mode_downtime_category" > + + <Preference + android:key="days" + android:title="@string/zen_mode_downtime_days" + android:persistent="false" /> + + </PreferenceCategory> <PreferenceCategory android:key="automation" - android:layout="@layout/zen_mode_section" android:title="@string/zen_mode_automation_category" > + <Preference android:key="entry" android:title="@string/zen_mode_entry_conditions_title" android:persistent="false" /> + <Preference android:key="manage_condition_providers" android:title="@string/manage_condition_providers" android:persistent="false" android:fragment="com.android.settings.notification.ConditionProviderSettings" /> + </PreferenceCategory> </PreferenceScreen>
\ No newline at end of file diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java index 7ef33ae..33bdedf 100644 --- a/src/com/android/settings/Settings.java +++ b/src/com/android/settings/Settings.java @@ -88,7 +88,6 @@ public class Settings extends SettingsActivity { public static class PrintJobSettingsActivity extends SettingsActivity { /* empty */ } public static class ZenModeSettingsActivity extends SettingsActivity { /* empty */ } public static class NotificationSettingsActivity extends SettingsActivity { /* empty */ } - public static class NotificationDisplaySettingsActivity extends SettingsActivity { /* empty */ } public static class AppNotificationSettingsActivity extends SettingsActivity { /* empty */ } public static class OtherSoundSettingsActivity extends SettingsActivity { /* empty */ } diff --git a/src/com/android/settings/notification/AppNotificationSettings.java b/src/com/android/settings/notification/AppNotificationSettings.java index ec8af26..34d465e 100644 --- a/src/com/android/settings/notification/AppNotificationSettings.java +++ b/src/com/android/settings/notification/AppNotificationSettings.java @@ -353,7 +353,7 @@ public class AppNotificationSettings extends ListFragment { public void bindView(final View view, Row r, boolean animate) { if (!(r instanceof AppRow)) { // it's a section row - TextView tv = (TextView)view; + final TextView tv = (TextView)view.findViewById(android.R.id.title); tv.setText(r.section); return; } diff --git a/src/com/android/settings/notification/NotificationDisplaySettings.java b/src/com/android/settings/notification/NotificationDisplaySettings.java deleted file mode 100644 index 54406f0..0000000 --- a/src/com/android/settings/notification/NotificationDisplaySettings.java +++ /dev/null @@ -1,184 +0,0 @@ -/* - * 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.notification; - -import android.content.ContentResolver; -import android.database.ContentObserver; -import android.net.Uri; -import android.os.Bundle; -import android.os.Handler; -import android.preference.Preference; -import android.preference.Preference.OnPreferenceChangeListener; -import android.preference.PreferenceScreen; -import android.preference.TwoStatePreference; -import android.provider.Settings; -import android.util.Log; - -import com.android.settings.R; -import com.android.settings.SettingsPreferenceFragment; - -public class NotificationDisplaySettings extends SettingsPreferenceFragment { - private static final String TAG = "NotificationDisplaySettings"; - - private static final String KEY_NOTIFICATION_PULSE = "notification_pulse"; - private static final String KEY_LOCK_SCREEN_NOTIFICATIONS = "lock_screen_notifications"; - - private final Handler mHandler = new Handler(); - private final SettingsObserver mSettingsObserver = new SettingsObserver(); - - private TwoStatePreference mNotificationPulse; - private DropDownPreference mLockscreen; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - addPreferencesFromResource(R.xml.notification_display_settings); - - final PreferenceScreen root = getPreferenceScreen(); - initPulse(root); - initLockscreenNotifications(root); - } - - @Override - public void onResume() { - super.onResume(); - mSettingsObserver.register(true); - } - - @Override - public void onPause() { - super.onPause(); - mSettingsObserver.register(false); - } - - // === Pulse notification light === - - private void initPulse(PreferenceScreen parent) { - mNotificationPulse = (TwoStatePreference) parent.findPreference(KEY_NOTIFICATION_PULSE); - if (mNotificationPulse == null) return; - if (!getResources() - .getBoolean(com.android.internal.R.bool.config_intrusiveNotificationLed)) { - parent.removePreference(mNotificationPulse); - } else { - updatePulse(); - mNotificationPulse.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { - @Override - public boolean onPreferenceChange(Preference preference, Object newValue) { - final boolean val = (Boolean)newValue; - return Settings.System.putInt(getContentResolver(), - Settings.System.NOTIFICATION_LIGHT_PULSE, - val ? 1 : 0); - } - }); - } - } - - private void updatePulse() { - if (mNotificationPulse == null) return; - try { - mNotificationPulse.setChecked(Settings.System.getInt(getContentResolver(), - Settings.System.NOTIFICATION_LIGHT_PULSE) == 1); - } catch (Settings.SettingNotFoundException snfe) { - Log.e(TAG, Settings.System.NOTIFICATION_LIGHT_PULSE + " not found"); - } - } - - // === Lockscreen (public / private) notifications === - - private void initLockscreenNotifications(PreferenceScreen parent) { - mLockscreen = (DropDownPreference) parent.findPreference(KEY_LOCK_SCREEN_NOTIFICATIONS); - if (mLockscreen == null) return; - mLockscreen.addItem(R.string.lock_screen_notifications_summary_show, - R.string.lock_screen_notifications_summary_show); - mLockscreen.addItem(R.string.lock_screen_notifications_summary_hide, - R.string.lock_screen_notifications_summary_hide); - mLockscreen.addItem(R.string.lock_screen_notifications_summary_disable, - R.string.lock_screen_notifications_summary_disable); - updateLockscreenNotifications(); - mLockscreen.setCallback(new DropDownPreference.Callback() { - @Override - public boolean onItemSelected(int pos, Object value) { - final int val = (Integer) value; - final boolean enabled = val != R.string.lock_screen_notifications_summary_disable; - final boolean show = val == R.string.lock_screen_notifications_summary_show; - Settings.Secure.putInt(getContentResolver(), - Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, show ? 1 : 0); - Settings.Global.putInt(getContentResolver(), - Settings.Global.LOCK_SCREEN_SHOW_NOTIFICATIONS, enabled ? 1 : 0); - return true; - } - }); - } - - private void updateLockscreenNotifications() { - if (mLockscreen == null) return; - final boolean allowPrivate = getLockscreenAllowPrivateNotifications(); - final boolean enabled = getLockscreenNotificationsEnabled(); - final int val = !enabled ? R.string.lock_screen_notifications_summary_disable : - allowPrivate ? R.string.lock_screen_notifications_summary_show : - R.string.lock_screen_notifications_summary_hide; - mLockscreen.setSelectedValue(val); - } - - private boolean getLockscreenNotificationsEnabled() { - return Settings.Global.getInt(getContentResolver(), - Settings.Global.LOCK_SCREEN_SHOW_NOTIFICATIONS, 0) != 0; - } - - private boolean getLockscreenAllowPrivateNotifications() { - return Settings.Secure.getInt(getContentResolver(), - Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, 0) != 0; - } - - // === Callbacks === - - private final class SettingsObserver extends ContentObserver { - private final Uri NOTIFICATION_LIGHT_PULSE_URI = - Settings.System.getUriFor(Settings.System.NOTIFICATION_LIGHT_PULSE); - private final Uri LOCK_SCREEN_PRIVATE_URI = - Settings.Secure.getUriFor(Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS); - private final Uri LOCK_SCREEN_SHOW_URI = - Settings.Global.getUriFor(Settings.Global.LOCK_SCREEN_SHOW_NOTIFICATIONS); - - public SettingsObserver() { - super(mHandler); - } - - public void register(boolean register) { - final ContentResolver cr = getContentResolver(); - if (register) { - cr.registerContentObserver(NOTIFICATION_LIGHT_PULSE_URI, false, this); - cr.registerContentObserver(LOCK_SCREEN_PRIVATE_URI, false, this); - cr.registerContentObserver(LOCK_SCREEN_SHOW_URI, false, this); - } else { - cr.unregisterContentObserver(this); - } - } - - @Override - public void onChange(boolean selfChange, Uri uri) { - super.onChange(selfChange, uri); - if (NOTIFICATION_LIGHT_PULSE_URI.equals(uri)) { - updatePulse(); - } - if (LOCK_SCREEN_PRIVATE_URI.equals(uri) || LOCK_SCREEN_SHOW_URI.equals(uri)) { - updateLockscreenNotifications(); - } - } - } -} diff --git a/src/com/android/settings/notification/NotificationSettings.java b/src/com/android/settings/notification/NotificationSettings.java index 8caa420..4b5718b 100644 --- a/src/com/android/settings/notification/NotificationSettings.java +++ b/src/com/android/settings/notification/NotificationSettings.java @@ -16,11 +16,8 @@ package com.android.settings.notification; -import android.content.BroadcastReceiver; import android.content.ContentResolver; import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; import android.content.pm.PackageManager; import android.database.ContentObserver; import android.database.Cursor; @@ -35,12 +32,13 @@ import android.os.Looper; import android.os.Message; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; -import android.preference.PreferenceScreen; +import android.preference.PreferenceCategory; import android.preference.SeekBarVolumizer; import android.preference.TwoStatePreference; import android.provider.MediaStore; import android.provider.SearchIndexableResource; import android.provider.Settings; +import android.util.Log; import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; @@ -55,14 +53,17 @@ import java.util.List; public class NotificationSettings extends SettingsPreferenceFragment implements Indexable { private static final String TAG = "NotificationSettings"; + private static final String KEY_SOUND = "sound"; private static final String KEY_MEDIA_VOLUME = "media_volume"; private static final String KEY_ALARM_VOLUME = "alarm_volume"; private static final String KEY_RING_VOLUME = "ring_volume"; private static final String KEY_NOTIFICATION_VOLUME = "notification_volume"; - private static final String KEY_RINGER_MODE = "ringer_mode"; private static final String KEY_PHONE_RINGTONE = "ringtone"; private static final String KEY_NOTIFICATION_RINGTONE = "notification_ringtone"; private static final String KEY_VIBRATE_WHEN_RINGING = "vibrate_when_ringing"; + private static final String KEY_NOTIFICATION = "notification"; + private static final String KEY_NOTIFICATION_PULSE = "notification_pulse"; + private static final String KEY_LOCK_SCREEN_NOTIFICATIONS = "lock_screen_notifications"; private static final String KEY_NOTIFICATION_ACCESS = "manage_notification_access"; private static final int SAMPLE_CUTOFF = 2000; // manually cap sample playback at 2 seconds @@ -75,10 +76,11 @@ public class NotificationSettings extends SettingsPreferenceFragment implements private PackageManager mPM; private boolean mVoiceCapable; - private DropDownPreference mRingerMode; private Preference mPhoneRingtonePreference; private Preference mNotificationRingtonePreference; private TwoStatePreference mVibrateWhenRinging; + private TwoStatePreference mNotificationPulse; + private DropDownPreference mLockscreen; private Preference mNotificationAccess; @Override @@ -89,19 +91,23 @@ public class NotificationSettings extends SettingsPreferenceFragment implements mVoiceCapable = Utils.isVoiceCapable(mContext); addPreferencesFromResource(R.xml.notification_settings); - final PreferenceScreen root = getPreferenceScreen(); + final PreferenceCategory sound = (PreferenceCategory) findPreference(KEY_SOUND); initVolumePreference(KEY_MEDIA_VOLUME, AudioManager.STREAM_MUSIC); initVolumePreference(KEY_ALARM_VOLUME, AudioManager.STREAM_ALARM); if (mVoiceCapable) { initVolumePreference(KEY_RING_VOLUME, AudioManager.STREAM_RING); - removePreference(KEY_NOTIFICATION_VOLUME); + sound.removePreference(sound.findPreference(KEY_NOTIFICATION_VOLUME)); } else { initVolumePreference(KEY_NOTIFICATION_VOLUME, AudioManager.STREAM_NOTIFICATION); - removePreference(KEY_RING_VOLUME); + sound.removePreference(sound.findPreference(KEY_RING_VOLUME)); } - initRingerMode(root); - initRingtones(root); - initVibrateWhenRinging(root); + initRingtones(sound); + initVibrateWhenRinging(sound); + + final PreferenceCategory notification = (PreferenceCategory) + findPreference(KEY_NOTIFICATION); + initPulse(notification); + initLockscreenNotifications(notification); mNotificationAccess = findPreference(KEY_NOTIFICATION_ACCESS); refreshNotificationListeners(); @@ -112,8 +118,6 @@ public class NotificationSettings extends SettingsPreferenceFragment implements super.onResume(); refreshNotificationListeners(); lookupRingtoneNames(); - final IntentFilter filter = new IntentFilter(AudioManager.RINGER_MODE_CHANGED_ACTION); - mContext.registerReceiver(mReceiver, filter); mSettingsObserver.register(true); } @@ -121,7 +125,6 @@ public class NotificationSettings extends SettingsPreferenceFragment implements public void onPause() { super.onPause(); mVolumeCallback.stopSample(); - mContext.unregisterReceiver(mReceiver); mSettingsObserver.register(false); } @@ -155,37 +158,10 @@ public class NotificationSettings extends SettingsPreferenceFragment implements } }; - // === Ringer mode === - - private void initRingerMode(PreferenceScreen root) { - mRingerMode = (DropDownPreference) root.findPreference(KEY_RINGER_MODE); - if (mRingerMode == null) return; - if (!mVoiceCapable) { - mRingerMode.setTitle(R.string.ringer_mode_title_novoice); - } - final AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE); - mRingerMode.addItem(R.string.ringer_mode_audible, AudioManager.RINGER_MODE_NORMAL); - mRingerMode.addItem(R.string.ringer_mode_vibrate, AudioManager.RINGER_MODE_VIBRATE); - mRingerMode.addItem(R.string.ringer_mode_silent, AudioManager.RINGER_MODE_SILENT); - updateRingerMode(); - mRingerMode.setCallback(new DropDownPreference.Callback() { - @Override - public boolean onItemSelected(int pos, Object value) { - final int val = (Integer) value; - am.setRingerMode(val); - return true; - } - }); - } - - private void updateRingerMode() { - final AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE); - mRingerMode.setSelectedValue(am.getRingerMode()); - } // === Phone & notification ringtone === - private void initRingtones(PreferenceScreen root) { + private void initRingtones(PreferenceCategory root) { mPhoneRingtonePreference = root.findPreference(KEY_PHONE_RINGTONE); if (mPhoneRingtonePreference != null && !mVoiceCapable) { root.removePreference(mPhoneRingtonePreference); @@ -219,7 +195,10 @@ public class NotificationSettings extends SettingsPreferenceFragment implements }; private static CharSequence updateRingtoneName(Context context, int type) { - if (context == null) return null; + if (context == null) { + Log.e(TAG, "Unable to update ringtone name, no context provided"); + return null; + } Uri ringtoneUri = RingtoneManager.getActualDefaultRingtoneUri(context, type); CharSequence summary = context.getString(com.android.internal.R.string.ringtone_unknown); // Is it a silent ringtone? @@ -249,9 +228,12 @@ public class NotificationSettings extends SettingsPreferenceFragment implements // === Vibrate when ringing === - private void initVibrateWhenRinging(PreferenceScreen root) { + private void initVibrateWhenRinging(PreferenceCategory root) { mVibrateWhenRinging = (TwoStatePreference) root.findPreference(KEY_VIBRATE_WHEN_RINGING); - if (mVibrateWhenRinging == null) return; + if (mVibrateWhenRinging == null) { + Log.i(TAG, "Preference not found: " + KEY_VIBRATE_WHEN_RINGING); + return; + } if (!mVoiceCapable) { root.removePreference(mVibrateWhenRinging); mVibrateWhenRinging = null; @@ -276,6 +258,95 @@ public class NotificationSettings extends SettingsPreferenceFragment implements Settings.System.VIBRATE_WHEN_RINGING, 0) != 0); } + // === Pulse notification light === + + private void initPulse(PreferenceCategory parent) { + mNotificationPulse = (TwoStatePreference) parent.findPreference(KEY_NOTIFICATION_PULSE); + if (mNotificationPulse == null) { + Log.i(TAG, "Preference not found: " + KEY_NOTIFICATION_PULSE); + return; + } + if (!getResources() + .getBoolean(com.android.internal.R.bool.config_intrusiveNotificationLed)) { + parent.removePreference(mNotificationPulse); + } else { + updatePulse(); + mNotificationPulse.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + final boolean val = (Boolean)newValue; + return Settings.System.putInt(getContentResolver(), + Settings.System.NOTIFICATION_LIGHT_PULSE, + val ? 1 : 0); + } + }); + } + } + + private void updatePulse() { + if (mNotificationPulse == null) { + return; + } + try { + mNotificationPulse.setChecked(Settings.System.getInt(getContentResolver(), + Settings.System.NOTIFICATION_LIGHT_PULSE) == 1); + } catch (Settings.SettingNotFoundException snfe) { + Log.e(TAG, Settings.System.NOTIFICATION_LIGHT_PULSE + " not found"); + } + } + + // === Lockscreen (public / private) notifications === + + private void initLockscreenNotifications(PreferenceCategory parent) { + mLockscreen = (DropDownPreference) parent.findPreference(KEY_LOCK_SCREEN_NOTIFICATIONS); + if (mLockscreen == null) { + Log.i(TAG, "Preference not found: " + KEY_LOCK_SCREEN_NOTIFICATIONS); + return; + } + mLockscreen.addItem(R.string.lock_screen_notifications_summary_show, + R.string.lock_screen_notifications_summary_show); + mLockscreen.addItem(R.string.lock_screen_notifications_summary_hide, + R.string.lock_screen_notifications_summary_hide); + mLockscreen.addItem(R.string.lock_screen_notifications_summary_disable, + R.string.lock_screen_notifications_summary_disable); + updateLockscreenNotifications(); + mLockscreen.setCallback(new DropDownPreference.Callback() { + @Override + public boolean onItemSelected(int pos, Object value) { + final int val = (Integer) value; + final boolean enabled = val != R.string.lock_screen_notifications_summary_disable; + final boolean show = val == R.string.lock_screen_notifications_summary_show; + Settings.Secure.putInt(getContentResolver(), + Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, show ? 1 : 0); + Settings.Global.putInt(getContentResolver(), + Settings.Global.LOCK_SCREEN_SHOW_NOTIFICATIONS, enabled ? 1 : 0); + return true; + } + }); + } + + private void updateLockscreenNotifications() { + if (mLockscreen == null) { + return; + } + final boolean allowPrivate = getLockscreenAllowPrivateNotifications(); + final boolean enabled = getLockscreenNotificationsEnabled(); + final int selectedVal = !enabled ? R.string.lock_screen_notifications_summary_disable : + allowPrivate ? R.string.lock_screen_notifications_summary_show : + R.string.lock_screen_notifications_summary_hide; + mLockscreen.setSelectedValue(selectedVal); + } + + private boolean getLockscreenNotificationsEnabled() { + return Settings.Global.getInt(getContentResolver(), + Settings.Global.LOCK_SCREEN_SHOW_NOTIFICATIONS, 0) != 0; + } + + private boolean getLockscreenAllowPrivateNotifications() { + return Settings.Secure.getInt(getContentResolver(), + Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, 0) != 0; + } + // === Notification listeners === private void refreshNotificationListeners() { @@ -299,18 +370,15 @@ public class NotificationSettings extends SettingsPreferenceFragment implements // === Callbacks === - private final BroadcastReceiver mReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - if (AudioManager.RINGER_MODE_CHANGED_ACTION.equals(intent.getAction())) { - updateRingerMode(); - } - } - }; - private final class SettingsObserver extends ContentObserver { private final Uri VIBRATE_WHEN_RINGING_URI = Settings.System.getUriFor(Settings.System.VIBRATE_WHEN_RINGING); + private final Uri NOTIFICATION_LIGHT_PULSE_URI = + Settings.System.getUriFor(Settings.System.NOTIFICATION_LIGHT_PULSE); + private final Uri LOCK_SCREEN_PRIVATE_URI = + Settings.Secure.getUriFor(Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS); + private final Uri LOCK_SCREEN_SHOW_URI = + Settings.Global.getUriFor(Settings.Global.LOCK_SCREEN_SHOW_NOTIFICATIONS); public SettingsObserver() { super(mHandler); @@ -320,6 +388,9 @@ public class NotificationSettings extends SettingsPreferenceFragment implements final ContentResolver cr = getContentResolver(); if (register) { cr.registerContentObserver(VIBRATE_WHEN_RINGING_URI, false, this); + cr.registerContentObserver(NOTIFICATION_LIGHT_PULSE_URI, false, this); + cr.registerContentObserver(LOCK_SCREEN_PRIVATE_URI, false, this); + cr.registerContentObserver(LOCK_SCREEN_SHOW_URI, false, this); } else { cr.unregisterContentObserver(this); } @@ -331,6 +402,12 @@ public class NotificationSettings extends SettingsPreferenceFragment implements if (VIBRATE_WHEN_RINGING_URI.equals(uri)) { updateVibrateWhenRinging(); } + if (NOTIFICATION_LIGHT_PULSE_URI.equals(uri)) { + updatePulse(); + } + if (LOCK_SCREEN_PRIVATE_URI.equals(uri) || LOCK_SCREEN_SHOW_URI.equals(uri)) { + updateLockscreenNotifications(); + } } } diff --git a/src/com/android/settings/notification/SettingPref.java b/src/com/android/settings/notification/SettingPref.java index 7fd89d8..de01def 100644 --- a/src/com/android/settings/notification/SettingPref.java +++ b/src/com/android/settings/notification/SettingPref.java @@ -60,7 +60,7 @@ public class SettingPref { throw new UnsupportedOperationException(); } - public void init(SettingsPreferenceFragment settings) { + public Preference init(SettingsPreferenceFragment settings) { final Context context = settings.getActivity(); Preference p = settings.getPreferenceScreen().findPreference(mKey); if (p != null && !isApplicable(context)) { @@ -84,14 +84,18 @@ public class SettingPref { return true; } }); - } else if (mDropDown != null) { + return mTwoState; + } + if (mDropDown != null) { mDropDown.setCallback(new DropDownPreference.Callback() { @Override public boolean onItemSelected(int pos, Object value) { return setSetting(context, (Integer) value); } }); + return mDropDown; } + return null; } protected boolean setSetting(Context context, int value) { diff --git a/src/com/android/settings/notification/ZenModeDowntimeDaysSelection.java b/src/com/android/settings/notification/ZenModeDowntimeDaysSelection.java new file mode 100644 index 0000000..74dae9e0 --- /dev/null +++ b/src/com/android/settings/notification/ZenModeDowntimeDaysSelection.java @@ -0,0 +1,90 @@ +/* + * 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.notification; + +import android.content.Context; +import android.service.notification.ZenModeConfig; +import android.util.SparseBooleanArray; +import android.view.LayoutInflater; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.CompoundButton.OnCheckedChangeListener; +import android.widget.LinearLayout; + +import com.android.settings.R; + +import java.text.SimpleDateFormat; +import java.util.Calendar; + +public class ZenModeDowntimeDaysSelection extends LinearLayout { + private static final int[] DAYS = { + Calendar.MONDAY, Calendar.TUESDAY, Calendar.WEDNESDAY, Calendar.THURSDAY, Calendar.FRIDAY, + Calendar.SATURDAY, Calendar.SUNDAY + }; + private static final SimpleDateFormat DAY_FORMAT = new SimpleDateFormat("EEEE"); + + private final SparseBooleanArray mDays = new SparseBooleanArray(); + + public ZenModeDowntimeDaysSelection(Context context, String mode) { + super(context); + final int[] days = ZenModeConfig.tryParseDays(mode); + if (days != null) { + for (int i = 0; i < days.length; i++) { + mDays.put(days[i], true); + } + } + setOrientation(VERTICAL); + final Calendar c = Calendar.getInstance(); + final LayoutInflater inflater = LayoutInflater.from(context); + for (int i = 0; i < DAYS.length; i++) { + final int day = DAYS[i]; + final CheckBox checkBox = (CheckBox) inflater.inflate(R.layout.zen_downtime_day, + this, false); + c.set(Calendar.DAY_OF_WEEK, day); + checkBox.setText(DAY_FORMAT.format(c.getTime())); + checkBox.setChecked(mDays.get(day)); + checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + mDays.put(day, isChecked); + onChanged(getMode()); + } + }); + addView(checkBox); + } + } + + private String getMode() { + final StringBuilder sb = new StringBuilder(ZenModeConfig.SLEEP_MODE_DAYS_PREFIX); + boolean empty = true; + for (int i = 0; i < mDays.size(); i++) { + final int day = mDays.keyAt(i); + if (!mDays.valueAt(i)) continue; + if (empty) { + empty = false; + } else { + sb.append(','); + } + sb.append(day); + } + return empty ? null : sb.toString(); + } + + protected void onChanged(String mode) { + // event hook for subclasses + } +} diff --git a/src/com/android/settings/notification/ZenModeSettings.java b/src/com/android/settings/notification/ZenModeSettings.java index 40e2c55..02bb85e 100644 --- a/src/com/android/settings/notification/ZenModeSettings.java +++ b/src/com/android/settings/notification/ZenModeSettings.java @@ -30,7 +30,6 @@ import android.content.res.Resources; import android.database.ContentObserver; import android.graphics.Typeface; import android.net.Uri; -import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.os.ServiceManager; @@ -48,37 +47,34 @@ import android.util.Log; import android.util.SparseArray; import android.view.View; import android.view.ViewGroup; -import android.widget.Switch; import android.widget.TextView; import android.widget.TimePicker; import com.android.settings.R; -import com.android.settings.SettingsActivity; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.Utils; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.Indexable; import com.android.settings.search.SearchIndexableRaw; -import com.android.settings.widget.SwitchBar; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import java.util.Objects; -public class ZenModeSettings extends SettingsPreferenceFragment implements Indexable, - SwitchBar.OnSwitchChangeListener { +public class ZenModeSettings extends SettingsPreferenceFragment implements Indexable { private static final String TAG = "ZenModeSettings"; private static final boolean DEBUG = true; - private static final boolean SHOW_CONDITION_DIALOG = false; - private static final String KEY_GENERAL = "general"; + private static final String KEY_ZEN_MODE = "zen_mode"; + private static final String KEY_IMPORTANT = "important"; private static final String KEY_CALLS = "phone_calls"; private static final String KEY_MESSAGES = "messages"; private static final String KEY_STARRED = "starred"; - private static final String KEY_AUTOMATIC = "automatic"; - private static final String KEY_WHEN = "when"; + private static final String KEY_DOWNTIME = "downtime"; + private static final String KEY_DAYS = "days"; private static final String KEY_START_TIME = "start_time"; private static final String KEY_END_TIME = "end_time"; @@ -86,16 +82,36 @@ public class ZenModeSettings extends SettingsPreferenceFragment implements Index private static final String KEY_ENTRY = "entry"; private static final String KEY_CONDITION_PROVIDERS = "manage_condition_providers"; + private static final SettingPref PREF_ZEN_MODE = new SettingPref(SettingPref.TYPE_GLOBAL, + KEY_ZEN_MODE, Global.ZEN_MODE, Global.ZEN_MODE_OFF, Global.ZEN_MODE_OFF, + Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS, Global.ZEN_MODE_NO_INTERRUPTIONS) { + protected String getCaption(Resources res, int value) { + switch (value) { + case Global.ZEN_MODE_NO_INTERRUPTIONS: + return res.getString(R.string.zen_mode_option_no_interruptions); + case Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS: + return res.getString(R.string.zen_mode_option_important_interruptions); + default: + return res.getString(R.string.zen_mode_option_off); + } + } + }; + + private static final SimpleDateFormat DAY_FORMAT = new SimpleDateFormat("EEE"); + private static SparseArray<String> allKeyTitles(Context context) { final SparseArray<String> rt = new SparseArray<String>(); - rt.put(R.string.zen_mode_general_category, KEY_GENERAL); + rt.put(R.string.zen_mode_important_category, KEY_IMPORTANT); if (Utils.isVoiceCapable(context)) { rt.put(R.string.zen_mode_phone_calls, KEY_CALLS); + rt.put(R.string.zen_mode_option_title, KEY_ZEN_MODE); + } else { + rt.put(R.string.zen_mode_option_title_novoice, KEY_ZEN_MODE); } rt.put(R.string.zen_mode_messages, KEY_MESSAGES); rt.put(R.string.zen_mode_from_starred, KEY_STARRED); - rt.put(R.string.zen_mode_automatic_category, KEY_AUTOMATIC); - rt.put(R.string.zen_mode_when, KEY_WHEN); + rt.put(R.string.zen_mode_downtime_category, KEY_DOWNTIME); + rt.put(R.string.zen_mode_downtime_days, KEY_DAYS); rt.put(R.string.zen_mode_start_time, KEY_START_TIME); rt.put(R.string.zen_mode_end_time, KEY_END_TIME); rt.put(R.string.zen_mode_automation_category, KEY_AUTOMATION); @@ -106,7 +122,6 @@ public class ZenModeSettings extends SettingsPreferenceFragment implements Index private final Handler mHandler = new Handler(); private final SettingsObserver mSettingsObserver = new SettingsObserver(); - private SwitchBar mSwitchBar; private Context mContext; private PackageManager mPM; private ZenModeConfig mConfig; @@ -114,42 +129,20 @@ public class ZenModeSettings extends SettingsPreferenceFragment implements Index private SwitchPreference mCalls; private SwitchPreference mMessages; private DropDownPreference mStarred; - private DropDownPreference mWhen; + private Preference mDays; private TimePickerPreference mStart; private TimePickerPreference mEnd; private PreferenceCategory mAutomationCategory; private Preference mEntry; private Preference mConditionProviders; - private AlertDialog mDialog; - private boolean mIgnoreNext; @Override - public void onSwitchChanged(Switch switchView, final boolean isChecked) { - if (DEBUG) Log.d(TAG, "onPreferenceChange isChecked=" + isChecked - + " mIgnoreNext=" + mIgnoreNext); - if (mIgnoreNext) { - mIgnoreNext = false; - } - AsyncTask.execute(new Runnable() { - @Override - public void run() { - final int v = isChecked ? Global.ZEN_MODE_ON : Global.ZEN_MODE_OFF; - putZenModeSetting(v); - final int n = ConditionProviderSettings.getEnabledProviderCount(mContext); - if (SHOW_CONDITION_DIALOG && n > 0) { - mHandler.post(isChecked ? mShowDialog : mHideDialog); - } - } - }); - } - - @Override - public void onActivityCreated(Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); mContext = getActivity(); mPM = mContext.getPackageManager(); final Resources res = mContext.getResources(); - final int p = res.getDimensionPixelSize(R.dimen.content_margin_left); + final int padding = res.getDimensionPixelSize(R.dimen.content_margin_left); addPreferencesFromResource(R.xml.zen_mode_settings); final PreferenceScreen root = getPreferenceScreen(); @@ -157,13 +150,15 @@ public class ZenModeSettings extends SettingsPreferenceFragment implements Index mConfig = getZenModeConfig(); if (DEBUG) Log.d(TAG, "Loaded mConfig=" + mConfig); - mSwitchBar = ((SettingsActivity) mContext).getSwitchBar(); - mSwitchBar.addOnSwitchChangeListener(this); - mSwitchBar.show(); + final Preference zenMode = PREF_ZEN_MODE.init(this); + if (!Utils.isVoiceCapable(mContext)) { + zenMode.setTitle(R.string.zen_mode_option_title_novoice); + } - final PreferenceCategory general = (PreferenceCategory) root.findPreference(KEY_GENERAL); + final PreferenceCategory important = + (PreferenceCategory) root.findPreference(KEY_IMPORTANT); - mCalls = (SwitchPreference) general.findPreference(KEY_CALLS); + mCalls = (SwitchPreference) important.findPreference(KEY_CALLS); if (Utils.isVoiceCapable(mContext)) { mCalls.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override @@ -178,11 +173,11 @@ public class ZenModeSettings extends SettingsPreferenceFragment implements Index } }); } else { - general.removePreference(mCalls); + important.removePreference(mCalls); mCalls = null; } - mMessages = (SwitchPreference) general.findPreference(KEY_MESSAGES); + mMessages = (SwitchPreference) important.findPreference(KEY_MESSAGES); mMessages.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { @@ -216,44 +211,52 @@ public class ZenModeSettings extends SettingsPreferenceFragment implements Index return setZenModeConfig(newConfig); } }); - general.addPreference(mStarred); + important.addPreference(mStarred); final Preference alarmInfo = new Preference(mContext) { @Override public View getView(View convertView, ViewGroup parent) { final TextView tv = new TextView(mContext); tv.setTypeface(Typeface.create(Typeface.DEFAULT, Typeface.ITALIC)); - tv.setPadding(p, p, p, p); + tv.setPadding(padding, padding, padding, padding); tv.setText(R.string.zen_mode_alarm_info); return tv; } }; alarmInfo.setPersistent(false); alarmInfo.setSelectable(false); - general.addPreference(alarmInfo); - - final PreferenceCategory auto = (PreferenceCategory) root.findPreference(KEY_AUTOMATIC); - - mWhen = new DropDownPreference(mContext); - mWhen.setKey(KEY_WHEN); - mWhen.setTitle(R.string.zen_mode_when); - mWhen.setDropDownWidth(R.dimen.zen_mode_dropdown_width); - mWhen.addItem(R.string.zen_mode_when_every_night, ZenModeConfig.SLEEP_MODE_NIGHTS); - mWhen.addItem(R.string.zen_mode_when_weeknights, ZenModeConfig.SLEEP_MODE_WEEKNIGHTS); - mWhen.addItem(R.string.zen_mode_when_never, null); - mWhen.setCallback(new DropDownPreference.Callback() { + important.addPreference(alarmInfo); + + final PreferenceCategory downtime = (PreferenceCategory) root.findPreference(KEY_DOWNTIME); + + mDays = downtime.findPreference(KEY_DAYS); + mDays.setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override - public boolean onItemSelected(int pos, Object value) { - if (mDisableListeners) return true; - final String mode = (String) value; - if (Objects.equals(mode, mConfig.sleepMode)) return true; - if (DEBUG) Log.d(TAG, "onPrefChange sleepMode=" + mode); - final ZenModeConfig newConfig = mConfig.copy(); - newConfig.sleepMode = mode; - return setZenModeConfig(newConfig); + public boolean onPreferenceClick(Preference preference) { + new AlertDialog.Builder(mContext) + .setTitle(R.string.zen_mode_downtime_days) + .setView(new ZenModeDowntimeDaysSelection(mContext, mConfig.sleepMode) { + @Override + protected void onChanged(String mode) { + if (mDisableListeners) return; + if (Objects.equals(mode, mConfig.sleepMode)) return; + if (DEBUG) Log.d(TAG, "days.onChanged sleepMode=" + mode); + final ZenModeConfig newConfig = mConfig.copy(); + newConfig.sleepMode = mode; + setZenModeConfig(newConfig); + } + }) + .setOnDismissListener(new OnDismissListener() { + @Override + public void onDismiss(DialogInterface dialog) { + updateDays(); + } + }) + .setPositiveButton(R.string.done_button, null) + .show(); + return true; } }); - auto.addPreference(mWhen); final FragmentManager mgr = getFragmentManager(); @@ -276,8 +279,8 @@ public class ZenModeSettings extends SettingsPreferenceFragment implements Index return setZenModeConfig(newConfig); } }); - auto.addPreference(mStart); - mStart.setDependency(mWhen.getKey()); + downtime.addPreference(mStart); + mStart.setDependency(mDays.getKey()); mEnd = new TimePickerPreference(mContext, mgr); mEnd.setKey(KEY_END_TIME); @@ -298,8 +301,8 @@ public class ZenModeSettings extends SettingsPreferenceFragment implements Index return setZenModeConfig(newConfig); } }); - auto.addPreference(mEnd); - mEnd.setDependency(mWhen.getKey()); + downtime.addPreference(mEnd); + mEnd.setDependency(mDays.getKey()); mAutomationCategory = (PreferenceCategory) findPreference(KEY_AUTOMATION); mEntry = findPreference(KEY_ENTRY); @@ -322,10 +325,39 @@ public class ZenModeSettings extends SettingsPreferenceFragment implements Index }); mConditionProviders = findPreference(KEY_CONDITION_PROVIDERS); - updateZenMode(); updateControls(); } + private void updateDays() { + if (mConfig != null) { + final int[] days = ZenModeConfig.tryParseDays(mConfig.sleepMode); + if (days != null && days.length != 0) { + final StringBuilder sb = new StringBuilder(); + final Calendar c = Calendar.getInstance(); + for (int i = 0; i < ZenModeConfig.ALL_DAYS.length; i++) { + final int day = ZenModeConfig.ALL_DAYS[i]; + for (int j = 0; j < days.length; j++) { + if (day == days[j]) { + c.set(Calendar.DAY_OF_WEEK, day); + if (sb.length() > 0) { + sb.append(mContext.getString(R.string.summary_divider_text)); + } + sb.append(DAY_FORMAT.format(c.getTime())); + break; + } + } + } + if (sb.length() > 0) { + mDays.setSummary(sb); + mDays.notifyDependencyChange(false); + return; + } + } + } + mDays.setSummary(R.string.zen_mode_downtime_days_none); + mDays.notifyDependencyChange(true); + } + private void updateEndSummary() { final int startMin = 60 * mConfig.sleepStartHour + mConfig.sleepStartMinute; final int endMin = 60 * mConfig.sleepEndHour + mConfig.sleepEndMinute; @@ -340,7 +372,7 @@ public class ZenModeSettings extends SettingsPreferenceFragment implements Index } mMessages.setChecked(mConfig.allowMessages); mStarred.setSelectedValue(mConfig.allowFrom); - mWhen.setSelectedValue(mConfig.sleepMode); + updateDays(); mStart.setTime(mConfig.sleepStartHour, mConfig.sleepStartMinute); mEnd.setTime(mConfig.sleepEndHour, mConfig.sleepEndMinute); mDisableListeners = false; @@ -398,7 +430,6 @@ public class ZenModeSettings extends SettingsPreferenceFragment implements Index public void onResume() { super.onResume(); updateControls(); - updateZenMode(); mSettingsObserver.register(); } @@ -408,22 +439,6 @@ public class ZenModeSettings extends SettingsPreferenceFragment implements Index mSettingsObserver.unregister(); } - @Override - public void onDestroyView() { - super.onDestroyView(); - mSwitchBar.removeOnSwitchChangeListener(this); - mSwitchBar.hide(); - } - - private void updateZenMode() { - final boolean zenMode = Global.getInt(getContentResolver(), - Global.ZEN_MODE, Global.ZEN_MODE_OFF) != Global.ZEN_MODE_OFF; - if (mSwitchBar.isChecked() != zenMode) { - mSwitchBar.setChecked(zenMode); - mIgnoreNext = true; - } - } - private void updateZenModeConfig() { final ZenModeConfig config = getZenModeConfig(); if (Objects.equals(config, mConfig)) return; @@ -468,38 +483,6 @@ public class ZenModeSettings extends SettingsPreferenceFragment implements Index return new ZenModeConditionSelection(mContext); } - private final Runnable mHideDialog = new Runnable() { - @Override - public void run() { - if (mDialog != null) { - mDialog.dismiss(); - mDialog = null; - } - } - }; - - private final Runnable mShowDialog = new Runnable() { - @Override - public void run() { - mDialog = new AlertDialog.Builder(mContext) - .setTitle(R.string.zen_mode_settings_title) - .setView(newConditionSelection()) - .setNegativeButton(R.string.dlg_cancel, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - putZenModeSetting(Global.ZEN_MODE_OFF); - } - }) - .setPositiveButton(R.string.dlg_ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - // noop - } - }) - .show(); - } - }; - // Enable indexing of searchable data public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = new BaseSearchIndexProvider() { @@ -549,7 +532,7 @@ public class ZenModeSettings extends SettingsPreferenceFragment implements Index public void onChange(boolean selfChange, Uri uri) { super.onChange(selfChange, uri); if (ZEN_MODE_URI.equals(uri)) { - updateZenMode(); + PREF_ZEN_MODE.update(mContext); } if (ZEN_MODE_CONFIG_ETAG_URI.equals(uri)) { updateZenModeConfig(); diff --git a/src/com/android/settings/search/Ranking.java b/src/com/android/settings/search/Ranking.java index d8f69c3..8115cb5 100644 --- a/src/com/android/settings/search/Ranking.java +++ b/src/com/android/settings/search/Ranking.java @@ -36,7 +36,6 @@ import com.android.settings.fuelgauge.PowerUsageSummary; import com.android.settings.inputmethod.InputMethodAndLanguageSettings; import com.android.settings.location.LocationSettings; import com.android.settings.net.DataUsageMeteredSettings; -import com.android.settings.notification.NotificationDisplaySettings; import com.android.settings.notification.NotificationSettings; import com.android.settings.notification.OtherSoundSettings; import com.android.settings.notification.ZenModeSettings; @@ -108,7 +107,6 @@ public final class Ranking { // Notifications sRankMap.put(NotificationSettings.class.getName(), RANK_NOTIFICATIONS); - sRankMap.put(NotificationDisplaySettings.class.getName(), RANK_NOTIFICATIONS); sRankMap.put(OtherSoundSettings.class.getName(), RANK_NOTIFICATIONS); sRankMap.put(ZenModeSettings.class.getName(), RANK_NOTIFICATIONS); diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java index 6d43f97..e78d9b8 100644 --- a/src/com/android/settings/search/SearchIndexableResources.java +++ b/src/com/android/settings/search/SearchIndexableResources.java @@ -39,7 +39,6 @@ import com.android.settings.fuelgauge.PowerUsageSummary; import com.android.settings.inputmethod.InputMethodAndLanguageSettings; import com.android.settings.location.LocationSettings; import com.android.settings.net.DataUsageMeteredSettings; -import com.android.settings.notification.NotificationDisplaySettings; import com.android.settings.notification.NotificationSettings; import com.android.settings.notification.OtherSoundSettings; import com.android.settings.notification.ZenModeSettings; @@ -129,13 +128,6 @@ public final class SearchIndexableResources { NotificationSettings.class.getName(), R.drawable.ic_settings_notifications)); - sResMap.put(NotificationDisplaySettings.class.getName(), - new SearchIndexableResource( - Ranking.getRankForClassName(NotificationDisplaySettings.class.getName()), - R.xml.notification_display_settings, - NotificationDisplaySettings.class.getName(), - R.drawable.ic_settings_notifications)); - sResMap.put(OtherSoundSettings.class.getName(), new SearchIndexableResource( Ranking.getRankForClassName(OtherSoundSettings.class.getName()), |