Show expanded display settings in list fragment
Stop distinguishing between the display list and per-display fragments. Instead, always show all displays that are available. This is closer to how the UI will eventually look, which is each display in a tab. Setting an OnChangeListener for multiple preferences with the same key did not work, even though the conflicting preferences had different parent preferences. Only the listener of the top-most preference was notified even when changing a different one. So this CL changes PrefBasics so that it can set unique keys for otherwise identical preferences. Flag: com.android.settings.flags.display_topology_pane_in_display_list Bug: b/352648432 Test: ExternalDisplayPreferenceFragmentTest Test: set rotation of two overlay displays to different non-default values Change-Id: Idabef1e03afd496bfc955927a2894f14f999a105
This commit is contained in:
@@ -16,8 +16,6 @@
|
|||||||
|
|
||||||
package com.android.settings.connecteddevice.display;
|
package com.android.settings.connecteddevice.display;
|
||||||
|
|
||||||
import static android.view.Display.INVALID_DISPLAY;
|
|
||||||
|
|
||||||
import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.DISPLAY_ID_ARG;
|
import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.DISPLAY_ID_ARG;
|
||||||
import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.EXTERNAL_DISPLAY_HELP_URL;
|
import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.EXTERNAL_DISPLAY_HELP_URL;
|
||||||
import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.EXTERNAL_DISPLAY_NOT_FOUND_RESOURCE;
|
import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.EXTERNAL_DISPLAY_NOT_FOUND_RESOURCE;
|
||||||
@@ -60,7 +58,6 @@ import com.android.settingslib.display.DisplayDensityUtils;
|
|||||||
import com.android.settingslib.widget.FooterPreference;
|
import com.android.settingslib.widget.FooterPreference;
|
||||||
import com.android.settingslib.widget.IllustrationPreference;
|
import com.android.settingslib.widget.IllustrationPreference;
|
||||||
import com.android.settingslib.widget.MainSwitchPreference;
|
import com.android.settingslib.widget.MainSwitchPreference;
|
||||||
import com.android.settingslib.widget.TwoTargetPreference;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@@ -87,10 +84,12 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen
|
|||||||
EXTERNAL_DISPLAY_RESOLUTION(60, "external_display_resolution",
|
EXTERNAL_DISPLAY_RESOLUTION(60, "external_display_resolution",
|
||||||
R.string.external_display_resolution_settings_title),
|
R.string.external_display_resolution_settings_title),
|
||||||
|
|
||||||
// Built-in display link is after per-display settings.
|
// Built-in display link is before per-display settings.
|
||||||
BUILTIN_DISPLAY_LIST(70, "builtin_display_list_preference",
|
BUILTIN_DISPLAY_LIST(70, "builtin_display_list_preference",
|
||||||
R.string.builtin_display_settings_category),
|
R.string.builtin_display_settings_category),
|
||||||
|
|
||||||
|
EXTERNAL_DISPLAY_LIST(-1, "external_display_list", null),
|
||||||
|
|
||||||
// If shown, footer should appear below everything.
|
// If shown, footer should appear below everything.
|
||||||
FOOTER(90, "footer_preference", null);
|
FOOTER(90, "footer_preference", null);
|
||||||
|
|
||||||
@@ -106,16 +105,27 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen
|
|||||||
public final String key;
|
public final String key;
|
||||||
@Nullable public final Integer titleResource;
|
@Nullable public final Integer titleResource;
|
||||||
|
|
||||||
void apply(Preference preference) {
|
/**
|
||||||
|
* Applies this basic data to the given preference.
|
||||||
|
*
|
||||||
|
* @param preference object whose properties to set
|
||||||
|
* @param nth if non-null, disambiguates the key so that other preferences can have the same
|
||||||
|
* basic properties. Does not affect the order.
|
||||||
|
*/
|
||||||
|
void apply(Preference preference, @Nullable Integer nth) {
|
||||||
if (order != -1) {
|
if (order != -1) {
|
||||||
preference.setOrder(order);
|
preference.setOrder(order);
|
||||||
}
|
}
|
||||||
if (titleResource != null) {
|
if (titleResource != null) {
|
||||||
preference.setTitle(titleResource);
|
preference.setTitle(titleResource);
|
||||||
}
|
}
|
||||||
preference.setKey(key);
|
preference.setKey(nth == null ? key : keyForNth(nth));
|
||||||
preference.setPersistent(false);
|
preference.setPersistent(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String keyForNth(int nth) {
|
||||||
|
return key + "_" + nth;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static final int EXTERNAL_DISPLAY_SETTINGS_RESOURCE = R.xml.external_display_settings;
|
static final int EXTERNAL_DISPLAY_SETTINGS_RESOURCE = R.xml.external_display_settings;
|
||||||
@@ -131,12 +141,8 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen
|
|||||||
R.drawable.external_display_mirror_portrait;
|
R.drawable.external_display_mirror_portrait;
|
||||||
static final int EXTERNAL_DISPLAY_SIZE_SUMMARY_RESOURCE = R.string.screen_zoom_short_summary;
|
static final int EXTERNAL_DISPLAY_SIZE_SUMMARY_RESOURCE = R.string.screen_zoom_short_summary;
|
||||||
|
|
||||||
@VisibleForTesting
|
|
||||||
static final String PREVIOUSLY_SHOWN_LIST_KEY = "mPreviouslyShownListOfDisplays";
|
|
||||||
private boolean mStarted;
|
private boolean mStarted;
|
||||||
@Nullable
|
@Nullable
|
||||||
private IllustrationPreference mImagePreference;
|
|
||||||
@Nullable
|
|
||||||
private Preference mDisplayTopologyPreference;
|
private Preference mDisplayTopologyPreference;
|
||||||
@Nullable
|
@Nullable
|
||||||
private PreferenceCategory mBuiltinDisplayPreference;
|
private PreferenceCategory mBuiltinDisplayPreference;
|
||||||
@@ -156,7 +162,6 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen
|
|||||||
scheduleUpdate();
|
scheduleUpdate();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
private boolean mPreviouslyShownListOfDisplays;
|
|
||||||
|
|
||||||
public ExternalDisplayPreferenceFragment() {}
|
public ExternalDisplayPreferenceFragment() {}
|
||||||
|
|
||||||
@@ -175,12 +180,6 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen
|
|||||||
return EXTERNAL_DISPLAY_HELP_URL;
|
return EXTERNAL_DISPLAY_HELP_URL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onSaveInstanceStateCallback(@NonNull Bundle outState) {
|
|
||||||
outState.putSerializable(PREVIOUSLY_SHOWN_LIST_KEY,
|
|
||||||
mPreviouslyShownListOfDisplays);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreateCallback(@Nullable Bundle icicle) {
|
public void onCreateCallback(@Nullable Bundle icicle) {
|
||||||
if (mInjector == null) {
|
if (mInjector == null) {
|
||||||
@@ -191,7 +190,6 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onActivityCreatedCallback(@Nullable Bundle savedInstanceState) {
|
public void onActivityCreatedCallback(@Nullable Bundle savedInstanceState) {
|
||||||
restoreState(savedInstanceState);
|
|
||||||
View view = getView();
|
View view = getView();
|
||||||
TextView emptyView = null;
|
TextView emptyView = null;
|
||||||
if (view != null) {
|
if (view != null) {
|
||||||
@@ -241,17 +239,6 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen
|
|||||||
.setSourceMetricsCategory(getMetricsCategory()).launch();
|
.setSourceMetricsCategory(getMetricsCategory()).launch();
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
|
||||||
protected void launchExternalDisplaySettings(final int displayId) {
|
|
||||||
final Bundle args = new Bundle();
|
|
||||||
var context = getPrefContext();
|
|
||||||
args.putInt(DISPLAY_ID_ARG, displayId);
|
|
||||||
new SubSettingLauncher(context)
|
|
||||||
.setDestination(this.getClass().getName())
|
|
||||||
.setArguments(args)
|
|
||||||
.setSourceMetricsCategory(getMetricsCategory()).launch();
|
|
||||||
}
|
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
protected void launchBuiltinDisplaySettings() {
|
protected void launchBuiltinDisplaySettings() {
|
||||||
final Bundle args = new Bundle();
|
final Bundle args = new Bundle();
|
||||||
@@ -275,30 +262,33 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen
|
|||||||
var pref = refresh.findUnusedPreference(PrefBasics.FOOTER.key);
|
var pref = refresh.findUnusedPreference(PrefBasics.FOOTER.key);
|
||||||
if (pref == null) {
|
if (pref == null) {
|
||||||
pref = newFooterPreference(context);
|
pref = newFooterPreference(context);
|
||||||
PrefBasics.FOOTER.apply(pref);
|
PrefBasics.FOOTER.apply(pref, /* nth= */ null);
|
||||||
}
|
}
|
||||||
pref.setTitle(title);
|
pref.setTitle(title);
|
||||||
refresh.addPreference(pref);
|
refresh.addPreference(pref);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
private ListPreference reuseRotationPreference(@NonNull Context context, PrefRefresh refresh) {
|
private ListPreference reuseRotationPreference(@NonNull Context context, PrefRefresh refresh,
|
||||||
|
int position) {
|
||||||
ListPreference pref = refresh.findUnusedPreference(
|
ListPreference pref = refresh.findUnusedPreference(
|
||||||
PrefBasics.EXTERNAL_DISPLAY_ROTATION.key);
|
PrefBasics.EXTERNAL_DISPLAY_ROTATION.keyForNth(position));
|
||||||
if (pref == null) {
|
if (pref == null) {
|
||||||
pref = new ListPreference(context);
|
pref = new ListPreference(context);
|
||||||
PrefBasics.EXTERNAL_DISPLAY_ROTATION.apply(pref);
|
PrefBasics.EXTERNAL_DISPLAY_ROTATION.apply(pref, position);
|
||||||
}
|
}
|
||||||
refresh.addPreference(pref);
|
refresh.addPreference(pref);
|
||||||
return pref;
|
return pref;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
private Preference reuseResolutionPreference(@NonNull Context context, PrefRefresh refresh) {
|
private Preference reuseResolutionPreference(@NonNull Context context, PrefRefresh refresh,
|
||||||
var pref = refresh.findUnusedPreference(PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.key);
|
int position) {
|
||||||
|
var pref = refresh.findUnusedPreference(
|
||||||
|
PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.keyForNth(position));
|
||||||
if (pref == null) {
|
if (pref == null) {
|
||||||
pref = new Preference(context);
|
pref = new Preference(context);
|
||||||
PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.apply(pref);
|
PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.apply(pref, position);
|
||||||
}
|
}
|
||||||
refresh.addPreference(pref);
|
refresh.addPreference(pref);
|
||||||
return pref;
|
return pref;
|
||||||
@@ -306,41 +296,34 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen
|
|||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
private MainSwitchPreference reuseUseDisplayPreference(
|
private MainSwitchPreference reuseUseDisplayPreference(
|
||||||
@NonNull Context context, @NonNull PrefRefresh refresh) {
|
Context context, PrefRefresh refresh, int position) {
|
||||||
MainSwitchPreference pref = refresh.findUnusedPreference(
|
MainSwitchPreference pref = refresh.findUnusedPreference(
|
||||||
PrefBasics.EXTERNAL_DISPLAY_USE.key);
|
PrefBasics.EXTERNAL_DISPLAY_USE.keyForNth(position));
|
||||||
if (pref == null) {
|
if (pref == null) {
|
||||||
pref = new MainSwitchPreference(context);
|
pref = new MainSwitchPreference(context);
|
||||||
PrefBasics.EXTERNAL_DISPLAY_USE.apply(pref);
|
PrefBasics.EXTERNAL_DISPLAY_USE.apply(pref, position);
|
||||||
}
|
}
|
||||||
refresh.addPreference(pref);
|
refresh.addPreference(pref);
|
||||||
return pref;
|
return pref;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
@VisibleForTesting
|
private IllustrationPreference reuseIllustrationPreference(
|
||||||
IllustrationPreference getIllustrationPreference(@NonNull Context context) {
|
Context context, PrefRefresh refresh) {
|
||||||
if (mImagePreference == null) {
|
IllustrationPreference pref = refresh.findUnusedPreference(PrefBasics.ILLUSTRATION.key);
|
||||||
mImagePreference = new IllustrationPreference(context);
|
if (pref == null) {
|
||||||
PrefBasics.ILLUSTRATION.apply(mImagePreference);
|
pref = new IllustrationPreference(context);
|
||||||
|
PrefBasics.ILLUSTRATION.apply(pref, /* nth= */ null);
|
||||||
}
|
}
|
||||||
return mImagePreference;
|
refresh.addPreference(pref);
|
||||||
}
|
return pref;
|
||||||
|
|
||||||
/**
|
|
||||||
* @return return display id argument of this settings page.
|
|
||||||
*/
|
|
||||||
@VisibleForTesting
|
|
||||||
protected int getDisplayIdArg() {
|
|
||||||
var args = getArguments();
|
|
||||||
return args != null ? args.getInt(DISPLAY_ID_ARG, INVALID_DISPLAY) : INVALID_DISPLAY;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
private PreferenceCategory getBuiltinDisplayListPreference(@NonNull Context context) {
|
private PreferenceCategory getBuiltinDisplayListPreference(@NonNull Context context) {
|
||||||
if (mBuiltinDisplayPreference == null) {
|
if (mBuiltinDisplayPreference == null) {
|
||||||
mBuiltinDisplayPreference = new PreferenceCategory(context);
|
mBuiltinDisplayPreference = new PreferenceCategory(context);
|
||||||
PrefBasics.BUILTIN_DISPLAY_LIST.apply(mBuiltinDisplayPreference);
|
PrefBasics.BUILTIN_DISPLAY_LIST.apply(mBuiltinDisplayPreference, /* nth= */ null);
|
||||||
}
|
}
|
||||||
return mBuiltinDisplayPreference;
|
return mBuiltinDisplayPreference;
|
||||||
}
|
}
|
||||||
@@ -356,7 +339,7 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen
|
|||||||
@NonNull Preference getDisplayTopologyPreference(@NonNull Context context) {
|
@NonNull Preference getDisplayTopologyPreference(@NonNull Context context) {
|
||||||
if (mDisplayTopologyPreference == null) {
|
if (mDisplayTopologyPreference == null) {
|
||||||
mDisplayTopologyPreference = new DisplayTopologyPreference(context);
|
mDisplayTopologyPreference = new DisplayTopologyPreference(context);
|
||||||
PrefBasics.DISPLAY_TOPOLOGY.apply(mDisplayTopologyPreference);
|
PrefBasics.DISPLAY_TOPOLOGY.apply(mDisplayTopologyPreference, /* nth= */ null);
|
||||||
}
|
}
|
||||||
return mDisplayTopologyPreference;
|
return mDisplayTopologyPreference;
|
||||||
}
|
}
|
||||||
@@ -366,23 +349,23 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen
|
|||||||
if (pref == null) {
|
if (pref == null) {
|
||||||
pref = new MirrorPreference(context,
|
pref = new MirrorPreference(context,
|
||||||
DesktopExperienceFlags.ENABLE_DISPLAY_CONTENT_MODE_MANAGEMENT.isTrue());
|
DesktopExperienceFlags.ENABLE_DISPLAY_CONTENT_MODE_MANAGEMENT.isTrue());
|
||||||
PrefBasics.MIRROR.apply(pref);
|
PrefBasics.MIRROR.apply(pref, /* nth= */ null);
|
||||||
}
|
}
|
||||||
refresh.addPreference(pref);
|
refresh.addPreference(pref);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
private AccessibilitySeekBarPreference reuseSizePreference(Context context,
|
private AccessibilitySeekBarPreference reuseSizePreference(Context context,
|
||||||
PrefRefresh refresh, int displayId) {
|
PrefRefresh refresh, int displayId, int position) {
|
||||||
AccessibilitySeekBarPreference pref =
|
AccessibilitySeekBarPreference pref =
|
||||||
refresh.findUnusedPreference(PrefBasics.EXTERNAL_DISPLAY_SIZE.key);
|
refresh.findUnusedPreference(PrefBasics.EXTERNAL_DISPLAY_SIZE.keyForNth(position));
|
||||||
if (pref == null) {
|
if (pref == null) {
|
||||||
pref = new AccessibilitySeekBarPreference(context, /* attrs= */ null);
|
pref = new AccessibilitySeekBarPreference(context, /* attrs= */ null);
|
||||||
pref.setIconStart(R.drawable.ic_remove_24dp);
|
pref.setIconStart(R.drawable.ic_remove_24dp);
|
||||||
pref.setIconStartContentDescription(R.string.screen_zoom_make_smaller_desc);
|
pref.setIconStartContentDescription(R.string.screen_zoom_make_smaller_desc);
|
||||||
pref.setIconEnd(R.drawable.ic_add_24dp);
|
pref.setIconEnd(R.drawable.ic_add_24dp);
|
||||||
pref.setIconEndContentDescription(R.string.screen_zoom_make_larger_desc);
|
pref.setIconEndContentDescription(R.string.screen_zoom_make_larger_desc);
|
||||||
PrefBasics.EXTERNAL_DISPLAY_SIZE.apply(pref);
|
PrefBasics.EXTERNAL_DISPLAY_SIZE.apply(pref, position);
|
||||||
|
|
||||||
setStateForDisplaySizePreference(context, displayId, pref);
|
setStateForDisplaySizePreference(context, displayId, pref);
|
||||||
}
|
}
|
||||||
@@ -404,74 +387,43 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen
|
|||||||
preference.setOnSeekBarChangeListener(seekBarChangeHandler);
|
preference.setOnSeekBarChangeListener(seekBarChangeHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void restoreState(@Nullable Bundle savedInstanceState) {
|
|
||||||
if (savedInstanceState == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
mPreviouslyShownListOfDisplays = Boolean.TRUE.equals(savedInstanceState.getSerializable(
|
|
||||||
PREVIOUSLY_SHOWN_LIST_KEY, Boolean.class));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void update() {
|
private void update() {
|
||||||
final var screen = getPreferenceScreen();
|
final var screen = getPreferenceScreen();
|
||||||
if (screen == null || mInjector == null || mInjector.getContext() == null) {
|
if (screen == null || mInjector == null || mInjector.getContext() == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try (var cleanableScreen = new PrefRefresh(screen)) {
|
try (var cleanableScreen = new PrefRefresh(screen)) {
|
||||||
updateScreenForDisplayId(getDisplayIdArg(), cleanableScreen, mInjector.getContext());
|
updateScreen(cleanableScreen, mInjector.getContext());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateScreenForDisplayId(final int displayId,
|
private void updateScreen(final PrefRefresh screen, Context context) {
|
||||||
@NonNull final PrefRefresh screen, @NonNull Context context) {
|
final var displaysToShow = externalDisplaysToShow();
|
||||||
final var displaysToShow = externalDisplaysToShow(displayId);
|
|
||||||
|
|
||||||
if (displaysToShow.isEmpty() && displayId == INVALID_DISPLAY) {
|
if (displaysToShow.isEmpty()) {
|
||||||
showTextWhenNoDisplaysToShow(screen, context);
|
showTextWhenNoDisplaysToShow(screen, context, /* position= */ 0);
|
||||||
} else if (displaysToShow.size() == 1
|
} else {
|
||||||
&& ((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.
|
|
||||||
mPreviouslyShownListOfDisplays = true;
|
|
||||||
showDisplaysList(displaysToShow, screen, context);
|
showDisplaysList(displaysToShow, screen, context);
|
||||||
}
|
}
|
||||||
updateSettingsTitle(displaysToShow, displayId);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateSettingsTitle(@NonNull final List<Display> displaysToShow, int displayId) {
|
|
||||||
final Activity activity = getCurrentActivity();
|
final Activity activity = getCurrentActivity();
|
||||||
if (activity == null) {
|
if (activity != null) {
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (displaysToShow.size() == 1 && displaysToShow.get(0).getDisplayId() == displayId) {
|
|
||||||
var displayName = displaysToShow.get(0).getName();
|
|
||||||
if (!displayName.isEmpty()) {
|
|
||||||
activity.setTitle(displayName.substring(0, Math.min(displayName.length(), 40)));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
activity.setTitle(EXTERNAL_DISPLAY_TITLE_RESOURCE);
|
activity.setTitle(EXTERNAL_DISPLAY_TITLE_RESOURCE);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void showTextWhenNoDisplaysToShow(@NonNull final PrefRefresh screen,
|
private void showTextWhenNoDisplaysToShow(@NonNull final PrefRefresh screen,
|
||||||
@NonNull Context context) {
|
@NonNull Context context, int position) {
|
||||||
if (isUseDisplaySettingEnabled(mInjector)) {
|
if (isUseDisplaySettingEnabled(mInjector)) {
|
||||||
addUseDisplayPreferenceNoDisplaysFound(context, screen);
|
addUseDisplayPreferenceNoDisplaysFound(context, screen, position);
|
||||||
}
|
}
|
||||||
addFooterPreference(context, screen, EXTERNAL_DISPLAY_NOT_FOUND_FOOTER_RESOURCE);
|
addFooterPreference(context, screen, EXTERNAL_DISPLAY_NOT_FOUND_FOOTER_RESOURCE);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static PreferenceCategory getCategoryForDisplay(@NonNull Display display,
|
private static PreferenceCategory reuseDisplayCategory(
|
||||||
@NonNull PrefRefresh screen, @NonNull Context context) {
|
PrefRefresh screen, Context context, int position) {
|
||||||
// The rest of the settings are in a category with the display name as the title.
|
// The rest of the settings are in a category with the display name as the title.
|
||||||
String categoryKey = "expanded_display_items_" + display.getDisplayId();
|
String categoryKey = PrefBasics.EXTERNAL_DISPLAY_LIST.keyForNth(position);
|
||||||
var category = (PreferenceCategory) screen.findUnusedPreference(categoryKey);
|
var category = (PreferenceCategory) screen.findUnusedPreference(categoryKey);
|
||||||
|
|
||||||
if (category != null) {
|
if (category != null) {
|
||||||
@@ -479,45 +431,30 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen
|
|||||||
} else {
|
} else {
|
||||||
category = new PreferenceCategory(context);
|
category = new PreferenceCategory(context);
|
||||||
screen.addPreference(category);
|
screen.addPreference(category);
|
||||||
category.setPersistent(false);
|
PrefBasics.EXTERNAL_DISPLAY_LIST.apply(category, position);
|
||||||
category.setKey(categoryKey);
|
category.setOrder(PrefBasics.BUILTIN_DISPLAY_LIST.order + 1 + position);
|
||||||
category.setTitle(display.getName());
|
|
||||||
category.setOrder(PrefBasics.BUILTIN_DISPLAY_LIST.order + 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return category;
|
return category;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showDisplaySettings(@NonNull Display display, @NonNull PrefRefresh screen,
|
private void showDisplaySettings(Display display, PrefRefresh refresh,
|
||||||
@NonNull Context context) {
|
Context context, boolean includeV1Helpers, int position) {
|
||||||
final var isEnabled = mInjector != null && mInjector.isDisplayEnabled(display);
|
final var isEnabled = mInjector != null && mInjector.isDisplayEnabled(display);
|
||||||
if (isUseDisplaySettingEnabled(mInjector)) {
|
if (isUseDisplaySettingEnabled(mInjector)) {
|
||||||
addUseDisplayPreferenceForDisplay(context, screen, display, isEnabled);
|
addUseDisplayPreferenceForDisplay(context, refresh, display, isEnabled, position);
|
||||||
}
|
}
|
||||||
if (!isEnabled) {
|
if (!isEnabled) {
|
||||||
// Skip all other settings
|
// Skip all other settings
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final var displayRotation = getDisplayRotation(display.getDisplayId());
|
final var displayRotation = getDisplayRotation(display.getDisplayId());
|
||||||
if (!isTopologyPaneEnabled(mInjector)) {
|
if (includeV1Helpers) {
|
||||||
screen.addPreference(updateIllustrationImage(context, displayRotation));
|
addIllustrationImage(context, refresh, displayRotation);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isTopologyPaneEnabled(mInjector)) {
|
addResolutionPreference(context, refresh, display, position);
|
||||||
var displayCategory = getCategoryForDisplay(display, screen, context);
|
addRotationPreference(context, refresh, display, displayRotation, position);
|
||||||
try (var categoryRefresh = new PrefRefresh(displayCategory)) {
|
|
||||||
addDisplaySettings(context, categoryRefresh, display, displayRotation);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
addDisplaySettings(context, screen, display, displayRotation);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void addDisplaySettings(Context context, PrefRefresh refresh, Display display,
|
|
||||||
int displayRotation) {
|
|
||||||
addResolutionPreference(context, refresh, display);
|
|
||||||
addRotationPreference(context, refresh, display, displayRotation);
|
|
||||||
if (isResolutionSettingEnabled(mInjector)) {
|
if (isResolutionSettingEnabled(mInjector)) {
|
||||||
// Do not show the footer about changing resolution affecting apps. This is not in the
|
// 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
|
// UX design for v2, and there is no good place to put it, since (a) if it is on the
|
||||||
@@ -529,13 +466,13 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen
|
|||||||
// inconsistent with the topology pane, which shows that display.
|
// 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
|
// TODO(b/352648432): probably remove footer once the pane and rest of v2 UI is in
|
||||||
// place.
|
// place.
|
||||||
if (!isTopologyPaneEnabled(mInjector)) {
|
if (includeV1Helpers) {
|
||||||
addFooterPreference(
|
addFooterPreference(
|
||||||
context, refresh, EXTERNAL_DISPLAY_CHANGE_RESOLUTION_FOOTER_RESOURCE);
|
context, refresh, EXTERNAL_DISPLAY_CHANGE_RESOLUTION_FOOTER_RESOURCE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (isDisplaySizeSettingEnabled(mInjector)) {
|
if (isDisplaySizeSettingEnabled(mInjector)) {
|
||||||
addSizePreference(context, refresh, display.getDisplayId());
|
addSizePreference(context, refresh, display.getDisplayId(), position);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -555,66 +492,26 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen
|
|||||||
private void showDisplaysList(@NonNull List<Display> displaysToShow,
|
private void showDisplaysList(@NonNull List<Display> displaysToShow,
|
||||||
@NonNull PrefRefresh screen, @NonNull Context context) {
|
@NonNull PrefRefresh screen, @NonNull Context context) {
|
||||||
maybeAddV2Components(context, screen);
|
maybeAddV2Components(context, screen);
|
||||||
int order = PrefBasics.BUILTIN_DISPLAY_LIST.order;
|
int position = 0;
|
||||||
|
boolean includeV1Helpers = !isTopologyPaneEnabled(mInjector) && displaysToShow.size() <= 1;
|
||||||
for (var display : displaysToShow) {
|
for (var display : displaysToShow) {
|
||||||
var pref = getDisplayPreference(context, display, screen, ++order);
|
var category = reuseDisplayCategory(screen, context, position);
|
||||||
pref.setSummary(display.getMode().getPhysicalWidth() + " x "
|
|
||||||
+ display.getMode().getPhysicalHeight());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@VisibleForTesting
|
|
||||||
static String displayListDisplayCategoryKey(int displayId) {
|
|
||||||
return "display_list_display_category_" + displayId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@VisibleForTesting
|
|
||||||
static String resolutionRotationPreferenceKey(int displayId) {
|
|
||||||
return "display_id_" + displayId;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Preference getDisplayPreference(@NonNull Context context,
|
|
||||||
@NonNull Display display, @NonNull PrefRefresh groupCleanable, int categoryOrder) {
|
|
||||||
var itemKey = resolutionRotationPreferenceKey(display.getDisplayId());
|
|
||||||
var categoryKey = displayListDisplayCategoryKey(display.getDisplayId());
|
|
||||||
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);
|
|
||||||
category.setOrder(categoryOrder);
|
|
||||||
// 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(PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.titleResource) + " | "
|
|
||||||
+ context.getString(PrefBasics.EXTERNAL_DISPLAY_ROTATION.titleResource));
|
|
||||||
prefItem.setKey(itemKey);
|
|
||||||
|
|
||||||
category.addPreference(prefItem);
|
|
||||||
category.setTitle(display.getName());
|
category.setTitle(display.getName());
|
||||||
|
|
||||||
return prefItem;
|
try (var refresh = new PrefRefresh(category)) {
|
||||||
|
// The category may have already been populated if it was retrieved from `screen`,
|
||||||
|
// but we still need to update resolution and rotation items.
|
||||||
|
showDisplaySettings(display, refresh, context, includeV1Helpers, position);
|
||||||
|
}
|
||||||
|
|
||||||
|
position++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<Display> externalDisplaysToShow(int displayIdToShow) {
|
private List<Display> externalDisplaysToShow() {
|
||||||
if (mInjector == null) {
|
if (mInjector == null) {
|
||||||
return List.of();
|
return List.of();
|
||||||
}
|
}
|
||||||
if (displayIdToShow != INVALID_DISPLAY) {
|
|
||||||
var display = mInjector.getDisplay(displayIdToShow);
|
|
||||||
if (display != null && isDisplayAllowed(display, mInjector)) {
|
|
||||||
return List.of(display);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var displaysToShow = new ArrayList<Display>();
|
var displaysToShow = new ArrayList<Display>();
|
||||||
for (var display : mInjector.getAllDisplays()) {
|
for (var display : mInjector.getAllDisplays()) {
|
||||||
if (display != null && isDisplayAllowed(display, mInjector)) {
|
if (display != null && isDisplayAllowed(display, mInjector)) {
|
||||||
@@ -624,16 +521,17 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen
|
|||||||
return displaysToShow;
|
return displaysToShow;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addUseDisplayPreferenceNoDisplaysFound(Context context, PrefRefresh refresh) {
|
private void addUseDisplayPreferenceNoDisplaysFound(Context context, PrefRefresh refresh,
|
||||||
final var pref = reuseUseDisplayPreference(context, refresh);
|
int position) {
|
||||||
|
final var pref = reuseUseDisplayPreference(context, refresh, position);
|
||||||
pref.setChecked(false);
|
pref.setChecked(false);
|
||||||
pref.setEnabled(false);
|
pref.setEnabled(false);
|
||||||
pref.setOnPreferenceChangeListener(null);
|
pref.setOnPreferenceChangeListener(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addUseDisplayPreferenceForDisplay(final Context context,
|
private void addUseDisplayPreferenceForDisplay(final Context context,
|
||||||
PrefRefresh refresh, final Display display, boolean isEnabled) {
|
PrefRefresh refresh, final Display display, boolean isEnabled, int position) {
|
||||||
final var pref = reuseUseDisplayPreference(context, refresh);
|
final var pref = reuseUseDisplayPreference(context, refresh, position);
|
||||||
pref.setChecked(isEnabled);
|
pref.setChecked(isEnabled);
|
||||||
pref.setEnabled(true);
|
pref.setEnabled(true);
|
||||||
pref.setOnPreferenceChangeListener((p, newValue) -> {
|
pref.setOnPreferenceChangeListener((p, newValue) -> {
|
||||||
@@ -654,20 +552,19 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private Preference updateIllustrationImage(@NonNull final Context context,
|
private void addIllustrationImage(final Context context, PrefRefresh refresh,
|
||||||
final int displayRotation) {
|
final int displayRotation) {
|
||||||
var pref = getIllustrationPreference(context);
|
var pref = reuseIllustrationPreference(context, refresh);
|
||||||
if (displayRotation % 2 == 0) {
|
if (displayRotation % 2 == 0) {
|
||||||
pref.setLottieAnimationResId(EXTERNAL_DISPLAY_PORTRAIT_DRAWABLE);
|
pref.setLottieAnimationResId(EXTERNAL_DISPLAY_PORTRAIT_DRAWABLE);
|
||||||
} else {
|
} else {
|
||||||
pref.setLottieAnimationResId(EXTERNAL_DISPLAY_LANDSCAPE_DRAWABLE);
|
pref.setLottieAnimationResId(EXTERNAL_DISPLAY_LANDSCAPE_DRAWABLE);
|
||||||
}
|
}
|
||||||
return pref;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addRotationPreference(final Context context,
|
private void addRotationPreference(final Context context,
|
||||||
PrefRefresh refresh, final Display display, final int displayRotation) {
|
PrefRefresh refresh, final Display display, final int displayRotation, int position) {
|
||||||
var pref = reuseRotationPreference(context, refresh);
|
var pref = reuseRotationPreference(context, refresh, position);
|
||||||
if (mRotationEntries == null || mRotationEntriesValues == null) {
|
if (mRotationEntries == null || mRotationEntriesValues == null) {
|
||||||
mRotationEntries = new String[] {
|
mRotationEntries = new String[] {
|
||||||
context.getString(R.string.external_display_standard_rotation),
|
context.getString(R.string.external_display_standard_rotation),
|
||||||
@@ -694,8 +591,8 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void addResolutionPreference(final Context context, PrefRefresh refresh,
|
private void addResolutionPreference(final Context context, PrefRefresh refresh,
|
||||||
final Display display) {
|
final Display display, int position) {
|
||||||
var pref = reuseResolutionPreference(context, refresh);
|
var pref = reuseResolutionPreference(context, refresh, position);
|
||||||
pref.setSummary(display.getMode().getPhysicalWidth() + " x "
|
pref.setSummary(display.getMode().getPhysicalWidth() + " x "
|
||||||
+ display.getMode().getPhysicalHeight());
|
+ display.getMode().getPhysicalHeight());
|
||||||
pref.setOnPreferenceClickListener((Preference p) -> {
|
pref.setOnPreferenceClickListener((Preference p) -> {
|
||||||
@@ -706,8 +603,9 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen
|
|||||||
pref.setEnabled(isResolutionSettingEnabled(mInjector));
|
pref.setEnabled(isResolutionSettingEnabled(mInjector));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addSizePreference(final Context context, PrefRefresh refresh, int displayId) {
|
private void addSizePreference(final Context context, PrefRefresh refresh, int displayId,
|
||||||
var pref = reuseSizePreference(context, refresh, displayId);
|
int position) {
|
||||||
|
var pref = reuseSizePreference(context, refresh, displayId, position);
|
||||||
pref.setSummary(EXTERNAL_DISPLAY_SIZE_SUMMARY_RESOURCE);
|
pref.setSummary(EXTERNAL_DISPLAY_SIZE_SUMMARY_RESOURCE);
|
||||||
pref.setOnPreferenceClickListener(
|
pref.setOnPreferenceClickListener(
|
||||||
(Preference p) -> {
|
(Preference p) -> {
|
||||||
@@ -804,27 +702,6 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen
|
|||||||
public void onStopTrackingTouch(@NonNull SeekBar seekBar) {}
|
public void onStopTrackingTouch(@NonNull SeekBar seekBar) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
|
||||||
class DisplayPreference extends TwoTargetPreference
|
|
||||||
implements Preference.OnPreferenceClickListener {
|
|
||||||
private final int mDisplayId;
|
|
||||||
|
|
||||||
DisplayPreference(@NonNull final Context context, @NonNull final Display display) {
|
|
||||||
super(context);
|
|
||||||
mDisplayId = display.getDisplayId();
|
|
||||||
|
|
||||||
setPersistent(false);
|
|
||||||
setOnPreferenceClickListener(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onPreferenceClick(@NonNull Preference preference) {
|
|
||||||
launchExternalDisplaySettings(mDisplayId);
|
|
||||||
writePreferenceClickMetric(preference);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class PrefRefresh implements AutoCloseable {
|
private static class PrefRefresh implements AutoCloseable {
|
||||||
private final PreferenceGroup mScreen;
|
private final PreferenceGroup mScreen;
|
||||||
private final HashMap<String, Preference> mUnusedPreferences = new HashMap<>();
|
private final HashMap<String, Preference> mUnusedPreferences = new HashMap<>();
|
||||||
|
@@ -21,9 +21,6 @@ import static com.android.settings.connecteddevice.display.ExternalDisplayPrefer
|
|||||||
import static com.android.settings.connecteddevice.display.ExternalDisplayPreferenceFragment.EXTERNAL_DISPLAY_NOT_FOUND_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_SETTINGS_RESOURCE;
|
import static com.android.settings.connecteddevice.display.ExternalDisplayPreferenceFragment.EXTERNAL_DISPLAY_SETTINGS_RESOURCE;
|
||||||
import static com.android.settings.connecteddevice.display.ExternalDisplayPreferenceFragment.EXTERNAL_DISPLAY_SIZE_SUMMARY_RESOURCE;
|
import static com.android.settings.connecteddevice.display.ExternalDisplayPreferenceFragment.EXTERNAL_DISPLAY_SIZE_SUMMARY_RESOURCE;
|
||||||
import static com.android.settings.connecteddevice.display.ExternalDisplayPreferenceFragment.PREVIOUSLY_SHOWN_LIST_KEY;
|
|
||||||
import static com.android.settings.connecteddevice.display.ExternalDisplayPreferenceFragment.displayListDisplayCategoryKey;
|
|
||||||
import static com.android.settings.connecteddevice.display.ExternalDisplayPreferenceFragment.resolutionRotationPreferenceKey;
|
|
||||||
import static com.android.settings.flags.Flags.FLAG_DISPLAY_SIZE_CONNECTED_DISPLAY_SETTING;
|
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;
|
import static com.android.settings.flags.Flags.FLAG_DISPLAY_TOPOLOGY_PANE_IN_DISPLAY_LIST;
|
||||||
|
|
||||||
@@ -53,7 +50,6 @@ import androidx.preference.PreferenceScreen;
|
|||||||
import androidx.test.annotation.UiThreadTest;
|
import androidx.test.annotation.UiThreadTest;
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
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.settings.connecteddevice.display.ExternalDisplayPreferenceFragment.PrefBasics;
|
||||||
import com.android.settingslib.widget.MainSwitchPreference;
|
import com.android.settingslib.widget.MainSwitchPreference;
|
||||||
|
|
||||||
@@ -67,7 +63,6 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa
|
|||||||
@Nullable
|
@Nullable
|
||||||
private ExternalDisplayPreferenceFragment mFragment;
|
private ExternalDisplayPreferenceFragment mFragment;
|
||||||
private int mPreferenceIdFromResource;
|
private int mPreferenceIdFromResource;
|
||||||
private int mDisplayIdArg = INVALID_DISPLAY;
|
|
||||||
private boolean mLaunchedBuiltinSettings;
|
private boolean mLaunchedBuiltinSettings;
|
||||||
private int mResolutionSelectorDisplayId = INVALID_DISPLAY;
|
private int mResolutionSelectorDisplayId = INVALID_DISPLAY;
|
||||||
@Mock
|
@Mock
|
||||||
@@ -80,17 +75,20 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa
|
|||||||
assertThat(mPreferenceIdFromResource).isEqualTo(EXTERNAL_DISPLAY_SETTINGS_RESOURCE);
|
assertThat(mPreferenceIdFromResource).isEqualTo(EXTERNAL_DISPLAY_SETTINGS_RESOURCE);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assertDisplayList(boolean present, int displayId) {
|
private PreferenceCategory getExternalDisplayCategory(int positionIndex) {
|
||||||
// In display list fragment, there is a combined resolution/rotation preference key.
|
return mPreferenceScreen.findPreference(
|
||||||
var category = mPreferenceScreen.findPreference(displayListDisplayCategoryKey(displayId));
|
PrefBasics.EXTERNAL_DISPLAY_LIST.keyForNth(positionIndex));
|
||||||
var pref = mPreferenceScreen.findPreference(resolutionRotationPreferenceKey(displayId));
|
|
||||||
if (present) {
|
|
||||||
assertThat(category).isNotNull();
|
|
||||||
assertThat(pref).isNotNull();
|
|
||||||
} else {
|
|
||||||
assertThat(category).isNull();
|
|
||||||
assertThat(pref).isNull();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void assertDisplayListCount(int expectedCount) {
|
||||||
|
int actualCount = 0;
|
||||||
|
for (int i = 0; i < mPreferenceScreen.getPreferenceCount(); i++) {
|
||||||
|
Preference child = mPreferenceScreen.getPreference(i);
|
||||||
|
if (child.getKey().startsWith(PrefBasics.EXTERNAL_DISPLAY_LIST.key)) {
|
||||||
|
actualCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assertThat(actualCount).isEqualTo(expectedCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -100,27 +98,15 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa
|
|||||||
|
|
||||||
var fragment = initFragment();
|
var fragment = initFragment();
|
||||||
var outState = new Bundle();
|
var outState = new Bundle();
|
||||||
fragment.onSaveInstanceStateCallback(outState);
|
|
||||||
assertThat(outState.getBoolean(PREVIOUSLY_SHOWN_LIST_KEY)).isFalse();
|
|
||||||
assertThat(mHandler.getPendingMessages().size()).isEqualTo(1);
|
assertThat(mHandler.getPendingMessages().size()).isEqualTo(1);
|
||||||
|
|
||||||
// Combined resolution/refresh rate are not available in displays list because the pane is
|
assertDisplayListCount(0);
|
||||||
// disabled (v1 UI).
|
|
||||||
assertDisplayList(false, EXTERNAL_DISPLAY_ID);
|
|
||||||
assertDisplayList(false, OVERLAY_DISPLAY_ID);
|
|
||||||
// Individual resolution preference is not available in displays list.
|
|
||||||
assertThat(mPreferenceScreen.<Preference>findPreference(
|
|
||||||
PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.key))
|
|
||||||
.isNull();
|
|
||||||
|
|
||||||
verify(mMockedInjector, never()).getAllDisplays();
|
verify(mMockedInjector, never()).getAllDisplays();
|
||||||
mHandler.flush();
|
mHandler.flush();
|
||||||
assertThat(mHandler.getPendingMessages().size()).isEqualTo(0);
|
assertThat(mHandler.getPendingMessages().size()).isEqualTo(0);
|
||||||
verify(mMockedInjector).getAllDisplays();
|
verify(mMockedInjector).getAllDisplays();
|
||||||
assertDisplayList(true, EXTERNAL_DISPLAY_ID);
|
assertDisplayListCount(2);
|
||||||
assertDisplayList(true, OVERLAY_DISPLAY_ID);
|
|
||||||
fragment.onSaveInstanceStateCallback(outState);
|
|
||||||
assertThat(outState.getBoolean(PREVIOUSLY_SHOWN_LIST_KEY)).isTrue();
|
|
||||||
|
|
||||||
Preference pref = mPreferenceScreen.findPreference(PrefBasics.DISPLAY_TOPOLOGY.key);
|
Preference pref = mPreferenceScreen.findPreference(PrefBasics.DISPLAY_TOPOLOGY.key);
|
||||||
assertThat(pref).isNull();
|
assertThat(pref).isNull();
|
||||||
@@ -143,7 +129,8 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa
|
|||||||
pref = mPreferenceScreen.findPreference(PrefBasics.MIRROR.key);
|
pref = mPreferenceScreen.findPreference(PrefBasics.MIRROR.key);
|
||||||
assertThat(pref).isNotNull();
|
assertThat(pref).isNotNull();
|
||||||
|
|
||||||
assertDisplayList(false, mDisplays[1].getDisplayId());
|
assertDisplayListCount(1);
|
||||||
|
assertThat("" + getExternalDisplayCategory(0).getTitle()).isEqualTo("HDMI");
|
||||||
|
|
||||||
PreferenceCategory listPref =
|
PreferenceCategory listPref =
|
||||||
mPreferenceScreen.findPreference(PrefBasics.BUILTIN_DISPLAY_LIST.key);
|
mPreferenceScreen.findPreference(PrefBasics.BUILTIN_DISPLAY_LIST.key);
|
||||||
@@ -168,8 +155,7 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa
|
|||||||
pref = mPreferenceScreen.findPreference(PrefBasics.MIRROR.key);
|
pref = mPreferenceScreen.findPreference(PrefBasics.MIRROR.key);
|
||||||
assertThat(pref).isNull();
|
assertThat(pref).isNull();
|
||||||
|
|
||||||
assertDisplayList(false, EXTERNAL_DISPLAY_ID);
|
assertDisplayListCount(0);
|
||||||
assertDisplayList(false, OVERLAY_DISPLAY_ID);
|
|
||||||
|
|
||||||
var listPref = mPreferenceScreen.findPreference(PrefBasics.BUILTIN_DISPLAY_LIST.key);
|
var listPref = mPreferenceScreen.findPreference(PrefBasics.BUILTIN_DISPLAY_LIST.key);
|
||||||
assertThat(listPref).isNull();
|
assertThat(listPref).isNull();
|
||||||
@@ -179,46 +165,36 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa
|
|||||||
@UiThreadTest
|
@UiThreadTest
|
||||||
public void testLaunchDisplaySettingFromList() {
|
public void testLaunchDisplaySettingFromList() {
|
||||||
initFragment();
|
initFragment();
|
||||||
|
doReturn(true).when(mMockedInjector).isDisplayEnabled(any());
|
||||||
mHandler.flush();
|
mHandler.flush();
|
||||||
assertDisplayList(true, EXTERNAL_DISPLAY_ID);
|
assertDisplayListCount(2);
|
||||||
assertDisplayList(true, OVERLAY_DISPLAY_ID);
|
var display1Category = getExternalDisplayCategory(0);
|
||||||
PreferenceCategory display1Category = mPreferenceScreen.findPreference(
|
var display2Category = getExternalDisplayCategory(1);
|
||||||
displayListDisplayCategoryKey(EXTERNAL_DISPLAY_ID));
|
|
||||||
var display1Pref = (DisplayPreference) display1Category.getPreference(0);
|
|
||||||
PreferenceCategory display2Category = mPreferenceScreen.findPreference(
|
|
||||||
displayListDisplayCategoryKey(OVERLAY_DISPLAY_ID));
|
|
||||||
var display2Pref = (DisplayPreference) display2Category.getPreference(0);
|
|
||||||
assertThat(display1Pref.getKey()).isEqualTo(
|
|
||||||
resolutionRotationPreferenceKey(EXTERNAL_DISPLAY_ID));
|
|
||||||
assertThat("" + display1Category.getTitle()).isEqualTo("HDMI");
|
assertThat("" + display1Category.getTitle()).isEqualTo("HDMI");
|
||||||
assertThat("" + display1Pref.getSummary()).isEqualTo("1920 x 1080");
|
var display1Resolution = display1Category.findPreference(
|
||||||
display1Pref.onPreferenceClick(display1Pref);
|
PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.keyForNth(0));
|
||||||
assertThat(mDisplayIdArg).isEqualTo(1);
|
display1Resolution.performClick();
|
||||||
verify(mMockedMetricsLogger).writePreferenceClickMetric(display1Pref);
|
assertThat(mResolutionSelectorDisplayId).isEqualTo(1);
|
||||||
assertThat(display2Pref.getKey()).isEqualTo(
|
verify(mMockedMetricsLogger).writePreferenceClickMetric(display1Resolution);
|
||||||
resolutionRotationPreferenceKey(OVERLAY_DISPLAY_ID));
|
var display2Resolution = display2Category.findPreference(
|
||||||
|
PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.keyForNth(1));
|
||||||
assertThat("" + display2Category.getTitle()).isEqualTo("Overlay #1");
|
assertThat("" + display2Category.getTitle()).isEqualTo("Overlay #1");
|
||||||
assertThat("" + display2Pref.getSummary()).isEqualTo("1240 x 780");
|
assertThat("" + display2Resolution.getSummary()).isEqualTo("1240 x 780");
|
||||||
display2Pref.onPreferenceClick(display2Pref);
|
display2Resolution.performClick();
|
||||||
assertThat(mDisplayIdArg).isEqualTo(2);
|
assertThat(mResolutionSelectorDisplayId).isEqualTo(2);
|
||||||
verify(mMockedMetricsLogger).writePreferenceClickMetric(display2Pref);
|
verify(mMockedMetricsLogger).writePreferenceClickMetric(display2Resolution);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@UiThreadTest
|
@UiThreadTest
|
||||||
public void testShowDisplayListForOnlyOneDisplay_PreviouslyShownList() {
|
public void testShowDisplayListForOnlyOneDisplay_PreviouslyShownList() {
|
||||||
var fragment = initFragment();
|
var fragment = initFragment();
|
||||||
// Previously shown list of displays
|
|
||||||
fragment.onActivityCreatedCallback(createBundleForPreviouslyShownList());
|
|
||||||
// Only one display available
|
// Only one display available
|
||||||
doReturn(new Display[] {mDisplays[1]}).when(mMockedInjector).getAllDisplays();
|
doReturn(new Display[] {mDisplays[1]}).when(mMockedInjector).getAllDisplays();
|
||||||
mHandler.flush();
|
mHandler.flush();
|
||||||
int attachedId = mDisplays[1].getDisplayId();
|
int attachedId = mDisplays[1].getDisplayId();
|
||||||
assertDisplayList(true, attachedId);
|
assertDisplayListCount(1);
|
||||||
assertThat(mPreferenceScreen.<Preference>findPreference(
|
assertThat("" + getExternalDisplayCategory(0).getTitle()).isEqualTo("HDMI");
|
||||||
resolutionRotationPreferenceKey(attachedId)))
|
|
||||||
.isNotNull();
|
|
||||||
assertDisplayList(false, mDisplays[2].getDisplayId());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -231,14 +207,15 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa
|
|||||||
// Init
|
// Init
|
||||||
initFragment();
|
initFragment();
|
||||||
mHandler.flush();
|
mHandler.flush();
|
||||||
assertDisplayList(false, mDisplays[1].getDisplayId());
|
assertDisplayListCount(1);
|
||||||
var pref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.key);
|
var category = getExternalDisplayCategory(0);
|
||||||
|
var pref = category.findPreference(PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.keyForNth(0));
|
||||||
assertThat(pref).isNotNull();
|
assertThat(pref).isNotNull();
|
||||||
pref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_ROTATION.key);
|
pref = category.findPreference(PrefBasics.EXTERNAL_DISPLAY_ROTATION.keyForNth(0));
|
||||||
assertThat(pref).isNotNull();
|
assertThat(pref).isNotNull();
|
||||||
var footerPref = mPreferenceScreen.findPreference(PrefBasics.FOOTER.key);
|
var footerPref = category.findPreference(PrefBasics.FOOTER.key);
|
||||||
assertThat(footerPref).isNotNull();
|
assertThat(footerPref).isNotNull();
|
||||||
var sizePref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_SIZE.key);
|
var sizePref = category.findPreference(PrefBasics.EXTERNAL_DISPLAY_SIZE.keyForNth(0));
|
||||||
assertThat(sizePref).isNull();
|
assertThat(sizePref).isNull();
|
||||||
assertThat("" + footerPref.getTitle())
|
assertThat("" + footerPref.getTitle())
|
||||||
.isEqualTo(getText(EXTERNAL_DISPLAY_CHANGE_RESOLUTION_FOOTER_RESOURCE));
|
.isEqualTo(getText(EXTERNAL_DISPLAY_CHANGE_RESOLUTION_FOOTER_RESOURCE));
|
||||||
@@ -253,15 +230,12 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa
|
|||||||
// Init
|
// Init
|
||||||
initFragment();
|
initFragment();
|
||||||
mHandler.flush();
|
mHandler.flush();
|
||||||
assertDisplayList(false, mDisplays[1].getDisplayId());
|
assertDisplayListCount(1);
|
||||||
assertDisplayList(false, mDisplays[2].getDisplayId());
|
var category = getExternalDisplayCategory(0);
|
||||||
var pref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.key);
|
assertThat("" + category.getTitle()).isEqualTo("HDMI");
|
||||||
assertThat(pref).isNotNull();
|
var footerPref = category.findPreference(PrefBasics.FOOTER.key);
|
||||||
pref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_ROTATION.key);
|
|
||||||
assertThat(pref).isNotNull();
|
|
||||||
var footerPref = mPreferenceScreen.findPreference(PrefBasics.FOOTER.key);
|
|
||||||
assertThat(footerPref).isNotNull();
|
assertThat(footerPref).isNotNull();
|
||||||
var sizePref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_SIZE.key);
|
var sizePref = category.findPreference(PrefBasics.EXTERNAL_DISPLAY_SIZE.keyForNth(0));
|
||||||
assertThat(sizePref).isNotNull();
|
assertThat(sizePref).isNotNull();
|
||||||
assertThat("" + footerPref.getTitle())
|
assertThat("" + footerPref.getTitle())
|
||||||
.isEqualTo(getText(EXTERNAL_DISPLAY_CHANGE_RESOLUTION_FOOTER_RESOURCE));
|
.isEqualTo(getText(EXTERNAL_DISPLAY_CHANGE_RESOLUTION_FOOTER_RESOURCE));
|
||||||
@@ -270,47 +244,48 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa
|
|||||||
@Test
|
@Test
|
||||||
@UiThreadTest
|
@UiThreadTest
|
||||||
public void testShowOneEnabledDisplay_FewAvailable() {
|
public void testShowOneEnabledDisplay_FewAvailable() {
|
||||||
mDisplayIdArg = 1;
|
|
||||||
doReturn(true).when(mMockedInjector).isDisplayEnabled(any());
|
doReturn(true).when(mMockedInjector).isDisplayEnabled(any());
|
||||||
initFragment();
|
initFragment();
|
||||||
verify(mMockedInjector, never()).getDisplay(anyInt());
|
verify(mMockedInjector, never()).getAllDisplays();
|
||||||
mHandler.flush();
|
mHandler.flush();
|
||||||
verify(mMockedInjector).getDisplay(mDisplayIdArg);
|
verify(mMockedInjector, never()).getDisplay(anyInt());
|
||||||
var pref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.key);
|
verify(mMockedInjector).getAllDisplays();
|
||||||
|
var pref = mPreferenceScreen.findPreference(
|
||||||
|
PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.keyForNth(0));
|
||||||
assertThat(pref).isNotNull();
|
assertThat(pref).isNotNull();
|
||||||
pref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_ROTATION.key);
|
pref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_ROTATION.keyForNth(0));
|
||||||
assertThat(pref).isNotNull();
|
assertThat(pref).isNotNull();
|
||||||
var footerPref = mPreferenceScreen.findPreference(PrefBasics.FOOTER.key);
|
var footerPref = mPreferenceScreen.findPreference(PrefBasics.FOOTER.key);
|
||||||
assertThat(footerPref).isNotNull();
|
// No footer for showing multiple displays.
|
||||||
var sizePref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_SIZE.key);
|
assertThat(footerPref).isNull();
|
||||||
|
var sizePref = mPreferenceScreen.findPreference(
|
||||||
|
PrefBasics.EXTERNAL_DISPLAY_SIZE.keyForNth(0));
|
||||||
assertThat(sizePref).isNotNull();
|
assertThat(sizePref).isNotNull();
|
||||||
assertThat("" + footerPref.getTitle())
|
|
||||||
.isEqualTo(getText(EXTERNAL_DISPLAY_CHANGE_RESOLUTION_FOOTER_RESOURCE));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@UiThreadTest
|
@UiThreadTest
|
||||||
public void testShowDisabledDisplay() {
|
public void testShowDisabledDisplay() {
|
||||||
mDisplayIdArg = 1;
|
|
||||||
initFragment();
|
initFragment();
|
||||||
verify(mMockedInjector, never()).getDisplay(anyInt());
|
|
||||||
mHandler.flush();
|
mHandler.flush();
|
||||||
verify(mMockedInjector).getDisplay(mDisplayIdArg);
|
verify(mMockedInjector, never()).getDisplay(anyInt());
|
||||||
var mainPref = (MainSwitchPreference) mPreferenceScreen.findPreference(
|
verify(mMockedInjector).getAllDisplays();
|
||||||
PrefBasics.EXTERNAL_DISPLAY_USE.key);
|
var category = getExternalDisplayCategory(0);
|
||||||
|
var mainPref = (MainSwitchPreference) category.findPreference(
|
||||||
|
PrefBasics.EXTERNAL_DISPLAY_USE.keyForNth(0));
|
||||||
assertThat(mainPref).isNotNull();
|
assertThat(mainPref).isNotNull();
|
||||||
assertThat("" + mainPref.getTitle()).isEqualTo(
|
assertThat("" + mainPref.getTitle()).isEqualTo(
|
||||||
getText(PrefBasics.EXTERNAL_DISPLAY_USE.titleResource));
|
getText(PrefBasics.EXTERNAL_DISPLAY_USE.titleResource));
|
||||||
assertThat(mainPref.isChecked()).isFalse();
|
assertThat(mainPref.isChecked()).isFalse();
|
||||||
assertThat(mainPref.isEnabled()).isTrue();
|
assertThat(mainPref.isEnabled()).isTrue();
|
||||||
assertThat(mainPref.getOnPreferenceChangeListener()).isNotNull();
|
assertThat(mainPref.getOnPreferenceChangeListener()).isNotNull();
|
||||||
var pref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.key);
|
var pref = category.findPreference(PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.keyForNth(0));
|
||||||
assertThat(pref).isNull();
|
assertThat(pref).isNull();
|
||||||
pref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_ROTATION.key);
|
pref = category.findPreference(PrefBasics.EXTERNAL_DISPLAY_ROTATION.keyForNth(0));
|
||||||
assertThat(pref).isNull();
|
assertThat(pref).isNull();
|
||||||
var footerPref = mPreferenceScreen.findPreference(PrefBasics.FOOTER.key);
|
var footerPref = category.findPreference(PrefBasics.FOOTER.key);
|
||||||
assertThat(footerPref).isNull();
|
assertThat(footerPref).isNull();
|
||||||
var sizePref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_SIZE.key);
|
var sizePref = category.findPreference(PrefBasics.EXTERNAL_DISPLAY_SIZE.keyForNth(0));
|
||||||
assertThat(sizePref).isNull();
|
assertThat(sizePref).isNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -321,7 +296,7 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa
|
|||||||
initFragment();
|
initFragment();
|
||||||
mHandler.flush();
|
mHandler.flush();
|
||||||
var mainPref = (MainSwitchPreference) mPreferenceScreen.findPreference(
|
var mainPref = (MainSwitchPreference) mPreferenceScreen.findPreference(
|
||||||
PrefBasics.EXTERNAL_DISPLAY_USE.key);
|
PrefBasics.EXTERNAL_DISPLAY_USE.keyForNth(0));
|
||||||
assertThat(mainPref).isNotNull();
|
assertThat(mainPref).isNotNull();
|
||||||
assertThat("" + mainPref.getTitle()).isEqualTo(
|
assertThat("" + mainPref.getTitle()).isEqualTo(
|
||||||
getText(PrefBasics.EXTERNAL_DISPLAY_USE.titleResource));
|
getText(PrefBasics.EXTERNAL_DISPLAY_USE.titleResource));
|
||||||
@@ -337,13 +312,13 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa
|
|||||||
@Test
|
@Test
|
||||||
@UiThreadTest
|
@UiThreadTest
|
||||||
public void testDisplayRotationPreference() {
|
public void testDisplayRotationPreference() {
|
||||||
mDisplayIdArg = 1;
|
final int displayId = 1;
|
||||||
doReturn(true).when(mMockedInjector).isDisplayEnabled(any());
|
doReturn(true).when(mMockedInjector).isDisplayEnabled(any());
|
||||||
var fragment = initFragment();
|
var fragment = initFragment();
|
||||||
mHandler.flush();
|
mHandler.flush();
|
||||||
ListPreference pref =
|
var category = getExternalDisplayCategory(0);
|
||||||
mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_ROTATION.key);
|
ListPreference pref = category.findPreference(
|
||||||
assertThat(pref.getKey()).isEqualTo(PrefBasics.EXTERNAL_DISPLAY_ROTATION.key);
|
PrefBasics.EXTERNAL_DISPLAY_ROTATION.keyForNth(0));
|
||||||
assertThat("" + pref.getTitle()).isEqualTo(
|
assertThat("" + pref.getTitle()).isEqualTo(
|
||||||
getText(PrefBasics.EXTERNAL_DISPLAY_ROTATION.titleResource));
|
getText(PrefBasics.EXTERNAL_DISPLAY_ROTATION.titleResource));
|
||||||
assertThat(pref.getEntries().length).isEqualTo(4);
|
assertThat(pref.getEntries().length).isEqualTo(4);
|
||||||
@@ -359,10 +334,10 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa
|
|||||||
assertThat(pref.getOnPreferenceChangeListener()).isNotNull();
|
assertThat(pref.getOnPreferenceChangeListener()).isNotNull();
|
||||||
assertThat(pref.isEnabled()).isTrue();
|
assertThat(pref.isEnabled()).isTrue();
|
||||||
var rotation = 1;
|
var rotation = 1;
|
||||||
doReturn(true).when(mMockedInjector).freezeDisplayRotation(mDisplayIdArg, rotation);
|
doReturn(true).when(mMockedInjector).freezeDisplayRotation(displayId, rotation);
|
||||||
assertThat(pref.getOnPreferenceChangeListener().onPreferenceChange(pref, rotation + ""))
|
assertThat(pref.getOnPreferenceChangeListener().onPreferenceChange(pref, rotation + ""))
|
||||||
.isTrue();
|
.isTrue();
|
||||||
verify(mMockedInjector).freezeDisplayRotation(mDisplayIdArg, rotation);
|
verify(mMockedInjector).freezeDisplayRotation(displayId, rotation);
|
||||||
assertThat(pref.getValue()).isEqualTo(rotation + "");
|
assertThat(pref.getValue()).isEqualTo(rotation + "");
|
||||||
verify(mMockedMetricsLogger).writePreferenceClickMetric(pref);
|
verify(mMockedMetricsLogger).writePreferenceClickMetric(pref);
|
||||||
}
|
}
|
||||||
@@ -370,31 +345,30 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa
|
|||||||
@Test
|
@Test
|
||||||
@UiThreadTest
|
@UiThreadTest
|
||||||
public void testDisplayResolutionPreference() {
|
public void testDisplayResolutionPreference() {
|
||||||
mDisplayIdArg = 1;
|
final int displayId = 1;
|
||||||
doReturn(true).when(mMockedInjector).isDisplayEnabled(any());
|
doReturn(true).when(mMockedInjector).isDisplayEnabled(any());
|
||||||
var fragment = initFragment();
|
var fragment = initFragment();
|
||||||
mHandler.flush();
|
mHandler.flush();
|
||||||
var pref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.key);
|
var category = getExternalDisplayCategory(0);
|
||||||
assertThat(pref.getKey()).isEqualTo(PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.key);
|
var pref = category.findPreference(PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.keyForNth(0));
|
||||||
assertThat("" + pref.getTitle()).isEqualTo(
|
assertThat("" + pref.getTitle()).isEqualTo(
|
||||||
getText(PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.titleResource));
|
getText(PrefBasics.EXTERNAL_DISPLAY_RESOLUTION.titleResource));
|
||||||
assertThat("" + pref.getSummary()).isEqualTo("1920 x 1080");
|
assertThat("" + pref.getSummary()).isEqualTo("1920 x 1080");
|
||||||
assertThat(pref.isEnabled()).isTrue();
|
assertThat(pref.isEnabled()).isTrue();
|
||||||
assertThat(pref.getOnPreferenceClickListener()).isNotNull();
|
assertThat(pref.getOnPreferenceClickListener()).isNotNull();
|
||||||
assertThat(pref.getOnPreferenceClickListener().onPreferenceClick(pref)).isTrue();
|
assertThat(pref.getOnPreferenceClickListener().onPreferenceClick(pref)).isTrue();
|
||||||
assertThat(mResolutionSelectorDisplayId).isEqualTo(mDisplayIdArg);
|
assertThat(mResolutionSelectorDisplayId).isEqualTo(displayId);
|
||||||
verify(mMockedMetricsLogger).writePreferenceClickMetric(pref);
|
verify(mMockedMetricsLogger).writePreferenceClickMetric(pref);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@UiThreadTest
|
@UiThreadTest
|
||||||
public void testDisplaySizePreference() {
|
public void testDisplaySizePreference() {
|
||||||
mDisplayIdArg = 1;
|
|
||||||
doReturn(true).when(mMockedInjector).isDisplayEnabled(any());
|
doReturn(true).when(mMockedInjector).isDisplayEnabled(any());
|
||||||
var fragment = initFragment();
|
var fragment = initFragment();
|
||||||
mHandler.flush();
|
mHandler.flush();
|
||||||
var pref = mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_SIZE.key);
|
var category = getExternalDisplayCategory(0);
|
||||||
assertThat(pref.getKey()).isEqualTo(PrefBasics.EXTERNAL_DISPLAY_SIZE.key);
|
var pref = category.findPreference(PrefBasics.EXTERNAL_DISPLAY_SIZE.keyForNth(0));
|
||||||
assertThat("" + pref.getTitle())
|
assertThat("" + pref.getTitle())
|
||||||
.isEqualTo(getText(PrefBasics.EXTERNAL_DISPLAY_SIZE.titleResource));
|
.isEqualTo(getText(PrefBasics.EXTERNAL_DISPLAY_SIZE.titleResource));
|
||||||
assertThat("" + pref.getSummary())
|
assertThat("" + pref.getSummary())
|
||||||
@@ -408,25 +382,25 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa
|
|||||||
@Test
|
@Test
|
||||||
@UiThreadTest
|
@UiThreadTest
|
||||||
public void testUseDisplayPreference_EnabledDisplay() {
|
public void testUseDisplayPreference_EnabledDisplay() {
|
||||||
mDisplayIdArg = 1;
|
final int displayId = 1;
|
||||||
doReturn(true).when(mMockedInjector).isDisplayEnabled(any());
|
doReturn(true).when(mMockedInjector).isDisplayEnabled(any());
|
||||||
doReturn(true).when(mMockedInjector).enableConnectedDisplay(mDisplayIdArg);
|
doReturn(true).when(mMockedInjector).enableConnectedDisplay(displayId);
|
||||||
doReturn(true).when(mMockedInjector).disableConnectedDisplay(mDisplayIdArg);
|
doReturn(true).when(mMockedInjector).disableConnectedDisplay(displayId);
|
||||||
var fragment = initFragment();
|
var fragment = initFragment();
|
||||||
mHandler.flush();
|
mHandler.flush();
|
||||||
MainSwitchPreference pref =
|
MainSwitchPreference pref = getExternalDisplayCategory(0)
|
||||||
mPreferenceScreen.findPreference(PrefBasics.EXTERNAL_DISPLAY_USE.key);
|
.findPreference(PrefBasics.EXTERNAL_DISPLAY_USE.keyForNth(0));
|
||||||
assertThat(pref.getKey()).isEqualTo(PrefBasics.EXTERNAL_DISPLAY_USE.key);
|
assertThat(pref.getKey()).isEqualTo(PrefBasics.EXTERNAL_DISPLAY_USE.keyForNth(0));
|
||||||
assertThat("" + pref.getTitle())
|
assertThat("" + pref.getTitle())
|
||||||
.isEqualTo(getText(PrefBasics.EXTERNAL_DISPLAY_USE.titleResource));
|
.isEqualTo(getText(PrefBasics.EXTERNAL_DISPLAY_USE.titleResource));
|
||||||
assertThat(pref.isEnabled()).isTrue();
|
assertThat(pref.isEnabled()).isTrue();
|
||||||
assertThat(pref.isChecked()).isTrue();
|
assertThat(pref.isChecked()).isTrue();
|
||||||
assertThat(pref.getOnPreferenceChangeListener()).isNotNull();
|
assertThat(pref.getOnPreferenceChangeListener()).isNotNull();
|
||||||
assertThat(pref.getOnPreferenceChangeListener().onPreferenceChange(pref, false)).isTrue();
|
assertThat(pref.getOnPreferenceChangeListener().onPreferenceChange(pref, false)).isTrue();
|
||||||
verify(mMockedInjector).disableConnectedDisplay(mDisplayIdArg);
|
verify(mMockedInjector).disableConnectedDisplay(displayId);
|
||||||
assertThat(pref.isChecked()).isFalse();
|
assertThat(pref.isChecked()).isFalse();
|
||||||
assertThat(pref.getOnPreferenceChangeListener().onPreferenceChange(pref, true)).isTrue();
|
assertThat(pref.getOnPreferenceChangeListener().onPreferenceChange(pref, true)).isTrue();
|
||||||
verify(mMockedInjector).enableConnectedDisplay(mDisplayIdArg);
|
verify(mMockedInjector).enableConnectedDisplay(displayId);
|
||||||
assertThat(pref.isChecked()).isTrue();
|
assertThat(pref.isChecked()).isTrue();
|
||||||
verify(mMockedMetricsLogger, times(2)).writePreferenceClickMetric(pref);
|
verify(mMockedMetricsLogger, times(2)).writePreferenceClickMetric(pref);
|
||||||
}
|
}
|
||||||
@@ -443,13 +417,6 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa
|
|||||||
return mFragment;
|
return mFragment;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
|
||||||
private Bundle createBundleForPreviouslyShownList() {
|
|
||||||
var state = new Bundle();
|
|
||||||
state.putBoolean(PREVIOUSLY_SHOWN_LIST_KEY, true);
|
|
||||||
return state;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
private String getText(int id) {
|
private String getText(int id) {
|
||||||
return mContext.getResources().getText(id).toString();
|
return mContext.getResources().getText(id).toString();
|
||||||
@@ -501,21 +468,11 @@ public class ExternalDisplayPreferenceFragmentTest extends ExternalDisplayTestBa
|
|||||||
mPreferenceIdFromResource = resource;
|
mPreferenceIdFromResource = resource;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected int getDisplayIdArg() {
|
|
||||||
return mDisplayIdArg;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void launchResolutionSelector(@NonNull Context context, int displayId) {
|
protected void launchResolutionSelector(@NonNull Context context, int displayId) {
|
||||||
mResolutionSelectorDisplayId = displayId;
|
mResolutionSelectorDisplayId = displayId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void launchExternalDisplaySettings(final int displayId) {
|
|
||||||
mDisplayIdArg = displayId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
Preference newFooterPreference(Context context) {
|
Preference newFooterPreference(Context context) {
|
||||||
return new Preference(context);
|
return new Preference(context);
|
||||||
|
Reference in New Issue
Block a user