Loading res/values/strings.xml +2 −0 Original line number Diff line number Diff line Loading @@ -2007,6 +2007,8 @@ <string name="external_display_off">Off</string> <!-- External Display settings. The title of the screen. [CHAR LIMIT=40] --> <string name="external_display_settings_title">External Display</string> <!-- Built-in display settings category. Appears in External displays and Connected Displays fragments. --> <string name="builtin_display_settings_category">Built-in display</string> <!-- External Display use. The title of the use preference. [CHAR LIMIT=40] --> <string name="external_display_use_title">Use external display</string> <!-- External Display resolution settings. The title of the screen. [CHAR LIMIT=40] --> src/com/android/settings/connecteddevice/display/ExternalDisplayPreferenceFragment.java +59 −7 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.settings.connecteddevice.display; import static android.view.Display.INVALID_DISPLAY; import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.EXTERNAL_DISPLAY_HELP_URL; Loading Loading @@ -46,6 +45,7 @@ import androidx.preference.PreferenceScreen; import com.android.internal.annotations.VisibleForTesting; import com.android.settings.R; import com.android.settings.SettingsPreferenceFragmentBase; import com.android.settings.accessibility.TextReadingPreferenceFragment; import com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.DisplayListener; import com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.Injector; import com.android.settings.core.SubSettingLauncher; Loading @@ -64,6 +64,7 @@ import java.util.List; public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmentBase { 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"; Loading @@ -83,6 +84,8 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen R.string.external_display_rotation; static final int EXTERNAL_DISPLAY_RESOLUTION_TITLE_RESOURCE = R.string.external_display_resolution_settings_title; 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; Loading @@ -101,6 +104,8 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen @Nullable private PreferenceCategory mDisplaysPreference; @Nullable private PreferenceCategory mBuiltinDisplayPreference; @Nullable private Injector mInjector; @Nullable private String[] mRotationEntries; Loading Loading @@ -200,7 +205,7 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen } @VisibleForTesting protected void launchDisplaySettings(final int displayId) { protected void launchExternalDisplaySettings(final int displayId) { final Bundle args = new Bundle(); var context = getPrefContext(); args.putInt(DISPLAY_ID_ARG, displayId); Loading @@ -210,6 +215,16 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen .setSourceMetricsCategory(getMetricsCategory()).launch(); } @VisibleForTesting protected void launchBuiltinDisplaySettings() { final Bundle args = new Bundle(); var context = getPrefContext(); new SubSettingLauncher(context) .setDestination(TextReadingPreferenceFragment.class.getName()) .setArguments(args) .setSourceMetricsCategory(getMetricsCategory()).launch(); } /** * Returns the preference for the footer. */ Loading Loading @@ -281,6 +296,15 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen return mDisplaysPreference; } @NonNull private PreferenceCategory getBuiltinDisplayListPreference(@NonNull Context context) { if (mBuiltinDisplayPreference == null) { mBuiltinDisplayPreference = new PreferenceCategory(context); mBuiltinDisplayPreference.setPersistent(false); } return mBuiltinDisplayPreference; } @NonNull Preference getDisplayTopologyPreference(@NonNull Context context) { if (mDisplayTopologyPreference == null) { mDisplayTopologyPreference = new DisplayTopologyPreference(context); Loading Loading @@ -310,7 +334,7 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen @NonNull final PreferenceScreen screen, @NonNull Context context) { final boolean forceShowList = displayId == INVALID_DISPLAY && mInjector != null && forceShowDisplayList(mInjector.getFlags()); final var displaysToShow = getDisplaysToShow(displayId); final var displaysToShow = externalDisplaysToShow(displayId); if (!forceShowList && displaysToShow.isEmpty() && displayId == INVALID_DISPLAY) { showTextWhenNoDisplaysToShow(screen, context); Loading Loading @@ -373,9 +397,18 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen private void showDisplaysList(@NonNull List<Display> displaysToShow, @NonNull PreferenceScreen screen, @NonNull Context context) { if (mInjector != null && mInjector.getFlags().displayTopologyPaneInDisplayList()) { if (mInjector != null && mInjector.getFlags().displayTopologyPaneInDisplayList()) { screen.addPreference(getDisplayTopologyPreference(context)); // If topology is shown, we also show a preference for the built-in display for // consistency with the topology. var builtinCategory = getBuiltinDisplayListPreference(context); builtinCategory.setKey(BUILTIN_DISPLAY_LIST_PREFERENCE_KEY); builtinCategory.setTitle(BUILTIN_DISPLAY_SETTINGS_CATEGORY_RESOURCE); builtinCategory.removeAll(); screen.addPreference(builtinCategory); builtinCategory.addPreference(new BuiltinDisplaySizeAndTextPreference(context)); } var pref = getDisplaysListPreference(context); Loading @@ -389,7 +422,7 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen } } private List<Display> getDisplaysToShow(int displayIdToShow) { private List<Display> externalDisplaysToShow(int displayIdToShow) { if (mInjector == null) { return List.of(); } Loading Loading @@ -530,6 +563,24 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen mInjector.getHandler().removeCallbacks(mUpdateRunnable); } private class BuiltinDisplaySizeAndTextPreference extends Preference implements Preference.OnPreferenceClickListener { BuiltinDisplaySizeAndTextPreference(@NonNull final Context context) { super(context); setPersistent(false); setKey("builtin_display_size_and_text"); setTitle(R.string.accessibility_text_reading_options_title); setOnPreferenceClickListener(this); } @Override public boolean onPreferenceClick(@NonNull Preference preference) { launchBuiltinDisplaySettings(); return true; } } @VisibleForTesting class DisplayPreference extends TwoTargetPreference implements Preference.OnPreferenceClickListener { Loading @@ -538,6 +589,7 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen DisplayPreference(@NonNull final Context context, @NonNull final Display display) { super(context); mDisplayId = display.getDisplayId(); setPersistent(false); setKey("display_id_" + mDisplayId); setTitle(display.getName()); Loading @@ -548,7 +600,7 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen @Override public boolean onPreferenceClick(@NonNull Preference preference) { launchDisplaySettings(mDisplayId); launchExternalDisplaySettings(mDisplayId); writePreferenceClickMetric(preference); return true; } Loading tests/unit/src/com/android/settings/connecteddevice/display/ExternalDisplayPreferenceFragmentTest.java +25 −3 Original line number Diff line number Diff line Loading @@ -71,6 +71,7 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa private ExternalDisplayPreferenceFragment mFragment; private int mPreferenceIdFromResource; private int mDisplayIdArg = INVALID_DISPLAY; private boolean mLaunchedBuiltinSettings; private int mResolutionSelectorDisplayId = INVALID_DISPLAY; @Mock private MetricsLogger mMockedMetricsLogger; Loading Loading @@ -106,6 +107,10 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa pref = mPreferenceScreen.findPreference(DisplayTopologyKt.PREFERENCE_KEY); assertThat(pref).isNull(); pref = mPreferenceScreen.findPreference( ExternalDisplayPreferenceFragment.BUILTIN_DISPLAY_LIST_PREFERENCE_KEY); assertThat(pref).isNull(); } @Test Loading @@ -124,6 +129,11 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa 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 Loading @@ -138,11 +148,18 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa var pref = mPreferenceScreen.findPreference(DisplayTopologyKt.PREFERENCE_KEY); assertThat(pref).isNotNull(); // TODO: add the built-in display to the list, which will cause this preference to not be // null. 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); var builtinPref = listPref.getPreference(0); assertThat(builtinPref.getOnPreferenceClickListener().onPreferenceClick(builtinPref)) .isTrue(); assertThat(mLaunchedBuiltinSettings).isTrue(); } @Test Loading Loading @@ -428,10 +445,15 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa } @Override protected void launchDisplaySettings(final int displayId) { protected void launchExternalDisplaySettings(final int displayId) { mDisplayIdArg = displayId; } @Override protected void launchBuiltinDisplaySettings() { mLaunchedBuiltinSettings = true; } @Override protected void writePreferenceClickMetric(Preference preference) { mLogger.writePreferenceClickMetric(preference); Loading Loading
res/values/strings.xml +2 −0 Original line number Diff line number Diff line Loading @@ -2007,6 +2007,8 @@ <string name="external_display_off">Off</string> <!-- External Display settings. The title of the screen. [CHAR LIMIT=40] --> <string name="external_display_settings_title">External Display</string> <!-- Built-in display settings category. Appears in External displays and Connected Displays fragments. --> <string name="builtin_display_settings_category">Built-in display</string> <!-- External Display use. The title of the use preference. [CHAR LIMIT=40] --> <string name="external_display_use_title">Use external display</string> <!-- External Display resolution settings. The title of the screen. [CHAR LIMIT=40] -->
src/com/android/settings/connecteddevice/display/ExternalDisplayPreferenceFragment.java +59 −7 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.settings.connecteddevice.display; import static android.view.Display.INVALID_DISPLAY; import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.EXTERNAL_DISPLAY_HELP_URL; Loading Loading @@ -46,6 +45,7 @@ import androidx.preference.PreferenceScreen; import com.android.internal.annotations.VisibleForTesting; import com.android.settings.R; import com.android.settings.SettingsPreferenceFragmentBase; import com.android.settings.accessibility.TextReadingPreferenceFragment; import com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.DisplayListener; import com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.Injector; import com.android.settings.core.SubSettingLauncher; Loading @@ -64,6 +64,7 @@ import java.util.List; public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmentBase { 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"; Loading @@ -83,6 +84,8 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen R.string.external_display_rotation; static final int EXTERNAL_DISPLAY_RESOLUTION_TITLE_RESOURCE = R.string.external_display_resolution_settings_title; 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; Loading @@ -101,6 +104,8 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen @Nullable private PreferenceCategory mDisplaysPreference; @Nullable private PreferenceCategory mBuiltinDisplayPreference; @Nullable private Injector mInjector; @Nullable private String[] mRotationEntries; Loading Loading @@ -200,7 +205,7 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen } @VisibleForTesting protected void launchDisplaySettings(final int displayId) { protected void launchExternalDisplaySettings(final int displayId) { final Bundle args = new Bundle(); var context = getPrefContext(); args.putInt(DISPLAY_ID_ARG, displayId); Loading @@ -210,6 +215,16 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen .setSourceMetricsCategory(getMetricsCategory()).launch(); } @VisibleForTesting protected void launchBuiltinDisplaySettings() { final Bundle args = new Bundle(); var context = getPrefContext(); new SubSettingLauncher(context) .setDestination(TextReadingPreferenceFragment.class.getName()) .setArguments(args) .setSourceMetricsCategory(getMetricsCategory()).launch(); } /** * Returns the preference for the footer. */ Loading Loading @@ -281,6 +296,15 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen return mDisplaysPreference; } @NonNull private PreferenceCategory getBuiltinDisplayListPreference(@NonNull Context context) { if (mBuiltinDisplayPreference == null) { mBuiltinDisplayPreference = new PreferenceCategory(context); mBuiltinDisplayPreference.setPersistent(false); } return mBuiltinDisplayPreference; } @NonNull Preference getDisplayTopologyPreference(@NonNull Context context) { if (mDisplayTopologyPreference == null) { mDisplayTopologyPreference = new DisplayTopologyPreference(context); Loading Loading @@ -310,7 +334,7 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen @NonNull final PreferenceScreen screen, @NonNull Context context) { final boolean forceShowList = displayId == INVALID_DISPLAY && mInjector != null && forceShowDisplayList(mInjector.getFlags()); final var displaysToShow = getDisplaysToShow(displayId); final var displaysToShow = externalDisplaysToShow(displayId); if (!forceShowList && displaysToShow.isEmpty() && displayId == INVALID_DISPLAY) { showTextWhenNoDisplaysToShow(screen, context); Loading Loading @@ -373,9 +397,18 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen private void showDisplaysList(@NonNull List<Display> displaysToShow, @NonNull PreferenceScreen screen, @NonNull Context context) { if (mInjector != null && mInjector.getFlags().displayTopologyPaneInDisplayList()) { if (mInjector != null && mInjector.getFlags().displayTopologyPaneInDisplayList()) { screen.addPreference(getDisplayTopologyPreference(context)); // If topology is shown, we also show a preference for the built-in display for // consistency with the topology. var builtinCategory = getBuiltinDisplayListPreference(context); builtinCategory.setKey(BUILTIN_DISPLAY_LIST_PREFERENCE_KEY); builtinCategory.setTitle(BUILTIN_DISPLAY_SETTINGS_CATEGORY_RESOURCE); builtinCategory.removeAll(); screen.addPreference(builtinCategory); builtinCategory.addPreference(new BuiltinDisplaySizeAndTextPreference(context)); } var pref = getDisplaysListPreference(context); Loading @@ -389,7 +422,7 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen } } private List<Display> getDisplaysToShow(int displayIdToShow) { private List<Display> externalDisplaysToShow(int displayIdToShow) { if (mInjector == null) { return List.of(); } Loading Loading @@ -530,6 +563,24 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen mInjector.getHandler().removeCallbacks(mUpdateRunnable); } private class BuiltinDisplaySizeAndTextPreference extends Preference implements Preference.OnPreferenceClickListener { BuiltinDisplaySizeAndTextPreference(@NonNull final Context context) { super(context); setPersistent(false); setKey("builtin_display_size_and_text"); setTitle(R.string.accessibility_text_reading_options_title); setOnPreferenceClickListener(this); } @Override public boolean onPreferenceClick(@NonNull Preference preference) { launchBuiltinDisplaySettings(); return true; } } @VisibleForTesting class DisplayPreference extends TwoTargetPreference implements Preference.OnPreferenceClickListener { Loading @@ -538,6 +589,7 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen DisplayPreference(@NonNull final Context context, @NonNull final Display display) { super(context); mDisplayId = display.getDisplayId(); setPersistent(false); setKey("display_id_" + mDisplayId); setTitle(display.getName()); Loading @@ -548,7 +600,7 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen @Override public boolean onPreferenceClick(@NonNull Preference preference) { launchDisplaySettings(mDisplayId); launchExternalDisplaySettings(mDisplayId); writePreferenceClickMetric(preference); return true; } Loading
tests/unit/src/com/android/settings/connecteddevice/display/ExternalDisplayPreferenceFragmentTest.java +25 −3 Original line number Diff line number Diff line Loading @@ -71,6 +71,7 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa private ExternalDisplayPreferenceFragment mFragment; private int mPreferenceIdFromResource; private int mDisplayIdArg = INVALID_DISPLAY; private boolean mLaunchedBuiltinSettings; private int mResolutionSelectorDisplayId = INVALID_DISPLAY; @Mock private MetricsLogger mMockedMetricsLogger; Loading Loading @@ -106,6 +107,10 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa pref = mPreferenceScreen.findPreference(DisplayTopologyKt.PREFERENCE_KEY); assertThat(pref).isNull(); pref = mPreferenceScreen.findPreference( ExternalDisplayPreferenceFragment.BUILTIN_DISPLAY_LIST_PREFERENCE_KEY); assertThat(pref).isNull(); } @Test Loading @@ -124,6 +129,11 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa 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 Loading @@ -138,11 +148,18 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa var pref = mPreferenceScreen.findPreference(DisplayTopologyKt.PREFERENCE_KEY); assertThat(pref).isNotNull(); // TODO: add the built-in display to the list, which will cause this preference to not be // null. 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); var builtinPref = listPref.getPreference(0); assertThat(builtinPref.getOnPreferenceClickListener().onPreferenceClick(builtinPref)) .isTrue(); assertThat(mLaunchedBuiltinSettings).isTrue(); } @Test Loading Loading @@ -428,10 +445,15 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa } @Override protected void launchDisplaySettings(final int displayId) { protected void launchExternalDisplaySettings(final int displayId) { mDisplayIdArg = displayId; } @Override protected void launchBuiltinDisplaySettings() { mLaunchedBuiltinSettings = true; } @Override protected void writePreferenceClickMetric(Preference preference) { mLogger.writePreferenceClickMetric(preference); Loading