diff --git a/src/com/android/settings/connecteddevice/display/DisplayTopology.kt b/src/com/android/settings/connecteddevice/display/DisplayTopology.kt index a3c710c59db..949d5bb418d 100644 --- a/src/com/android/settings/connecteddevice/display/DisplayTopology.kt +++ b/src/com/android/settings/connecteddevice/display/DisplayTopology.kt @@ -159,8 +159,6 @@ class TopologyScale( } } -const val TOPOLOGY_PREFERENCE_KEY = "display_topology_preference" - /** Represents a draggable block in the topology pane. */ class DisplayBlock(context : Context) : Button(context) { @VisibleForTesting var mSelectedImage: Drawable = ColorDrawable(Color.BLACK) @@ -240,7 +238,6 @@ class DisplayTopologyPreference(context : Context) // Prevent highlight when hovering with mouse. isSelectable = false - key = TOPOLOGY_PREFERENCE_KEY isPersistent = false injector = Injector(context) diff --git a/src/com/android/settings/connecteddevice/display/ExternalDisplayPreferenceFragment.java b/src/com/android/settings/connecteddevice/display/ExternalDisplayPreferenceFragment.java index 2b92e50a2b7..af03bab7579 100644 --- a/src/com/android/settings/connecteddevice/display/ExternalDisplayPreferenceFragment.java +++ b/src/com/android/settings/connecteddevice/display/ExternalDisplayPreferenceFragment.java @@ -64,33 +64,69 @@ import java.util.List; * The Settings screen for External Displays configuration and connection management. */ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmentBase { + @VisibleForTesting enum PrefBasics { + DISPLAY_TOPOLOGY(10, "display_topology_preference", null), + MIRROR(20, "mirror_preference", null), + + // If shown, use toggle should be before other per-display settings. + EXTERNAL_DISPLAY_USE(30, "external_display_use_preference", + R.string.external_display_use_title), + + ILLUSTRATION(35, "external_display_illustration", null), + + // If shown, external display size is before other per-display settings. + EXTERNAL_DISPLAY_SIZE(40, "external_display_size", R.string.screen_zoom_title), + EXTERNAL_DISPLAY_ROTATION(50, "external_display_rotation", + R.string.external_display_rotation), + EXTERNAL_DISPLAY_RESOLUTION(60, "external_display_resolution", + R.string.external_display_resolution_settings_title), + + // Built-in display link is after per-display settings. + BUILTIN_DISPLAY_LIST(70, "builtin_display_list_preference", + R.string.builtin_display_settings_category), + + DISPLAYS_LIST(80, "displays_list_preference", null), + + // If shown, footer should appear below everything. + FOOTER(90, "footer_preference", null); + + + PrefBasics(int order, String key, @Nullable Integer titleResource) { + this.order = order; + this.key = key; + this.titleResource = titleResource; + } + + // Fields must be public to make the linter happy. + public final int order; + public final String key; + @Nullable public final Integer titleResource; + + void apply(Preference preference) { + if (order != -1) { + preference.setOrder(order); + } + if (titleResource != null) { + preference.setTitle(titleResource); + } + preference.setKey(key); + preference.setPersistent(false); + } + } + static final int EXTERNAL_DISPLAY_SETTINGS_RESOURCE = R.xml.external_display_settings; - static final String DISPLAYS_LIST_PREFERENCE_KEY = "displays_list_preference"; - static final String BUILTIN_DISPLAY_LIST_PREFERENCE_KEY = "builtin_display_list_preference"; - static final String EXTERNAL_DISPLAY_USE_PREFERENCE_KEY = "external_display_use_preference"; - static final String EXTERNAL_DISPLAY_ROTATION_KEY = "external_display_rotation"; - static final String EXTERNAL_DISPLAY_RESOLUTION_PREFERENCE_KEY = "external_display_resolution"; - static final String EXTERNAL_DISPLAY_SIZE_PREFERENCE_KEY = "external_display_size"; static final int EXTERNAL_DISPLAY_CHANGE_RESOLUTION_FOOTER_RESOURCE = R.string.external_display_change_resolution_footer_title; static final int EXTERNAL_DISPLAY_LANDSCAPE_DRAWABLE = R.drawable.external_display_mirror_landscape; static final int EXTERNAL_DISPLAY_TITLE_RESOURCE = R.string.external_display_settings_title; - static final int EXTERNAL_DISPLAY_USE_TITLE_RESOURCE = - R.string.external_display_use_title; static final int EXTERNAL_DISPLAY_NOT_FOUND_FOOTER_RESOURCE = R.string.external_display_not_found_footer_title; static final int EXTERNAL_DISPLAY_PORTRAIT_DRAWABLE = R.drawable.external_display_mirror_portrait; - static final int EXTERNAL_DISPLAY_ROTATION_TITLE_RESOURCE = - R.string.external_display_rotation; - static final int EXTERNAL_DISPLAY_RESOLUTION_TITLE_RESOURCE = - R.string.external_display_resolution_settings_title; - static final int EXTERNAL_DISPLAY_SIZE_TITLE_RESOURCE = R.string.screen_zoom_title; static final int EXTERNAL_DISPLAY_SIZE_SUMMARY_RESOURCE = R.string.screen_zoom_short_summary; - static final int BUILTIN_DISPLAY_SETTINGS_CATEGORY_RESOURCE = - R.string.builtin_display_settings_category; + @VisibleForTesting static final String PREVIOUSLY_SHOWN_LIST_KEY = "mPreviouslyShownListOfDisplays"; private boolean mStarted; @@ -253,9 +289,7 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen ListPreference getRotationPreference(@NonNull Context context) { if (mRotationPref == null) { mRotationPref = new ListPreference(context); - mRotationPref.setPersistent(false); - mRotationPref.setKey(EXTERNAL_DISPLAY_ROTATION_KEY); - mRotationPref.setTitle(EXTERNAL_DISPLAY_ROTATION_TITLE_RESOURCE); + PrefBasics.EXTERNAL_DISPLAY_ROTATION.apply(mRotationPref); } return mRotationPref; } @@ -265,9 +299,7 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen Preference getResolutionPreference(@NonNull Context context) { if (mResolutionPreference == null) { mResolutionPreference = new Preference(context); - mResolutionPreference.setPersistent(false); - mResolutionPreference.setKey(EXTERNAL_DISPLAY_RESOLUTION_PREFERENCE_KEY); - mResolutionPreference.setTitle(EXTERNAL_DISPLAY_RESOLUTION_TITLE_RESOURCE); + PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.apply(mResolutionPreference); } return mResolutionPreference; } @@ -277,9 +309,7 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen MainSwitchPreference getUseDisplayPreference(@NonNull Context context) { if (mUseDisplayPref == null) { mUseDisplayPref = new MainSwitchPreference(context); - mUseDisplayPref.setPersistent(false); - mUseDisplayPref.setKey(EXTERNAL_DISPLAY_USE_PREFERENCE_KEY); - mUseDisplayPref.setTitle(EXTERNAL_DISPLAY_USE_TITLE_RESOURCE); + PrefBasics.EXTERNAL_DISPLAY_USE.apply(mUseDisplayPref); } return mUseDisplayPref; } @@ -289,8 +319,7 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen IllustrationPreference getIllustrationPreference(@NonNull Context context) { if (mImagePreference == null) { mImagePreference = new IllustrationPreference(context); - mImagePreference.setPersistent(false); - mImagePreference.setKey("external_display_illustration"); + PrefBasics.ILLUSTRATION.apply(mImagePreference); } return mImagePreference; } @@ -308,9 +337,7 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen private PreferenceCategory getDisplaysListPreference(@NonNull Context context) { if (mDisplaysPreference == null) { mDisplaysPreference = new PreferenceCategory(context); - mDisplaysPreference.setPersistent(false); - mDisplaysPreference.setOrder(40); - mDisplaysPreference.setKey(DISPLAYS_LIST_PREFERENCE_KEY); + PrefBasics.DISPLAYS_LIST.apply(mDisplaysPreference); } return mDisplaysPreference; } @@ -319,10 +346,7 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen private PreferenceCategory getBuiltinDisplayListPreference(@NonNull Context context) { if (mBuiltinDisplayPreference == null) { mBuiltinDisplayPreference = new PreferenceCategory(context); - mBuiltinDisplayPreference.setPersistent(false); - mBuiltinDisplayPreference.setOrder(30); - mBuiltinDisplayPreference.setKey(BUILTIN_DISPLAY_LIST_PREFERENCE_KEY); - mBuiltinDisplayPreference.setTitle(BUILTIN_DISPLAY_SETTINGS_CATEGORY_RESOURCE); + PrefBasics.BUILTIN_DISPLAY_LIST.apply(mBuiltinDisplayPreference); } return mBuiltinDisplayPreference; } @@ -338,7 +362,7 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen @NonNull Preference getDisplayTopologyPreference(@NonNull Context context) { if (mDisplayTopologyPreference == null) { mDisplayTopologyPreference = new DisplayTopologyPreference(context); - mDisplayTopologyPreference.setOrder(10); + PrefBasics.DISPLAY_TOPOLOGY.apply(mDisplayTopologyPreference); } return mDisplayTopologyPreference; } @@ -346,7 +370,7 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen @NonNull Preference getMirrorPreference(@NonNull Context context) { if (mMirrorPreference == null) { mMirrorPreference = new MirrorPreference(context); - mMirrorPreference.setOrder(20); + PrefBasics.MIRROR.apply(mMirrorPreference); } return mMirrorPreference; } @@ -386,16 +410,18 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen private void updateScreenForDisplayId(final int displayId, @NonNull final PrefRefresh screen, @NonNull Context context) { - final boolean forceShowList = displayId == INVALID_DISPLAY - && isTopologyPaneEnabled(mInjector); final var displaysToShow = externalDisplaysToShow(displayId); - if (!forceShowList && displaysToShow.isEmpty() && displayId == INVALID_DISPLAY) { + if (displaysToShow.isEmpty() && displayId == INVALID_DISPLAY) { showTextWhenNoDisplaysToShow(screen, context); - } else if (!forceShowList && displaysToShow.size() == 1 + } 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. @@ -446,21 +472,30 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen screen.addPreference(updateResolutionPreference(context, display)); screen.addPreference(updateRotationPreference(context, display, displayRotation)); if (isResolutionSettingEnabled(mInjector)) { - screen.addPreference(updateFooterPreference(context, - EXTERNAL_DISPLAY_CHANGE_RESOLUTION_FOOTER_RESOURCE)); + // 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 + // bottom of the screen, the external resolution setting must be below the built-in + // display options for the per-display fragment, which is too hidden for the per-display + // fragment, or (b) the footer is above the Built-in display settings, rather than the + // bottom of the screen, which contradicts the visual style and purpose of the + // FooterPreference class, or (c) we must hide the built-in display settings, which is + // 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)) { + screen.addPreference(updateFooterPreference(context, + EXTERNAL_DISPLAY_CHANGE_RESOLUTION_FOOTER_RESOURCE)); + } } if (isDisplaySizeSettingEnabled(mInjector)) { screen.addPreference(updateSizePreference(context)); } } - private void showDisplaysList(@NonNull List displaysToShow, - @NonNull PrefRefresh screen, @NonNull Context context) { + private void maybeAddV2Components(Context context, PrefRefresh screen) { if (isTopologyPaneEnabled(mInjector)) { screen.addPreference(getDisplayTopologyPreference(context)); - if (!displaysToShow.isEmpty()) { - screen.addPreference(getMirrorPreference(context)); - } + screen.addPreference(getMirrorPreference(context)); // If topology is shown, we also show a preference for the built-in display for // consistency with the topology. @@ -468,7 +503,11 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen screen.addPreference(builtinCategory); builtinCategory.addPreference(getBuiltinDisplaySizeAndTextPreference(context)); } + } + private void showDisplaysList(@NonNull List displaysToShow, + @NonNull PrefRefresh screen, @NonNull Context context) { + maybeAddV2Components(context, screen); var displayGroupPref = getDisplaysListPreference(context); if (!displaysToShow.isEmpty()) { screen.addPreference(displayGroupPref); @@ -501,8 +540,9 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen groupCleanable.addPreference(category); var prefItem = new DisplayPreference(context, display); - prefItem.setTitle(context.getString(EXTERNAL_DISPLAY_RESOLUTION_TITLE_RESOURCE) - + " | " + context.getString(EXTERNAL_DISPLAY_ROTATION_TITLE_RESOURCE)); + prefItem.setTitle( + context.getString(PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.titleResource) + " | " + + context.getString(PrefBasics.EXTERNAL_DISPLAY_ROTATION.titleResource)); prefItem.setKey(itemKey); category.addPreference(prefItem); @@ -577,6 +617,7 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen private Preference updateFooterPreference(@NonNull final Context context, final int title) { var pref = getFooterPreference(context); pref.setTitle(title); + PrefBasics.FOOTER.apply(pref); return pref; } @@ -625,10 +666,8 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen private Preference updateSizePreference(@NonNull final Context context) { var pref = (Preference) getSizePreference(context); - pref.setKey(EXTERNAL_DISPLAY_SIZE_PREFERENCE_KEY); + PrefBasics.EXTERNAL_DISPLAY_SIZE.apply(pref); pref.setSummary(EXTERNAL_DISPLAY_SIZE_SUMMARY_RESOURCE); - pref.setPersistent(false); - pref.setTitle(EXTERNAL_DISPLAY_SIZE_TITLE_RESOURCE); pref.setOnPreferenceClickListener( (Preference p) -> { writePreferenceClickMetric(p); diff --git a/src/com/android/settings/connecteddevice/display/Mirroring.kt b/src/com/android/settings/connecteddevice/display/Mirroring.kt index 37ff375fa7f..453f270ba4e 100644 --- a/src/com/android/settings/connecteddevice/display/Mirroring.kt +++ b/src/com/android/settings/connecteddevice/display/Mirroring.kt @@ -23,8 +23,6 @@ import androidx.preference.SwitchPreferenceCompat import com.android.settings.R -const val MIRROR_PREFERENCE_KEY = "mirror_builtin_display" - /** * A switch preference which is backed by the MIRROR_BUILT_IN_DISPLAY global setting. */ @@ -32,7 +30,6 @@ class MirrorPreference(context: Context): SwitchPreferenceCompat(context) { init { setTitle(R.string.external_display_mirroring_title) - key = MIRROR_PREFERENCE_KEY isPersistent = false } 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 d22dbaeed00..12af7726a42 100644 --- a/tests/unit/src/com/android/settings/connecteddevice/display/ExternalDisplayPreferenceFragmentTest.java +++ b/tests/unit/src/com/android/settings/connecteddevice/display/ExternalDisplayPreferenceFragmentTest.java @@ -17,19 +17,10 @@ package com.android.settings.connecteddevice.display; import static android.view.Display.INVALID_DISPLAY; -import static com.android.settings.connecteddevice.display.ExternalDisplayPreferenceFragment.DISPLAYS_LIST_PREFERENCE_KEY; import static com.android.settings.connecteddevice.display.ExternalDisplayPreferenceFragment.EXTERNAL_DISPLAY_CHANGE_RESOLUTION_FOOTER_RESOURCE; import static com.android.settings.connecteddevice.display.ExternalDisplayPreferenceFragment.EXTERNAL_DISPLAY_NOT_FOUND_FOOTER_RESOURCE; -import static com.android.settings.connecteddevice.display.ExternalDisplayPreferenceFragment.EXTERNAL_DISPLAY_RESOLUTION_PREFERENCE_KEY; -import static com.android.settings.connecteddevice.display.ExternalDisplayPreferenceFragment.EXTERNAL_DISPLAY_RESOLUTION_TITLE_RESOURCE; -import static com.android.settings.connecteddevice.display.ExternalDisplayPreferenceFragment.EXTERNAL_DISPLAY_ROTATION_KEY; -import static com.android.settings.connecteddevice.display.ExternalDisplayPreferenceFragment.EXTERNAL_DISPLAY_ROTATION_TITLE_RESOURCE; import static com.android.settings.connecteddevice.display.ExternalDisplayPreferenceFragment.EXTERNAL_DISPLAY_SETTINGS_RESOURCE; -import static com.android.settings.connecteddevice.display.ExternalDisplayPreferenceFragment.EXTERNAL_DISPLAY_SIZE_PREFERENCE_KEY; import static com.android.settings.connecteddevice.display.ExternalDisplayPreferenceFragment.EXTERNAL_DISPLAY_SIZE_SUMMARY_RESOURCE; -import static com.android.settings.connecteddevice.display.ExternalDisplayPreferenceFragment.EXTERNAL_DISPLAY_SIZE_TITLE_RESOURCE; -import static com.android.settings.connecteddevice.display.ExternalDisplayPreferenceFragment.EXTERNAL_DISPLAY_USE_PREFERENCE_KEY; -import static com.android.settings.connecteddevice.display.ExternalDisplayPreferenceFragment.EXTERNAL_DISPLAY_USE_TITLE_RESOURCE; import static com.android.settings.connecteddevice.display.ExternalDisplayPreferenceFragment.PREVIOUSLY_SHOWN_LIST_KEY; 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; @@ -61,6 +52,7 @@ 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.FooterPreference; import com.android.settingslib.widget.MainSwitchPreference; @@ -97,23 +89,22 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa fragment.onSaveInstanceStateCallback(outState); assertThat(outState.getBoolean(PREVIOUSLY_SHOWN_LIST_KEY)).isFalse(); assertThat(mHandler.getPendingMessages().size()).isEqualTo(1); - PreferenceCategory pref = mPreferenceScreen.findPreference(DISPLAYS_LIST_PREFERENCE_KEY); + PreferenceCategory pref = mPreferenceScreen.findPreference(PrefBasics.DISPLAYS_LIST.key); assertThat(pref).isNull(); verify(mMockedInjector, never()).getAllDisplays(); mHandler.flush(); assertThat(mHandler.getPendingMessages().size()).isEqualTo(0); verify(mMockedInjector).getAllDisplays(); - pref = mPreferenceScreen.findPreference(DISPLAYS_LIST_PREFERENCE_KEY); + pref = mPreferenceScreen.findPreference(PrefBasics.DISPLAYS_LIST.key); assertThat(pref).isNotNull(); assertThat(pref.getPreferenceCount()).isEqualTo(2); fragment.onSaveInstanceStateCallback(outState); assertThat(outState.getBoolean(PREVIOUSLY_SHOWN_LIST_KEY)).isTrue(); - pref = mPreferenceScreen.findPreference(DisplayTopologyKt.TOPOLOGY_PREFERENCE_KEY); + pref = mPreferenceScreen.findPreference(PrefBasics.DISPLAY_TOPOLOGY.key); assertThat(pref).isNull(); - pref = mPreferenceScreen.findPreference( - ExternalDisplayPreferenceFragment.BUILTIN_DISPLAY_LIST_PREFERENCE_KEY); + pref = mPreferenceScreen.findPreference(PrefBasics.BUILTIN_DISPLAY_LIST.key); assertThat(pref).isNull(); } @@ -126,56 +117,51 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa doReturn(new Display[] {mDisplays[1]}).when(mMockedInjector).getAllDisplays(); mHandler.flush(); - var pref = mPreferenceScreen.findPreference(DisplayTopologyKt.TOPOLOGY_PREFERENCE_KEY); + var pref = mPreferenceScreen.findPreference(PrefBasics.DISPLAY_TOPOLOGY.key); assertThat(pref).isNotNull(); - pref = mPreferenceScreen.findPreference(MirroringKt.MIRROR_PREFERENCE_KEY); + pref = mPreferenceScreen.findPreference(PrefBasics.MIRROR.key); assertThat(pref).isNotNull(); - PreferenceCategory listPref = - mPreferenceScreen.findPreference(DISPLAYS_LIST_PREFERENCE_KEY); - assertThat(listPref).isNotNull(); - assertThat(listPref.getPreferenceCount()).isEqualTo(1); - - listPref = mPreferenceScreen.findPreference( - ExternalDisplayPreferenceFragment.BUILTIN_DISPLAY_LIST_PREFERENCE_KEY); - assertThat(listPref).isNotNull(); - assertThat(listPref.getPreferenceCount()).isEqualTo(1); - } - - @Test - @UiThreadTest - public void testShowDisplayListWithPane_NoExternalDisplays() { - mFlags.setFlag(FLAG_DISPLAY_TOPOLOGY_PANE_IN_DISPLAY_LIST, true); - - initFragment(); - doReturn(new Display[0]).when(mMockedInjector).getAllDisplays(); - mHandler.flush(); - - var pref = mPreferenceScreen.findPreference(DisplayTopologyKt.TOPOLOGY_PREFERENCE_KEY); - assertThat(pref).isNotNull(); - pref = mPreferenceScreen.findPreference(MirroringKt.MIRROR_PREFERENCE_KEY); + pref = mPreferenceScreen.findPreference(PrefBasics.DISPLAYS_LIST.key); assertThat(pref).isNull(); PreferenceCategory listPref = - mPreferenceScreen.findPreference(DISPLAYS_LIST_PREFERENCE_KEY); - assertThat(listPref).isNull(); - - listPref = mPreferenceScreen.findPreference( - ExternalDisplayPreferenceFragment.BUILTIN_DISPLAY_LIST_PREFERENCE_KEY); - assertThat(listPref).isNotNull(); - assertThat(listPref.getPreferenceCount()).isEqualTo(1); + mPreferenceScreen.findPreference(PrefBasics.BUILTIN_DISPLAY_LIST.key); var builtinPref = listPref.getPreference(0); assertThat(builtinPref.getOnPreferenceClickListener().onPreferenceClick(builtinPref)) .isTrue(); assertThat(mLaunchedBuiltinSettings).isTrue(); } + @Test + @UiThreadTest + public void testDontShowDisplayListOrPane_NoExternalDisplays() { + mFlags.setFlag(FLAG_DISPLAY_TOPOLOGY_PANE_IN_DISPLAY_LIST, true); + + initFragment(); + doReturn(new Display[0]).when(mMockedInjector).getAllDisplays(); + mHandler.flush(); + + // When no external display is attached, interactive preferences are omitted. + var pref = mPreferenceScreen.findPreference(PrefBasics.DISPLAY_TOPOLOGY.key); + assertThat(pref).isNull(); + pref = mPreferenceScreen.findPreference(PrefBasics.MIRROR.key); + assertThat(pref).isNull(); + + PreferenceCategory listPref = + mPreferenceScreen.findPreference(PrefBasics.DISPLAYS_LIST.key); + assertThat(listPref).isNull(); + + listPref = mPreferenceScreen.findPreference(PrefBasics.BUILTIN_DISPLAY_LIST.key); + assertThat(listPref).isNull(); + } + @Test @UiThreadTest public void testLaunchDisplaySettingFromList() { initFragment(); mHandler.flush(); - PreferenceCategory pref = mPreferenceScreen.findPreference(DISPLAYS_LIST_PREFERENCE_KEY); + PreferenceCategory pref = mPreferenceScreen.findPreference(PrefBasics.DISPLAYS_LIST.key); assertThat(pref).isNotNull(); var display1Category = (PreferenceCategory) pref.getPreference(0); var display1Pref = (DisplayPreference) display1Category.getPreference(0); @@ -204,7 +190,7 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa // Only one display available doReturn(new Display[] {mDisplays[1]}).when(mMockedInjector).getAllDisplays(); mHandler.flush(); - PreferenceCategory pref = mPreferenceScreen.findPreference(DISPLAYS_LIST_PREFERENCE_KEY); + PreferenceCategory pref = mPreferenceScreen.findPreference(PrefBasics.DISPLAYS_LIST.key); assertThat(pref).isNotNull(); assertThat(pref.getPreferenceCount()).isEqualTo(1); } @@ -219,15 +205,15 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa // Init initFragment(); mHandler.flush(); - PreferenceCategory list = mPreferenceScreen.findPreference(DISPLAYS_LIST_PREFERENCE_KEY); + PreferenceCategory list = mPreferenceScreen.findPreference(PrefBasics.DISPLAYS_LIST.key); assertThat(list).isNull(); - var pref = mPreferenceScreen.findPreference(EXTERNAL_DISPLAY_RESOLUTION_PREFERENCE_KEY); + var pref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.key); assertThat(pref).isNotNull(); - pref = mPreferenceScreen.findPreference(EXTERNAL_DISPLAY_ROTATION_KEY); + pref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_ROTATION.key); assertThat(pref).isNotNull(); var footerPref = (FooterPreference) mPreferenceScreen.findPreference(KEY_FOOTER); assertThat(footerPref).isNotNull(); - var sizePref = mPreferenceScreen.findPreference(EXTERNAL_DISPLAY_SIZE_PREFERENCE_KEY); + var sizePref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_SIZE.key); assertThat(sizePref).isNull(); verify(footerPref).setTitle(EXTERNAL_DISPLAY_CHANGE_RESOLUTION_FOOTER_RESOURCE); } @@ -241,15 +227,15 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa // Init initFragment(); mHandler.flush(); - PreferenceCategory list = mPreferenceScreen.findPreference(DISPLAYS_LIST_PREFERENCE_KEY); + PreferenceCategory list = mPreferenceScreen.findPreference(PrefBasics.DISPLAYS_LIST.key); assertThat(list).isNull(); - var pref = mPreferenceScreen.findPreference(EXTERNAL_DISPLAY_RESOLUTION_PREFERENCE_KEY); + var pref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.key); assertThat(pref).isNotNull(); - pref = mPreferenceScreen.findPreference(EXTERNAL_DISPLAY_ROTATION_KEY); + pref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_ROTATION.key); assertThat(pref).isNotNull(); var footerPref = (FooterPreference) mPreferenceScreen.findPreference(KEY_FOOTER); assertThat(footerPref).isNotNull(); - var sizePref = mPreferenceScreen.findPreference(EXTERNAL_DISPLAY_SIZE_PREFERENCE_KEY); + var sizePref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_SIZE.key); assertThat(sizePref).isNotNull(); verify(footerPref).setTitle(EXTERNAL_DISPLAY_CHANGE_RESOLUTION_FOOTER_RESOURCE); } @@ -263,13 +249,13 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa verify(mMockedInjector, never()).getDisplay(anyInt()); mHandler.flush(); verify(mMockedInjector).getDisplay(mDisplayIdArg); - var pref = mPreferenceScreen.findPreference(EXTERNAL_DISPLAY_RESOLUTION_PREFERENCE_KEY); + var pref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.key); assertThat(pref).isNotNull(); - pref = mPreferenceScreen.findPreference(EXTERNAL_DISPLAY_ROTATION_KEY); + pref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_ROTATION.key); assertThat(pref).isNotNull(); var footerPref = (FooterPreference) mPreferenceScreen.findPreference(KEY_FOOTER); assertThat(footerPref).isNotNull(); - var sizePref = mPreferenceScreen.findPreference(EXTERNAL_DISPLAY_SIZE_PREFERENCE_KEY); + var sizePref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_SIZE.key); assertThat(sizePref).isNotNull(); verify(footerPref).setTitle(EXTERNAL_DISPLAY_CHANGE_RESOLUTION_FOOTER_RESOURCE); } @@ -283,20 +269,20 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa mHandler.flush(); verify(mMockedInjector).getDisplay(mDisplayIdArg); var mainPref = (MainSwitchPreference) mPreferenceScreen.findPreference( - EXTERNAL_DISPLAY_USE_PREFERENCE_KEY); + PrefBasics.EXTERNAL_DISPLAY_USE.key); assertThat(mainPref).isNotNull(); assertThat("" + mainPref.getTitle()).isEqualTo( - getText(EXTERNAL_DISPLAY_USE_TITLE_RESOURCE)); + getText(PrefBasics.EXTERNAL_DISPLAY_USE.titleResource)); assertThat(mainPref.isChecked()).isFalse(); assertThat(mainPref.isEnabled()).isTrue(); assertThat(mainPref.getOnPreferenceChangeListener()).isNotNull(); - var pref = mPreferenceScreen.findPreference(EXTERNAL_DISPLAY_RESOLUTION_PREFERENCE_KEY); + var pref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.key); assertThat(pref).isNull(); - pref = mPreferenceScreen.findPreference(EXTERNAL_DISPLAY_ROTATION_KEY); + pref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_ROTATION.key); assertThat(pref).isNull(); var footerPref = (FooterPreference) mPreferenceScreen.findPreference(KEY_FOOTER); assertThat(footerPref).isNull(); - var sizePref = mPreferenceScreen.findPreference(EXTERNAL_DISPLAY_SIZE_PREFERENCE_KEY); + var sizePref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_SIZE.key); assertThat(sizePref).isNull(); } @@ -307,10 +293,10 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa initFragment(); mHandler.flush(); var mainPref = (MainSwitchPreference) mPreferenceScreen.findPreference( - EXTERNAL_DISPLAY_USE_PREFERENCE_KEY); + PrefBasics.EXTERNAL_DISPLAY_USE.key); assertThat(mainPref).isNotNull(); assertThat("" + mainPref.getTitle()).isEqualTo( - getText(EXTERNAL_DISPLAY_USE_TITLE_RESOURCE)); + getText(PrefBasics.EXTERNAL_DISPLAY_USE.titleResource)); assertThat(mainPref.isChecked()).isFalse(); assertThat(mainPref.isEnabled()).isFalse(); assertThat(mainPref.getOnPreferenceChangeListener()).isNull(); @@ -327,9 +313,9 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa var fragment = initFragment(); mHandler.flush(); var pref = fragment.getRotationPreference(mContext); - assertThat(pref.getKey()).isEqualTo(EXTERNAL_DISPLAY_ROTATION_KEY); + assertThat(pref.getKey()).isEqualTo(PrefBasics.EXTERNAL_DISPLAY_ROTATION.key); assertThat("" + pref.getTitle()).isEqualTo( - getText(EXTERNAL_DISPLAY_ROTATION_TITLE_RESOURCE)); + getText(PrefBasics.EXTERNAL_DISPLAY_ROTATION.titleResource)); assertThat(pref.getEntries().length).isEqualTo(4); assertThat(pref.getEntryValues().length).isEqualTo(4); assertThat(pref.getEntryValues()[0].toString()).isEqualTo("0"); @@ -359,9 +345,9 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa var fragment = initFragment(); mHandler.flush(); var pref = fragment.getResolutionPreference(mContext); - assertThat(pref.getKey()).isEqualTo(EXTERNAL_DISPLAY_RESOLUTION_PREFERENCE_KEY); + assertThat(pref.getKey()).isEqualTo(PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.key); assertThat("" + pref.getTitle()).isEqualTo( - getText(EXTERNAL_DISPLAY_RESOLUTION_TITLE_RESOURCE)); + getText(PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.titleResource)); assertThat("" + pref.getSummary()).isEqualTo("1920 x 1080"); assertThat(pref.isEnabled()).isTrue(); assertThat(pref.getOnPreferenceClickListener()).isNotNull(); @@ -378,8 +364,9 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa var fragment = initFragment(); mHandler.flush(); var pref = fragment.getSizePreference(mContext); - assertThat(pref.getKey()).isEqualTo(EXTERNAL_DISPLAY_SIZE_PREFERENCE_KEY); - assertThat("" + pref.getTitle()).isEqualTo(getText(EXTERNAL_DISPLAY_SIZE_TITLE_RESOURCE)); + assertThat(pref.getKey()).isEqualTo(PrefBasics.EXTERNAL_DISPLAY_SIZE.key); + assertThat("" + pref.getTitle()) + .isEqualTo(getText(PrefBasics.EXTERNAL_DISPLAY_SIZE.titleResource)); assertThat("" + pref.getSummary()) .isEqualTo(getText(EXTERNAL_DISPLAY_SIZE_SUMMARY_RESOURCE)); assertThat(pref.isEnabled()).isTrue(); @@ -398,8 +385,9 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa var fragment = initFragment(); mHandler.flush(); var pref = fragment.getUseDisplayPreference(mContext); - assertThat(pref.getKey()).isEqualTo(EXTERNAL_DISPLAY_USE_PREFERENCE_KEY); - assertThat("" + pref.getTitle()).isEqualTo(getText(EXTERNAL_DISPLAY_USE_TITLE_RESOURCE)); + assertThat(pref.getKey()).isEqualTo(PrefBasics.EXTERNAL_DISPLAY_USE.key); + assertThat("" + pref.getTitle()) + .isEqualTo(getText(PrefBasics.EXTERNAL_DISPLAY_USE.titleResource)); assertThat(pref.isEnabled()).isTrue(); assertThat(pref.isChecked()).isTrue(); assertThat(pref.getOnPreferenceChangeListener()).isNotNull();