diff --git a/src/com/android/settings/notification/NotificationBackend.java b/src/com/android/settings/notification/NotificationBackend.java index 0661de7a5e7..8e6019c3b48 100644 --- a/src/com/android/settings/notification/NotificationBackend.java +++ b/src/com/android/settings/notification/NotificationBackend.java @@ -357,19 +357,6 @@ public class NotificationBackend { } } - /** - * Returns all of a user's packages that have at least one channel that will bypass DND - */ - public List getPackagesBypassingDnd(int userId, - boolean includeConversationChannels) { - try { - return sINM.getPackagesBypassingDnd(userId, includeConversationChannels); - } catch (Exception e) { - Log.w(TAG, "Error calling NoMan", e); - return new ArrayList<>(); - } - } - public void updateChannel(String pkg, int uid, NotificationChannel channel) { try { sINM.updateNotificationChannelForPackage(pkg, uid, channel); diff --git a/src/com/android/settings/notification/modes/ZenHelperBackend.java b/src/com/android/settings/notification/modes/ZenHelperBackend.java new file mode 100644 index 00000000000..4136c2210bc --- /dev/null +++ b/src/com/android/settings/notification/modes/ZenHelperBackend.java @@ -0,0 +1,119 @@ +/* + * Copyright (C) 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.notification.modes; + +import android.annotation.Nullable; +import android.app.INotificationManager; +import android.content.Context; +import android.content.pm.ParceledListSlice; +import android.database.Cursor; +import android.os.ServiceManager; +import android.provider.ContactsContract; +import android.service.notification.ConversationChannelWrapper; +import android.util.Log; + +import androidx.annotation.VisibleForTesting; + +import com.android.settings.R; + +import java.util.ArrayList; +import java.util.List; + +/** + * Class used for Settings-system_server interactions that are not directly related to + * Mode management, but still used in the UI of its Settings pages (such as listing priority + * conversations, contacts, etc). + */ +class ZenHelperBackend { + + private static final String TAG = "ZenHelperBackend"; + + @Nullable // Until first usage + private static ZenHelperBackend sInstance; + + private final Context mContext; + private final INotificationManager mInm; + + static ZenHelperBackend getInstance(Context context) { + if (sInstance == null) { + sInstance = new ZenHelperBackend(context.getApplicationContext()); + } + return sInstance; + } + + ZenHelperBackend(Context context) { + mContext = context; + mInm = INotificationManager.Stub.asInterface( + ServiceManager.getService(Context.NOTIFICATION_SERVICE)); + } + + /** + * Returns all of a user's packages that have at least one channel that will bypass DND + */ + List getPackagesBypassingDnd(int userId, + boolean includeConversationChannels) { + try { + return mInm.getPackagesBypassingDnd(userId, includeConversationChannels); + } catch (Exception e) { + Log.w(TAG, "Error calling NoMan", e); + return new ArrayList<>(); + } + } + + @SuppressWarnings("unchecked") + ParceledListSlice getConversations(boolean onlyImportant) { + try { + return mInm.getConversations(onlyImportant); + } catch (Exception e) { + Log.w(TAG, "Error calling NoMan", e); + return ParceledListSlice.emptyList(); + } + } + + List getStarredContacts() { + try (Cursor cursor = queryStarredContactsData()) { + return getStarredContacts(cursor); + } + } + + @VisibleForTesting + List getStarredContacts(Cursor cursor) { + List starredContacts = new ArrayList<>(); + if (cursor != null && cursor.moveToFirst()) { + do { + String contact = cursor.getString(0); + starredContacts.add(contact != null ? contact : + mContext.getString(R.string.zen_mode_starred_contacts_empty_name)); + + } while (cursor.moveToNext()); + } + return starredContacts; + } + + private Cursor queryStarredContactsData() { + return mContext.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, + new String[]{ContactsContract.Contacts.DISPLAY_NAME_PRIMARY}, + ContactsContract.Data.STARRED + "=1", null, + ContactsContract.Data.TIMES_CONTACTED); + } + + Cursor queryAllContactsData() { + return mContext.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, + new String[]{ContactsContract.Contacts.DISPLAY_NAME_PRIMARY}, + null, null, null); + } +} diff --git a/src/com/android/settings/notification/modes/ZenModeAppsLinkPreferenceController.java b/src/com/android/settings/notification/modes/ZenModeAppsLinkPreferenceController.java index 581fff57a26..691c92e2e3c 100644 --- a/src/com/android/settings/notification/modes/ZenModeAppsLinkPreferenceController.java +++ b/src/com/android/settings/notification/modes/ZenModeAppsLinkPreferenceController.java @@ -29,7 +29,6 @@ import androidx.fragment.app.Fragment; import androidx.preference.Preference; import com.android.settings.core.SubSettingLauncher; -import com.android.settings.notification.NotificationBackend; import com.android.settingslib.applications.ApplicationsState; import java.util.ArrayList; @@ -47,14 +46,16 @@ class ZenModeAppsLinkPreferenceController extends AbstractZenModePreferenceContr private final ZenModeSummaryHelper mSummaryHelper; private ApplicationsState.Session mAppSession; - private NotificationBackend mNotificationBackend = new NotificationBackend(); + private final ZenHelperBackend mHelperBackend; private ZenMode mZenMode; private Preference mPreference; ZenModeAppsLinkPreferenceController(Context context, String key, Fragment host, - ApplicationsState applicationsState, ZenModesBackend backend) { + ApplicationsState applicationsState, ZenModesBackend backend, + ZenHelperBackend helperBackend) { super(context, key, backend); - mSummaryHelper = new ZenModeSummaryHelper(mContext, mBackend); + mSummaryHelper = new ZenModeSummaryHelper(mContext, helperBackend); + mHelperBackend = helperBackend; if (applicationsState != null && host != null) { mAppSession = applicationsState.newSession(mAppSessionCallbacks, host.getLifecycle()); } @@ -105,7 +106,7 @@ class ZenModeAppsLinkPreferenceController extends AbstractZenModePreferenceContr pkgLabelMap.put(entry.info.packageName, entry.label); } } - for (String pkg : mNotificationBackend.getPackagesBypassingDnd(mContext.getUserId(), + for (String pkg : mHelperBackend.getPackagesBypassingDnd(mContext.getUserId(), /* includeConversationChannels= */ false)) { // Settings may hide some packages from the user, so if they're not present here // we skip displaying them, even if they bypass dnd. diff --git a/src/com/android/settings/notification/modes/ZenModeCallsFragment.java b/src/com/android/settings/notification/modes/ZenModeCallsFragment.java index 4c85bf56727..54072ac185a 100644 --- a/src/com/android/settings/notification/modes/ZenModeCallsFragment.java +++ b/src/com/android/settings/notification/modes/ZenModeCallsFragment.java @@ -18,6 +18,7 @@ package com.android.settings.notification.modes; import android.app.settings.SettingsEnums; import android.content.Context; + import com.android.settings.R; import com.android.settingslib.core.AbstractPreferenceController; @@ -34,7 +35,7 @@ public class ZenModeCallsFragment extends ZenModeFragmentBase { protected List createPreferenceControllers(Context context) { List controllers = new ArrayList<>(); controllers.add(new ZenModePrioritySendersPreferenceController(context, - "zen_mode_settings_category_calls", false, mBackend)); + "zen_mode_settings_category_calls", false, mBackend, mHelperBackend)); controllers.add(new ZenModeRepeatCallersPreferenceController(context, "zen_mode_repeat_callers", mBackend, context.getResources().getInteger(com.android.internal.R.integer diff --git a/src/com/android/settings/notification/modes/ZenModeCallsLinkPreferenceController.java b/src/com/android/settings/notification/modes/ZenModeCallsLinkPreferenceController.java index 746af44155b..8d27d4cbf63 100644 --- a/src/com/android/settings/notification/modes/ZenModeCallsLinkPreferenceController.java +++ b/src/com/android/settings/notification/modes/ZenModeCallsLinkPreferenceController.java @@ -31,9 +31,9 @@ class ZenModeCallsLinkPreferenceController extends AbstractZenModePreferenceCont private final ZenModeSummaryHelper mSummaryHelper; public ZenModeCallsLinkPreferenceController(Context context, String key, - ZenModesBackend backend) { + ZenModesBackend backend, ZenHelperBackend helperBackend) { super(context, key, backend); - mSummaryHelper = new ZenModeSummaryHelper(context, backend); + mSummaryHelper = new ZenModeSummaryHelper(context, helperBackend); } @Override diff --git a/src/com/android/settings/notification/modes/ZenModeDisplayFragment.java b/src/com/android/settings/notification/modes/ZenModeDisplayFragment.java index 09720495ed1..8c3b8261f74 100644 --- a/src/com/android/settings/notification/modes/ZenModeDisplayFragment.java +++ b/src/com/android/settings/notification/modes/ZenModeDisplayFragment.java @@ -18,6 +18,7 @@ package com.android.settings.notification.modes; import android.app.settings.SettingsEnums; import android.content.Context; + import com.android.settings.R; import com.android.settingslib.core.AbstractPreferenceController; @@ -34,7 +35,7 @@ public class ZenModeDisplayFragment extends ZenModeFragmentBase { protected List createPreferenceControllers(Context context) { List prefControllers = new ArrayList<>(); prefControllers.add(new ZenModeNotifVisLinkPreferenceController( - context, "notification_visibility", mBackend)); + context, "notification_visibility", mBackend, mHelperBackend)); prefControllers.add(new ZenModeDisplayEffectPreferenceController( context, "effect_greyscale", mBackend)); prefControllers.add(new ZenModeDisplayEffectPreferenceController( diff --git a/src/com/android/settings/notification/modes/ZenModeDisplayLinkPreferenceController.java b/src/com/android/settings/notification/modes/ZenModeDisplayLinkPreferenceController.java index 8720a4b14fb..712c78a2e50 100644 --- a/src/com/android/settings/notification/modes/ZenModeDisplayLinkPreferenceController.java +++ b/src/com/android/settings/notification/modes/ZenModeDisplayLinkPreferenceController.java @@ -31,9 +31,9 @@ class ZenModeDisplayLinkPreferenceController extends AbstractZenModePreferenceCo private final ZenModeSummaryHelper mSummaryHelper; public ZenModeDisplayLinkPreferenceController(Context context, String key, - ZenModesBackend backend) { + ZenModesBackend backend, ZenHelperBackend helperBackend) { super(context, key, backend); - mSummaryHelper = new ZenModeSummaryHelper(context, backend); + mSummaryHelper = new ZenModeSummaryHelper(context, helperBackend); } @Override diff --git a/src/com/android/settings/notification/modes/ZenModeFragment.java b/src/com/android/settings/notification/modes/ZenModeFragment.java index e4d81fe51d5..6bda5e13c97 100644 --- a/src/com/android/settings/notification/modes/ZenModeFragment.java +++ b/src/com/android/settings/notification/modes/ZenModeFragment.java @@ -42,15 +42,15 @@ public class ZenModeFragment extends ZenModeFragmentBase { prefControllers.add(new ZenModeButtonPreferenceController(context, "activate", mBackend)); prefControllers.add(new ZenModeActionsPreferenceController(context, "actions", mBackend)); prefControllers.add(new ZenModePeopleLinkPreferenceController( - context, "zen_mode_people", mBackend)); + context, "zen_mode_people", mBackend, mHelperBackend)); prefControllers.add(new ZenModeAppsLinkPreferenceController( context, "zen_mode_apps", this, ApplicationsState.getInstance((Application) context.getApplicationContext()), - mBackend)); + mBackend, mHelperBackend)); prefControllers.add(new ZenModeOtherLinkPreferenceController( - context, "zen_other_settings", mBackend)); + context, "zen_other_settings", mBackend, mHelperBackend)); prefControllers.add(new ZenModeDisplayLinkPreferenceController( - context, "mode_display_settings", mBackend)); + context, "mode_display_settings", mBackend, mHelperBackend)); prefControllers.add(new ZenModeSetTriggerLinkPreferenceController(context, "zen_automatic_trigger_category", mBackend)); return prefControllers; diff --git a/src/com/android/settings/notification/modes/ZenModeMessagesFragment.java b/src/com/android/settings/notification/modes/ZenModeMessagesFragment.java index c86f8dd4750..8bf574f4ced 100644 --- a/src/com/android/settings/notification/modes/ZenModeMessagesFragment.java +++ b/src/com/android/settings/notification/modes/ZenModeMessagesFragment.java @@ -18,6 +18,7 @@ package com.android.settings.notification.modes; import android.app.settings.SettingsEnums; import android.content.Context; + import com.android.settings.R; import com.android.settingslib.core.AbstractPreferenceController; @@ -34,7 +35,7 @@ public class ZenModeMessagesFragment extends ZenModeFragmentBase { protected List createPreferenceControllers(Context context) { List controllers = new ArrayList<>(); controllers.add(new ZenModePrioritySendersPreferenceController(context, - "zen_mode_settings_category_messages", true, mBackend)); + "zen_mode_settings_category_messages", true, mBackend, mHelperBackend)); return controllers; } diff --git a/src/com/android/settings/notification/modes/ZenModeMessagesLinkPreferenceController.java b/src/com/android/settings/notification/modes/ZenModeMessagesLinkPreferenceController.java index 300ebbc14d9..6e563c42a64 100644 --- a/src/com/android/settings/notification/modes/ZenModeMessagesLinkPreferenceController.java +++ b/src/com/android/settings/notification/modes/ZenModeMessagesLinkPreferenceController.java @@ -30,9 +30,9 @@ class ZenModeMessagesLinkPreferenceController extends AbstractZenModePreferenceC private final ZenModeSummaryHelper mSummaryHelper; public ZenModeMessagesLinkPreferenceController(Context context, String key, - ZenModesBackend backend) { + ZenModesBackend backend, ZenHelperBackend helperBackend) { super(context, key, backend); - mSummaryHelper = new ZenModeSummaryHelper(context, backend); + mSummaryHelper = new ZenModeSummaryHelper(context, helperBackend); } @Override diff --git a/src/com/android/settings/notification/modes/ZenModeNotifVisLinkPreferenceController.java b/src/com/android/settings/notification/modes/ZenModeNotifVisLinkPreferenceController.java index da3b3be1741..15da96ec605 100644 --- a/src/com/android/settings/notification/modes/ZenModeNotifVisLinkPreferenceController.java +++ b/src/com/android/settings/notification/modes/ZenModeNotifVisLinkPreferenceController.java @@ -31,9 +31,9 @@ class ZenModeNotifVisLinkPreferenceController extends AbstractZenModePreferenceC private final ZenModeSummaryHelper mSummaryBuilder; public ZenModeNotifVisLinkPreferenceController(Context context, String key, - ZenModesBackend backend) { + ZenModesBackend backend, ZenHelperBackend helperBackend) { super(context, key, backend); - mSummaryBuilder = new ZenModeSummaryHelper(context, backend); + mSummaryBuilder = new ZenModeSummaryHelper(context, helperBackend); } @Override diff --git a/src/com/android/settings/notification/modes/ZenModeOtherLinkPreferenceController.java b/src/com/android/settings/notification/modes/ZenModeOtherLinkPreferenceController.java index 1a00207c232..89b719eadb5 100644 --- a/src/com/android/settings/notification/modes/ZenModeOtherLinkPreferenceController.java +++ b/src/com/android/settings/notification/modes/ZenModeOtherLinkPreferenceController.java @@ -34,9 +34,9 @@ class ZenModeOtherLinkPreferenceController extends AbstractZenModePreferenceCont private final ZenModeSummaryHelper mSummaryHelper; public ZenModeOtherLinkPreferenceController(Context context, String key, - ZenModesBackend backend) { + ZenModesBackend backend, ZenHelperBackend helperBackend) { super(context, key, backend); - mSummaryHelper = new ZenModeSummaryHelper(mContext, mBackend); + mSummaryHelper = new ZenModeSummaryHelper(mContext, helperBackend); } @Override diff --git a/src/com/android/settings/notification/modes/ZenModePeopleFragment.java b/src/com/android/settings/notification/modes/ZenModePeopleFragment.java index e1f753cef05..448712ce0e8 100644 --- a/src/com/android/settings/notification/modes/ZenModePeopleFragment.java +++ b/src/com/android/settings/notification/modes/ZenModePeopleFragment.java @@ -18,6 +18,7 @@ package com.android.settings.notification.modes; import android.app.settings.SettingsEnums; import android.content.Context; + import com.android.settings.R; import com.android.settingslib.core.AbstractPreferenceController; @@ -34,9 +35,9 @@ public class ZenModePeopleFragment extends ZenModeFragmentBase { protected List createPreferenceControllers(Context context) { List prefControllers = new ArrayList<>(); prefControllers.add(new ZenModeCallsLinkPreferenceController( - context, "zen_mode_people_calls", mBackend)); + context, "zen_mode_people_calls", mBackend, mHelperBackend)); prefControllers.add(new ZenModeMessagesLinkPreferenceController( - context, "zen_mode_people_messages", mBackend)); + context, "zen_mode_people_messages", mBackend, mHelperBackend)); return prefControllers; } diff --git a/src/com/android/settings/notification/modes/ZenModePeopleLinkPreferenceController.java b/src/com/android/settings/notification/modes/ZenModePeopleLinkPreferenceController.java index 55a83d67e3a..271ca724b32 100644 --- a/src/com/android/settings/notification/modes/ZenModePeopleLinkPreferenceController.java +++ b/src/com/android/settings/notification/modes/ZenModePeopleLinkPreferenceController.java @@ -34,9 +34,9 @@ class ZenModePeopleLinkPreferenceController extends AbstractZenModePreferenceCon private final ZenModeSummaryHelper mSummaryHelper; public ZenModePeopleLinkPreferenceController(Context context, String key, - ZenModesBackend backend) { + ZenModesBackend backend, ZenHelperBackend helperBackend) { super(context, key, backend); - mSummaryHelper = new ZenModeSummaryHelper(mContext, mBackend); + mSummaryHelper = new ZenModeSummaryHelper(mContext, helperBackend); } @Override diff --git a/src/com/android/settings/notification/modes/ZenModePrioritySendersPreferenceController.java b/src/com/android/settings/notification/modes/ZenModePrioritySendersPreferenceController.java index 43f4d7fad4c..31a8a0d0234 100644 --- a/src/com/android/settings/notification/modes/ZenModePrioritySendersPreferenceController.java +++ b/src/com/android/settings/notification/modes/ZenModePrioritySendersPreferenceController.java @@ -83,6 +83,7 @@ class ZenModePrioritySendersPreferenceController private static final Intent FALLBACK_INTENT = new Intent(Intent.ACTION_MAIN) .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); + private final ZenHelperBackend mHelperBackend; private final PackageManager mPackageManager; private PreferenceCategory mPreferenceCategory; private List mSelectorPreferences = new ArrayList<>(); @@ -90,9 +91,10 @@ class ZenModePrioritySendersPreferenceController private final ZenModeSummaryHelper mZenModeSummaryHelper; public ZenModePrioritySendersPreferenceController(Context context, String key, - boolean isMessages, ZenModesBackend backend) { + boolean isMessages, ZenModesBackend backend, ZenHelperBackend helperBackend) { super(context, key, backend); mIsMessages = isMessages; + mHelperBackend = helperBackend; String contactsPackage = context.getString(R.string.config_contacts_package_name); ALL_CONTACTS_INTENT.setPackage(contactsPackage); @@ -103,7 +105,7 @@ class ZenModePrioritySendersPreferenceController if (!FALLBACK_INTENT.hasCategory(Intent.CATEGORY_APP_CONTACTS)) { FALLBACK_INTENT.addCategory(Intent.CATEGORY_APP_CONTACTS); } - mZenModeSummaryHelper = new ZenModeSummaryHelper(mContext, mBackend); + mZenModeSummaryHelper = new ZenModeSummaryHelper(mContext, mHelperBackend); } @Override @@ -164,7 +166,7 @@ class ZenModePrioritySendersPreferenceController private void updateChannelCounts() { ParceledListSlice impConversations = - mBackend.getConversations(true); + mHelperBackend.getConversations(true); int numImportantConversations = 0; if (impConversations != null) { for (ConversationChannelWrapper conversation : impConversations.getList()) { diff --git a/src/com/android/settings/notification/modes/ZenModeSummaryHelper.java b/src/com/android/settings/notification/modes/ZenModeSummaryHelper.java index 77f364cd701..bf0bac9f166 100644 --- a/src/com/android/settings/notification/modes/ZenModeSummaryHelper.java +++ b/src/com/android/settings/notification/modes/ZenModeSummaryHelper.java @@ -60,9 +60,9 @@ import java.util.function.Predicate; class ZenModeSummaryHelper { private final Context mContext; - private final ZenModesBackend mBackend; + private final ZenHelperBackend mBackend; - public ZenModeSummaryHelper(Context context, ZenModesBackend backend) { + ZenModeSummaryHelper(Context context, ZenHelperBackend backend) { mContext = context; mBackend = backend; } diff --git a/src/com/android/settings/notification/modes/ZenModesBackend.java b/src/com/android/settings/notification/modes/ZenModesBackend.java index ad36fc1d38b..b58e3107934 100644 --- a/src/com/android/settings/notification/modes/ZenModesBackend.java +++ b/src/com/android/settings/notification/modes/ZenModesBackend.java @@ -19,24 +19,15 @@ package com.android.settings.notification.modes; import android.annotation.Nullable; import android.app.ActivityManager; import android.app.AutomaticZenRule; -import android.app.INotificationManager; import android.app.NotificationManager; import android.content.Context; -import android.content.pm.ParceledListSlice; -import android.database.Cursor; import android.net.Uri; -import android.os.ServiceManager; -import android.provider.ContactsContract; import android.provider.Settings; import android.service.notification.Condition; -import android.service.notification.ConversationChannelWrapper; import android.service.notification.SystemZenRules; -import android.service.notification.ZenAdapters; import android.service.notification.ZenModeConfig; import android.util.Log; -import androidx.annotation.VisibleForTesting; - import com.android.settings.R; import java.time.Duration; @@ -58,8 +49,6 @@ class ZenModesBackend { private static ZenModesBackend sInstance; private final NotificationManager mNotificationManager; - static INotificationManager sINM = INotificationManager.Stub.asInterface( - ServiceManager.getService(Context.NOTIFICATION_SERVICE)); private final Context mContext; @@ -113,54 +102,6 @@ class ZenModesBackend { } } - public ParceledListSlice getConversations(boolean onlyImportant) { - try { - return sINM.getConversations(onlyImportant); - } catch (Exception e) { - Log.w(TAG, "Error calling NoMan", e); - return ParceledListSlice.emptyList(); - } - } - - public List getStarredContacts() { - Cursor cursor = null; - try { - cursor = queryStarredContactsData(); - return getStarredContacts(cursor); - } finally { - if (cursor != null) { - cursor.close(); - } - } - } - - @VisibleForTesting - List getStarredContacts(Cursor cursor) { - List starredContacts = new ArrayList<>(); - if (cursor != null && cursor.moveToFirst()) { - do { - String contact = cursor.getString(0); - starredContacts.add(contact != null ? contact : - mContext.getString(R.string.zen_mode_starred_contacts_empty_name)); - - } while (cursor.moveToNext()); - } - return starredContacts; - } - - private Cursor queryStarredContactsData() { - return mContext.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, - new String[]{ContactsContract.Contacts.DISPLAY_NAME_PRIMARY}, - ContactsContract.Data.STARRED + "=1", null, - ContactsContract.Data.TIMES_CONTACTED); - } - - Cursor queryAllContactsData() { - return mContext.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, - new String[]{ContactsContract.Contacts.DISPLAY_NAME_PRIMARY}, - null, null, null); - } - private ZenMode getManualDndMode(ZenModeConfig config) { ZenModeConfig.ZenRule manualRule = config.manualRule; // TODO: b/333682392 - Replace with final strings for name & trigger description diff --git a/src/com/android/settings/notification/modes/ZenModesFragmentBase.java b/src/com/android/settings/notification/modes/ZenModesFragmentBase.java index 3f33b026f8d..d99593a3b89 100644 --- a/src/com/android/settings/notification/modes/ZenModesFragmentBase.java +++ b/src/com/android/settings/notification/modes/ZenModesFragmentBase.java @@ -41,6 +41,7 @@ abstract class ZenModesFragmentBase extends RestrictedDashboardFragment { protected Context mContext; protected ZenModesBackend mBackend; + protected ZenHelperBackend mHelperBackend; // Individual pages must implement this method based on what they should do when // the device's zen mode state changes. @@ -59,6 +60,7 @@ abstract class ZenModesFragmentBase extends RestrictedDashboardFragment { public void onAttach(@NonNull Context context) { mContext = context; mBackend = ZenModesBackend.getInstance(context); + mHelperBackend = ZenHelperBackend.getInstance(context); super.onAttach(context); mSettingsObserver.register(); } diff --git a/tests/robotests/src/com/android/settings/notification/modes/ZenModeAppsLinkPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/modes/ZenModeAppsLinkPreferenceControllerTest.java index c8b11855c72..8205f3a5f4a 100644 --- a/tests/robotests/src/com/android/settings/notification/modes/ZenModeAppsLinkPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/notification/modes/ZenModeAppsLinkPreferenceControllerTest.java @@ -43,7 +43,6 @@ import androidx.fragment.app.Fragment; import androidx.preference.Preference; import com.android.settings.SettingsActivity; -import com.android.settings.notification.NotificationBackend; import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.widget.SelectorWithWidgetPreference; @@ -57,7 +56,6 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; -import org.robolectric.util.ReflectionHelpers; import java.util.ArrayList; import java.util.List; @@ -73,7 +71,7 @@ public final class ZenModeAppsLinkPreferenceControllerTest { private ZenModesBackend mZenModesBackend; @Mock - private NotificationBackend mNotificationBackend; + private ZenHelperBackend mHelperBackend; @Mock private ApplicationsState mApplicationsState; @@ -90,8 +88,7 @@ public final class ZenModeAppsLinkPreferenceControllerTest { when(mApplicationsState.newSession(any(), any())).thenReturn(mSession); mController = new ZenModeAppsLinkPreferenceController( mContext, "controller_key", mock(Fragment.class), mApplicationsState, - mZenModesBackend); - ReflectionHelpers.setField(mController, "mNotificationBackend", mNotificationBackend); + mZenModesBackend, mHelperBackend); } private ApplicationsState.AppEntry createAppEntry(String packageName, String label) { @@ -149,7 +146,7 @@ public final class ZenModeAppsLinkPreferenceControllerTest { ApplicationsState.AppEntry entryConv = createAppEntry("test_conv", "test_convLabel"); List appEntries = List.of(entry, entryConv); - when(mNotificationBackend.getPackagesBypassingDnd(mContext.getUserId(), + when(mHelperBackend.getPackagesBypassingDnd(mContext.getUserId(), false)).thenReturn(List.of("test")); assertThat(mController.getAppsBypassingDnd(appEntries)).containsExactly("testLabel"); @@ -167,7 +164,7 @@ public final class ZenModeAppsLinkPreferenceControllerTest { new ArrayList(); appEntries.add(createAppEntry("test", "pkgLabel")); - when(mNotificationBackend.getPackagesBypassingDnd( + when(mHelperBackend.getPackagesBypassingDnd( mContext.getUserId(), false)) .thenReturn(List.of("test")); diff --git a/tests/robotests/src/com/android/settings/notification/modes/ZenModeCallsLinkPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/modes/ZenModeCallsLinkPreferenceControllerTest.java index 04d625a2848..94c2d8ad651 100644 --- a/tests/robotests/src/com/android/settings/notification/modes/ZenModeCallsLinkPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/notification/modes/ZenModeCallsLinkPreferenceControllerTest.java @@ -17,7 +17,7 @@ package com.android.settings.notification.modes; import static android.app.NotificationManager.INTERRUPTION_FILTER_PRIORITY; -import static org.junit.Assert.assertTrue; + import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -29,7 +29,9 @@ import android.net.Uri; import android.platform.test.annotations.EnableFlags; import android.platform.test.flag.junit.SetFlagsRule; import android.service.notification.ZenPolicy; + import androidx.preference.Preference; + import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -38,8 +40,6 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; -import org.robolectric.shadows.ShadowApplication; -import org.robolectric.util.ReflectionHelpers; @RunWith(RobolectricTestRunner.class) public final class ZenModeCallsLinkPreferenceControllerTest { @@ -49,10 +49,9 @@ public final class ZenModeCallsLinkPreferenceControllerTest { @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); - private Context mContext; - @Mock - private ZenModesBackend mBackend; + @Mock private ZenModesBackend mBackend; + @Mock private ZenHelperBackend mHelperBackend; @Before public void setup() { @@ -61,7 +60,7 @@ public final class ZenModeCallsLinkPreferenceControllerTest { mContext = RuntimeEnvironment.application; mController = new ZenModeCallsLinkPreferenceController( - mContext, "something", mBackend); + mContext, "something", mBackend, mHelperBackend); } @Test diff --git a/tests/robotests/src/com/android/settings/notification/modes/ZenModeDisplayLinkPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/modes/ZenModeDisplayLinkPreferenceControllerTest.java index 9d33b0b7600..62aa046a9f3 100644 --- a/tests/robotests/src/com/android/settings/notification/modes/ZenModeDisplayLinkPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/notification/modes/ZenModeDisplayLinkPreferenceControllerTest.java @@ -17,6 +17,7 @@ package com.android.settings.notification.modes; import static android.app.NotificationManager.INTERRUPTION_FILTER_PRIORITY; + import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -28,7 +29,9 @@ import android.net.Uri; import android.platform.test.annotations.EnableFlags; import android.platform.test.flag.junit.SetFlagsRule; import android.service.notification.ZenPolicy; + import androidx.preference.Preference; + import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -47,8 +50,8 @@ public final class ZenModeDisplayLinkPreferenceControllerTest { public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); private Context mContext; - @Mock - private ZenModesBackend mBackend; + @Mock private ZenModesBackend mBackend; + @Mock private ZenHelperBackend mHelperBackend; @Before public void setup() { @@ -57,7 +60,7 @@ public final class ZenModeDisplayLinkPreferenceControllerTest { mContext = RuntimeEnvironment.application; mController = new ZenModeDisplayLinkPreferenceController( - mContext, "something", mBackend); + mContext, "something", mBackend, mHelperBackend); } @Test diff --git a/tests/robotests/src/com/android/settings/notification/modes/ZenModeMessagesLinkPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/modes/ZenModeMessagesLinkPreferenceControllerTest.java index cfeefb40a43..9400f83ebb5 100644 --- a/tests/robotests/src/com/android/settings/notification/modes/ZenModeMessagesLinkPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/notification/modes/ZenModeMessagesLinkPreferenceControllerTest.java @@ -17,7 +17,7 @@ package com.android.settings.notification.modes; import static android.app.NotificationManager.INTERRUPTION_FILTER_PRIORITY; -import static org.junit.Assert.assertTrue; + import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -29,7 +29,9 @@ import android.net.Uri; import android.platform.test.annotations.EnableFlags; import android.platform.test.flag.junit.SetFlagsRule; import android.service.notification.ZenPolicy; + import androidx.preference.Preference; + import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -48,8 +50,8 @@ public final class ZenModeMessagesLinkPreferenceControllerTest { public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); private Context mContext; - @Mock - private ZenModesBackend mBackend; + @Mock private ZenModesBackend mBackend; + @Mock private ZenHelperBackend mHelperBackend; @Before public void setup() { @@ -58,7 +60,7 @@ public final class ZenModeMessagesLinkPreferenceControllerTest { mContext = RuntimeEnvironment.application; mController = new ZenModeMessagesLinkPreferenceController( - mContext, "something", mBackend); + mContext, "something", mBackend, mHelperBackend); } @Test diff --git a/tests/robotests/src/com/android/settings/notification/modes/ZenModeNotifVisLinkPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/modes/ZenModeNotifVisLinkPreferenceControllerTest.java index 646c7aae9c6..00a9fbe341b 100644 --- a/tests/robotests/src/com/android/settings/notification/modes/ZenModeNotifVisLinkPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/notification/modes/ZenModeNotifVisLinkPreferenceControllerTest.java @@ -17,6 +17,7 @@ package com.android.settings.notification.modes; import static android.app.NotificationManager.INTERRUPTION_FILTER_PRIORITY; + import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -28,7 +29,9 @@ import android.net.Uri; import android.platform.test.annotations.EnableFlags; import android.platform.test.flag.junit.SetFlagsRule; import android.service.notification.ZenPolicy; + import androidx.preference.Preference; + import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -47,8 +50,8 @@ public final class ZenModeNotifVisLinkPreferenceControllerTest { public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); private Context mContext; - @Mock - private ZenModesBackend mBackend; + @Mock private ZenModesBackend mBackend; + @Mock private ZenHelperBackend mHelperBackend; @Before public void setup() { @@ -57,7 +60,7 @@ public final class ZenModeNotifVisLinkPreferenceControllerTest { mContext = RuntimeEnvironment.application; mController = new ZenModeNotifVisLinkPreferenceController( - mContext, "something", mBackend); + mContext, "something", mBackend, mHelperBackend); } @Test diff --git a/tests/robotests/src/com/android/settings/notification/modes/ZenModeOtherLinkPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/modes/ZenModeOtherLinkPreferenceControllerTest.java index 26da6ab8dc6..699762ee573 100644 --- a/tests/robotests/src/com/android/settings/notification/modes/ZenModeOtherLinkPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/notification/modes/ZenModeOtherLinkPreferenceControllerTest.java @@ -17,6 +17,7 @@ package com.android.settings.notification.modes; import static android.app.NotificationManager.INTERRUPTION_FILTER_PRIORITY; + import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -28,7 +29,9 @@ import android.net.Uri; import android.platform.test.annotations.EnableFlags; import android.platform.test.flag.junit.SetFlagsRule; import android.service.notification.ZenPolicy; + import androidx.preference.Preference; + import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -48,8 +51,8 @@ public final class ZenModeOtherLinkPreferenceControllerTest { public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); private Context mContext; - @Mock - private ZenModesBackend mBackend; + @Mock private ZenModesBackend mBackend; + @Mock private ZenHelperBackend mHelperBackend; @Before public void setup() { @@ -58,7 +61,7 @@ public final class ZenModeOtherLinkPreferenceControllerTest { mContext = RuntimeEnvironment.application; mController = new ZenModeOtherLinkPreferenceController( - mContext, "something", mBackend); + mContext, "something", mBackend, mHelperBackend); } @Test diff --git a/tests/robotests/src/com/android/settings/notification/modes/ZenModeOtherPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/modes/ZenModeOtherPreferenceControllerTest.java index 6dd918a145f..4a4a6e43aa5 100644 --- a/tests/robotests/src/com/android/settings/notification/modes/ZenModeOtherPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/notification/modes/ZenModeOtherPreferenceControllerTest.java @@ -19,7 +19,9 @@ package com.android.settings.notification.modes; import static android.app.NotificationManager.INTERRUPTION_FILTER_PRIORITY; import static android.service.notification.ZenPolicy.STATE_ALLOW; import static android.service.notification.ZenPolicy.STATE_UNSET; + import static com.google.common.truth.Truth.assertThat; + import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -30,7 +32,9 @@ import android.net.Uri; import android.platform.test.annotations.EnableFlags; import android.platform.test.flag.junit.SetFlagsRule; import android.service.notification.ZenPolicy; + import androidx.preference.TwoStatePreference; + import org.junit.Before; import org.junit.Rule; import org.junit.Test; diff --git a/tests/robotests/src/com/android/settings/notification/modes/ZenModePeopleLinkPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/modes/ZenModePeopleLinkPreferenceControllerTest.java index 81e64648a33..a331318bb50 100644 --- a/tests/robotests/src/com/android/settings/notification/modes/ZenModePeopleLinkPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/notification/modes/ZenModePeopleLinkPreferenceControllerTest.java @@ -17,7 +17,7 @@ package com.android.settings.notification.modes; import static android.app.NotificationManager.INTERRUPTION_FILTER_PRIORITY; -import static org.junit.Assert.assertTrue; + import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -29,7 +29,9 @@ import android.net.Uri; import android.platform.test.annotations.EnableFlags; import android.platform.test.flag.junit.SetFlagsRule; import android.service.notification.ZenPolicy; + import androidx.preference.Preference; + import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -50,6 +52,8 @@ public final class ZenModePeopleLinkPreferenceControllerTest { private Context mContext; @Mock private ZenModesBackend mBackend; + @Mock + private ZenHelperBackend mHelperBackend; @Before public void setup() { @@ -58,7 +62,7 @@ public final class ZenModePeopleLinkPreferenceControllerTest { mContext = RuntimeEnvironment.application; mController = new ZenModePeopleLinkPreferenceController( - mContext, "something", mBackend); + mContext, "something", mBackend, mHelperBackend); } @Test diff --git a/tests/robotests/src/com/android/settings/notification/modes/ZenModePrioritySendersPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/modes/ZenModePrioritySendersPreferenceControllerTest.java index c9159740ed1..709af434e8d 100644 --- a/tests/robotests/src/com/android/settings/notification/modes/ZenModePrioritySendersPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/notification/modes/ZenModePrioritySendersPreferenceControllerTest.java @@ -77,8 +77,8 @@ public final class ZenModePrioritySendersPreferenceControllerTest { public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); private Context mContext; - @Mock - private ZenModesBackend mBackend; + @Mock private ZenModesBackend mBackend; + @Mock private ZenHelperBackend mHelperBackend; private PreferenceCategory mMessagesPrefCategory, mCallsPrefCategory; @@ -90,10 +90,11 @@ public final class ZenModePrioritySendersPreferenceControllerTest { mContext = RuntimeEnvironment.application; - mMessagesController = new ZenModePrioritySendersPreferenceController( - mContext, "messages", true, mBackend); - mCallsController = new ZenModePrioritySendersPreferenceController( - mContext, "calls", false, mBackend); + mMessagesController = new ZenModePrioritySendersPreferenceController(mContext, "messages", + true, mBackend, mHelperBackend); + mCallsController = new ZenModePrioritySendersPreferenceController(mContext, "calls", false, + mBackend, mHelperBackend); + mMessagesPrefCategory = new PreferenceCategory(mContext); mMessagesPrefCategory.setKey(mMessagesController.getPreferenceKey()); mCallsPrefCategory = new PreferenceCategory(mContext); @@ -106,7 +107,7 @@ public final class ZenModePrioritySendersPreferenceControllerTest { Cursor cursor = mock(Cursor.class); when(cursor.getCount()).thenReturn(1); - when(mBackend.queryAllContactsData()).thenReturn(cursor); + when(mHelperBackend.queryAllContactsData()).thenReturn(cursor); } // Makes a preference with the provided key and whether it's a checkbox with diff --git a/tests/robotests/src/com/android/settings/notification/modes/ZenModesSummaryHelperTest.java b/tests/robotests/src/com/android/settings/notification/modes/ZenModesSummaryHelperTest.java index ef8290a4873..13ae4eb108b 100644 --- a/tests/robotests/src/com/android/settings/notification/modes/ZenModesSummaryHelperTest.java +++ b/tests/robotests/src/com/android/settings/notification/modes/ZenModesSummaryHelperTest.java @@ -44,7 +44,7 @@ import java.util.Set; @RunWith(RobolectricTestRunner.class) public class ZenModesSummaryHelperTest { private Context mContext; - private ZenModesBackend mBackend; + private ZenHelperBackend mBackend; private ZenModeSummaryHelper mSummaryHelper; @@ -52,7 +52,7 @@ public class ZenModesSummaryHelperTest { public void setup() { MockitoAnnotations.initMocks(this); mContext = RuntimeEnvironment.application; - mBackend = new ZenModesBackend(mContext); + mBackend = new ZenHelperBackend(mContext); mSummaryHelper = new ZenModeSummaryHelper(mContext, mBackend); }