diff --git a/res/values/strings.xml b/res/values/strings.xml
index 40b160a3915..d0d5be9d2ab 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -9341,6 +9341,8 @@
other {{app_1}, {app_2}, and # more can interrupt}
}
+
+ Calculating\u2026
Allow apps to override
diff --git a/src/com/android/settings/notification/modes/ZenModeAppsLinkPreferenceController.java b/src/com/android/settings/notification/modes/ZenModeAppsLinkPreferenceController.java
index f62dfdd601b..810b1b5efcb 100644
--- a/src/com/android/settings/notification/modes/ZenModeAppsLinkPreferenceController.java
+++ b/src/com/android/settings/notification/modes/ZenModeAppsLinkPreferenceController.java
@@ -21,6 +21,7 @@ import static android.provider.Settings.EXTRA_AUTOMATIC_ZEN_RULE_ID;
import android.content.Context;
import android.os.Bundle;
+import android.text.TextUtils;
import android.util.ArraySet;
import androidx.annotation.NonNull;
@@ -29,6 +30,7 @@ import androidx.core.text.BidiFormatter;
import androidx.fragment.app.Fragment;
import androidx.preference.Preference;
+import com.android.settings.R;
import com.android.settings.core.SubSettingLauncher;
import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.notification.modes.ZenMode;
@@ -82,6 +84,9 @@ class ZenModeAppsLinkPreferenceController extends AbstractZenModePreferenceContr
.toIntent());
mZenMode = zenMode;
mPreference = preference;
+ if (TextUtils.isEmpty(mPreference.getSummary())) {
+ mPreference.setSummary(R.string.zen_mode_apps_calculating);
+ }
if (mApplicationsState != null && mHost != null) {
mAppSession = mApplicationsState.newSession(mAppSessionCallbacks, mHost.getLifecycle());
}
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 83f8de0e70c..f850b1e5519 100644
--- a/tests/robotests/src/com/android/settings/notification/modes/ZenModeAppsLinkPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/modes/ZenModeAppsLinkPreferenceControllerTest.java
@@ -38,7 +38,6 @@ import android.platform.test.flag.junit.SetFlagsRule;
import android.service.notification.ZenPolicy;
import androidx.fragment.app.Fragment;
-import androidx.preference.Preference;
import com.android.settings.SettingsActivity;
import com.android.settingslib.applications.ApplicationsState;
@@ -51,7 +50,6 @@ import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
@@ -118,15 +116,12 @@ public final class ZenModeAppsLinkPreferenceControllerTest {
@Test
public void testUpdateSetsIntent() {
// Creates the preference
- SelectorWithWidgetPreference preference = mock(SelectorWithWidgetPreference.class);
+ SelectorWithWidgetPreference preference = new SelectorWithWidgetPreference(mContext);
// Create a zen mode that allows priority channels to breakthrough.
ZenMode zenMode = createPriorityChannelsZenMode();
- // Capture the intent
- ArgumentCaptor captor = ArgumentCaptor.forClass(Intent.class);
- mController.updateState((Preference) preference, zenMode);
- verify(preference).setIntent(captor.capture());
- Intent launcherIntent = captor.getValue();
+ mController.updateState(preference, zenMode);
+ Intent launcherIntent = preference.getIntent();
assertThat(launcherIntent.getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT))
.isEqualTo("com.android.settings.notification.modes.ZenModeAppsFragment");
@@ -154,13 +149,12 @@ public final class ZenModeAppsLinkPreferenceControllerTest {
@Test
public void testUpdateTriggersRebuild() {
// Creates the preference
- SelectorWithWidgetPreference preference = mock(SelectorWithWidgetPreference.class);
+ SelectorWithWidgetPreference preference = new SelectorWithWidgetPreference(mContext);
// Create a zen mode that allows priority channels to breakthrough.
ZenMode zenMode = createPriorityChannelsZenMode();
// Create some applications.
- ArrayList appEntries =
- new ArrayList();
+ ArrayList appEntries = new ArrayList<>();
appEntries.add(createAppEntry("test", "pkgLabel"));
when(mHelperBackend.getPackagesBypassingDnd(
@@ -168,18 +162,19 @@ public final class ZenModeAppsLinkPreferenceControllerTest {
.thenReturn(List.of("test"));
// Updates the preference with the zen mode. We expect that this causes the app session
- // to trigger a rebuild.
- mController.updateZenMode((Preference) preference, zenMode);
+ // to trigger a rebuild (and display a temporary text in the meantime).
+ mController.updateZenMode(preference, zenMode);
verify(mSession).rebuild(any(), any(), eq(false));
+ assertThat(String.valueOf(preference.getSummary())).isEqualTo("Calculating…");
// Manually triggers the callback that will happen on rebuild.
mController.mAppSessionCallbacks.onRebuildComplete(appEntries);
- verify(preference).setSummary("pkgLabel can interrupt");
+ assertThat(String.valueOf(preference.getSummary())).isEqualTo("pkgLabel can interrupt");
}
@Test
public void testOnPackageListChangedTriggersRebuild() {
- SelectorWithWidgetPreference preference = mock(SelectorWithWidgetPreference.class);
+ SelectorWithWidgetPreference preference = new SelectorWithWidgetPreference(mContext);
// Create a zen mode that allows priority channels to breakthrough.
ZenMode zenMode = createPriorityChannelsZenMode();
mController.updateState(preference, zenMode);
@@ -191,7 +186,7 @@ public final class ZenModeAppsLinkPreferenceControllerTest {
@Test
public void testOnLoadEntriesCompletedTriggersRebuild() {
- SelectorWithWidgetPreference preference = mock(SelectorWithWidgetPreference.class);
+ SelectorWithWidgetPreference preference = new SelectorWithWidgetPreference(mContext);
// Create a zen mode that allows priority channels to breakthrough.
ZenMode zenMode = createPriorityChannelsZenMode();
mController.updateState(preference, zenMode);