diff --git a/aconfig/settings_connecteddevice_flag_declarations.aconfig b/aconfig/settings_connecteddevice_flag_declarations.aconfig index 872026027b1..eede0931b97 100644 --- a/aconfig/settings_connecteddevice_flag_declarations.aconfig +++ b/aconfig/settings_connecteddevice_flag_declarations.aconfig @@ -15,6 +15,13 @@ flag { bug: "253296253" } +flag { + name: "display_topology_pane_in_display_list" + namespace: "display_manager" + description: "Shows the connected display setting and shows the topology pane in the display list, even with only one display connected." + bug: "352648432" +} + flag { name: "enable_auth_challenge_for_usb_preferences" namespace: "safety_center" diff --git a/src/com/android/settings/connecteddevice/display/ExternalDisplayPreferenceFragment.java b/src/com/android/settings/connecteddevice/display/ExternalDisplayPreferenceFragment.java index 7b5bef625f6..c53be1aa932 100644 --- a/src/com/android/settings/connecteddevice/display/ExternalDisplayPreferenceFragment.java +++ b/src/com/android/settings/connecteddevice/display/ExternalDisplayPreferenceFragment.java @@ -22,6 +22,7 @@ import static android.view.Display.INVALID_DISPLAY; import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.EXTERNAL_DISPLAY_HELP_URL; import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.DISPLAY_ID_ARG; import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.EXTERNAL_DISPLAY_NOT_FOUND_RESOURCE; +import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.forceShowDisplayList; import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.isDisplayAllowed; import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.isUseDisplaySettingEnabled; import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.isResolutionSettingEnabled; @@ -295,13 +296,20 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen updateScreenForDisplayId(getDisplayIdArg(), screen, mInjector.getContext()); } + private boolean okayToBypassDisplayListSelection() { + if (mInjector != null && forceShowDisplayList(mInjector.getFlags())) { + return false; + } + return !mPreviouslyShownListOfDisplays; + } + private void updateScreenForDisplayId(final int displayId, @NonNull final PreferenceScreen screen, @NonNull Context context) { final var displaysToShow = getDisplaysToShow(displayId); if (displaysToShow.isEmpty() && displayId == INVALID_DISPLAY) { showTextWhenNoDisplaysToShow(screen, context); } else if (displaysToShow.size() == 1 - && ((displayId == INVALID_DISPLAY && !mPreviouslyShownListOfDisplays) + && ((displayId == INVALID_DISPLAY && okayToBypassDisplayListSelection()) || displaysToShow.get(0).getDisplayId() == displayId)) { showDisplaySettings(displaysToShow.get(0), screen, context); } else if (displayId == INVALID_DISPLAY) { diff --git a/src/com/android/settings/connecteddevice/display/ExternalDisplaySettingsConfiguration.java b/src/com/android/settings/connecteddevice/display/ExternalDisplaySettingsConfiguration.java index d0427991e42..6e56965c3ef 100644 --- a/src/com/android/settings/connecteddevice/display/ExternalDisplaySettingsConfiguration.java +++ b/src/com/android/settings/connecteddevice/display/ExternalDisplaySettingsConfiguration.java @@ -319,7 +319,16 @@ public class ExternalDisplaySettingsConfiguration { */ public static boolean isExternalDisplaySettingsPageEnabled(@NonNull FeatureFlags flags) { return flags.rotationConnectedDisplaySetting() - || flags.resolutionAndEnableConnectedDisplaySetting(); + || flags.resolutionAndEnableConnectedDisplaySetting() + || flags.displayTopologyPaneInDisplayList(); + } + + /** + * If true, indicates the display list activity should be shown even if there is only one + * display. + */ + public static boolean forceShowDisplayList(@NonNull FeatureFlags flags) { + return flags.displayTopologyPaneInDisplayList(); } static boolean isDisplayAllowed(@NonNull Display display, diff --git a/src/com/android/settings/connecteddevice/display/ExternalDisplayUpdater.java b/src/com/android/settings/connecteddevice/display/ExternalDisplayUpdater.java index 64dd7bb2fdf..99a248fe477 100644 --- a/src/com/android/settings/connecteddevice/display/ExternalDisplayUpdater.java +++ b/src/com/android/settings/connecteddevice/display/ExternalDisplayUpdater.java @@ -16,6 +16,7 @@ package com.android.settings.connecteddevice.display; +import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.forceShowDisplayList; import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.isDisplayAllowed; import android.content.Context; @@ -142,6 +143,10 @@ public class ExternalDisplayUpdater { } } + if (forceShowDisplayList(mInjector.getFlags())) { + return context.getString(R.string.external_display_off); + } + for (var display : mInjector.getAllDisplays()) { if (display != null && isDisplayAllowed(display, mInjector)) { return context.getString(R.string.external_display_off); diff --git a/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceGroupControllerTest.java b/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceGroupControllerTest.java index 5a9f2bc8692..6fb2d114f46 100644 --- a/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceGroupControllerTest.java +++ b/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceGroupControllerTest.java @@ -17,6 +17,7 @@ package com.android.settings.connecteddevice; import static com.android.settings.core.BasePreferenceController.AVAILABLE_UNSEARCHABLE; import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE; +import static com.android.settings.flags.Flags.FLAG_DISPLAY_TOPOLOGY_PANE_IN_DISPLAY_LIST; import static com.android.settings.flags.Flags.FLAG_RESOLUTION_AND_ENABLE_CONNECTED_DISPLAY_SETTING; import static com.android.settings.flags.Flags.FLAG_ROTATION_CONNECTED_DISPLAY_SETTING; @@ -128,6 +129,7 @@ public class ConnectedDeviceGroupControllerTest { @Before public void setUp() { MockitoAnnotations.initMocks(this); + mFakeFeatureFlags.setFlag(FLAG_DISPLAY_TOPOLOGY_PANE_IN_DISPLAY_LIST, false); mFakeFeatureFlags.setFlag(FLAG_ROTATION_CONNECTED_DISPLAY_SETTING, true); mFakeFeatureFlags.setFlag(FLAG_RESOLUTION_AND_ENABLE_CONNECTED_DISPLAY_SETTING, true); diff --git a/tests/unit/src/com/android/settings/connecteddevice/display/ExternalDisplayTestBase.java b/tests/unit/src/com/android/settings/connecteddevice/display/ExternalDisplayTestBase.java index 4cba1ef4666..874ecbd1197 100644 --- a/tests/unit/src/com/android/settings/connecteddevice/display/ExternalDisplayTestBase.java +++ b/tests/unit/src/com/android/settings/connecteddevice/display/ExternalDisplayTestBase.java @@ -16,8 +16,9 @@ package com.android.settings.connecteddevice.display; import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.VIRTUAL_DISPLAY_PACKAGE_NAME_SYSTEM_PROPERTY; -import static com.android.settings.flags.Flags.FLAG_ROTATION_CONNECTED_DISPLAY_SETTING; +import static com.android.settings.flags.Flags.FLAG_DISPLAY_TOPOLOGY_PANE_IN_DISPLAY_LIST; import static com.android.settings.flags.Flags.FLAG_RESOLUTION_AND_ENABLE_CONNECTED_DISPLAY_SETTING; +import static com.android.settings.flags.Flags.FLAG_ROTATION_CONNECTED_DISPLAY_SETTING; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; @@ -74,6 +75,7 @@ public class ExternalDisplayTestBase { mPreferenceScreen = mPreferenceManager.createPreferenceScreen(mContext); doReturn(0).when(mMockedIDisplayManager).getPreferredWideGamutColorSpaceId(); mDisplayManagerGlobal = new DisplayManagerGlobal(mMockedIDisplayManager); + mFlags.setFlag(FLAG_DISPLAY_TOPOLOGY_PANE_IN_DISPLAY_LIST, false); mFlags.setFlag(FLAG_ROTATION_CONNECTED_DISPLAY_SETTING, true); mFlags.setFlag(FLAG_RESOLUTION_AND_ENABLE_CONNECTED_DISPLAY_SETTING, true); mDisplays = new Display[] {