Automatically switch to native density for ActivityManagerMemoryClassTestConfigurationTest

Bug: 128574090

Test: atest android.app.cts.ActivityManagerMemoryClassTest#testGetMemoryClass
Change-Id: I66965b2b9ef1d5867616b765edb0425f1fb0c35d
diff --git a/tests/app/src/android/app/cts/ActivityManagerMemoryClassTest.java b/tests/app/src/android/app/cts/ActivityManagerMemoryClassTest.java
index 0668ff8..cda65a9 100644
--- a/tests/app/src/android/app/cts/ActivityManagerMemoryClassTest.java
+++ b/tests/app/src/android/app/cts/ActivityManagerMemoryClassTest.java
@@ -22,6 +22,7 @@
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.content.res.Configuration;
+import android.support.test.uiautomator.UiDevice;
 import android.test.ActivityInstrumentationTestCase2;
 import android.util.DisplayMetrics;
 import android.view.Display;
@@ -31,6 +32,8 @@
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * {@link ActivityInstrumentationTestCase2} that tests {@link ActivityManager#getMemoryClass()}
@@ -156,12 +159,35 @@
 
     @CddTest(requirement="3.7")
     public void testGetMemoryClass() throws Exception {
+        UiDevice uiDevice = UiDevice.getInstance(getInstrumentation());
+        int density = resetDensityIfNeeded(uiDevice);
+
         int memoryClass = getMemoryClass();
         int screenDensity = getScreenDensity();
         int screenSize = getScreenSize();
         assertMemoryForScreenDensity(memoryClass, screenDensity, screenSize);
 
         runHeapTestApp(memoryClass);
+
+        restoreDensityIfNeeded(uiDevice, density);
+    }
+
+    private int resetDensityIfNeeded(UiDevice device) throws Exception {
+        final String output = device.executeShellCommand("wm density");
+         final Pattern p = Pattern.compile("Override density: (\\d+)");
+         final Matcher m = p.matcher(output);
+         if (m.find()) {
+             device.executeShellCommand("wm density reset");
+             int restoreDensity = Integer.parseInt(m.group(1));
+             return restoreDensity;
+         }
+         return -1;
+    }
+
+    private void restoreDensityIfNeeded(UiDevice device, int restoreDensity) throws Exception {
+        if (restoreDensity > 0) {
+            device.executeShellCommand("wm density " + restoreDensity);
+        }
     }
 
     private int getMemoryClass() {