Adding the missing display mode strings to persistentDataStore

Bug: 244768501
Test: atest PersistentDataStoreTest#testStoreAndRestoreResolution
Test: atest PersistentDataStoreTest#testStoreAndRestoreRefreshRate
Change-Id: I24e123652a0591b55b02819e946ac77c7f31817d
This commit is contained in:
Kriti Dang
2022-09-28 13:17:37 +02:00
parent 6bf944b758
commit 2c37a4f37d
3 changed files with 111 additions and 3 deletions

View File

@@ -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) {

View File

@@ -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);
}
}

View File

@@ -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;