From da4931384520541cf92b56eba4cfdff744691475 Mon Sep 17 00:00:00 2001 From: Andrei Stingaceanu Date: Mon, 1 Feb 2016 15:40:53 +0000 Subject: [PATCH] Restrict notification preferences for suspended apps Bug: 26856390 Bug: 22776761 Change-Id: I7f03b8b95af93db66f12c5ac1cbf490b4ae0e73c --- res/xml/app_notification_settings.xml | 2 +- res/xml/topic_notification_settings.xml | 2 +- .../notification/AppNotificationSettings.java | 8 ++--- .../NotificationSettingsBase.java | 34 +++++++++++++------ .../TopicNotificationSettings.java | 3 +- 5 files changed, 30 insertions(+), 19 deletions(-) diff --git a/res/xml/app_notification_settings.xml b/res/xml/app_notification_settings.xml index a60eafc8f86..b98c6b204c2 100644 --- a/res/xml/app_notification_settings.xml +++ b/res/xml/app_notification_settings.xml @@ -20,7 +20,7 @@ - diff --git a/res/xml/topic_notification_settings.xml b/res/xml/topic_notification_settings.xml index 2f155008148..ca41276e638 100644 --- a/res/xml/topic_notification_settings.xml +++ b/res/xml/topic_notification_settings.xml @@ -19,7 +19,7 @@ android:key="topic_notification_settings"> - diff --git a/src/com/android/settings/notification/AppNotificationSettings.java b/src/com/android/settings/notification/AppNotificationSettings.java index ccb1216640f..b3b15af281c 100644 --- a/src/com/android/settings/notification/AppNotificationSettings.java +++ b/src/com/android/settings/notification/AppNotificationSettings.java @@ -83,7 +83,7 @@ public class AppNotificationSettings extends NotificationSettingsBase { mBlock = (RestrictedSwitchPreference) findPreference(KEY_BLOCK); mImportance = (ImportanceSeekBarPreference) findPreference(KEY_IMPORTANCE); mImportanceReset = (LayoutPreference) findPreference(KEY_IMPORTANCE_RESET); - mImportanceTitle = findPreference(KEY_IMPORTANCE_TITLE); + mImportanceTitle = (RestrictedPreference) findPreference(KEY_IMPORTANCE_TITLE); mPriority = (RestrictedSwitchPreference) getPreferenceScreen().findPreference(KEY_BYPASS_DND); mSensitive = @@ -108,8 +108,7 @@ public class AppNotificationSettings extends NotificationSettingsBase { setupBlockSwitch(); for (Notification.Topic topic : topics) { RestrictedPreference topicPreference = new RestrictedPreference(getPrefContext()); - topicPreference.setDisabledByAdmin( - RestrictedLockUtils.checkIfApplicationIsSuspended(mContext, mPkg, mUserId)); + topicPreference.setDisabledByAdmin(mSuspendedAppsAdmin); topicPreference.setKey(topic.getId()); topicPreference.setTitle(topic.getLabel()); // Create intent for this preference. @@ -153,8 +152,7 @@ public class AppNotificationSettings extends NotificationSettingsBase { } private void setupBlockSwitch() { - mBlock.setDisabledByAdmin( - RestrictedLockUtils.checkIfApplicationIsSuspended(mContext, mPkg, mUserId)); + mBlock.setDisabledByAdmin(mSuspendedAppsAdmin); mBlock.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { diff --git a/src/com/android/settings/notification/NotificationSettingsBase.java b/src/com/android/settings/notification/NotificationSettingsBase.java index 740f8c1ba77..7f7dfd5648a 100644 --- a/src/com/android/settings/notification/NotificationSettingsBase.java +++ b/src/com/android/settings/notification/NotificationSettingsBase.java @@ -20,6 +20,7 @@ import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.applications.AppInfoBase; import com.android.settingslib.RestrictedLockUtils; +import com.android.settingslib.RestrictedPreference; import com.android.settingslib.RestrictedSwitchPreference; import com.android.settings.applications.LayoutPreference; @@ -65,10 +66,11 @@ abstract public class NotificationSettingsBase extends SettingsPreferenceFragmen protected PackageInfo mPkgInfo; protected Notification.Topic mTopic; protected ImportanceSeekBarPreference mImportance; - protected Preference mImportanceTitle; + protected RestrictedPreference mImportanceTitle; protected LayoutPreference mImportanceReset; protected RestrictedSwitchPreference mPriority; protected RestrictedSwitchPreference mSensitive; + protected EnforcedAdmin mSuspendedAppsAdmin; @Override public void onActivityCreated(Bundle savedInstanceState) { @@ -126,6 +128,9 @@ abstract public class NotificationSettingsBase extends SettingsPreferenceFragmen // Will be null for app wide settings. mTopic = args != null && args.containsKey(ARG_TOPIC) ? (Notification.Topic) args.getParcelable(ARG_TOPIC) : null; + + mSuspendedAppsAdmin = RestrictedLockUtils.checkIfApplicationIsSuspended( + mContext, mPkg, mUserId); } @Override @@ -136,22 +141,25 @@ abstract public class NotificationSettingsBase extends SettingsPreferenceFragmen finish(); return; } - EnforcedAdmin admin = RestrictedLockUtils.checkIfApplicationIsSuspended( + mSuspendedAppsAdmin = RestrictedLockUtils.checkIfApplicationIsSuspended( mContext, mPkg, mUserId); if (mImportance != null) { - mImportance.setDisabledByAdmin(admin); + mImportance.setDisabledByAdmin(mSuspendedAppsAdmin); } if (mPriority != null) { - mPriority.setDisabledByAdmin(admin); + mPriority.setDisabledByAdmin(mSuspendedAppsAdmin); } if (mSensitive != null) { - mSensitive.setDisabledByAdmin(admin); + mSensitive.setDisabledByAdmin(mSuspendedAppsAdmin); + } + if (mImportanceTitle != null) { + mImportanceTitle.setDisabledByAdmin(mSuspendedAppsAdmin); } } protected void setupImportancePrefs(boolean isSystemApp, int importance) { - mImportance.setDisabledByAdmin( - RestrictedLockUtils.checkIfApplicationIsSuspended(mContext, mPkg, mUserId)); + mImportance.setDisabledByAdmin(mSuspendedAppsAdmin); + mImportanceTitle.setDisabledByAdmin(mSuspendedAppsAdmin); if (importance == Ranking.IMPORTANCE_UNSPECIFIED) { mImportance.setVisible(false); mImportanceReset.setVisible(false); @@ -180,6 +188,12 @@ abstract public class NotificationSettingsBase extends SettingsPreferenceFragmen button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { + if (mSuspendedAppsAdmin != null) { + RestrictedLockUtils.sendShowAdminSupportDetailsIntent( + getActivity(), mSuspendedAppsAdmin); + return; + } + mBackend.setImportance(mPkg, mUid, mTopic, Ranking.IMPORTANCE_UNSPECIFIED); mImportanceReset.setVisible(false); mImportance.setVisible(false); @@ -211,8 +225,7 @@ abstract public class NotificationSettingsBase extends SettingsPreferenceFragmen } protected void setupPriorityPref(boolean priority) { - mPriority.setDisabledByAdmin( - RestrictedLockUtils.checkIfApplicationIsSuspended(mContext, mPkg, mUserId)); + mPriority.setDisabledByAdmin(mSuspendedAppsAdmin); mPriority.setChecked(priority); mPriority.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override @@ -224,8 +237,7 @@ abstract public class NotificationSettingsBase extends SettingsPreferenceFragmen } protected void setupSensitivePref(boolean sensitive) { - mSensitive.setDisabledByAdmin( - RestrictedLockUtils.checkIfApplicationIsSuspended(mContext, mPkg, mUserId)); + mSensitive.setDisabledByAdmin(mSuspendedAppsAdmin); mSensitive.setChecked(sensitive); mSensitive.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override diff --git a/src/com/android/settings/notification/TopicNotificationSettings.java b/src/com/android/settings/notification/TopicNotificationSettings.java index bbbcadef641..c1df2de66d4 100644 --- a/src/com/android/settings/notification/TopicNotificationSettings.java +++ b/src/com/android/settings/notification/TopicNotificationSettings.java @@ -22,6 +22,7 @@ import com.android.settings.AppHeader; import com.android.settings.R; import com.android.settings.applications.LayoutPreference; import com.android.settings.notification.NotificationBackend.TopicRow; +import com.android.settingslib.RestrictedPreference; import com.android.settingslib.RestrictedSwitchPreference; import android.app.NotificationManager; @@ -67,7 +68,7 @@ public class TopicNotificationSettings extends NotificationSettingsBase { mImportance = (ImportanceSeekBarPreference) findPreference(KEY_IMPORTANCE); mImportanceReset = (LayoutPreference) findPreference(KEY_IMPORTANCE_RESET); - mImportanceTitle = findPreference(KEY_IMPORTANCE_TITLE); + mImportanceTitle = (RestrictedPreference) findPreference(KEY_IMPORTANCE_TITLE); mPriority = (RestrictedSwitchPreference) findPreference(KEY_BYPASS_DND); mSensitive = (RestrictedSwitchPreference) findPreference(KEY_SENSITIVE);