diff options
| author | 2022-09-30 15:38:38 +0000 | |
|---|---|---|
| committer | 2022-09-30 15:38:38 +0000 | |
| commit | c80c5d099eeb2bb4e7272cfbc76e08a75704a72f (patch) | |
| tree | 939a3330fdd03341912011f1bafcd1bbd5cb88bc | |
| parent | 8b0ce1fbacdd3e868536e661e7c2763d77849e42 (diff) | |
| parent | 649dd54d2c0fad74a905981c465843d12cbd0c7f (diff) | |
Merge "Adding the missing display mode strings to persistentDataStore" into tm-qpr-dev am: 9d945ba747 am: 649dd54d2c
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20069086
Change-Id: Id69bc569b2c93fca093892761c94f9fa531618d8
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
3 files changed, 111 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java index e851f03c92ef..d3b4cfdbd937 100644 --- a/services/core/java/com/android/server/display/DisplayManagerService.java +++ b/services/core/java/com/android/server/display/DisplayManagerService.java @@ -1759,9 +1759,13 @@ public final class DisplayManagerService extends SystemService { if (displayDevice == null) { return; } - mPersistentDataStore.setUserPreferredResolution( - displayDevice, resolutionWidth, resolutionHeight); - mPersistentDataStore.setUserPreferredRefreshRate(displayDevice, refreshRate); + try { + mPersistentDataStore.setUserPreferredResolution( + displayDevice, resolutionWidth, resolutionHeight); + mPersistentDataStore.setUserPreferredRefreshRate(displayDevice, refreshRate); + } finally { + mPersistentDataStore.saveIfNeeded(); + } } private void setUserPreferredModeForDisplayLocked(int displayId, Display.Mode mode) { diff --git a/services/core/java/com/android/server/display/PersistentDataStore.java b/services/core/java/com/android/server/display/PersistentDataStore.java index b9a0738d15c4..a11f1721a4b9 100644 --- a/services/core/java/com/android/server/display/PersistentDataStore.java +++ b/services/core/java/com/android/server/display/PersistentDataStore.java @@ -75,6 +75,11 @@ import java.util.Objects; * </brightness-curve> * </brightness-configuration> * </brightness-configurations> + * <display-mode>0< + * <resolution-width>1080</resolution-width> + * <resolution-height>1920</resolution-height> + * <refresh-rate>60</refresh-rate> + * </display-mode> * </display> * </display-states> * <stable-device-values> @@ -121,6 +126,10 @@ final class PersistentDataStore { private static final String ATTR_PACKAGE_NAME = "package-name"; private static final String ATTR_TIME_STAMP = "timestamp"; + private static final String TAG_RESOLUTION_WIDTH = "resolution-width"; + private static final String TAG_RESOLUTION_HEIGHT = "resolution-height"; + private static final String TAG_REFRESH_RATE = "refresh-rate"; + // Remembered Wifi display devices. private ArrayList<WifiDisplay> mRememberedWifiDisplays = new ArrayList<WifiDisplay>(); @@ -696,6 +705,18 @@ final class PersistentDataStore { case TAG_BRIGHTNESS_CONFIGURATIONS: mDisplayBrightnessConfigurations.loadFromXml(parser); break; + case TAG_RESOLUTION_WIDTH: + String width = parser.nextText(); + mWidth = Integer.parseInt(width); + break; + case TAG_RESOLUTION_HEIGHT: + String height = parser.nextText(); + mHeight = Integer.parseInt(height); + break; + case TAG_REFRESH_RATE: + String refreshRate = parser.nextText(); + mRefreshRate = Float.parseFloat(refreshRate); + break; } } } @@ -712,6 +733,18 @@ final class PersistentDataStore { serializer.startTag(null, TAG_BRIGHTNESS_CONFIGURATIONS); mDisplayBrightnessConfigurations.saveToXml(serializer); serializer.endTag(null, TAG_BRIGHTNESS_CONFIGURATIONS); + + serializer.startTag(null, TAG_RESOLUTION_WIDTH); + serializer.text(Integer.toString(mWidth)); + serializer.endTag(null, TAG_RESOLUTION_WIDTH); + + serializer.startTag(null, TAG_RESOLUTION_HEIGHT); + serializer.text(Integer.toString(mHeight)); + serializer.endTag(null, TAG_RESOLUTION_HEIGHT); + + serializer.startTag(null, TAG_REFRESH_RATE); + serializer.text(Float.toString(mRefreshRate)); + serializer.endTag(null, TAG_REFRESH_RATE); } public void dump(final PrintWriter pw, final String prefix) { @@ -719,6 +752,8 @@ final class PersistentDataStore { pw.println(prefix + "BrightnessValue=" + mBrightness); pw.println(prefix + "DisplayBrightnessConfigurations: "); mDisplayBrightnessConfigurations.dump(pw, prefix); + pw.println(prefix + "Resolution=" + mWidth + " " + mHeight); + pw.println(prefix + "RefreshRate=" + mRefreshRate); } } diff --git a/services/tests/servicestests/src/com/android/server/display/PersistentDataStoreTest.java b/services/tests/servicestests/src/com/android/server/display/PersistentDataStoreTest.java index 9fe8609c85a1..3b0a22f80c30 100644 --- a/services/tests/servicestests/src/com/android/server/display/PersistentDataStoreTest.java +++ b/services/tests/servicestests/src/com/android/server/display/PersistentDataStoreTest.java @@ -275,6 +275,75 @@ public class PersistentDataStoreTest { assertNull(mDataStore.getBrightnessConfiguration(userSerial)); } + @Test + public void testStoreAndRestoreResolution() { + final String uniqueDisplayId = "test:123"; + DisplayDevice testDisplayDevice = new DisplayDevice(null, null, uniqueDisplayId, null) { + @Override + public boolean hasStableUniqueId() { + return true; + } + + @Override + public DisplayDeviceInfo getDisplayDeviceInfoLocked() { + return null; + } + }; + int width = 35; + int height = 45; + mDataStore.loadIfNeeded(); + mDataStore.setUserPreferredResolution(testDisplayDevice, width, height); + + final ByteArrayOutputStream baos = new ByteArrayOutputStream(); + mInjector.setWriteStream(baos); + mDataStore.saveIfNeeded(); + mTestLooper.dispatchAll(); + assertTrue(mInjector.wasWriteSuccessful()); + TestInjector newInjector = new TestInjector(); + PersistentDataStore newDataStore = new PersistentDataStore(newInjector); + ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); + newInjector.setReadStream(bais); + newDataStore.loadIfNeeded(); + assertNotNull(newDataStore.getUserPreferredResolution(testDisplayDevice)); + assertEquals(35, newDataStore.getUserPreferredResolution(testDisplayDevice).x); + assertEquals(35, mDataStore.getUserPreferredResolution(testDisplayDevice).x); + assertEquals(45, newDataStore.getUserPreferredResolution(testDisplayDevice).y); + assertEquals(45, mDataStore.getUserPreferredResolution(testDisplayDevice).y); + } + + @Test + public void testStoreAndRestoreRefreshRate() { + final String uniqueDisplayId = "test:123"; + DisplayDevice testDisplayDevice = new DisplayDevice(null, null, uniqueDisplayId, null) { + @Override + public boolean hasStableUniqueId() { + return true; + } + + @Override + public DisplayDeviceInfo getDisplayDeviceInfoLocked() { + return null; + } + }; + float refreshRate = 85.3f; + mDataStore.loadIfNeeded(); + mDataStore.setUserPreferredRefreshRate(testDisplayDevice, refreshRate); + + final ByteArrayOutputStream baos = new ByteArrayOutputStream(); + mInjector.setWriteStream(baos); + mDataStore.saveIfNeeded(); + mTestLooper.dispatchAll(); + assertTrue(mInjector.wasWriteSuccessful()); + TestInjector newInjector = new TestInjector(); + PersistentDataStore newDataStore = new PersistentDataStore(newInjector); + ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); + newInjector.setReadStream(bais); + newDataStore.loadIfNeeded(); + assertNotNull(newDataStore.getUserPreferredRefreshRate(testDisplayDevice)); + assertEquals(85.3f, mDataStore.getUserPreferredRefreshRate(testDisplayDevice), 01.f); + assertEquals(85.3f, newDataStore.getUserPreferredRefreshRate(testDisplayDevice), 0.1f); + } + public class TestInjector extends PersistentDataStore.Injector { private InputStream mReadStream; private OutputStream mWriteStream; |