summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--res/values/cm_arrays.xml21
-rw-r--r--res/values/cm_strings.xml11
-rw-r--r--res/xml/app_notification_settings.xml10
-rw-r--r--src/com/android/settings/notification/AppNotificationSettings.java37
-rw-r--r--src/com/android/settings/notification/NotificationBackend.java21
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;
}
}