summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Kriti Dang <kritidang@google.com> 2022-09-30 15:38:38 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2022-09-30 15:38:38 +0000
commitc80c5d099eeb2bb4e7272cfbc76e08a75704a72f (patch)
tree939a3330fdd03341912011f1bafcd1bbd5cb88bc
parent8b0ce1fbacdd3e868536e661e7c2763d77849e42 (diff)
parent649dd54d2c0fad74a905981c465843d12cbd0c7f (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>
-rw-r--r--services/core/java/com/android/server/display/DisplayManagerService.java10
-rw-r--r--services/core/java/com/android/server/display/PersistentDataStore.java35
-rw-r--r--services/tests/servicestests/src/com/android/server/display/PersistentDataStoreTest.java69
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;
* &lt;/brightness-curve>
* &lt;/brightness-configuration>
* &lt;/brightness-configurations>
+ * &lt;display-mode>0&lt;
+ * &lt;resolution-width>1080&lt;/resolution-width>
+ * &lt;resolution-height>1920&lt;/resolution-height>
+ * &lt;refresh-rate>60&lt;/refresh-rate>
+ * &lt;/display-mode>
* &lt;/display>
* &lt;/display-states>
* &lt;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;