External display mode limit flag in settings
Use external display mode limit flag and override for the flag in the settings to allow selection of any resolutions with the refresh rate around 60 Change-Id: I180ba97eb9dfa14a386a7517f29504d369268563 Bug: 351831642 Flag: com.android.settings.flags.resolution_and_enable_connected_display_setting Test: atest ResolutionPreferenceFragmentTest
This commit is contained in:
@@ -23,6 +23,8 @@ import static android.hardware.display.DisplayManager.EVENT_FLAG_DISPLAY_CONNECT
|
||||
import static android.hardware.display.DisplayManager.EVENT_FLAG_DISPLAY_REMOVED;
|
||||
import static android.view.Display.INVALID_DISPLAY;
|
||||
|
||||
import static com.android.server.display.feature.flags.Flags.enableModeLimitForExternalDisplay;
|
||||
|
||||
import android.content.Context;
|
||||
import android.hardware.display.DisplayManager;
|
||||
import android.hardware.display.DisplayManagerGlobal;
|
||||
@@ -271,6 +273,13 @@ public class ExternalDisplaySettingsConfiguration {
|
||||
public void setUserPreferredDisplayMode(int displayId, @NonNull Mode mode) {
|
||||
DisplayManagerGlobal.getInstance().setUserPreferredDisplayMode(displayId, mode);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return true if the display mode limit flag enabled.
|
||||
*/
|
||||
public boolean isModeLimitForExternalDisplayEnabled() {
|
||||
return enableModeLimitForExternalDisplay();
|
||||
}
|
||||
}
|
||||
|
||||
public abstract static class DisplayListener implements DisplayManager.DisplayListener {
|
||||
|
||||
@@ -52,7 +52,7 @@ import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
|
||||
public class ResolutionPreferenceFragment extends SettingsPreferenceFragmentBase {
|
||||
private static final String TAG = "ResolutionPreferenceFragment";
|
||||
private static final String TAG = "ResolutionPreference";
|
||||
static final int DEFAULT_LOW_REFRESH_RATE = 60;
|
||||
static final String MORE_OPTIONS_KEY = "more_options";
|
||||
static final String TOP_OPTIONS_KEY = "top_options";
|
||||
@@ -60,6 +60,8 @@ public class ResolutionPreferenceFragment extends SettingsPreferenceFragmentBase
|
||||
R.string.external_display_more_options_title;
|
||||
static final int EXTERNAL_DISPLAY_RESOLUTION_SETTINGS_RESOURCE =
|
||||
R.xml.external_display_resolution_settings;
|
||||
static final String DISPLAY_MODE_LIMIT_OVERRIDE_PROP = "persist.sys.com.android.server.display"
|
||||
+ ".feature.flags.enable_mode_limit_for_external_display-override";
|
||||
@Nullable
|
||||
private Injector mInjector;
|
||||
@Nullable
|
||||
@@ -323,16 +325,29 @@ public class ResolutionPreferenceFragment extends SettingsPreferenceFragmentBase
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isDisplayResolutionLimitEnabled() {
|
||||
if (mInjector == null) {
|
||||
return false;
|
||||
}
|
||||
var flagOverride = mInjector.getSystemProperty(DISPLAY_MODE_LIMIT_OVERRIDE_PROP);
|
||||
var isOverrideEnabled = "true".equals(flagOverride);
|
||||
var isOverrideEnabledOrNotSet = !"false".equals(flagOverride);
|
||||
return (mInjector.isModeLimitForExternalDisplayEnabled() && isOverrideEnabledOrNotSet)
|
||||
|| isOverrideEnabled;
|
||||
}
|
||||
|
||||
private void updateDisplayModeLimits(@Nullable Context context) {
|
||||
if (context == null) {
|
||||
return;
|
||||
}
|
||||
mExternalDisplayPeakRefreshRate = getResources(context).getInteger(
|
||||
com.android.internal.R.integer.config_externalDisplayPeakRefreshRate);
|
||||
mExternalDisplayPeakWidth = getResources(context).getInteger(
|
||||
if (isDisplayResolutionLimitEnabled()) {
|
||||
mExternalDisplayPeakWidth = getResources(context).getInteger(
|
||||
com.android.internal.R.integer.config_externalDisplayPeakWidth);
|
||||
mExternalDisplayPeakHeight = getResources(context).getInteger(
|
||||
mExternalDisplayPeakHeight = getResources(context).getInteger(
|
||||
com.android.internal.R.integer.config_externalDisplayPeakHeight);
|
||||
}
|
||||
mRefreshRateSynchronizationEnabled = getResources(context).getBoolean(
|
||||
com.android.internal.R.bool.config_refreshRateSynchronizationEnabled);
|
||||
Log.d(TAG, "mExternalDisplayPeakRefreshRate=" + mExternalDisplayPeakRefreshRate);
|
||||
|
||||
Reference in New Issue
Block a user