diff --git a/src/com/android/settings/connecteddevice/display/ExternalDisplayPreferenceFragment.java b/src/com/android/settings/connecteddevice/display/ExternalDisplayPreferenceFragment.java index 84fbc05f1c9..75b94395963 100644 --- a/src/com/android/settings/connecteddevice/display/ExternalDisplayPreferenceFragment.java +++ b/src/com/android/settings/connecteddevice/display/ExternalDisplayPreferenceFragment.java @@ -16,8 +16,6 @@ package com.android.settings.connecteddevice.display; -import static android.view.Display.INVALID_DISPLAY; - import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.DISPLAY_ID_ARG; import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.EXTERNAL_DISPLAY_HELP_URL; import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.EXTERNAL_DISPLAY_NOT_FOUND_RESOURCE; @@ -60,7 +58,6 @@ import com.android.settingslib.display.DisplayDensityUtils; import com.android.settingslib.widget.FooterPreference; import com.android.settingslib.widget.IllustrationPreference; import com.android.settingslib.widget.MainSwitchPreference; -import com.android.settingslib.widget.TwoTargetPreference; import java.util.ArrayList; import java.util.HashMap; @@ -87,10 +84,12 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen EXTERNAL_DISPLAY_RESOLUTION(60, "external_display_resolution", R.string.external_display_resolution_settings_title), - // Built-in display link is after per-display settings. + // Built-in display link is before per-display settings. BUILTIN_DISPLAY_LIST(70, "builtin_display_list_preference", R.string.builtin_display_settings_category), + EXTERNAL_DISPLAY_LIST(-1, "external_display_list", null), + // If shown, footer should appear below everything. FOOTER(90, "footer_preference", null); @@ -106,16 +105,27 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen public final String key; @Nullable public final Integer titleResource; - void apply(Preference preference) { + /** + * Applies this basic data to the given preference. + * + * @param preference object whose properties to set + * @param nth if non-null, disambiguates the key so that other preferences can have the same + * basic properties. Does not affect the order. + */ + void apply(Preference preference, @Nullable Integer nth) { if (order != -1) { preference.setOrder(order); } if (titleResource != null) { preference.setTitle(titleResource); } - preference.setKey(key); + preference.setKey(nth == null ? key : keyForNth(nth)); preference.setPersistent(false); } + + String keyForNth(int nth) { + return key + "_" + nth; + } } static final int EXTERNAL_DISPLAY_SETTINGS_RESOURCE = R.xml.external_display_settings; @@ -131,12 +141,8 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen R.drawable.external_display_mirror_portrait; static final int EXTERNAL_DISPLAY_SIZE_SUMMARY_RESOURCE = R.string.screen_zoom_short_summary; - @VisibleForTesting - static final String PREVIOUSLY_SHOWN_LIST_KEY = "mPreviouslyShownListOfDisplays"; private boolean mStarted; @Nullable - private IllustrationPreference mImagePreference; - @Nullable private Preference mDisplayTopologyPreference; @Nullable private PreferenceCategory mBuiltinDisplayPreference; @@ -156,7 +162,6 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen scheduleUpdate(); } }; - private boolean mPreviouslyShownListOfDisplays; public ExternalDisplayPreferenceFragment() {} @@ -175,12 +180,6 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen return EXTERNAL_DISPLAY_HELP_URL; } - @Override - public void onSaveInstanceStateCallback(@NonNull Bundle outState) { - outState.putSerializable(PREVIOUSLY_SHOWN_LIST_KEY, - mPreviouslyShownListOfDisplays); - } - @Override public void onCreateCallback(@Nullable Bundle icicle) { if (mInjector == null) { @@ -191,7 +190,6 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen @Override public void onActivityCreatedCallback(@Nullable Bundle savedInstanceState) { - restoreState(savedInstanceState); View view = getView(); TextView emptyView = null; if (view != null) { @@ -241,17 +239,6 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen .setSourceMetricsCategory(getMetricsCategory()).launch(); } - @VisibleForTesting - protected void launchExternalDisplaySettings(final int displayId) { - final Bundle args = new Bundle(); - var context = getPrefContext(); - args.putInt(DISPLAY_ID_ARG, displayId); - new SubSettingLauncher(context) - .setDestination(this.getClass().getName()) - .setArguments(args) - .setSourceMetricsCategory(getMetricsCategory()).launch(); - } - @VisibleForTesting protected void launchBuiltinDisplaySettings() { final Bundle args = new Bundle(); @@ -275,30 +262,33 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen var pref = refresh.findUnusedPreference(PrefBasics.FOOTER.key); if (pref == null) { pref = newFooterPreference(context); - PrefBasics.FOOTER.apply(pref); + PrefBasics.FOOTER.apply(pref, /* nth= */ null); } pref.setTitle(title); refresh.addPreference(pref); } @NonNull - private ListPreference reuseRotationPreference(@NonNull Context context, PrefRefresh refresh) { + private ListPreference reuseRotationPreference(@NonNull Context context, PrefRefresh refresh, + int position) { ListPreference pref = refresh.findUnusedPreference( - PrefBasics.EXTERNAL_DISPLAY_ROTATION.key); + PrefBasics.EXTERNAL_DISPLAY_ROTATION.keyForNth(position)); if (pref == null) { pref = new ListPreference(context); - PrefBasics.EXTERNAL_DISPLAY_ROTATION.apply(pref); + PrefBasics.EXTERNAL_DISPLAY_ROTATION.apply(pref, position); } refresh.addPreference(pref); return pref; } @NonNull - private Preference reuseResolutionPreference(@NonNull Context context, PrefRefresh refresh) { - var pref = refresh.findUnusedPreference(PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.key); + private Preference reuseResolutionPreference(@NonNull Context context, PrefRefresh refresh, + int position) { + var pref = refresh.findUnusedPreference( + PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.keyForNth(position)); if (pref == null) { pref = new Preference(context); - PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.apply(pref); + PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.apply(pref, position); } refresh.addPreference(pref); return pref; @@ -306,41 +296,34 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen @NonNull private MainSwitchPreference reuseUseDisplayPreference( - @NonNull Context context, @NonNull PrefRefresh refresh) { + Context context, PrefRefresh refresh, int position) { MainSwitchPreference pref = refresh.findUnusedPreference( - PrefBasics.EXTERNAL_DISPLAY_USE.key); + PrefBasics.EXTERNAL_DISPLAY_USE.keyForNth(position)); if (pref == null) { pref = new MainSwitchPreference(context); - PrefBasics.EXTERNAL_DISPLAY_USE.apply(pref); + PrefBasics.EXTERNAL_DISPLAY_USE.apply(pref, position); } refresh.addPreference(pref); return pref; } @NonNull - @VisibleForTesting - IllustrationPreference getIllustrationPreference(@NonNull Context context) { - if (mImagePreference == null) { - mImagePreference = new IllustrationPreference(context); - PrefBasics.ILLUSTRATION.apply(mImagePreference); + private IllustrationPreference reuseIllustrationPreference( + Context context, PrefRefresh refresh) { + IllustrationPreference pref = refresh.findUnusedPreference(PrefBasics.ILLUSTRATION.key); + if (pref == null) { + pref = new IllustrationPreference(context); + PrefBasics.ILLUSTRATION.apply(pref, /* nth= */ null); } - return mImagePreference; - } - - /** - * @return return display id argument of this settings page. - */ - @VisibleForTesting - protected int getDisplayIdArg() { - var args = getArguments(); - return args != null ? args.getInt(DISPLAY_ID_ARG, INVALID_DISPLAY) : INVALID_DISPLAY; + refresh.addPreference(pref); + return pref; } @NonNull private PreferenceCategory getBuiltinDisplayListPreference(@NonNull Context context) { if (mBuiltinDisplayPreference == null) { mBuiltinDisplayPreference = new PreferenceCategory(context); - PrefBasics.BUILTIN_DISPLAY_LIST.apply(mBuiltinDisplayPreference); + PrefBasics.BUILTIN_DISPLAY_LIST.apply(mBuiltinDisplayPreference, /* nth= */ null); } return mBuiltinDisplayPreference; } @@ -356,7 +339,7 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen @NonNull Preference getDisplayTopologyPreference(@NonNull Context context) { if (mDisplayTopologyPreference == null) { mDisplayTopologyPreference = new DisplayTopologyPreference(context); - PrefBasics.DISPLAY_TOPOLOGY.apply(mDisplayTopologyPreference); + PrefBasics.DISPLAY_TOPOLOGY.apply(mDisplayTopologyPreference, /* nth= */ null); } return mDisplayTopologyPreference; } @@ -366,23 +349,23 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen if (pref == null) { pref = new MirrorPreference(context, DesktopExperienceFlags.ENABLE_DISPLAY_CONTENT_MODE_MANAGEMENT.isTrue()); - PrefBasics.MIRROR.apply(pref); + PrefBasics.MIRROR.apply(pref, /* nth= */ null); } refresh.addPreference(pref); } @NonNull private AccessibilitySeekBarPreference reuseSizePreference(Context context, - PrefRefresh refresh, int displayId) { + PrefRefresh refresh, int displayId, int position) { AccessibilitySeekBarPreference pref = - refresh.findUnusedPreference(PrefBasics.EXTERNAL_DISPLAY_SIZE.key); + refresh.findUnusedPreference(PrefBasics.EXTERNAL_DISPLAY_SIZE.keyForNth(position)); if (pref == null) { pref = new AccessibilitySeekBarPreference(context, /* attrs= */ null); pref.setIconStart(R.drawable.ic_remove_24dp); pref.setIconStartContentDescription(R.string.screen_zoom_make_smaller_desc); pref.setIconEnd(R.drawable.ic_add_24dp); pref.setIconEndContentDescription(R.string.screen_zoom_make_larger_desc); - PrefBasics.EXTERNAL_DISPLAY_SIZE.apply(pref); + PrefBasics.EXTERNAL_DISPLAY_SIZE.apply(pref, position); setStateForDisplaySizePreference(context, displayId, pref); } @@ -404,74 +387,43 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen preference.setOnSeekBarChangeListener(seekBarChangeHandler); } - private void restoreState(@Nullable Bundle savedInstanceState) { - if (savedInstanceState == null) { - return; - } - mPreviouslyShownListOfDisplays = Boolean.TRUE.equals(savedInstanceState.getSerializable( - PREVIOUSLY_SHOWN_LIST_KEY, Boolean.class)); - } - private void update() { final var screen = getPreferenceScreen(); if (screen == null || mInjector == null || mInjector.getContext() == null) { return; } try (var cleanableScreen = new PrefRefresh(screen)) { - updateScreenForDisplayId(getDisplayIdArg(), cleanableScreen, mInjector.getContext()); + updateScreen(cleanableScreen, mInjector.getContext()); } } - private void updateScreenForDisplayId(final int displayId, - @NonNull final PrefRefresh screen, @NonNull Context context) { - final var displaysToShow = externalDisplaysToShow(displayId); + private void updateScreen(final PrefRefresh screen, Context context) { + final var displaysToShow = externalDisplaysToShow(); - if (displaysToShow.isEmpty() && displayId == INVALID_DISPLAY) { - showTextWhenNoDisplaysToShow(screen, context); - } else if (displaysToShow.size() == 1 - && ((displayId == INVALID_DISPLAY && !mPreviouslyShownListOfDisplays) - || displaysToShow.get(0).getDisplayId() == displayId)) { - showDisplaySettings(displaysToShow.get(0), screen, context); - if (displayId == INVALID_DISPLAY && isTopologyPaneEnabled(mInjector)) { - // Only show the topology pane if the user did not arrive via the displays list. - maybeAddV2Components(context, screen); - } - } else if (displayId == INVALID_DISPLAY) { - // If ever shown a list of displays - keep showing it for consistency after - // disconnecting one of the displays, and only one display is left. - mPreviouslyShownListOfDisplays = true; + if (displaysToShow.isEmpty()) { + showTextWhenNoDisplaysToShow(screen, context, /* position= */ 0); + } else { showDisplaysList(displaysToShow, screen, context); } - updateSettingsTitle(displaysToShow, displayId); - } - private void updateSettingsTitle(@NonNull final List displaysToShow, int displayId) { final Activity activity = getCurrentActivity(); - if (activity == null) { - return; + if (activity != null) { + activity.setTitle(EXTERNAL_DISPLAY_TITLE_RESOURCE); } - if (displaysToShow.size() == 1 && displaysToShow.get(0).getDisplayId() == displayId) { - var displayName = displaysToShow.get(0).getName(); - if (!displayName.isEmpty()) { - activity.setTitle(displayName.substring(0, Math.min(displayName.length(), 40))); - return; - } - } - activity.setTitle(EXTERNAL_DISPLAY_TITLE_RESOURCE); } private void showTextWhenNoDisplaysToShow(@NonNull final PrefRefresh screen, - @NonNull Context context) { + @NonNull Context context, int position) { if (isUseDisplaySettingEnabled(mInjector)) { - addUseDisplayPreferenceNoDisplaysFound(context, screen); + addUseDisplayPreferenceNoDisplaysFound(context, screen, position); } addFooterPreference(context, screen, EXTERNAL_DISPLAY_NOT_FOUND_FOOTER_RESOURCE); } - private static PreferenceCategory getCategoryForDisplay(@NonNull Display display, - @NonNull PrefRefresh screen, @NonNull Context context) { + private static PreferenceCategory reuseDisplayCategory( + PrefRefresh screen, Context context, int position) { // The rest of the settings are in a category with the display name as the title. - String categoryKey = "expanded_display_items_" + display.getDisplayId(); + String categoryKey = PrefBasics.EXTERNAL_DISPLAY_LIST.keyForNth(position); var category = (PreferenceCategory) screen.findUnusedPreference(categoryKey); if (category != null) { @@ -479,45 +431,30 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen } else { category = new PreferenceCategory(context); screen.addPreference(category); - category.setPersistent(false); - category.setKey(categoryKey); - category.setTitle(display.getName()); - category.setOrder(PrefBasics.BUILTIN_DISPLAY_LIST.order + 1); + PrefBasics.EXTERNAL_DISPLAY_LIST.apply(category, position); + category.setOrder(PrefBasics.BUILTIN_DISPLAY_LIST.order + 1 + position); } return category; } - private void showDisplaySettings(@NonNull Display display, @NonNull PrefRefresh screen, - @NonNull Context context) { + private void showDisplaySettings(Display display, PrefRefresh refresh, + Context context, boolean includeV1Helpers, int position) { final var isEnabled = mInjector != null && mInjector.isDisplayEnabled(display); if (isUseDisplaySettingEnabled(mInjector)) { - addUseDisplayPreferenceForDisplay(context, screen, display, isEnabled); + addUseDisplayPreferenceForDisplay(context, refresh, display, isEnabled, position); } if (!isEnabled) { // Skip all other settings return; } final var displayRotation = getDisplayRotation(display.getDisplayId()); - if (!isTopologyPaneEnabled(mInjector)) { - screen.addPreference(updateIllustrationImage(context, displayRotation)); + if (includeV1Helpers) { + addIllustrationImage(context, refresh, displayRotation); } - if (isTopologyPaneEnabled(mInjector)) { - var displayCategory = getCategoryForDisplay(display, screen, context); - try (var categoryRefresh = new PrefRefresh(displayCategory)) { - addDisplaySettings(context, categoryRefresh, display, displayRotation); - } - } else { - addDisplaySettings(context, screen, display, displayRotation); - } - - } - - private void addDisplaySettings(Context context, PrefRefresh refresh, Display display, - int displayRotation) { - addResolutionPreference(context, refresh, display); - addRotationPreference(context, refresh, display, displayRotation); + addResolutionPreference(context, refresh, display, position); + addRotationPreference(context, refresh, display, displayRotation, position); if (isResolutionSettingEnabled(mInjector)) { // Do not show the footer about changing resolution affecting apps. This is not in the // UX design for v2, and there is no good place to put it, since (a) if it is on the @@ -529,13 +466,13 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen // inconsistent with the topology pane, which shows that display. // TODO(b/352648432): probably remove footer once the pane and rest of v2 UI is in // place. - if (!isTopologyPaneEnabled(mInjector)) { + if (includeV1Helpers) { addFooterPreference( context, refresh, EXTERNAL_DISPLAY_CHANGE_RESOLUTION_FOOTER_RESOURCE); } } if (isDisplaySizeSettingEnabled(mInjector)) { - addSizePreference(context, refresh, display.getDisplayId()); + addSizePreference(context, refresh, display.getDisplayId(), position); } } @@ -555,66 +492,26 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen private void showDisplaysList(@NonNull List displaysToShow, @NonNull PrefRefresh screen, @NonNull Context context) { maybeAddV2Components(context, screen); - int order = PrefBasics.BUILTIN_DISPLAY_LIST.order; + int position = 0; + boolean includeV1Helpers = !isTopologyPaneEnabled(mInjector) && displaysToShow.size() <= 1; for (var display : displaysToShow) { - var pref = getDisplayPreference(context, display, screen, ++order); - pref.setSummary(display.getMode().getPhysicalWidth() + " x " - + display.getMode().getPhysicalHeight()); - } - } - - @VisibleForTesting - static String displayListDisplayCategoryKey(int displayId) { - return "display_list_display_category_" + displayId; - } - - @VisibleForTesting - static String resolutionRotationPreferenceKey(int displayId) { - return "display_id_" + displayId; - } - - private Preference getDisplayPreference(@NonNull Context context, - @NonNull Display display, @NonNull PrefRefresh groupCleanable, int categoryOrder) { - var itemKey = resolutionRotationPreferenceKey(display.getDisplayId()); - var categoryKey = displayListDisplayCategoryKey(display.getDisplayId()); - var category = (PreferenceCategory) groupCleanable.findUnusedPreference(categoryKey); - - if (category != null) { - groupCleanable.addPreference(category); - return category.findPreference(itemKey); - } else { - category = new PreferenceCategory(context); - category.setPersistent(false); - category.setKey(categoryKey); - category.setOrder(categoryOrder); - // Must add the category to the hierarchy before adding its descendants. Otherwise - // the category will not have a preference manager, which causes an exception when a - // child is added to it. - groupCleanable.addPreference(category); - - var prefItem = new DisplayPreference(context, display); - prefItem.setTitle( - context.getString(PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.titleResource) + " | " - + context.getString(PrefBasics.EXTERNAL_DISPLAY_ROTATION.titleResource)); - prefItem.setKey(itemKey); - - category.addPreference(prefItem); + var category = reuseDisplayCategory(screen, context, position); category.setTitle(display.getName()); - return prefItem; + try (var refresh = new PrefRefresh(category)) { + // The category may have already been populated if it was retrieved from `screen`, + // but we still need to update resolution and rotation items. + showDisplaySettings(display, refresh, context, includeV1Helpers, position); + } + + position++; } } - private List externalDisplaysToShow(int displayIdToShow) { + private List externalDisplaysToShow() { if (mInjector == null) { return List.of(); } - if (displayIdToShow != INVALID_DISPLAY) { - var display = mInjector.getDisplay(displayIdToShow); - if (display != null && isDisplayAllowed(display, mInjector)) { - return List.of(display); - } - } var displaysToShow = new ArrayList(); for (var display : mInjector.getAllDisplays()) { if (display != null && isDisplayAllowed(display, mInjector)) { @@ -624,16 +521,17 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen return displaysToShow; } - private void addUseDisplayPreferenceNoDisplaysFound(Context context, PrefRefresh refresh) { - final var pref = reuseUseDisplayPreference(context, refresh); + private void addUseDisplayPreferenceNoDisplaysFound(Context context, PrefRefresh refresh, + int position) { + final var pref = reuseUseDisplayPreference(context, refresh, position); pref.setChecked(false); pref.setEnabled(false); pref.setOnPreferenceChangeListener(null); } private void addUseDisplayPreferenceForDisplay(final Context context, - PrefRefresh refresh, final Display display, boolean isEnabled) { - final var pref = reuseUseDisplayPreference(context, refresh); + PrefRefresh refresh, final Display display, boolean isEnabled, int position) { + final var pref = reuseUseDisplayPreference(context, refresh, position); pref.setChecked(isEnabled); pref.setEnabled(true); pref.setOnPreferenceChangeListener((p, newValue) -> { @@ -654,20 +552,19 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen }); } - private Preference updateIllustrationImage(@NonNull final Context context, + private void addIllustrationImage(final Context context, PrefRefresh refresh, final int displayRotation) { - var pref = getIllustrationPreference(context); + var pref = reuseIllustrationPreference(context, refresh); if (displayRotation % 2 == 0) { pref.setLottieAnimationResId(EXTERNAL_DISPLAY_PORTRAIT_DRAWABLE); } else { pref.setLottieAnimationResId(EXTERNAL_DISPLAY_LANDSCAPE_DRAWABLE); } - return pref; } private void addRotationPreference(final Context context, - PrefRefresh refresh, final Display display, final int displayRotation) { - var pref = reuseRotationPreference(context, refresh); + PrefRefresh refresh, final Display display, final int displayRotation, int position) { + var pref = reuseRotationPreference(context, refresh, position); if (mRotationEntries == null || mRotationEntriesValues == null) { mRotationEntries = new String[] { context.getString(R.string.external_display_standard_rotation), @@ -694,8 +591,8 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen } private void addResolutionPreference(final Context context, PrefRefresh refresh, - final Display display) { - var pref = reuseResolutionPreference(context, refresh); + final Display display, int position) { + var pref = reuseResolutionPreference(context, refresh, position); pref.setSummary(display.getMode().getPhysicalWidth() + " x " + display.getMode().getPhysicalHeight()); pref.setOnPreferenceClickListener((Preference p) -> { @@ -706,8 +603,9 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen pref.setEnabled(isResolutionSettingEnabled(mInjector)); } - private void addSizePreference(final Context context, PrefRefresh refresh, int displayId) { - var pref = reuseSizePreference(context, refresh, displayId); + private void addSizePreference(final Context context, PrefRefresh refresh, int displayId, + int position) { + var pref = reuseSizePreference(context, refresh, displayId, position); pref.setSummary(EXTERNAL_DISPLAY_SIZE_SUMMARY_RESOURCE); pref.setOnPreferenceClickListener( (Preference p) -> { @@ -804,27 +702,6 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen public void onStopTrackingTouch(@NonNull SeekBar seekBar) {} } - @VisibleForTesting - class DisplayPreference extends TwoTargetPreference - implements Preference.OnPreferenceClickListener { - private final int mDisplayId; - - DisplayPreference(@NonNull final Context context, @NonNull final Display display) { - super(context); - mDisplayId = display.getDisplayId(); - - setPersistent(false); - setOnPreferenceClickListener(this); - } - - @Override - public boolean onPreferenceClick(@NonNull Preference preference) { - launchExternalDisplaySettings(mDisplayId); - writePreferenceClickMetric(preference); - return true; - } - } - private static class PrefRefresh implements AutoCloseable { private final PreferenceGroup mScreen; private final HashMap mUnusedPreferences = new HashMap<>(); diff --git a/tests/unit/src/com/android/settings/connecteddevice/display/ExternalDisplayPreferenceFragmentTest.java b/tests/unit/src/com/android/settings/connecteddevice/display/ExternalDisplayPreferenceFragmentTest.java index a87e66b1b96..0b118a78358 100644 --- a/tests/unit/src/com/android/settings/connecteddevice/display/ExternalDisplayPreferenceFragmentTest.java +++ b/tests/unit/src/com/android/settings/connecteddevice/display/ExternalDisplayPreferenceFragmentTest.java @@ -21,9 +21,6 @@ import static com.android.settings.connecteddevice.display.ExternalDisplayPrefer import static com.android.settings.connecteddevice.display.ExternalDisplayPreferenceFragment.EXTERNAL_DISPLAY_NOT_FOUND_FOOTER_RESOURCE; import static com.android.settings.connecteddevice.display.ExternalDisplayPreferenceFragment.EXTERNAL_DISPLAY_SETTINGS_RESOURCE; import static com.android.settings.connecteddevice.display.ExternalDisplayPreferenceFragment.EXTERNAL_DISPLAY_SIZE_SUMMARY_RESOURCE; -import static com.android.settings.connecteddevice.display.ExternalDisplayPreferenceFragment.PREVIOUSLY_SHOWN_LIST_KEY; -import static com.android.settings.connecteddevice.display.ExternalDisplayPreferenceFragment.displayListDisplayCategoryKey; -import static com.android.settings.connecteddevice.display.ExternalDisplayPreferenceFragment.resolutionRotationPreferenceKey; import static com.android.settings.flags.Flags.FLAG_DISPLAY_SIZE_CONNECTED_DISPLAY_SETTING; import static com.android.settings.flags.Flags.FLAG_DISPLAY_TOPOLOGY_PANE_IN_DISPLAY_LIST; @@ -53,7 +50,6 @@ import androidx.preference.PreferenceScreen; import androidx.test.annotation.UiThreadTest; import androidx.test.ext.junit.runners.AndroidJUnit4; -import com.android.settings.connecteddevice.display.ExternalDisplayPreferenceFragment.DisplayPreference; import com.android.settings.connecteddevice.display.ExternalDisplayPreferenceFragment.PrefBasics; import com.android.settingslib.widget.MainSwitchPreference; @@ -67,7 +63,6 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa @Nullable private ExternalDisplayPreferenceFragment mFragment; private int mPreferenceIdFromResource; - private int mDisplayIdArg = INVALID_DISPLAY; private boolean mLaunchedBuiltinSettings; private int mResolutionSelectorDisplayId = INVALID_DISPLAY; @Mock @@ -80,17 +75,20 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa assertThat(mPreferenceIdFromResource).isEqualTo(EXTERNAL_DISPLAY_SETTINGS_RESOURCE); } - private void assertDisplayList(boolean present, int displayId) { - // In display list fragment, there is a combined resolution/rotation preference key. - var category = mPreferenceScreen.findPreference(displayListDisplayCategoryKey(displayId)); - var pref = mPreferenceScreen.findPreference(resolutionRotationPreferenceKey(displayId)); - if (present) { - assertThat(category).isNotNull(); - assertThat(pref).isNotNull(); - } else { - assertThat(category).isNull(); - assertThat(pref).isNull(); + private PreferenceCategory getExternalDisplayCategory(int positionIndex) { + return mPreferenceScreen.findPreference( + PrefBasics.EXTERNAL_DISPLAY_LIST.keyForNth(positionIndex)); + } + + private void assertDisplayListCount(int expectedCount) { + int actualCount = 0; + for (int i = 0; i < mPreferenceScreen.getPreferenceCount(); i++) { + Preference child = mPreferenceScreen.getPreference(i); + if (child.getKey().startsWith(PrefBasics.EXTERNAL_DISPLAY_LIST.key)) { + actualCount++; + } } + assertThat(actualCount).isEqualTo(expectedCount); } @Test @@ -100,27 +98,15 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa var fragment = initFragment(); var outState = new Bundle(); - fragment.onSaveInstanceStateCallback(outState); - assertThat(outState.getBoolean(PREVIOUSLY_SHOWN_LIST_KEY)).isFalse(); assertThat(mHandler.getPendingMessages().size()).isEqualTo(1); - // Combined resolution/refresh rate are not available in displays list because the pane is - // disabled (v1 UI). - assertDisplayList(false, EXTERNAL_DISPLAY_ID); - assertDisplayList(false, OVERLAY_DISPLAY_ID); - // Individual resolution preference is not available in displays list. - assertThat(mPreferenceScreen.findPreference( - PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.key)) - .isNull(); + assertDisplayListCount(0); verify(mMockedInjector, never()).getAllDisplays(); mHandler.flush(); assertThat(mHandler.getPendingMessages().size()).isEqualTo(0); verify(mMockedInjector).getAllDisplays(); - assertDisplayList(true, EXTERNAL_DISPLAY_ID); - assertDisplayList(true, OVERLAY_DISPLAY_ID); - fragment.onSaveInstanceStateCallback(outState); - assertThat(outState.getBoolean(PREVIOUSLY_SHOWN_LIST_KEY)).isTrue(); + assertDisplayListCount(2); Preference pref = mPreferenceScreen.findPreference(PrefBasics.DISPLAY_TOPOLOGY.key); assertThat(pref).isNull(); @@ -143,7 +129,8 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa pref = mPreferenceScreen.findPreference(PrefBasics.MIRROR.key); assertThat(pref).isNotNull(); - assertDisplayList(false, mDisplays[1].getDisplayId()); + assertDisplayListCount(1); + assertThat("" + getExternalDisplayCategory(0).getTitle()).isEqualTo("HDMI"); PreferenceCategory listPref = mPreferenceScreen.findPreference(PrefBasics.BUILTIN_DISPLAY_LIST.key); @@ -168,8 +155,7 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa pref = mPreferenceScreen.findPreference(PrefBasics.MIRROR.key); assertThat(pref).isNull(); - assertDisplayList(false, EXTERNAL_DISPLAY_ID); - assertDisplayList(false, OVERLAY_DISPLAY_ID); + assertDisplayListCount(0); var listPref = mPreferenceScreen.findPreference(PrefBasics.BUILTIN_DISPLAY_LIST.key); assertThat(listPref).isNull(); @@ -179,46 +165,36 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa @UiThreadTest public void testLaunchDisplaySettingFromList() { initFragment(); + doReturn(true).when(mMockedInjector).isDisplayEnabled(any()); mHandler.flush(); - assertDisplayList(true, EXTERNAL_DISPLAY_ID); - assertDisplayList(true, OVERLAY_DISPLAY_ID); - PreferenceCategory display1Category = mPreferenceScreen.findPreference( - displayListDisplayCategoryKey(EXTERNAL_DISPLAY_ID)); - var display1Pref = (DisplayPreference) display1Category.getPreference(0); - PreferenceCategory display2Category = mPreferenceScreen.findPreference( - displayListDisplayCategoryKey(OVERLAY_DISPLAY_ID)); - var display2Pref = (DisplayPreference) display2Category.getPreference(0); - assertThat(display1Pref.getKey()).isEqualTo( - resolutionRotationPreferenceKey(EXTERNAL_DISPLAY_ID)); + assertDisplayListCount(2); + var display1Category = getExternalDisplayCategory(0); + var display2Category = getExternalDisplayCategory(1); assertThat("" + display1Category.getTitle()).isEqualTo("HDMI"); - assertThat("" + display1Pref.getSummary()).isEqualTo("1920 x 1080"); - display1Pref.onPreferenceClick(display1Pref); - assertThat(mDisplayIdArg).isEqualTo(1); - verify(mMockedMetricsLogger).writePreferenceClickMetric(display1Pref); - assertThat(display2Pref.getKey()).isEqualTo( - resolutionRotationPreferenceKey(OVERLAY_DISPLAY_ID)); + var display1Resolution = display1Category.findPreference( + PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.keyForNth(0)); + display1Resolution.performClick(); + assertThat(mResolutionSelectorDisplayId).isEqualTo(1); + verify(mMockedMetricsLogger).writePreferenceClickMetric(display1Resolution); + var display2Resolution = display2Category.findPreference( + PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.keyForNth(1)); assertThat("" + display2Category.getTitle()).isEqualTo("Overlay #1"); - assertThat("" + display2Pref.getSummary()).isEqualTo("1240 x 780"); - display2Pref.onPreferenceClick(display2Pref); - assertThat(mDisplayIdArg).isEqualTo(2); - verify(mMockedMetricsLogger).writePreferenceClickMetric(display2Pref); + assertThat("" + display2Resolution.getSummary()).isEqualTo("1240 x 780"); + display2Resolution.performClick(); + assertThat(mResolutionSelectorDisplayId).isEqualTo(2); + verify(mMockedMetricsLogger).writePreferenceClickMetric(display2Resolution); } @Test @UiThreadTest public void testShowDisplayListForOnlyOneDisplay_PreviouslyShownList() { var fragment = initFragment(); - // Previously shown list of displays - fragment.onActivityCreatedCallback(createBundleForPreviouslyShownList()); // Only one display available doReturn(new Display[] {mDisplays[1]}).when(mMockedInjector).getAllDisplays(); mHandler.flush(); int attachedId = mDisplays[1].getDisplayId(); - assertDisplayList(true, attachedId); - assertThat(mPreferenceScreen.findPreference( - resolutionRotationPreferenceKey(attachedId))) - .isNotNull(); - assertDisplayList(false, mDisplays[2].getDisplayId()); + assertDisplayListCount(1); + assertThat("" + getExternalDisplayCategory(0).getTitle()).isEqualTo("HDMI"); } @Test @@ -231,14 +207,15 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa // Init initFragment(); mHandler.flush(); - assertDisplayList(false, mDisplays[1].getDisplayId()); - var pref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.key); + assertDisplayListCount(1); + var category = getExternalDisplayCategory(0); + var pref = category.findPreference(PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.keyForNth(0)); assertThat(pref).isNotNull(); - pref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_ROTATION.key); + pref = category.findPreference(PrefBasics.EXTERNAL_DISPLAY_ROTATION.keyForNth(0)); assertThat(pref).isNotNull(); - var footerPref = mPreferenceScreen.findPreference(PrefBasics.FOOTER.key); + var footerPref = category.findPreference(PrefBasics.FOOTER.key); assertThat(footerPref).isNotNull(); - var sizePref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_SIZE.key); + var sizePref = category.findPreference(PrefBasics.EXTERNAL_DISPLAY_SIZE.keyForNth(0)); assertThat(sizePref).isNull(); assertThat("" + footerPref.getTitle()) .isEqualTo(getText(EXTERNAL_DISPLAY_CHANGE_RESOLUTION_FOOTER_RESOURCE)); @@ -253,15 +230,12 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa // Init initFragment(); mHandler.flush(); - assertDisplayList(false, mDisplays[1].getDisplayId()); - assertDisplayList(false, mDisplays[2].getDisplayId()); - var pref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.key); - assertThat(pref).isNotNull(); - pref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_ROTATION.key); - assertThat(pref).isNotNull(); - var footerPref = mPreferenceScreen.findPreference(PrefBasics.FOOTER.key); + assertDisplayListCount(1); + var category = getExternalDisplayCategory(0); + assertThat("" + category.getTitle()).isEqualTo("HDMI"); + var footerPref = category.findPreference(PrefBasics.FOOTER.key); assertThat(footerPref).isNotNull(); - var sizePref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_SIZE.key); + var sizePref = category.findPreference(PrefBasics.EXTERNAL_DISPLAY_SIZE.keyForNth(0)); assertThat(sizePref).isNotNull(); assertThat("" + footerPref.getTitle()) .isEqualTo(getText(EXTERNAL_DISPLAY_CHANGE_RESOLUTION_FOOTER_RESOURCE)); @@ -270,47 +244,48 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa @Test @UiThreadTest public void testShowOneEnabledDisplay_FewAvailable() { - mDisplayIdArg = 1; doReturn(true).when(mMockedInjector).isDisplayEnabled(any()); initFragment(); - verify(mMockedInjector, never()).getDisplay(anyInt()); + verify(mMockedInjector, never()).getAllDisplays(); mHandler.flush(); - verify(mMockedInjector).getDisplay(mDisplayIdArg); - var pref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.key); + verify(mMockedInjector, never()).getDisplay(anyInt()); + verify(mMockedInjector).getAllDisplays(); + var pref = mPreferenceScreen.findPreference( + PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.keyForNth(0)); assertThat(pref).isNotNull(); - pref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_ROTATION.key); + pref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_ROTATION.keyForNth(0)); assertThat(pref).isNotNull(); var footerPref = mPreferenceScreen.findPreference(PrefBasics.FOOTER.key); - assertThat(footerPref).isNotNull(); - var sizePref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_SIZE.key); + // No footer for showing multiple displays. + assertThat(footerPref).isNull(); + var sizePref = mPreferenceScreen.findPreference( + PrefBasics.EXTERNAL_DISPLAY_SIZE.keyForNth(0)); assertThat(sizePref).isNotNull(); - assertThat("" + footerPref.getTitle()) - .isEqualTo(getText(EXTERNAL_DISPLAY_CHANGE_RESOLUTION_FOOTER_RESOURCE)); } @Test @UiThreadTest public void testShowDisabledDisplay() { - mDisplayIdArg = 1; initFragment(); - verify(mMockedInjector, never()).getDisplay(anyInt()); mHandler.flush(); - verify(mMockedInjector).getDisplay(mDisplayIdArg); - var mainPref = (MainSwitchPreference) mPreferenceScreen.findPreference( - PrefBasics.EXTERNAL_DISPLAY_USE.key); + verify(mMockedInjector, never()).getDisplay(anyInt()); + verify(mMockedInjector).getAllDisplays(); + var category = getExternalDisplayCategory(0); + var mainPref = (MainSwitchPreference) category.findPreference( + PrefBasics.EXTERNAL_DISPLAY_USE.keyForNth(0)); assertThat(mainPref).isNotNull(); assertThat("" + mainPref.getTitle()).isEqualTo( getText(PrefBasics.EXTERNAL_DISPLAY_USE.titleResource)); assertThat(mainPref.isChecked()).isFalse(); assertThat(mainPref.isEnabled()).isTrue(); assertThat(mainPref.getOnPreferenceChangeListener()).isNotNull(); - var pref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.key); + var pref = category.findPreference(PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.keyForNth(0)); assertThat(pref).isNull(); - pref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_ROTATION.key); + pref = category.findPreference(PrefBasics.EXTERNAL_DISPLAY_ROTATION.keyForNth(0)); assertThat(pref).isNull(); - var footerPref = mPreferenceScreen.findPreference(PrefBasics.FOOTER.key); + var footerPref = category.findPreference(PrefBasics.FOOTER.key); assertThat(footerPref).isNull(); - var sizePref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_SIZE.key); + var sizePref = category.findPreference(PrefBasics.EXTERNAL_DISPLAY_SIZE.keyForNth(0)); assertThat(sizePref).isNull(); } @@ -321,7 +296,7 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa initFragment(); mHandler.flush(); var mainPref = (MainSwitchPreference) mPreferenceScreen.findPreference( - PrefBasics.EXTERNAL_DISPLAY_USE.key); + PrefBasics.EXTERNAL_DISPLAY_USE.keyForNth(0)); assertThat(mainPref).isNotNull(); assertThat("" + mainPref.getTitle()).isEqualTo( getText(PrefBasics.EXTERNAL_DISPLAY_USE.titleResource)); @@ -337,13 +312,13 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa @Test @UiThreadTest public void testDisplayRotationPreference() { - mDisplayIdArg = 1; + final int displayId = 1; doReturn(true).when(mMockedInjector).isDisplayEnabled(any()); var fragment = initFragment(); mHandler.flush(); - ListPreference pref = - mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_ROTATION.key); - assertThat(pref.getKey()).isEqualTo(PrefBasics.EXTERNAL_DISPLAY_ROTATION.key); + var category = getExternalDisplayCategory(0); + ListPreference pref = category.findPreference( + PrefBasics.EXTERNAL_DISPLAY_ROTATION.keyForNth(0)); assertThat("" + pref.getTitle()).isEqualTo( getText(PrefBasics.EXTERNAL_DISPLAY_ROTATION.titleResource)); assertThat(pref.getEntries().length).isEqualTo(4); @@ -359,10 +334,10 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa assertThat(pref.getOnPreferenceChangeListener()).isNotNull(); assertThat(pref.isEnabled()).isTrue(); var rotation = 1; - doReturn(true).when(mMockedInjector).freezeDisplayRotation(mDisplayIdArg, rotation); + doReturn(true).when(mMockedInjector).freezeDisplayRotation(displayId, rotation); assertThat(pref.getOnPreferenceChangeListener().onPreferenceChange(pref, rotation + "")) .isTrue(); - verify(mMockedInjector).freezeDisplayRotation(mDisplayIdArg, rotation); + verify(mMockedInjector).freezeDisplayRotation(displayId, rotation); assertThat(pref.getValue()).isEqualTo(rotation + ""); verify(mMockedMetricsLogger).writePreferenceClickMetric(pref); } @@ -370,31 +345,30 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa @Test @UiThreadTest public void testDisplayResolutionPreference() { - mDisplayIdArg = 1; + final int displayId = 1; doReturn(true).when(mMockedInjector).isDisplayEnabled(any()); var fragment = initFragment(); mHandler.flush(); - var pref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.key); - assertThat(pref.getKey()).isEqualTo(PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.key); + var category = getExternalDisplayCategory(0); + var pref = category.findPreference(PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.keyForNth(0)); assertThat("" + pref.getTitle()).isEqualTo( getText(PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.titleResource)); assertThat("" + pref.getSummary()).isEqualTo("1920 x 1080"); assertThat(pref.isEnabled()).isTrue(); assertThat(pref.getOnPreferenceClickListener()).isNotNull(); assertThat(pref.getOnPreferenceClickListener().onPreferenceClick(pref)).isTrue(); - assertThat(mResolutionSelectorDisplayId).isEqualTo(mDisplayIdArg); + assertThat(mResolutionSelectorDisplayId).isEqualTo(displayId); verify(mMockedMetricsLogger).writePreferenceClickMetric(pref); } @Test @UiThreadTest public void testDisplaySizePreference() { - mDisplayIdArg = 1; doReturn(true).when(mMockedInjector).isDisplayEnabled(any()); var fragment = initFragment(); mHandler.flush(); - var pref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_SIZE.key); - assertThat(pref.getKey()).isEqualTo(PrefBasics.EXTERNAL_DISPLAY_SIZE.key); + var category = getExternalDisplayCategory(0); + var pref = category.findPreference(PrefBasics.EXTERNAL_DISPLAY_SIZE.keyForNth(0)); assertThat("" + pref.getTitle()) .isEqualTo(getText(PrefBasics.EXTERNAL_DISPLAY_SIZE.titleResource)); assertThat("" + pref.getSummary()) @@ -408,25 +382,25 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa @Test @UiThreadTest public void testUseDisplayPreference_EnabledDisplay() { - mDisplayIdArg = 1; + final int displayId = 1; doReturn(true).when(mMockedInjector).isDisplayEnabled(any()); - doReturn(true).when(mMockedInjector).enableConnectedDisplay(mDisplayIdArg); - doReturn(true).when(mMockedInjector).disableConnectedDisplay(mDisplayIdArg); + doReturn(true).when(mMockedInjector).enableConnectedDisplay(displayId); + doReturn(true).when(mMockedInjector).disableConnectedDisplay(displayId); var fragment = initFragment(); mHandler.flush(); - MainSwitchPreference pref = - mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_USE.key); - assertThat(pref.getKey()).isEqualTo(PrefBasics.EXTERNAL_DISPLAY_USE.key); + MainSwitchPreference pref = getExternalDisplayCategory(0) + .findPreference(PrefBasics.EXTERNAL_DISPLAY_USE.keyForNth(0)); + assertThat(pref.getKey()).isEqualTo(PrefBasics.EXTERNAL_DISPLAY_USE.keyForNth(0)); assertThat("" + pref.getTitle()) .isEqualTo(getText(PrefBasics.EXTERNAL_DISPLAY_USE.titleResource)); assertThat(pref.isEnabled()).isTrue(); assertThat(pref.isChecked()).isTrue(); assertThat(pref.getOnPreferenceChangeListener()).isNotNull(); assertThat(pref.getOnPreferenceChangeListener().onPreferenceChange(pref, false)).isTrue(); - verify(mMockedInjector).disableConnectedDisplay(mDisplayIdArg); + verify(mMockedInjector).disableConnectedDisplay(displayId); assertThat(pref.isChecked()).isFalse(); assertThat(pref.getOnPreferenceChangeListener().onPreferenceChange(pref, true)).isTrue(); - verify(mMockedInjector).enableConnectedDisplay(mDisplayIdArg); + verify(mMockedInjector).enableConnectedDisplay(displayId); assertThat(pref.isChecked()).isTrue(); verify(mMockedMetricsLogger, times(2)).writePreferenceClickMetric(pref); } @@ -443,13 +417,6 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa return mFragment; } - @NonNull - private Bundle createBundleForPreviouslyShownList() { - var state = new Bundle(); - state.putBoolean(PREVIOUSLY_SHOWN_LIST_KEY, true); - return state; - } - @NonNull private String getText(int id) { return mContext.getResources().getText(id).toString(); @@ -501,21 +468,11 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa mPreferenceIdFromResource = resource; } - @Override - protected int getDisplayIdArg() { - return mDisplayIdArg; - } - @Override protected void launchResolutionSelector(@NonNull Context context, int displayId) { mResolutionSelectorDisplayId = displayId; } - @Override - protected void launchExternalDisplaySettings(final int displayId) { - mDisplayIdArg = displayId; - } - @Override Preference newFooterPreference(Context context) { return new Preference(context);