From 33710fd9e2893d2b7650f40006348319960a8318 Mon Sep 17 00:00:00 2001 From: Julia Reynolds Date: Wed, 10 Aug 2022 17:40:20 +0000 Subject: [PATCH] Revert^2 "Improve App notification loading" c5f1cb11e0c895e1b62f8f3a0074cf30cfc7c4a8 Change-Id: I5a6d39e0a5f2b7bd30bcc12e207b8bb23857c6d8 --- .../AppBubbleListPreferenceController.java | 14 +-- .../AddToHomeScreenPreferenceController.java | 10 +- .../app/AllowSoundPreferenceController.java | 13 ++- ...nnelsBypassingDndPreferenceController.java | 6 +- ...pConversationListPreferenceController.java | 22 +++-- .../app/AppLinkPreferenceController.java | 10 +- .../app/BadgePreferenceController.java | 22 +++-- .../app/BlockPreferenceController.java | 10 +- .../BubbleCategoryPreferenceController.java | 10 +- .../app/BubbleLinkPreferenceController.java | 10 +- .../app/BubblePreferenceController.java | 19 ++-- .../BubbleSummaryPreferenceController.java | 21 +++-- .../app/ChannelListPreferenceController.java | 47 +++++----- ...onversationDemotePreferenceController.java | 15 +-- ...onversationHeaderPreferenceController.java | 6 +- ...versationPriorityPreferenceController.java | 12 +-- ...nversationPromotePreferenceController.java | 15 +-- .../DeletedChannelsPreferenceController.java | 15 +-- .../app/DescriptionPreferenceController.java | 16 ++-- .../app/DndPreferenceController.java | 10 +- .../app/HeaderPreferenceController.java | 6 +- .../HighImportancePreferenceController.java | 16 ++-- .../app/ImportancePreferenceController.java | 12 +-- ...dConversationInfoPreferenceController.java | 14 +-- ...validConversationPreferenceController.java | 14 +-- .../app/LightsPreferenceController.java | 18 ++-- .../MinImportancePreferenceController.java | 14 +-- .../app/NotificationPreferenceController.java | 33 ++++--- .../app/NotificationSettings.java | 94 +++++++++---------- .../NotificationsOffPreferenceController.java | 14 ++- .../app/SoundPreferenceController.java | 15 +-- .../app/VibrationPreferenceController.java | 19 ++-- .../app/VisibilityPreferenceController.java | 16 ++-- .../NotificationPreferenceControllerTest.java | 2 +- 34 files changed, 318 insertions(+), 272 deletions(-) diff --git a/src/com/android/settings/notification/AppBubbleListPreferenceController.java b/src/com/android/settings/notification/AppBubbleListPreferenceController.java index bf7fcc03756..6ebb376b5c1 100644 --- a/src/com/android/settings/notification/AppBubbleListPreferenceController.java +++ b/src/com/android/settings/notification/AppBubbleListPreferenceController.java @@ -51,7 +51,7 @@ public class AppBubbleListPreferenceController extends AppConversationListPrefer private static final String KEY = "bubble_conversations"; public AppBubbleListPreferenceController(Context context, NotificationBackend backend) { - super(context, backend); + super(context, backend, KEY); } @Override @@ -80,25 +80,25 @@ public class AppBubbleListPreferenceController extends AppConversationListPrefer } @Override - public boolean isAvailable() { + public int getAvailabilityStatus() { // copy rather than inherit super's isAvailable because apps can link to this page // as part of onboarding, before they send a valid conversation notification if (mAppRow == null) { - return false; + return CONDITIONALLY_UNAVAILABLE; } if (mAppRow.banned) { - return false; + return CONDITIONALLY_UNAVAILABLE; } if (mChannel != null) { if (mBackend.onlyHasDefaultChannel(mAppRow.pkg, mAppRow.uid) || NotificationChannel.DEFAULT_CHANNEL_ID.equals(mChannel.getId())) { - return false; + return CONDITIONALLY_UNAVAILABLE; } } if (mAppRow.bubblePreference == BUBBLE_PREFERENCE_NONE) { - return false; + return CONDITIONALLY_UNAVAILABLE; } - return true; + return AVAILABLE; } @VisibleForTesting diff --git a/src/com/android/settings/notification/app/AddToHomeScreenPreferenceController.java b/src/com/android/settings/notification/app/AddToHomeScreenPreferenceController.java index e5afd9d3db0..12b807534f9 100644 --- a/src/com/android/settings/notification/app/AddToHomeScreenPreferenceController.java +++ b/src/com/android/settings/notification/app/AddToHomeScreenPreferenceController.java @@ -32,7 +32,7 @@ public class AddToHomeScreenPreferenceController extends NotificationPreferenceC private static final String KEY = "add_to_home"; public AddToHomeScreenPreferenceController(Context context, NotificationBackend backend) { - super(context, backend); + super(context, backend, KEY); } @Override @@ -41,11 +41,11 @@ public class AddToHomeScreenPreferenceController extends NotificationPreferenceC } @Override - public boolean isAvailable() { - if (!super.isAvailable()) { - return false; + public int getAvailabilityStatus() { + if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) { + return CONDITIONALLY_UNAVAILABLE; } - return mConversationInfo != null; + return mConversationInfo != null ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } @Override diff --git a/src/com/android/settings/notification/app/AllowSoundPreferenceController.java b/src/com/android/settings/notification/app/AllowSoundPreferenceController.java index 0664c544bec..99d08734c96 100644 --- a/src/com/android/settings/notification/app/AllowSoundPreferenceController.java +++ b/src/com/android/settings/notification/app/AllowSoundPreferenceController.java @@ -40,7 +40,7 @@ public class AllowSoundPreferenceController extends NotificationPreferenceContro public AllowSoundPreferenceController(Context context, NotificationSettings.DependentFieldListener dependentFieldListener, NotificationBackend backend) { - super(context, backend); + super(context, backend, KEY_IMPORTANCE); mDependentFieldListener = dependentFieldListener; } @@ -50,11 +50,14 @@ public class AllowSoundPreferenceController extends NotificationPreferenceContro } @Override - public boolean isAvailable() { - if (!super.isAvailable()) { - return false; + public int getAvailabilityStatus() { + if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) { + return CONDITIONALLY_UNAVAILABLE; } - return mChannel != null && NotificationChannel.DEFAULT_CHANNEL_ID.equals(mChannel.getId()); + if (mChannel != null && NotificationChannel.DEFAULT_CHANNEL_ID.equals(mChannel.getId())) { + return AVAILABLE; + } + return CONDITIONALLY_UNAVAILABLE; } diff --git a/src/com/android/settings/notification/app/AppChannelsBypassingDndPreferenceController.java b/src/com/android/settings/notification/app/AppChannelsBypassingDndPreferenceController.java index 92cd911843a..6c2c0c3cf77 100644 --- a/src/com/android/settings/notification/app/AppChannelsBypassingDndPreferenceController.java +++ b/src/com/android/settings/notification/app/AppChannelsBypassingDndPreferenceController.java @@ -64,7 +64,7 @@ public class AppChannelsBypassingDndPreferenceController extends NotificationPre public AppChannelsBypassingDndPreferenceController( Context context, NotificationBackend backend) { - super(context, backend); + super(context, backend, KEY); } @Override @@ -110,8 +110,8 @@ public class AppChannelsBypassingDndPreferenceController extends NotificationPre } @Override - public boolean isAvailable() { - return mAppRow != null; + public int getAvailabilityStatus() { + return mAppRow != null ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } @Override diff --git a/src/com/android/settings/notification/app/AppConversationListPreferenceController.java b/src/com/android/settings/notification/app/AppConversationListPreferenceController.java index dd44a13f7c8..e7b23788968 100644 --- a/src/com/android/settings/notification/app/AppConversationListPreferenceController.java +++ b/src/com/android/settings/notification/app/AppConversationListPreferenceController.java @@ -49,7 +49,12 @@ public class AppConversationListPreferenceController extends NotificationPrefere protected PreferenceCategory mPreference; public AppConversationListPreferenceController(Context context, NotificationBackend backend) { - super(context, backend); + this(context, backend, KEY); + } + + public AppConversationListPreferenceController(Context context, NotificationBackend backend, + String key) { + super(context, backend, key); } @Override @@ -58,21 +63,24 @@ public class AppConversationListPreferenceController extends NotificationPrefere } @Override - public boolean isAvailable() { + public int getAvailabilityStatus() { if (mAppRow == null) { - return false; + return CONDITIONALLY_UNAVAILABLE; } if (mAppRow.banned) { - return false; + return CONDITIONALLY_UNAVAILABLE; } if (mChannel != null) { if (mBackend.onlyHasDefaultChannel(mAppRow.pkg, mAppRow.uid) || NotificationChannel.DEFAULT_CHANNEL_ID.equals(mChannel.getId())) { - return false; + return CONDITIONALLY_UNAVAILABLE; } } - return mBackend.hasSentValidMsg(mAppRow.pkg, mAppRow.uid) || mBackend.isInInvalidMsgState( - mAppRow.pkg, mAppRow.uid); + if (mBackend.hasSentValidMsg(mAppRow.pkg, mAppRow.uid) || mBackend.isInInvalidMsgState( + mAppRow.pkg, mAppRow.uid)) { + return AVAILABLE; + } + return CONDITIONALLY_UNAVAILABLE; } @Override diff --git a/src/com/android/settings/notification/app/AppLinkPreferenceController.java b/src/com/android/settings/notification/app/AppLinkPreferenceController.java index 043ae698f54..ecf9670cba9 100644 --- a/src/com/android/settings/notification/app/AppLinkPreferenceController.java +++ b/src/com/android/settings/notification/app/AppLinkPreferenceController.java @@ -32,7 +32,7 @@ public class AppLinkPreferenceController extends NotificationPreferenceControlle private static final String KEY_APP_LINK = "app_link"; public AppLinkPreferenceController(Context context) { - super(context, null); + super(context, null, KEY_APP_LINK); } @Override @@ -41,11 +41,11 @@ public class AppLinkPreferenceController extends NotificationPreferenceControlle } @Override - public boolean isAvailable() { - if (!super.isAvailable()) { - return false; + public int getAvailabilityStatus() { + if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) { + return CONDITIONALLY_UNAVAILABLE; } - return mAppRow.settingsIntent != null; + return mAppRow.settingsIntent != null ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } @Override diff --git a/src/com/android/settings/notification/app/BadgePreferenceController.java b/src/com/android/settings/notification/app/BadgePreferenceController.java index 108fa1d7a07..f94dfb513ae 100644 --- a/src/com/android/settings/notification/app/BadgePreferenceController.java +++ b/src/com/android/settings/notification/app/BadgePreferenceController.java @@ -38,7 +38,7 @@ public class BadgePreferenceController extends NotificationPreferenceController public BadgePreferenceController(Context context, NotificationBackend backend) { - super(context, backend); + super(context, backend, KEY_BADGE); } @Override @@ -47,25 +47,29 @@ public class BadgePreferenceController extends NotificationPreferenceController } @Override - public boolean isAvailable() { - if (!super.isAvailable()) { - return false; + public int getAvailabilityStatus() { + if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) { + return CONDITIONALLY_UNAVAILABLE; } if (mAppRow == null && mChannel == null) { - return false; + return CONDITIONALLY_UNAVAILABLE; } if (Settings.Secure.getInt(mContext.getContentResolver(), NOTIFICATION_BADGING, SYSTEM_WIDE_ON) == SYSTEM_WIDE_OFF) { - return false; + return CONDITIONALLY_UNAVAILABLE; } if (mChannel != null) { if (isDefaultChannel()) { - return true; + return AVAILABLE; } else { - return mAppRow == null ? false : mAppRow.showBadge; + return mAppRow == null + ? CONDITIONALLY_UNAVAILABLE + : mAppRow.showBadge + ? AVAILABLE + : CONDITIONALLY_UNAVAILABLE; } } - return true; + return AVAILABLE; } @Override diff --git a/src/com/android/settings/notification/app/BlockPreferenceController.java b/src/com/android/settings/notification/app/BlockPreferenceController.java index f4e213298a7..ea3eaeb3353 100644 --- a/src/com/android/settings/notification/app/BlockPreferenceController.java +++ b/src/com/android/settings/notification/app/BlockPreferenceController.java @@ -42,7 +42,7 @@ public class BlockPreferenceController extends NotificationPreferenceController public BlockPreferenceController(Context context, NotificationSettings.DependentFieldListener dependentFieldListener, NotificationBackend backend) { - super(context, backend); + super(context, backend, KEY_BLOCK); mDependentFieldListener = dependentFieldListener; } @@ -52,14 +52,14 @@ public class BlockPreferenceController extends NotificationPreferenceController } @Override - public boolean isAvailable() { + public int getAvailabilityStatus() { if (mAppRow == null) { - return false; + return CONDITIONALLY_UNAVAILABLE; } if (mPreferenceFilter != null && !isIncludedInFilter()) { - return false; + return CONDITIONALLY_UNAVAILABLE; } - return true; + return AVAILABLE; } @Override diff --git a/src/com/android/settings/notification/app/BubbleCategoryPreferenceController.java b/src/com/android/settings/notification/app/BubbleCategoryPreferenceController.java index ad3a10cf381..da67afeeb33 100644 --- a/src/com/android/settings/notification/app/BubbleCategoryPreferenceController.java +++ b/src/com/android/settings/notification/app/BubbleCategoryPreferenceController.java @@ -32,15 +32,15 @@ public class BubbleCategoryPreferenceController extends NotificationPreferenceCo static final int ON = 1; public BubbleCategoryPreferenceController(Context context) { - super(context, null); + super(context, null, KEY); } @Override - public boolean isAvailable() { - if (!super.isAvailable()) { - return false; + public int getAvailabilityStatus() { + if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) { + return CONDITIONALLY_UNAVAILABLE; } - return areBubblesEnabled(); + return areBubblesEnabled() ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } @Override diff --git a/src/com/android/settings/notification/app/BubbleLinkPreferenceController.java b/src/com/android/settings/notification/app/BubbleLinkPreferenceController.java index 0b9529b10b5..ed1c9b53079 100644 --- a/src/com/android/settings/notification/app/BubbleLinkPreferenceController.java +++ b/src/com/android/settings/notification/app/BubbleLinkPreferenceController.java @@ -32,15 +32,15 @@ public class BubbleLinkPreferenceController extends NotificationPreferenceContro static final int ON = 1; public BubbleLinkPreferenceController(Context context) { - super(context, null); + super(context, null, KEY); } @Override - public boolean isAvailable() { - if (!super.isAvailable()) { - return false; + public int getAvailabilityStatus() { + if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) { + return CONDITIONALLY_UNAVAILABLE; } - return areBubblesEnabled(); + return areBubblesEnabled() ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } @Override diff --git a/src/com/android/settings/notification/app/BubblePreferenceController.java b/src/com/android/settings/notification/app/BubblePreferenceController.java index 351b4635bb6..516a45e482d 100644 --- a/src/com/android/settings/notification/app/BubblePreferenceController.java +++ b/src/com/android/settings/notification/app/BubblePreferenceController.java @@ -56,7 +56,7 @@ public class BubblePreferenceController extends NotificationPreferenceController public BubblePreferenceController(Context context, @Nullable FragmentManager fragmentManager, NotificationBackend backend, boolean isAppPage, @Nullable NotificationSettings.DependentFieldListener listener) { - super(context, backend); + super(context, backend, KEY); mFragmentManager = fragmentManager; mIsAppPage = isAppPage; mListener = listener; @@ -68,21 +68,24 @@ public class BubblePreferenceController extends NotificationPreferenceController } @Override - public boolean isAvailable() { - if (!super.isAvailable()) { - return false; + public int getAvailabilityStatus() { + if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) { + return CONDITIONALLY_UNAVAILABLE; } if (!mIsAppPage && !isEnabled()) { - return false; + return CONDITIONALLY_UNAVAILABLE; } if (mChannel != null) { if (isDefaultChannel()) { - return true; + return AVAILABLE; } else { - return mAppRow != null && mAppRow.bubblePreference != BUBBLE_PREFERENCE_NONE; + if (mAppRow != null && mAppRow.bubblePreference != BUBBLE_PREFERENCE_NONE) { + return AVAILABLE; + } + return CONDITIONALLY_UNAVAILABLE; } } - return true; + return AVAILABLE; } @Override diff --git a/src/com/android/settings/notification/app/BubbleSummaryPreferenceController.java b/src/com/android/settings/notification/app/BubbleSummaryPreferenceController.java index 51370b16bef..abbe89e6fa8 100644 --- a/src/com/android/settings/notification/app/BubbleSummaryPreferenceController.java +++ b/src/com/android/settings/notification/app/BubbleSummaryPreferenceController.java @@ -42,28 +42,31 @@ public class BubbleSummaryPreferenceController extends NotificationPreferenceCon static final int ON = 1; public BubbleSummaryPreferenceController(Context context, NotificationBackend backend) { - super(context, backend); + super(context, backend, KEY); } @Override - public boolean isAvailable() { - if (!super.isAvailable()) { - return false; + public int getAvailabilityStatus() { + if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) { + return CONDITIONALLY_UNAVAILABLE; } if (mAppRow == null) { - return false; + return CONDITIONALLY_UNAVAILABLE; } if (mChannel != null) { if (!isGloballyEnabled()) { - return false; + return CONDITIONALLY_UNAVAILABLE; } if (isDefaultChannel()) { - return true; + return AVAILABLE; } else { - return mAppRow != null; + return mAppRow != null ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } } - return isGloballyEnabled() && mBackend.hasSentValidBubble(mAppRow.pkg, mAppRow.uid); + if (isGloballyEnabled() && mBackend.hasSentValidBubble(mAppRow.pkg, mAppRow.uid)) { + return AVAILABLE; + } + return CONDITIONALLY_UNAVAILABLE; } @Override diff --git a/src/com/android/settings/notification/app/ChannelListPreferenceController.java b/src/com/android/settings/notification/app/ChannelListPreferenceController.java index 8db3b21f4be..8d079114a9e 100644 --- a/src/com/android/settings/notification/app/ChannelListPreferenceController.java +++ b/src/com/android/settings/notification/app/ChannelListPreferenceController.java @@ -28,6 +28,7 @@ import android.os.AsyncTask; import android.os.Bundle; import android.provider.Settings; import android.text.TextUtils; +import android.util.Slog; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -39,16 +40,19 @@ import androidx.preference.SwitchPreference; import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.applications.AppInfoBase; +import com.android.settings.core.BasePreferenceController; import com.android.settings.core.SubSettingLauncher; import com.android.settings.notification.NotificationBackend; import com.android.settingslib.PrimarySwitchPreference; import com.android.settingslib.RestrictedSwitchPreference; +import com.android.settingslib.utils.ThreadUtils; import java.util.ArrayList; import java.util.Collections; import java.util.List; -public class ChannelListPreferenceController extends NotificationPreferenceController { +public class ChannelListPreferenceController extends NotificationPreferenceController + implements BasePreferenceController.UiBlocker { private static final String KEY = "channels"; private static final String KEY_GENERAL_CATEGORY = "categories"; @@ -59,7 +63,7 @@ public class ChannelListPreferenceController extends NotificationPreferenceContr private PreferenceCategory mPreference; public ChannelListPreferenceController(Context context, NotificationBackend backend) { - super(context, backend); + super(context, backend, KEY); } @Override @@ -68,20 +72,20 @@ public class ChannelListPreferenceController extends NotificationPreferenceContr } @Override - public boolean isAvailable() { + public int getAvailabilityStatus() { if (mAppRow == null) { - return false; + return CONDITIONALLY_UNAVAILABLE; } if (mAppRow.banned) { - return false; + return CONDITIONALLY_UNAVAILABLE; } if (mChannel != null) { if (mBackend.onlyHasDefaultChannel(mAppRow.pkg, mAppRow.uid) || NotificationChannel.DEFAULT_CHANNEL_ID.equals(mChannel.getId())) { - return false; + return CONDITIONALLY_UNAVAILABLE; } } - return true; + return AVAILABLE; } @Override @@ -91,24 +95,17 @@ public class ChannelListPreferenceController extends NotificationPreferenceContr @Override public void updateState(Preference preference) { - mPreference = (PreferenceCategory) preference; - // Load channel settings - new AsyncTask() { - @Override - protected Void doInBackground(Void... unused) { + mPreference = (PreferenceCategory) preference; + // Load channel settings + ThreadUtils.postOnBackgroundThread(() -> { mChannelGroupList = mBackend.getGroups(mAppRow.pkg, mAppRow.uid).getList(); Collections.sort(mChannelGroupList, CHANNEL_GROUP_COMPARATOR); - return null; - } - - @Override - protected void onPostExecute(Void unused) { - if (mContext == null) { - return; - } + ThreadUtils.getUiThreadHandler().getLooper().prepare(); updateFullList(mPreference, mChannelGroupList); - } - }.execute(); + ThreadUtils.postOnMainThread(() -> { + showPreferences(); + }); + }); } /** @@ -144,6 +141,12 @@ public class ChannelListPreferenceController extends NotificationPreferenceContr } } + private void showPreferences() { + if (mUiBlockListener != null) { + mUiBlockListener.onBlockerWorkFinished(this); + } + } + /** * Looks for the category for the given group's key at the expected index, if that doesn't * match, it checks all groups, and if it can't find that group anywhere, it creates it. diff --git a/src/com/android/settings/notification/app/ConversationDemotePreferenceController.java b/src/com/android/settings/notification/app/ConversationDemotePreferenceController.java index 02f639c3157..ba7ca358b8b 100644 --- a/src/com/android/settings/notification/app/ConversationDemotePreferenceController.java +++ b/src/com/android/settings/notification/app/ConversationDemotePreferenceController.java @@ -37,7 +37,7 @@ public class ConversationDemotePreferenceController extends NotificationPreferen public ConversationDemotePreferenceController(Context context, SettingsPreferenceFragment hostFragment, NotificationBackend backend) { - super(context, backend); + super(context, backend, KEY); mHostFragment = hostFragment; } @@ -47,14 +47,17 @@ public class ConversationDemotePreferenceController extends NotificationPreferen } @Override - public boolean isAvailable() { - if (!super.isAvailable()) { - return false; + public int getAvailabilityStatus() { + if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) { + return CONDITIONALLY_UNAVAILABLE; } if (mAppRow == null || mChannel == null) { - return false; + return CONDITIONALLY_UNAVAILABLE; } - return !TextUtils.isEmpty(mChannel.getConversationId()) && !mChannel.isDemoted(); + if (!TextUtils.isEmpty(mChannel.getConversationId()) && !mChannel.isDemoted()) { + return AVAILABLE; + } + return CONDITIONALLY_UNAVAILABLE; } @Override diff --git a/src/com/android/settings/notification/app/ConversationHeaderPreferenceController.java b/src/com/android/settings/notification/app/ConversationHeaderPreferenceController.java index f99a56aabda..56de88b324a 100644 --- a/src/com/android/settings/notification/app/ConversationHeaderPreferenceController.java +++ b/src/com/android/settings/notification/app/ConversationHeaderPreferenceController.java @@ -45,7 +45,7 @@ public class ConversationHeaderPreferenceController extends NotificationPreferen private boolean mStarted = false; public ConversationHeaderPreferenceController(Context context, DashboardFragment fragment) { - super(context, null); + super(context, null, PREF_KEY_APP_HEADER); mFragment = fragment; } @@ -55,8 +55,8 @@ public class ConversationHeaderPreferenceController extends NotificationPreferen } @Override - public boolean isAvailable() { - return mAppRow != null; + public int getAvailabilityStatus() { + return mAppRow != null ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } @Override diff --git a/src/com/android/settings/notification/app/ConversationPriorityPreferenceController.java b/src/com/android/settings/notification/app/ConversationPriorityPreferenceController.java index ae169282484..46bc3c0c840 100644 --- a/src/com/android/settings/notification/app/ConversationPriorityPreferenceController.java +++ b/src/com/android/settings/notification/app/ConversationPriorityPreferenceController.java @@ -34,7 +34,7 @@ public class ConversationPriorityPreferenceController extends NotificationPrefer public ConversationPriorityPreferenceController(Context context, NotificationBackend backend, NotificationSettings.DependentFieldListener listener) { - super(context, backend); + super(context, backend, KEY); mDependentFieldListener = listener; } @@ -44,14 +44,14 @@ public class ConversationPriorityPreferenceController extends NotificationPrefer } @Override - public boolean isAvailable() { - if (!super.isAvailable()) { - return false; + public int getAvailabilityStatus() { + if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) { + return CONDITIONALLY_UNAVAILABLE; } if (mAppRow == null || mChannel == null) { - return false; + return CONDITIONALLY_UNAVAILABLE; } - return true; + return AVAILABLE; } @Override diff --git a/src/com/android/settings/notification/app/ConversationPromotePreferenceController.java b/src/com/android/settings/notification/app/ConversationPromotePreferenceController.java index 24c3d2ff6a1..a5ef569d620 100644 --- a/src/com/android/settings/notification/app/ConversationPromotePreferenceController.java +++ b/src/com/android/settings/notification/app/ConversationPromotePreferenceController.java @@ -37,7 +37,7 @@ public class ConversationPromotePreferenceController extends NotificationPrefere public ConversationPromotePreferenceController(Context context, SettingsPreferenceFragment hostFragment, NotificationBackend backend) { - super(context, backend); + super(context, backend, KEY); mHostFragment = hostFragment; } @@ -47,14 +47,17 @@ public class ConversationPromotePreferenceController extends NotificationPrefere } @Override - public boolean isAvailable() { - if (!super.isAvailable()) { - return false; + public int getAvailabilityStatus() { + if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) { + return CONDITIONALLY_UNAVAILABLE; } if (mAppRow == null || mChannel == null) { - return false; + return CONDITIONALLY_UNAVAILABLE; } - return !TextUtils.isEmpty(mChannel.getConversationId()) && mChannel.isDemoted(); + if (!TextUtils.isEmpty(mChannel.getConversationId()) && mChannel.isDemoted()) { + return AVAILABLE; + } + return CONDITIONALLY_UNAVAILABLE; } @Override diff --git a/src/com/android/settings/notification/app/DeletedChannelsPreferenceController.java b/src/com/android/settings/notification/app/DeletedChannelsPreferenceController.java index 77a692f1488..cd160df1fd4 100644 --- a/src/com/android/settings/notification/app/DeletedChannelsPreferenceController.java +++ b/src/com/android/settings/notification/app/DeletedChannelsPreferenceController.java @@ -30,7 +30,7 @@ public class DeletedChannelsPreferenceController extends NotificationPreferenceC private static final String KEY_DELETED = "deleted"; public DeletedChannelsPreferenceController(Context context, NotificationBackend backend) { - super(context, backend); + super(context, backend, KEY_DELETED); } @Override @@ -39,16 +39,19 @@ public class DeletedChannelsPreferenceController extends NotificationPreferenceC } @Override - public boolean isAvailable() { - if (!super.isAvailable()) { - return false; + public int getAvailabilityStatus() { + if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) { + return CONDITIONALLY_UNAVAILABLE; } // only visible on app screen if (mChannel != null || hasValidGroup()) { - return false; + return CONDITIONALLY_UNAVAILABLE; } - return mBackend.getDeletedChannelCount(mAppRow.pkg, mAppRow.uid) > 0; + if (mBackend.getDeletedChannelCount(mAppRow.pkg, mAppRow.uid) > 0) { + return AVAILABLE; + } + return CONDITIONALLY_UNAVAILABLE; } @Override diff --git a/src/com/android/settings/notification/app/DescriptionPreferenceController.java b/src/com/android/settings/notification/app/DescriptionPreferenceController.java index 0a5bb2f9260..413a876cec9 100644 --- a/src/com/android/settings/notification/app/DescriptionPreferenceController.java +++ b/src/com/android/settings/notification/app/DescriptionPreferenceController.java @@ -29,7 +29,7 @@ public class DescriptionPreferenceController extends NotificationPreferenceContr private static final String KEY_DESC = "desc"; public DescriptionPreferenceController(Context context) { - super(context, null); + super(context, null, KEY_DESC); } @Override @@ -38,20 +38,20 @@ public class DescriptionPreferenceController extends NotificationPreferenceContr } @Override - public boolean isAvailable() { - if (!super.isAvailable()) { - return false; + public int getAvailabilityStatus() { + if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) { + return CONDITIONALLY_UNAVAILABLE; } if (mChannel == null && !hasValidGroup()) { - return false; + return CONDITIONALLY_UNAVAILABLE; } if (mChannel != null && !TextUtils.isEmpty(mChannel.getDescription())) { - return true; + return AVAILABLE; } if (hasValidGroup() && !TextUtils.isEmpty(mChannelGroup.getDescription())) { - return true; + return AVAILABLE; } - return false; + return CONDITIONALLY_UNAVAILABLE; } @Override diff --git a/src/com/android/settings/notification/app/DndPreferenceController.java b/src/com/android/settings/notification/app/DndPreferenceController.java index b65928aa915..811eeb4ec79 100644 --- a/src/com/android/settings/notification/app/DndPreferenceController.java +++ b/src/com/android/settings/notification/app/DndPreferenceController.java @@ -31,7 +31,7 @@ public class DndPreferenceController extends NotificationPreferenceController private static final String KEY_BYPASS_DND = "bypass_dnd"; public DndPreferenceController(Context context, NotificationBackend backend) { - super(context, backend); + super(context, backend, KEY_BYPASS_DND); } @Override @@ -40,11 +40,11 @@ public class DndPreferenceController extends NotificationPreferenceController } @Override - public boolean isAvailable() { - if (!super.isAvailable() || mChannel == null) { - return false; + public int getAvailabilityStatus() { + if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE || mChannel == null) { + return CONDITIONALLY_UNAVAILABLE; } - return true; + return AVAILABLE; } @Override diff --git a/src/com/android/settings/notification/app/HeaderPreferenceController.java b/src/com/android/settings/notification/app/HeaderPreferenceController.java index 7379d55395b..c4b0e598dff 100644 --- a/src/com/android/settings/notification/app/HeaderPreferenceController.java +++ b/src/com/android/settings/notification/app/HeaderPreferenceController.java @@ -45,7 +45,7 @@ public class HeaderPreferenceController extends NotificationPreferenceController private boolean mStarted = false; public HeaderPreferenceController(Context context, DashboardFragment fragment) { - super(context, null); + super(context, null, PREF_KEY_APP_HEADER); mFragment = fragment; } @@ -55,8 +55,8 @@ public class HeaderPreferenceController extends NotificationPreferenceController } @Override - public boolean isAvailable() { - return mAppRow != null; + public int getAvailabilityStatus() { + return mAppRow != null ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } @Override diff --git a/src/com/android/settings/notification/app/HighImportancePreferenceController.java b/src/com/android/settings/notification/app/HighImportancePreferenceController.java index d60668b9abe..98dc8a760e2 100644 --- a/src/com/android/settings/notification/app/HighImportancePreferenceController.java +++ b/src/com/android/settings/notification/app/HighImportancePreferenceController.java @@ -37,7 +37,7 @@ public class HighImportancePreferenceController extends NotificationPreferenceCo public HighImportancePreferenceController(Context context, NotificationSettings.DependentFieldListener dependentFieldListener, NotificationBackend backend) { - super(context, backend); + super(context, backend, KEY_IMPORTANCE); mDependentFieldListener = dependentFieldListener; } @@ -47,17 +47,19 @@ public class HighImportancePreferenceController extends NotificationPreferenceCo } @Override - public boolean isAvailable() { - if (!super.isAvailable()) { - return false; + public int getAvailabilityStatus() { + if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) { + return CONDITIONALLY_UNAVAILABLE; } if (mChannel == null) { - return false; + return CONDITIONALLY_UNAVAILABLE; } if (isDefaultChannel()) { - return false; + return CONDITIONALLY_UNAVAILABLE; } - return mChannel.getImportance() >= IMPORTANCE_DEFAULT; + return mChannel.getImportance() >= IMPORTANCE_DEFAULT + ? AVAILABLE + : CONDITIONALLY_UNAVAILABLE; } @Override diff --git a/src/com/android/settings/notification/app/ImportancePreferenceController.java b/src/com/android/settings/notification/app/ImportancePreferenceController.java index 3c32ca4b0bc..31ddac39373 100644 --- a/src/com/android/settings/notification/app/ImportancePreferenceController.java +++ b/src/com/android/settings/notification/app/ImportancePreferenceController.java @@ -38,7 +38,7 @@ public class ImportancePreferenceController extends NotificationPreferenceContro public ImportancePreferenceController(Context context, NotificationSettings.DependentFieldListener dependentFieldListener, NotificationBackend backend) { - super(context, backend); + super(context, backend, KEY_IMPORTANCE); mDependentFieldListener = dependentFieldListener; } @@ -48,14 +48,14 @@ public class ImportancePreferenceController extends NotificationPreferenceContro } @Override - public boolean isAvailable() { - if (!super.isAvailable()) { - return false; + public int getAvailabilityStatus() { + if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) { + return CONDITIONALLY_UNAVAILABLE; } if (mChannel == null) { - return false; + return CONDITIONALLY_UNAVAILABLE; } - return !isDefaultChannel(); + return !isDefaultChannel() ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } @Override diff --git a/src/com/android/settings/notification/app/InvalidConversationInfoPreferenceController.java b/src/com/android/settings/notification/app/InvalidConversationInfoPreferenceController.java index b937e80e0d6..bb2c58b728b 100644 --- a/src/com/android/settings/notification/app/InvalidConversationInfoPreferenceController.java +++ b/src/com/android/settings/notification/app/InvalidConversationInfoPreferenceController.java @@ -31,7 +31,7 @@ public class InvalidConversationInfoPreferenceController extends NotificationPre public InvalidConversationInfoPreferenceController(Context context, NotificationBackend backend) { - super(context, backend); + super(context, backend, KEY); } @Override @@ -40,17 +40,19 @@ public class InvalidConversationInfoPreferenceController extends NotificationPre } @Override - public boolean isAvailable() { + public int getAvailabilityStatus() { if (mAppRow == null) { - return false; + return CONDITIONALLY_UNAVAILABLE; } if (mAppRow.banned) { - return false; + return CONDITIONALLY_UNAVAILABLE; } if (mPreferenceFilter != null && !isIncludedInFilter()) { - return false; + return CONDITIONALLY_UNAVAILABLE; } - return mBackend.isInInvalidMsgState(mAppRow.pkg, mAppRow.uid); + return mBackend.isInInvalidMsgState(mAppRow.pkg, mAppRow.uid) + ? AVAILABLE + : CONDITIONALLY_UNAVAILABLE; } @Override diff --git a/src/com/android/settings/notification/app/InvalidConversationPreferenceController.java b/src/com/android/settings/notification/app/InvalidConversationPreferenceController.java index 5c502dccbe0..219ccbcea85 100644 --- a/src/com/android/settings/notification/app/InvalidConversationPreferenceController.java +++ b/src/com/android/settings/notification/app/InvalidConversationPreferenceController.java @@ -31,7 +31,7 @@ public class InvalidConversationPreferenceController extends NotificationPrefere private static final String KEY = "invalid_conversation_switch"; public InvalidConversationPreferenceController(Context context, NotificationBackend backend) { - super(context, backend); + super(context, backend, KEY); } @Override @@ -40,17 +40,19 @@ public class InvalidConversationPreferenceController extends NotificationPrefere } @Override - public boolean isAvailable() { + public int getAvailabilityStatus() { if (mAppRow == null) { - return false; + return CONDITIONALLY_UNAVAILABLE; } if (mAppRow.banned) { - return false; + return CONDITIONALLY_UNAVAILABLE; } if (mPreferenceFilter != null && !isIncludedInFilter()) { - return false; + return CONDITIONALLY_UNAVAILABLE; } - return mBackend.isInInvalidMsgState(mAppRow.pkg, mAppRow.uid); + return mBackend.isInInvalidMsgState(mAppRow.pkg, mAppRow.uid) + ? AVAILABLE + : CONDITIONALLY_UNAVAILABLE; } @Override diff --git a/src/com/android/settings/notification/app/LightsPreferenceController.java b/src/com/android/settings/notification/app/LightsPreferenceController.java index d096922e348..f7f92442c9b 100644 --- a/src/com/android/settings/notification/app/LightsPreferenceController.java +++ b/src/com/android/settings/notification/app/LightsPreferenceController.java @@ -33,7 +33,7 @@ public class LightsPreferenceController extends NotificationPreferenceController private static final String KEY_LIGHTS = "lights"; public LightsPreferenceController(Context context, NotificationBackend backend) { - super(context, backend); + super(context, backend, KEY_LIGHTS); } @Override @@ -42,16 +42,18 @@ public class LightsPreferenceController extends NotificationPreferenceController } @Override - public boolean isAvailable() { - if (!super.isAvailable()) { - return false; + public int getAvailabilityStatus() { + if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) { + return CONDITIONALLY_UNAVAILABLE; } if (mChannel == null) { - return false; + return CONDITIONALLY_UNAVAILABLE; } - return checkCanBeVisible(NotificationManager.IMPORTANCE_DEFAULT) - && canPulseLight() - && !isDefaultChannel(); + if (checkCanBeVisible(NotificationManager.IMPORTANCE_DEFAULT) && canPulseLight() + && !isDefaultChannel()) { + return AVAILABLE; + } + return CONDITIONALLY_UNAVAILABLE; } @Override diff --git a/src/com/android/settings/notification/app/MinImportancePreferenceController.java b/src/com/android/settings/notification/app/MinImportancePreferenceController.java index f8257636615..b2c0862b8f8 100644 --- a/src/com/android/settings/notification/app/MinImportancePreferenceController.java +++ b/src/com/android/settings/notification/app/MinImportancePreferenceController.java @@ -37,7 +37,7 @@ public class MinImportancePreferenceController extends NotificationPreferenceCon public MinImportancePreferenceController(Context context, NotificationSettings.DependentFieldListener dependentFieldListener, NotificationBackend backend) { - super(context, backend); + super(context, backend, KEY_IMPORTANCE); mDependentFieldListener = dependentFieldListener; } @@ -47,17 +47,17 @@ public class MinImportancePreferenceController extends NotificationPreferenceCon } @Override - public boolean isAvailable() { - if (!super.isAvailable()) { - return false; + public int getAvailabilityStatus() { + if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) { + return CONDITIONALLY_UNAVAILABLE; } if (mChannel == null) { - return false; + return CONDITIONALLY_UNAVAILABLE; } if (isDefaultChannel()) { - return false; + return CONDITIONALLY_UNAVAILABLE; } - return mChannel.getImportance() <= IMPORTANCE_LOW; + return mChannel.getImportance() <= IMPORTANCE_LOW ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } @Override diff --git a/src/com/android/settings/notification/app/NotificationPreferenceController.java b/src/com/android/settings/notification/app/NotificationPreferenceController.java index fb19d9d6b4c..271a83d76f8 100644 --- a/src/com/android/settings/notification/app/NotificationPreferenceController.java +++ b/src/com/android/settings/notification/app/NotificationPreferenceController.java @@ -17,26 +17,24 @@ package com.android.settings.notification.app; import static android.app.NotificationManager.IMPORTANCE_NONE; -import static android.os.UserHandle.USER_SYSTEM; import android.annotation.Nullable; import android.app.NotificationChannel; import android.app.NotificationChannelGroup; import android.app.NotificationManager; import android.content.Context; -import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.ShortcutInfo; import android.graphics.drawable.Drawable; import android.os.UserManager; -import android.provider.Settings; import android.util.Log; +import android.util.Slog; import androidx.preference.Preference; +import com.android.settings.core.BasePreferenceController; import com.android.settings.notification.NotificationBackend; import com.android.settingslib.RestrictedLockUtils; -import com.android.settingslib.core.AbstractPreferenceController; import java.util.Comparator; import java.util.List; @@ -46,7 +44,7 @@ import java.util.Objects; * Parent class for preferences appearing on notification setting pages at the app, * notification channel group, or notification channel level. */ -public abstract class NotificationPreferenceController extends AbstractPreferenceController { +public abstract class NotificationPreferenceController extends BasePreferenceController { private static final String TAG = "ChannelPrefContr"; @Nullable protected NotificationChannel mChannel; @@ -71,8 +69,11 @@ public abstract class NotificationPreferenceController extends AbstractPreferenc boolean overrideCanBlockValue; boolean overrideCanConfigureValue; - public NotificationPreferenceController(Context context, NotificationBackend backend) { - super(context); + boolean mLoadedChannelState; + + public NotificationPreferenceController(Context context, NotificationBackend backend, + String key) { + super(context, key); mContext = context; mNm = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); mBackend = backend; @@ -81,28 +82,30 @@ public abstract class NotificationPreferenceController extends AbstractPreferenc } /** - * Returns true if field's parent object is not blocked. + * Returns available if field's parent object is not blocked. */ @Override - public boolean isAvailable() { + public int getAvailabilityStatus() { if (mAppRow == null) { - return false; + return CONDITIONALLY_UNAVAILABLE; } if (mAppRow.banned) { - return false; + return CONDITIONALLY_UNAVAILABLE; } if (mChannelGroup != null) { if (mChannelGroup.isBlocked()) { - return false; + return CONDITIONALLY_UNAVAILABLE; } } if (mChannel != null) { if (mPreferenceFilter != null && !isIncludedInFilter()) { - return false; + return CONDITIONALLY_UNAVAILABLE; + } + if(mChannel.getImportance() == IMPORTANCE_NONE) { + return CONDITIONALLY_UNAVAILABLE; } - return mChannel.getImportance() != IMPORTANCE_NONE; } - return true; + return AVAILABLE; } protected void onResume(NotificationBackend.AppRow appRow, diff --git a/src/com/android/settings/notification/app/NotificationSettings.java b/src/com/android/settings/notification/app/NotificationSettings.java index 192a0ee9fc7..5750167c271 100644 --- a/src/com/android/settings/notification/app/NotificationSettings.java +++ b/src/com/android/settings/notification/app/NotificationSettings.java @@ -41,6 +41,7 @@ import android.os.UserHandle; import android.provider.Settings; import android.text.TextUtils; import android.util.Log; +import android.util.Slog; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; @@ -129,15 +130,52 @@ abstract public class NotificationSettings extends DashboardFragment { } } + mUserId = UserHandle.getUserId(mUid); mPkgInfo = findPackageInfo(mPkg, mUid); + } + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + if (mIntent == null && mArgs == null) { + toastAndFinish("no intent"); + return; + } + + if (mUid < 0 || TextUtils.isEmpty(mPkg) || mPkgInfo == null) { + toastAndFinish("Missing package or uid or packageinfo"); + return; + } + + startListeningToPackageRemove(); + } + + @Override + public void onDestroy() { + stopListeningToPackageRemove(); + super.onDestroy(); + } + + @Override + public void onResume() { + super.onResume(); + if (mUid < 0 || TextUtils.isEmpty(mPkg) || mPkgInfo == null) { + toastAndFinish("Missing package or uid or packageinfo"); + return; + } + mPkgInfo = findPackageInfo(mPkg, mUid); if (mPkgInfo != null) { - mUserId = UserHandle.getUserId(mUid); mSuspendedAppsAdmin = RestrictedLockUtilsInternal.checkIfApplicationIsSuspended( mContext, mPkg, mUserId); - loadChannel(); loadAppRow(); + if (mAppRow == null) { + toastAndFinish("Can't load package"); + return; + } + loadChannel(); + loadConversation(); loadChannelGroup(); loadPreferencesFilter(); collectConfigActivities(); @@ -157,55 +195,6 @@ abstract public class NotificationSettings extends DashboardFragment { } } - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - if (mIntent == null && mArgs == null) { - Log.w(TAG, "No intent"); - toastAndFinish(); - return; - } - - if (mUid < 0 || TextUtils.isEmpty(mPkg) || mPkgInfo == null) { - Log.w(TAG, "Missing package or uid or packageinfo"); - toastAndFinish(); - return; - } - - startListeningToPackageRemove(); - } - - @Override - public void onDestroy() { - stopListeningToPackageRemove(); - super.onDestroy(); - } - - @Override - public void onResume() { - super.onResume(); - if (mUid < 0 || TextUtils.isEmpty(mPkg) || mPkgInfo == null || mAppRow == null) { - Log.w(TAG, "Missing package or uid or packageinfo"); - finish(); - return; - } - // Reload app, channel, etc onResume in case they've changed. A little wasteful if we've - // just done onAttach but better than making every preference controller reload all - // the data - loadAppRow(); - if (mAppRow == null) { - Log.w(TAG, "Can't load package"); - finish(); - return; - } - loadChannel(); - loadConversation(); - loadChannelGroup(); - loadPreferencesFilter(); - collectConfigActivities(); - } - protected void animatePanel() { if (mPreferenceFilter != null) { mLayoutView = getActivity().findViewById(R.id.main_content); @@ -307,7 +296,8 @@ abstract public class NotificationSettings extends DashboardFragment { } } - protected void toastAndFinish() { + protected void toastAndFinish(String msg) { + Log.w(TAG, msg); Toast.makeText(mContext, R.string.app_not_found_dlg_text, Toast.LENGTH_SHORT).show(); getActivity().finish(); } diff --git a/src/com/android/settings/notification/app/NotificationsOffPreferenceController.java b/src/com/android/settings/notification/app/NotificationsOffPreferenceController.java index 0c7cd2361e2..46625c3101a 100644 --- a/src/com/android/settings/notification/app/NotificationsOffPreferenceController.java +++ b/src/com/android/settings/notification/app/NotificationsOffPreferenceController.java @@ -30,7 +30,7 @@ public class NotificationsOffPreferenceController extends NotificationPreference private static final String KEY_BLOCKED_DESC = "block_desc"; public NotificationsOffPreferenceController(Context context) { - super(context, null); + super(context, null, KEY_BLOCKED_DESC); } @Override @@ -39,16 +39,20 @@ public class NotificationsOffPreferenceController extends NotificationPreference } @Override - public boolean isAvailable() { + public int getAvailabilityStatus() { if (mAppRow == null) { - return false; + return CONDITIONALLY_UNAVAILABLE; } if (mPreferenceFilter != null && !isIncludedInFilter()) { - return false; + return CONDITIONALLY_UNAVAILABLE; } // Available only when other controllers are unavailable - this UI replaces the UI that // would give more detailed notification controls. - return !super.isAvailable(); + if (super.getAvailabilityStatus() == AVAILABLE) { + return CONDITIONALLY_UNAVAILABLE; + } else { + return AVAILABLE; + } } @Override diff --git a/src/com/android/settings/notification/app/SoundPreferenceController.java b/src/com/android/settings/notification/app/SoundPreferenceController.java index b23b4fc86cb..335b44226ce 100644 --- a/src/com/android/settings/notification/app/SoundPreferenceController.java +++ b/src/com/android/settings/notification/app/SoundPreferenceController.java @@ -47,7 +47,7 @@ public class SoundPreferenceController extends NotificationPreferenceController public SoundPreferenceController(Context context, SettingsPreferenceFragment hostFragment, NotificationSettings.DependentFieldListener dependentFieldListener, NotificationBackend backend) { - super(context, backend); + super(context, backend, KEY_SOUND); mFragment = hostFragment; mListener = dependentFieldListener; } @@ -58,14 +58,17 @@ public class SoundPreferenceController extends NotificationPreferenceController } @Override - public boolean isAvailable() { - if (!super.isAvailable()) { - return false; + public int getAvailabilityStatus() { + if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) { + return CONDITIONALLY_UNAVAILABLE; } if (mChannel == null) { - return false; + return CONDITIONALLY_UNAVAILABLE; } - return checkCanBeVisible(NotificationManager.IMPORTANCE_DEFAULT) && !isDefaultChannel(); + if (checkCanBeVisible(NotificationManager.IMPORTANCE_DEFAULT) && !isDefaultChannel()) { + return AVAILABLE; + } + return CONDITIONALLY_UNAVAILABLE; } @Override diff --git a/src/com/android/settings/notification/app/VibrationPreferenceController.java b/src/com/android/settings/notification/app/VibrationPreferenceController.java index 34d1a543b56..f91999f074d 100644 --- a/src/com/android/settings/notification/app/VibrationPreferenceController.java +++ b/src/com/android/settings/notification/app/VibrationPreferenceController.java @@ -34,7 +34,7 @@ public class VibrationPreferenceController extends NotificationPreferenceControl private final Vibrator mVibrator; public VibrationPreferenceController(Context context, NotificationBackend backend) { - super(context, backend); + super(context, backend, KEY_VIBRATE); mVibrator = context.getSystemService(Vibrator.class); } @@ -44,14 +44,15 @@ public class VibrationPreferenceController extends NotificationPreferenceControl } @Override - public boolean isAvailable() { - if (!super.isAvailable() || mChannel == null) { - return false; - } - return checkCanBeVisible(NotificationManager.IMPORTANCE_DEFAULT) - && !isDefaultChannel() - && mVibrator != null - && mVibrator.hasVibrator(); + public int getAvailabilityStatus() { + if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE || mChannel == null) { + return CONDITIONALLY_UNAVAILABLE; + } + if (checkCanBeVisible(NotificationManager.IMPORTANCE_DEFAULT) && !isDefaultChannel() + && mVibrator != null && mVibrator.hasVibrator()) { + return AVAILABLE; + } + return CONDITIONALLY_UNAVAILABLE; } @Override diff --git a/src/com/android/settings/notification/app/VisibilityPreferenceController.java b/src/com/android/settings/notification/app/VisibilityPreferenceController.java index a2a1d76b71c..3f33267a749 100644 --- a/src/com/android/settings/notification/app/VisibilityPreferenceController.java +++ b/src/com/android/settings/notification/app/VisibilityPreferenceController.java @@ -48,7 +48,7 @@ public class VisibilityPreferenceController extends NotificationPreferenceContro public VisibilityPreferenceController(Context context, LockPatternUtils utils, NotificationBackend backend) { - super(context, backend); + super(context, backend, KEY_VISIBILITY_OVERRIDE); mLockPatternUtils = utils; } @@ -58,14 +58,18 @@ public class VisibilityPreferenceController extends NotificationPreferenceContro } @Override - public boolean isAvailable() { - if (!super.isAvailable()) { - return false; + public int getAvailabilityStatus() { + if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) { + return CONDITIONALLY_UNAVAILABLE; } if (mChannel == null || mAppRow.banned) { - return false; + return CONDITIONALLY_UNAVAILABLE; } - return checkCanBeVisible(NotificationManager.IMPORTANCE_LOW) && isLockScreenSecure(); + if (checkCanBeVisible(NotificationManager.IMPORTANCE_LOW) && isLockScreenSecure()) { + return AVAILABLE; + } + + return CONDITIONALLY_UNAVAILABLE; } @Override diff --git a/tests/robotests/src/com/android/settings/notification/app/NotificationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/app/NotificationPreferenceControllerTest.java index b2f1673f317..bf529e67568 100644 --- a/tests/robotests/src/com/android/settings/notification/app/NotificationPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/notification/app/NotificationPreferenceControllerTest.java @@ -426,7 +426,7 @@ public class NotificationPreferenceControllerTest { private final class TestPreferenceController extends NotificationPreferenceController { private TestPreferenceController(Context context, NotificationBackend backend) { - super(context, backend); + super(context, backend, "key"); } @Override