Restrict notification preferences for suspended apps

Bug: 26856390
Bug: 22776761
Change-Id: I7f03b8b95af93db66f12c5ac1cbf490b4ae0e73c
This commit is contained in:
Andrei Stingaceanu
2016-02-01 15:40:53 +00:00
parent eb3b52d411
commit da49313845
5 changed files with 30 additions and 19 deletions

View File

@@ -20,7 +20,7 @@
<!-- Apps without topics --> <!-- Apps without topics -->
<!-- Importance --> <!-- Importance -->
<Preference <com.android.settingslib.RestrictedPreference
android:key="importance_title" android:key="importance_title"
android:title="@string/notification_importance_title" android:title="@string/notification_importance_title"
android:order="2" /> android:order="2" />

View File

@@ -19,7 +19,7 @@
android:key="topic_notification_settings"> android:key="topic_notification_settings">
<!-- Importance --> <!-- Importance -->
<Preference <com.android.settingslib.RestrictedPreference
android:key="importance_title" android:key="importance_title"
android:title="@string/notification_importance_title" android:title="@string/notification_importance_title"
android:order="1" /> android:order="1" />

View File

@@ -83,7 +83,7 @@ public class AppNotificationSettings extends NotificationSettingsBase {
mBlock = (RestrictedSwitchPreference) findPreference(KEY_BLOCK); mBlock = (RestrictedSwitchPreference) findPreference(KEY_BLOCK);
mImportance = (ImportanceSeekBarPreference) findPreference(KEY_IMPORTANCE); mImportance = (ImportanceSeekBarPreference) findPreference(KEY_IMPORTANCE);
mImportanceReset = (LayoutPreference) findPreference(KEY_IMPORTANCE_RESET); mImportanceReset = (LayoutPreference) findPreference(KEY_IMPORTANCE_RESET);
mImportanceTitle = findPreference(KEY_IMPORTANCE_TITLE); mImportanceTitle = (RestrictedPreference) findPreference(KEY_IMPORTANCE_TITLE);
mPriority = mPriority =
(RestrictedSwitchPreference) getPreferenceScreen().findPreference(KEY_BYPASS_DND); (RestrictedSwitchPreference) getPreferenceScreen().findPreference(KEY_BYPASS_DND);
mSensitive = mSensitive =
@@ -108,8 +108,7 @@ public class AppNotificationSettings extends NotificationSettingsBase {
setupBlockSwitch(); setupBlockSwitch();
for (Notification.Topic topic : topics) { for (Notification.Topic topic : topics) {
RestrictedPreference topicPreference = new RestrictedPreference(getPrefContext()); RestrictedPreference topicPreference = new RestrictedPreference(getPrefContext());
topicPreference.setDisabledByAdmin( topicPreference.setDisabledByAdmin(mSuspendedAppsAdmin);
RestrictedLockUtils.checkIfApplicationIsSuspended(mContext, mPkg, mUserId));
topicPreference.setKey(topic.getId()); topicPreference.setKey(topic.getId());
topicPreference.setTitle(topic.getLabel()); topicPreference.setTitle(topic.getLabel());
// Create intent for this preference. // Create intent for this preference.
@@ -153,8 +152,7 @@ public class AppNotificationSettings extends NotificationSettingsBase {
} }
private void setupBlockSwitch() { private void setupBlockSwitch() {
mBlock.setDisabledByAdmin( mBlock.setDisabledByAdmin(mSuspendedAppsAdmin);
RestrictedLockUtils.checkIfApplicationIsSuspended(mContext, mPkg, mUserId));
mBlock.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { mBlock.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override @Override
public boolean onPreferenceChange(Preference preference, Object newValue) { public boolean onPreferenceChange(Preference preference, Object newValue) {

View File

@@ -20,6 +20,7 @@ import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment; import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.applications.AppInfoBase; import com.android.settings.applications.AppInfoBase;
import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedPreference;
import com.android.settingslib.RestrictedSwitchPreference; import com.android.settingslib.RestrictedSwitchPreference;
import com.android.settings.applications.LayoutPreference; import com.android.settings.applications.LayoutPreference;
@@ -65,10 +66,11 @@ abstract public class NotificationSettingsBase extends SettingsPreferenceFragmen
protected PackageInfo mPkgInfo; protected PackageInfo mPkgInfo;
protected Notification.Topic mTopic; protected Notification.Topic mTopic;
protected ImportanceSeekBarPreference mImportance; protected ImportanceSeekBarPreference mImportance;
protected Preference mImportanceTitle; protected RestrictedPreference mImportanceTitle;
protected LayoutPreference mImportanceReset; protected LayoutPreference mImportanceReset;
protected RestrictedSwitchPreference mPriority; protected RestrictedSwitchPreference mPriority;
protected RestrictedSwitchPreference mSensitive; protected RestrictedSwitchPreference mSensitive;
protected EnforcedAdmin mSuspendedAppsAdmin;
@Override @Override
public void onActivityCreated(Bundle savedInstanceState) { public void onActivityCreated(Bundle savedInstanceState) {
@@ -126,6 +128,9 @@ abstract public class NotificationSettingsBase extends SettingsPreferenceFragmen
// Will be null for app wide settings. // Will be null for app wide settings.
mTopic = args != null && args.containsKey(ARG_TOPIC) mTopic = args != null && args.containsKey(ARG_TOPIC)
? (Notification.Topic) args.getParcelable(ARG_TOPIC) : null; ? (Notification.Topic) args.getParcelable(ARG_TOPIC) : null;
mSuspendedAppsAdmin = RestrictedLockUtils.checkIfApplicationIsSuspended(
mContext, mPkg, mUserId);
} }
@Override @Override
@@ -136,22 +141,25 @@ abstract public class NotificationSettingsBase extends SettingsPreferenceFragmen
finish(); finish();
return; return;
} }
EnforcedAdmin admin = RestrictedLockUtils.checkIfApplicationIsSuspended( mSuspendedAppsAdmin = RestrictedLockUtils.checkIfApplicationIsSuspended(
mContext, mPkg, mUserId); mContext, mPkg, mUserId);
if (mImportance != null) { if (mImportance != null) {
mImportance.setDisabledByAdmin(admin); mImportance.setDisabledByAdmin(mSuspendedAppsAdmin);
} }
if (mPriority != null) { if (mPriority != null) {
mPriority.setDisabledByAdmin(admin); mPriority.setDisabledByAdmin(mSuspendedAppsAdmin);
} }
if (mSensitive != null) { if (mSensitive != null) {
mSensitive.setDisabledByAdmin(admin); mSensitive.setDisabledByAdmin(mSuspendedAppsAdmin);
}
if (mImportanceTitle != null) {
mImportanceTitle.setDisabledByAdmin(mSuspendedAppsAdmin);
} }
} }
protected void setupImportancePrefs(boolean isSystemApp, int importance) { protected void setupImportancePrefs(boolean isSystemApp, int importance) {
mImportance.setDisabledByAdmin( mImportance.setDisabledByAdmin(mSuspendedAppsAdmin);
RestrictedLockUtils.checkIfApplicationIsSuspended(mContext, mPkg, mUserId)); mImportanceTitle.setDisabledByAdmin(mSuspendedAppsAdmin);
if (importance == Ranking.IMPORTANCE_UNSPECIFIED) { if (importance == Ranking.IMPORTANCE_UNSPECIFIED) {
mImportance.setVisible(false); mImportance.setVisible(false);
mImportanceReset.setVisible(false); mImportanceReset.setVisible(false);
@@ -180,6 +188,12 @@ abstract public class NotificationSettingsBase extends SettingsPreferenceFragmen
button.setOnClickListener(new View.OnClickListener() { button.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
if (mSuspendedAppsAdmin != null) {
RestrictedLockUtils.sendShowAdminSupportDetailsIntent(
getActivity(), mSuspendedAppsAdmin);
return;
}
mBackend.setImportance(mPkg, mUid, mTopic, Ranking.IMPORTANCE_UNSPECIFIED); mBackend.setImportance(mPkg, mUid, mTopic, Ranking.IMPORTANCE_UNSPECIFIED);
mImportanceReset.setVisible(false); mImportanceReset.setVisible(false);
mImportance.setVisible(false); mImportance.setVisible(false);
@@ -211,8 +225,7 @@ abstract public class NotificationSettingsBase extends SettingsPreferenceFragmen
} }
protected void setupPriorityPref(boolean priority) { protected void setupPriorityPref(boolean priority) {
mPriority.setDisabledByAdmin( mPriority.setDisabledByAdmin(mSuspendedAppsAdmin);
RestrictedLockUtils.checkIfApplicationIsSuspended(mContext, mPkg, mUserId));
mPriority.setChecked(priority); mPriority.setChecked(priority);
mPriority.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { mPriority.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override @Override
@@ -224,8 +237,7 @@ abstract public class NotificationSettingsBase extends SettingsPreferenceFragmen
} }
protected void setupSensitivePref(boolean sensitive) { protected void setupSensitivePref(boolean sensitive) {
mSensitive.setDisabledByAdmin( mSensitive.setDisabledByAdmin(mSuspendedAppsAdmin);
RestrictedLockUtils.checkIfApplicationIsSuspended(mContext, mPkg, mUserId));
mSensitive.setChecked(sensitive); mSensitive.setChecked(sensitive);
mSensitive.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { mSensitive.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override @Override

View File

@@ -22,6 +22,7 @@ import com.android.settings.AppHeader;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.applications.LayoutPreference; import com.android.settings.applications.LayoutPreference;
import com.android.settings.notification.NotificationBackend.TopicRow; import com.android.settings.notification.NotificationBackend.TopicRow;
import com.android.settingslib.RestrictedPreference;
import com.android.settingslib.RestrictedSwitchPreference; import com.android.settingslib.RestrictedSwitchPreference;
import android.app.NotificationManager; import android.app.NotificationManager;
@@ -67,7 +68,7 @@ public class TopicNotificationSettings extends NotificationSettingsBase {
mImportance = (ImportanceSeekBarPreference) findPreference(KEY_IMPORTANCE); mImportance = (ImportanceSeekBarPreference) findPreference(KEY_IMPORTANCE);
mImportanceReset = (LayoutPreference) findPreference(KEY_IMPORTANCE_RESET); mImportanceReset = (LayoutPreference) findPreference(KEY_IMPORTANCE_RESET);
mImportanceTitle = findPreference(KEY_IMPORTANCE_TITLE); mImportanceTitle = (RestrictedPreference) findPreference(KEY_IMPORTANCE_TITLE);
mPriority = (RestrictedSwitchPreference) findPreference(KEY_BYPASS_DND); mPriority = (RestrictedSwitchPreference) findPreference(KEY_BYPASS_DND);
mSensitive = (RestrictedSwitchPreference) findPreference(KEY_SENSITIVE); mSensitive = (RestrictedSwitchPreference) findPreference(KEY_SENSITIVE);