Merge "Show a category for each external display" into main

This commit is contained in:
Matthew DeVore
2025-02-04 10:38:14 -08:00
committed by Android (Google) Code Review
2 changed files with 32 additions and 14 deletions

View File

@@ -452,17 +452,38 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen
var pref = getDisplayPreference(context, display, groupCleanable);
pref.setSummary(display.getMode().getPhysicalWidth() + " x "
+ display.getMode().getPhysicalHeight());
pref.setTitle(display.getName());
}
}
}
private Preference getDisplayPreference(@NonNull Context context,
@NonNull Display display, @NonNull PrefRefresh groupCleanable) {
var pref = groupCleanable.findUnusedPreference(DisplayPreference.generateKey(display));
pref = pref != null ? pref : new DisplayPreference(context, display);
groupCleanable.addPreference(pref);
return pref;
var itemKey = "display_id_" + display.getDisplayId();
var categoryKey = itemKey + "_category";
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);
// 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(EXTERNAL_DISPLAY_RESOLUTION_TITLE_RESOURCE)
+ " | " + context.getString(EXTERNAL_DISPLAY_ROTATION_TITLE_RESOURCE));
prefItem.setKey(itemKey);
category.addPreference(prefItem);
category.setTitle(display.getName());
return prefItem;
}
}
private List<Display> externalDisplaysToShow(int displayIdToShow) {
@@ -621,16 +642,11 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen
implements Preference.OnPreferenceClickListener {
private final int mDisplayId;
static String generateKey(final Display display) {
return "display_id_" + display.getDisplayId();
}
DisplayPreference(@NonNull final Context context, @NonNull final Display display) {
super(context);
mDisplayId = display.getDisplayId();
setPersistent(false);
setKey(generateKey(display));
setOnPreferenceClickListener(this);
}

View File

@@ -173,16 +173,18 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa
mHandler.flush();
PreferenceCategory pref = mPreferenceScreen.findPreference(DISPLAYS_LIST_PREFERENCE_KEY);
assertThat(pref).isNotNull();
DisplayPreference display1Pref = (DisplayPreference) pref.getPreference(0);
DisplayPreference display2Pref = (DisplayPreference) pref.getPreference(1);
var display1Category = (PreferenceCategory) pref.getPreference(0);
var display1Pref = (DisplayPreference) display1Category.getPreference(0);
var display2Category = (PreferenceCategory) pref.getPreference(1);
var display2Pref = (DisplayPreference) display2Category.getPreference(0);
assertThat(display1Pref.getKey()).isEqualTo("display_id_" + 1);
assertThat("" + display1Pref.getTitle()).isEqualTo("HDMI");
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("display_id_" + 2);
assertThat("" + display2Pref.getTitle()).isEqualTo("Overlay #1");
assertThat("" + display2Category.getTitle()).isEqualTo("Overlay #1");
assertThat("" + display2Pref.getSummary()).isEqualTo("1240 x 780");
display2Pref.onPreferenceClick(display2Pref);
assertThat(mDisplayIdArg).isEqualTo(2);