Use a temporary summary in the "Apps that can interrupt" preference
We load the list of apps in a background thread, so getting that string later was causing the preference to increase in height, with an annoyingly noticeable animation. Having a placeholder test ensures this doesn't happen (and actually loading is pretty fast, so this text lkely won't even be visible). Fixes: 347744856 Test: atest ZenModeAppsLinkPreferenceControllerTest Flag: android.app.modes_ui Change-Id: I4f9f60104fb8b0abbc7c4279b87daafac481e98a
This commit is contained in:
@@ -9341,6 +9341,8 @@
|
||||
other {{app_1}, {app_2}, and # more can interrupt}
|
||||
}
|
||||
</string>
|
||||
<!-- Text displayed (for a brief time) while the list of bypassing apps is being fetched. Will be replaced by a zen_mode_apps_subtext. [CHAR_LIMIT=60] -->
|
||||
<string name="zen_mode_apps_calculating">Calculating\u2026</string>
|
||||
|
||||
<!-- [CHAR LIMIT=100] Zen mode settings: Allow apps to bypass DND -->
|
||||
<string name="zen_mode_bypassing_apps">Allow apps to override</string>
|
||||
|
@@ -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());
|
||||
}
|
||||
|
@@ -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<Intent> 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<ApplicationsState.AppEntry> appEntries =
|
||||
new ArrayList<ApplicationsState.AppEntry>();
|
||||
ArrayList<ApplicationsState.AppEntry> 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);
|
||||
|
Reference in New Issue
Block a user