Change the way in which user preferred display mode gets applied

If a display has display specific user pref mode, global user pref mode
should not overide it.

Test: atest DefaultDisplayModeTest
Bug: 201782019

Change-Id: I44e0fbc5177873ed658a4c41032b319f311420ba
This commit is contained in:
Kriti Dang
2022-01-19 14:53:44 +01:00
parent 9c74d73471
commit a0f62f2193

View File

@@ -141,7 +141,6 @@ import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArrayList;
@@ -1754,10 +1753,6 @@ public final class DisplayManagerService extends SystemService {
void setUserPreferredDisplayModeInternal(int displayId, Display.Mode mode) {
synchronized (mSyncRoot) {
if (Objects.equals(mUserPreferredMode, mode) && displayId == Display.INVALID_DISPLAY) {
return;
}
if (mode != null && !isResolutionAndRefreshRateValid(mode)
&& displayId == Display.INVALID_DISPLAY) {
throw new IllegalArgumentException("width, height and refresh rate of mode should "
@@ -1811,7 +1806,15 @@ public final class DisplayManagerService extends SystemService {
Settings.Global.putInt(mContext.getContentResolver(),
Settings.Global.USER_PREFERRED_RESOLUTION_WIDTH, resolutionWidth);
mDisplayDeviceRepo.forEachLocked((DisplayDevice device) -> {
device.setUserPreferredDisplayModeLocked(mode);
// If there is a display specific mode, don't override that
final Point deviceUserPreferredResolution =
mPersistentDataStore.getUserPreferredResolution(device);
final float deviceRefreshRate =
mPersistentDataStore.getUserPreferredRefreshRate(device);
if (!isValidResolution(deviceUserPreferredResolution)
&& !isValidRefreshRate(deviceRefreshRate)) {
device.setUserPreferredDisplayModeLocked(mode);
}
});
}
@@ -3531,6 +3534,14 @@ public final class DisplayManagerService extends SystemService {
&& (brightness <= PowerManager.BRIGHTNESS_MAX);
}
private static boolean isValidResolution(Point resolution) {
return (resolution != null) && (resolution.x > 0) && (resolution.y > 0);
}
private static boolean isValidRefreshRate(float refreshRate) {
return !Float.isNaN(refreshRate) && (refreshRate > 0.0f);
}
private final class LocalService extends DisplayManagerInternal {
@Override