diff options
-rw-r--r-- | res/values/cm_arrays.xml | 21 | ||||
-rw-r--r-- | res/values/cm_strings.xml | 11 | ||||
-rw-r--r-- | res/xml/app_notification_settings.xml | 10 | ||||
-rw-r--r-- | src/com/android/settings/notification/AppNotificationSettings.java | 37 | ||||
-rw-r--r-- | src/com/android/settings/notification/NotificationBackend.java | 21 |
5 files changed, 99 insertions, 1 deletions
diff --git a/res/values/cm_arrays.xml b/res/values/cm_arrays.xml index 35b2bf7..57375d9 100644 --- a/res/values/cm_arrays.xml +++ b/res/values/cm_arrays.xml @@ -589,4 +589,25 @@ <item>@string/security_settings_fingerprint_sensor_location_right</item> </string-array> + <!-- Display settings. The delay in inactivity before the screen is turned off. These are shown in a list dialog. --> + <string-array name="app_notification_sound_timeout_entries" translatable="false"> + <item>@string/app_notification_sound_timeout_value_none</item> + <item>@string/app_notification_sound_timeout_value_10_seconds</item> + <item>@string/app_notification_sound_timeout_value_30_seconds</item> + <item>@string/app_notification_sound_timeout_value_1_minute</item> + <item>@string/app_notification_sound_timeout_value_5_minutes</item> + <item>@string/app_notification_sound_timeout_value_15_minutes</item> + <item>@string/app_notification_sound_timeout_value_30_minutes</item> + </string-array> + + <!-- Do not translate. --> + <string-array name="app_notification_sound_timeout_values" translatable="false"> + <item>0</item> + <item>10000</item> + <item>30000</item> + <item>60000</item> + <item>300000</item> + <item>900000</item> + <item>1800000</item> + </string-array> </resources> diff --git a/res/values/cm_strings.xml b/res/values/cm_strings.xml index a28a772..4ef248c 100644 --- a/res/values/cm_strings.xml +++ b/res/values/cm_strings.xml @@ -1238,6 +1238,17 @@ <string name="app_notification_no_ongoing_on_keyguard_title">Disable persistent notification on lock screen</string> <string name="app_notification_no_ongoing_on_keyguard_summary">Never show persistent notifications from this app on the lock screen</string> + <!-- Notification sound timeout --> + <string name="app_notification_sound_timeout_title">Minimum time between notification sounds</string> + <string name="app_notification_sound_timeout_summary_template">Allow sounds or vibration no more than once every <xliff:g id="duration">%1$s</xliff:g></string> + <string name="app_notification_sound_timeout_value_none">No restriction</string> + <string name="app_notification_sound_timeout_value_10_seconds">10 seconds</string> + <string name="app_notification_sound_timeout_value_30_seconds">30 seconds</string> + <string name="app_notification_sound_timeout_value_1_minute">1 minute</string> + <string name="app_notification_sound_timeout_value_5_minutes">5 minutes</string> + <string name="app_notification_sound_timeout_value_15_minutes">10 minutes</string> + <string name="app_notification_sound_timeout_value_30_minutes">30 minutes</string> + <!-- CmRadioInfo --> <string name="cm_radio_info_label">Enhanced radio control</string> diff --git a/res/xml/app_notification_settings.xml b/res/xml/app_notification_settings.xml index f438e2f..11057f3 100644 --- a/res/xml/app_notification_settings.xml +++ b/res/xml/app_notification_settings.xml @@ -66,11 +66,19 @@ android:dependency="show_on_keyguard" android:persistent="false" /> + <ListPreference + android:key="sound_timeout" + android:title="@string/app_notification_sound_timeout_title" + android:entries="@array/app_notification_sound_timeout_entries" + android:entryValues="@array/app_notification_sound_timeout_values" + android:order="7" + android:persistent="false" /> + <!-- App notification preferences --> <Preference android:key="app_settings" android:title="@string/app_notification_preferences" - android:order="7" + android:order="8" android:persistent="false" /> </PreferenceScreen> diff --git a/src/com/android/settings/notification/AppNotificationSettings.java b/src/com/android/settings/notification/AppNotificationSettings.java index 22df064..2e76f92 100644 --- a/src/com/android/settings/notification/AppNotificationSettings.java +++ b/src/com/android/settings/notification/AppNotificationSettings.java @@ -27,6 +27,7 @@ import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; import android.os.Bundle; import android.os.UserHandle; +import android.preference.ListPreference; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; import android.preference.Preference.OnPreferenceClickListener; @@ -61,6 +62,7 @@ public class AppNotificationSettings extends SettingsPreferenceFragment { private static final String KEY_APP_SETTINGS = "app_settings"; private static final String KEY_SHOW_ON_KEYGUARD = "show_on_keyguard"; private static final String KEY_NO_ONGOING_ON_KEYGUARD = "no_ongoing_on_keyguard"; + private static final String KEY_SOUND_TIMEOUT = "sound_timeout"; private static final Intent APP_NOTIFICATION_PREFS_CATEGORY_INTENT = new Intent(Intent.ACTION_MAIN) @@ -75,6 +77,7 @@ public class AppNotificationSettings extends SettingsPreferenceFragment { private SwitchPreference mSensitive; private SwitchPreference mShowOnKeyguard; private SwitchPreference mShowNoOngoingOnKeyguard; + private ListPreference mSoundTimeout; private AppRow mAppRow; private boolean mCreated; private boolean mIsSystemPackage; @@ -143,6 +146,7 @@ public class AppNotificationSettings extends SettingsPreferenceFragment { mSensitive = (SwitchPreference) findPreference(KEY_SENSITIVE); mShowOnKeyguard = (SwitchPreference) findPreference(KEY_SHOW_ON_KEYGUARD); mShowNoOngoingOnKeyguard = (SwitchPreference) findPreference(KEY_NO_ONGOING_ON_KEYGUARD); + mSoundTimeout = (ListPreference) findPreference(KEY_SOUND_TIMEOUT); mAppRow = mBackend.loadAppRow(pm, info.applicationInfo); @@ -156,6 +160,8 @@ public class AppNotificationSettings extends SettingsPreferenceFragment { mPriority.setChecked(mAppRow.priority); mPeekable.setChecked(mAppRow.peekable); mSensitive.setChecked(mAppRow.sensitive); + mSoundTimeout.setValue(Long.toString(mAppRow.soundTimeout)); + updateSoundTimeoutSummary(mAppRow.soundTimeout); mBlock.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override @@ -196,6 +202,18 @@ public class AppNotificationSettings extends SettingsPreferenceFragment { } }); + mSoundTimeout.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + long value = Long.valueOf((String) newValue); + if (!mBackend.setNotificationSoundTimeout(pkg, mUid, value)) { + return false; + } + updateSoundTimeoutSummary(value); + return true; + } + }); + if (mAppRow.settingsIntent != null) { findPreference(KEY_APP_SETTINGS).setOnPreferenceClickListener( new OnPreferenceClickListener() { @@ -260,6 +278,25 @@ public class AppNotificationSettings extends SettingsPreferenceFragment { } } + private void updateSoundTimeoutSummary(long value) { + if (value == 0) { + mSoundTimeout.setSummary(R.string.app_notification_sound_timeout_value_none); + } else { + final CharSequence[] entries = mSoundTimeout.getEntries(); + final CharSequence[] values = mSoundTimeout.getEntryValues(); + CharSequence summary = null; + for (int i = 0; i < values.length; i++) { + long timeout = Long.parseLong(values[i].toString()); + if (timeout == value) { + summary = getString(R.string.app_notification_sound_timeout_summary_template, + entries[i]); + break; + } + } + mSoundTimeout.setSummary(summary); + } + } + private void updateDependents(boolean banned) { final boolean lockscreenSecure = new LockPatternUtils(getActivity()).isSecure( UserHandle.myUserId()); diff --git a/src/com/android/settings/notification/NotificationBackend.java b/src/com/android/settings/notification/NotificationBackend.java index 5467cb3..ae83179 100644 --- a/src/com/android/settings/notification/NotificationBackend.java +++ b/src/com/android/settings/notification/NotificationBackend.java @@ -47,6 +47,7 @@ public class NotificationBackend { row.priority = getHighPriority(row.pkg, row.uid); row.peekable = getPeekable(row.pkg, row.uid); row.sensitive = getSensitive(row.pkg, row.uid); + row.soundTimeout = getNotificationSoundTimeout(row.pkg, row.uid); return row; } @@ -149,6 +150,25 @@ public class NotificationBackend { } } + public long getNotificationSoundTimeout(String pkg, int uid) { + try { + return sINM.getPackageNotificationSoundTimeout(pkg, uid); + } catch (Exception e) { + Log.w(TAG, "Error calling NoMan", e); + return 0; + } + } + + public boolean setNotificationSoundTimeout(String pkg, int uid, long timeout) { + try { + sINM.setPackageNotificationSoundTimeout(pkg, uid, timeout); + return true; + } catch (Exception e) { + Log.w(TAG, "Error calling NoMan", e); + return false; + } + } + static class Row { public String section; } @@ -164,6 +184,7 @@ public class NotificationBackend { public boolean peekable; public boolean sensitive; public boolean first; // first app in section + public long soundTimeout; } } |