Show a category for each external display
Rather than show all external displays as a single item each under one category, each external display has its own category. For now, the category only has one item: the single Resolution+Rotation option. This is more consistent with the Built-in display, which also still only has one preference item in the category. Flag: com.android.settings.flags.display_topology_pane_in_display_list Bug: b/352648432 Bug: b/392946322 Test: ExternalDisplayPreferenceFragmentTest Test: Open display list with two displays connected, and remove them one at a time Change-Id: I4d7f8410f506fe53201bc87f8b55ffc6d407a9c5
This commit is contained in:
@@ -452,17 +452,38 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen
|
|||||||
var pref = getDisplayPreference(context, display, groupCleanable);
|
var pref = getDisplayPreference(context, display, groupCleanable);
|
||||||
pref.setSummary(display.getMode().getPhysicalWidth() + " x "
|
pref.setSummary(display.getMode().getPhysicalWidth() + " x "
|
||||||
+ display.getMode().getPhysicalHeight());
|
+ display.getMode().getPhysicalHeight());
|
||||||
pref.setTitle(display.getName());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Preference getDisplayPreference(@NonNull Context context,
|
private Preference getDisplayPreference(@NonNull Context context,
|
||||||
@NonNull Display display, @NonNull PrefRefresh groupCleanable) {
|
@NonNull Display display, @NonNull PrefRefresh groupCleanable) {
|
||||||
var pref = groupCleanable.findUnusedPreference(DisplayPreference.generateKey(display));
|
var itemKey = "display_id_" + display.getDisplayId();
|
||||||
pref = pref != null ? pref : new DisplayPreference(context, display);
|
var categoryKey = itemKey + "_category";
|
||||||
groupCleanable.addPreference(pref);
|
var category = (PreferenceCategory) groupCleanable.findUnusedPreference(categoryKey);
|
||||||
return pref;
|
|
||||||
|
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) {
|
private List<Display> externalDisplaysToShow(int displayIdToShow) {
|
||||||
@@ -621,16 +642,11 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen
|
|||||||
implements Preference.OnPreferenceClickListener {
|
implements Preference.OnPreferenceClickListener {
|
||||||
private final int mDisplayId;
|
private final int mDisplayId;
|
||||||
|
|
||||||
static String generateKey(final Display display) {
|
|
||||||
return "display_id_" + display.getDisplayId();
|
|
||||||
}
|
|
||||||
|
|
||||||
DisplayPreference(@NonNull final Context context, @NonNull final Display display) {
|
DisplayPreference(@NonNull final Context context, @NonNull final Display display) {
|
||||||
super(context);
|
super(context);
|
||||||
mDisplayId = display.getDisplayId();
|
mDisplayId = display.getDisplayId();
|
||||||
|
|
||||||
setPersistent(false);
|
setPersistent(false);
|
||||||
setKey(generateKey(display));
|
|
||||||
setOnPreferenceClickListener(this);
|
setOnPreferenceClickListener(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -173,16 +173,18 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa
|
|||||||
mHandler.flush();
|
mHandler.flush();
|
||||||
PreferenceCategory pref = mPreferenceScreen.findPreference(DISPLAYS_LIST_PREFERENCE_KEY);
|
PreferenceCategory pref = mPreferenceScreen.findPreference(DISPLAYS_LIST_PREFERENCE_KEY);
|
||||||
assertThat(pref).isNotNull();
|
assertThat(pref).isNotNull();
|
||||||
DisplayPreference display1Pref = (DisplayPreference) pref.getPreference(0);
|
var display1Category = (PreferenceCategory) pref.getPreference(0);
|
||||||
DisplayPreference display2Pref = (DisplayPreference) pref.getPreference(1);
|
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.getKey()).isEqualTo("display_id_" + 1);
|
||||||
assertThat("" + display1Pref.getTitle()).isEqualTo("HDMI");
|
assertThat("" + display1Category.getTitle()).isEqualTo("HDMI");
|
||||||
assertThat("" + display1Pref.getSummary()).isEqualTo("1920 x 1080");
|
assertThat("" + display1Pref.getSummary()).isEqualTo("1920 x 1080");
|
||||||
display1Pref.onPreferenceClick(display1Pref);
|
display1Pref.onPreferenceClick(display1Pref);
|
||||||
assertThat(mDisplayIdArg).isEqualTo(1);
|
assertThat(mDisplayIdArg).isEqualTo(1);
|
||||||
verify(mMockedMetricsLogger).writePreferenceClickMetric(display1Pref);
|
verify(mMockedMetricsLogger).writePreferenceClickMetric(display1Pref);
|
||||||
assertThat(display2Pref.getKey()).isEqualTo("display_id_" + 2);
|
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");
|
assertThat("" + display2Pref.getSummary()).isEqualTo("1240 x 780");
|
||||||
display2Pref.onPreferenceClick(display2Pref);
|
display2Pref.onPreferenceClick(display2Pref);
|
||||||
assertThat(mDisplayIdArg).isEqualTo(2);
|
assertThat(mDisplayIdArg).isEqualTo(2);
|
||||||
|
|||||||
Reference in New Issue
Block a user