Loading core/res/AndroidManifest.xml +13 −0 Original line number Original line Diff line number Diff line Loading @@ -4700,6 +4700,19 @@ <permission android:name="android.permission.ACCESS_SHARED_LIBRARIES" <permission android:name="android.permission.ACCESS_SHARED_LIBRARIES" android:protectionLevel="signature|installer" /> android:protectionLevel="signature|installer" /> <!-- Allows an app to log compat change usage. @hide <p>Not for use by third-party applications.</p> --> <permission android:name="android.permission.LOG_COMPAT_CHANGE" android:protectionLevel="signature" /> <!-- Allows an app to read compat change config. @hide <p>Not for use by third-party applications.</p> --> <permission android:name="android.permission.READ_COMPAT_CHANGE_CONFIG" android:protectionLevel="signature" /> <!-- Allows an app to override compat change config. @hide <p>Not for use by third-party applications.</p> --> <permission android:name="android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG" android:protectionLevel="signature" /> <!-- Allows input events to be monitored. Very dangerous! @hide --> <!-- Allows input events to be monitored. Very dangerous! @hide --> <permission android:name="android.permission.MONITOR_INPUT" <permission android:name="android.permission.MONITOR_INPUT" android:protectionLevel="signature" /> android:protectionLevel="signature" /> Loading services/core/java/com/android/server/compat/PlatformCompat.java +40 −0 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,11 @@ package com.android.server.compat; package com.android.server.compat; import static android.Manifest.permission.LOG_COMPAT_CHANGE; import static android.Manifest.permission.OVERRIDE_COMPAT_CHANGE_CONFIG; import static android.Manifest.permission.READ_COMPAT_CHANGE_CONFIG; import static android.content.pm.PackageManager.PERMISSION_GRANTED; import android.app.ActivityManager; import android.app.ActivityManager; import android.app.IActivityManager; import android.app.IActivityManager; import android.content.Context; import android.content.Context; Loading Loading @@ -67,12 +72,14 @@ public class PlatformCompat extends IPlatformCompat.Stub { @Override @Override public void reportChange(long changeId, ApplicationInfo appInfo) { public void reportChange(long changeId, ApplicationInfo appInfo) { checkCompatChangeLogPermission(); reportChange(changeId, appInfo.uid, reportChange(changeId, appInfo.uid, StatsLog.APP_COMPATIBILITY_CHANGE_REPORTED__STATE__LOGGED); StatsLog.APP_COMPATIBILITY_CHANGE_REPORTED__STATE__LOGGED); } } @Override @Override public void reportChangeByPackageName(long changeId, String packageName, int userId) { public void reportChangeByPackageName(long changeId, String packageName, int userId) { checkCompatChangeLogPermission(); ApplicationInfo appInfo = getApplicationInfo(packageName, userId); ApplicationInfo appInfo = getApplicationInfo(packageName, userId); if (appInfo == null) { if (appInfo == null) { return; return; Loading @@ -82,11 +89,13 @@ public class PlatformCompat extends IPlatformCompat.Stub { @Override @Override public void reportChangeByUid(long changeId, int uid) { public void reportChangeByUid(long changeId, int uid) { checkCompatChangeLogPermission(); reportChange(changeId, uid, StatsLog.APP_COMPATIBILITY_CHANGE_REPORTED__STATE__LOGGED); reportChange(changeId, uid, StatsLog.APP_COMPATIBILITY_CHANGE_REPORTED__STATE__LOGGED); } } @Override @Override public boolean isChangeEnabled(long changeId, ApplicationInfo appInfo) { public boolean isChangeEnabled(long changeId, ApplicationInfo appInfo) { checkCompatChangeReadPermission(); if (mCompatConfig.isChangeEnabled(changeId, appInfo)) { if (mCompatConfig.isChangeEnabled(changeId, appInfo)) { reportChange(changeId, appInfo.uid, reportChange(changeId, appInfo.uid, StatsLog.APP_COMPATIBILITY_CHANGE_REPORTED__STATE__ENABLED); StatsLog.APP_COMPATIBILITY_CHANGE_REPORTED__STATE__ENABLED); Loading @@ -99,6 +108,7 @@ public class PlatformCompat extends IPlatformCompat.Stub { @Override @Override public boolean isChangeEnabledByPackageName(long changeId, String packageName, int userId) { public boolean isChangeEnabledByPackageName(long changeId, String packageName, int userId) { checkCompatChangeReadPermission(); ApplicationInfo appInfo = getApplicationInfo(packageName, userId); ApplicationInfo appInfo = getApplicationInfo(packageName, userId); if (appInfo == null) { if (appInfo == null) { return true; return true; Loading @@ -108,6 +118,7 @@ public class PlatformCompat extends IPlatformCompat.Stub { @Override @Override public boolean isChangeEnabledByUid(long changeId, int uid) { public boolean isChangeEnabledByUid(long changeId, int uid) { checkCompatChangeReadPermission(); String[] packages = mContext.getPackageManager().getPackagesForUid(uid); String[] packages = mContext.getPackageManager().getPackagesForUid(uid); if (packages == null || packages.length == 0) { if (packages == null || packages.length == 0) { return true; return true; Loading Loading @@ -140,6 +151,7 @@ public class PlatformCompat extends IPlatformCompat.Stub { @Override @Override public void setOverrides(CompatibilityChangeConfig overrides, String packageName) public void setOverrides(CompatibilityChangeConfig overrides, String packageName) throws RemoteException, SecurityException { throws RemoteException, SecurityException { checkCompatChangeOverridePermission(); mCompatConfig.addOverrides(overrides, packageName); mCompatConfig.addOverrides(overrides, packageName); killPackage(packageName); killPackage(packageName); } } Loading @@ -147,11 +159,13 @@ public class PlatformCompat extends IPlatformCompat.Stub { @Override @Override public void setOverridesForTest(CompatibilityChangeConfig overrides, String packageName) public void setOverridesForTest(CompatibilityChangeConfig overrides, String packageName) throws RemoteException, SecurityException { throws RemoteException, SecurityException { checkCompatChangeOverridePermission(); mCompatConfig.addOverrides(overrides, packageName); mCompatConfig.addOverrides(overrides, packageName); } } @Override @Override public void clearOverrides(String packageName) throws RemoteException, SecurityException { public void clearOverrides(String packageName) throws RemoteException, SecurityException { checkCompatChangeOverridePermission(); mCompatConfig.removePackageOverrides(packageName); mCompatConfig.removePackageOverrides(packageName); killPackage(packageName); killPackage(packageName); } } Loading @@ -159,12 +173,14 @@ public class PlatformCompat extends IPlatformCompat.Stub { @Override @Override public void clearOverridesForTest(String packageName) public void clearOverridesForTest(String packageName) throws RemoteException, SecurityException { throws RemoteException, SecurityException { checkCompatChangeOverridePermission(); mCompatConfig.removePackageOverrides(packageName); mCompatConfig.removePackageOverrides(packageName); } } @Override @Override public boolean clearOverride(long changeId, String packageName) public boolean clearOverride(long changeId, String packageName) throws RemoteException, SecurityException { throws RemoteException, SecurityException { checkCompatChangeOverridePermission(); boolean existed = mCompatConfig.removeOverride(changeId, packageName); boolean existed = mCompatConfig.removeOverride(changeId, packageName); killPackage(packageName); killPackage(packageName); return existed; return existed; Loading @@ -172,11 +188,13 @@ public class PlatformCompat extends IPlatformCompat.Stub { @Override @Override public CompatibilityChangeConfig getAppConfig(ApplicationInfo appInfo) { public CompatibilityChangeConfig getAppConfig(ApplicationInfo appInfo) { checkCompatChangeReadPermission(); return mCompatConfig.getAppConfig(appInfo); return mCompatConfig.getAppConfig(appInfo); } } @Override @Override public CompatibilityChangeInfo[] listAllChanges() { public CompatibilityChangeInfo[] listAllChanges() { checkCompatChangeReadPermission(); return mCompatConfig.dumpChanges(); return mCompatConfig.dumpChanges(); } } Loading Loading @@ -215,6 +233,7 @@ public class PlatformCompat extends IPlatformCompat.Stub { @Override @Override protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) { protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) { checkCompatChangeReadPermission(); if (!DumpUtils.checkDumpAndUsageStatsPermission(mContext, "platform_compat", pw)) return; if (!DumpUtils.checkDumpAndUsageStatsPermission(mContext, "platform_compat", pw)) return; mCompatConfig.dumpConfig(pw); mCompatConfig.dumpConfig(pw); } } Loading Loading @@ -276,4 +295,25 @@ public class PlatformCompat extends IPlatformCompat.Stub { Binder.restoreCallingIdentity(identity); Binder.restoreCallingIdentity(identity); } } } } private void checkCompatChangeLogPermission() throws SecurityException { if (mContext.checkCallingOrSelfPermission(LOG_COMPAT_CHANGE) != PERMISSION_GRANTED) { throw new SecurityException("Cannot log compat change usage"); } } private void checkCompatChangeReadPermission() throws SecurityException { if (mContext.checkCallingOrSelfPermission(READ_COMPAT_CHANGE_CONFIG) != PERMISSION_GRANTED) { throw new SecurityException("Cannot read compat change"); } } private void checkCompatChangeOverridePermission() throws SecurityException { if (mContext.checkCallingOrSelfPermission(OVERRIDE_COMPAT_CHANGE_CONFIG) != PERMISSION_GRANTED) { throw new SecurityException("Cannot override compat change"); } } } } services/tests/servicestests/AndroidManifest.xml +2 −0 Original line number Original line Diff line number Diff line Loading @@ -65,6 +65,8 @@ <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/> <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/> <uses-permission android:name="android.permission.SUSPEND_APPS"/> <uses-permission android:name="android.permission.SUSPEND_APPS"/> <uses-permission android:name="android.permission.CONTROL_KEYGUARD"/> <uses-permission android:name="android.permission.CONTROL_KEYGUARD"/> <uses-permission android:name="android.permission.READ_COMPAT_CHANGE_CONFIG"/> <uses-permission android:name="android.permission.LOG_COMPAT_CHANGE"/> <uses-permission android:name="android.permission.MANAGE_BIND_INSTANT_SERVICE"/> <uses-permission android:name="android.permission.MANAGE_BIND_INSTANT_SERVICE"/> <uses-permission android:name="android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS" /> <uses-permission android:name="android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS" /> <uses-permission android:name="android.permission.READ_DEVICE_CONFIG" /> <uses-permission android:name="android.permission.READ_DEVICE_CONFIG" /> Loading tests/PlatformCompatGating/Android.bp +0 −1 Original line number Original line Diff line number Diff line Loading @@ -18,7 +18,6 @@ android_test { name: "PlatformCompatGating", name: "PlatformCompatGating", // Only compile source java files in this apk. // Only compile source java files in this apk. srcs: ["src/**/*.java"], srcs: ["src/**/*.java"], certificate: "platform", libs: [ libs: [ "android.test.runner", "android.test.runner", "android.test.base", "android.test.base", Loading tests/PlatformCompatGating/test-rules/src/android/compat/testing/PlatformCompatChangeRule.java +7 −0 Original line number Original line Diff line number Diff line Loading @@ -16,7 +16,9 @@ package android.compat.testing; package android.compat.testing; import android.Manifest; import android.app.Instrumentation; import android.app.Instrumentation; import android.app.UiAutomation; import android.compat.Compatibility; import android.compat.Compatibility; import android.compat.Compatibility.ChangeConfig; import android.compat.Compatibility.ChangeConfig; import android.content.Context; import android.content.Context; Loading Loading @@ -83,12 +85,16 @@ public class PlatformCompatChangeRule extends CoreCompatChangeRule { @Override @Override public void evaluate() throws Throwable { public void evaluate() throws Throwable { Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation(); Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation(); UiAutomation uiAutomation = instrumentation.getUiAutomation(); String packageName = instrumentation.getTargetContext().getPackageName(); String packageName = instrumentation.getTargetContext().getPackageName(); IPlatformCompat platformCompat = IPlatformCompat.Stub IPlatformCompat platformCompat = IPlatformCompat.Stub .asInterface(ServiceManager.getService(Context.PLATFORM_COMPAT_SERVICE)); .asInterface(ServiceManager.getService(Context.PLATFORM_COMPAT_SERVICE)); if (platformCompat == null) { if (platformCompat == null) { throw new IllegalStateException("Could not get IPlatformCompat service!"); throw new IllegalStateException("Could not get IPlatformCompat service!"); } } uiAutomation.adoptShellPermissionIdentity( Manifest.permission.READ_COMPAT_CHANGE_CONFIG, Manifest.permission.OVERRIDE_COMPAT_CHANGE_CONFIG); Compatibility.setOverrides(mConfig); Compatibility.setOverrides(mConfig); try { try { platformCompat.setOverridesForTest(new CompatibilityChangeConfig(mConfig), platformCompat.setOverridesForTest(new CompatibilityChangeConfig(mConfig), Loading @@ -101,6 +107,7 @@ public class PlatformCompatChangeRule extends CoreCompatChangeRule { } catch (RemoteException e) { } catch (RemoteException e) { throw new RuntimeException("Could not call IPlatformCompat binder method!", e); throw new RuntimeException("Could not call IPlatformCompat binder method!", e); } finally { } finally { uiAutomation.dropShellPermissionIdentity(); Compatibility.clearOverrides(); Compatibility.clearOverrides(); } } } } Loading Loading
core/res/AndroidManifest.xml +13 −0 Original line number Original line Diff line number Diff line Loading @@ -4700,6 +4700,19 @@ <permission android:name="android.permission.ACCESS_SHARED_LIBRARIES" <permission android:name="android.permission.ACCESS_SHARED_LIBRARIES" android:protectionLevel="signature|installer" /> android:protectionLevel="signature|installer" /> <!-- Allows an app to log compat change usage. @hide <p>Not for use by third-party applications.</p> --> <permission android:name="android.permission.LOG_COMPAT_CHANGE" android:protectionLevel="signature" /> <!-- Allows an app to read compat change config. @hide <p>Not for use by third-party applications.</p> --> <permission android:name="android.permission.READ_COMPAT_CHANGE_CONFIG" android:protectionLevel="signature" /> <!-- Allows an app to override compat change config. @hide <p>Not for use by third-party applications.</p> --> <permission android:name="android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG" android:protectionLevel="signature" /> <!-- Allows input events to be monitored. Very dangerous! @hide --> <!-- Allows input events to be monitored. Very dangerous! @hide --> <permission android:name="android.permission.MONITOR_INPUT" <permission android:name="android.permission.MONITOR_INPUT" android:protectionLevel="signature" /> android:protectionLevel="signature" /> Loading
services/core/java/com/android/server/compat/PlatformCompat.java +40 −0 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,11 @@ package com.android.server.compat; package com.android.server.compat; import static android.Manifest.permission.LOG_COMPAT_CHANGE; import static android.Manifest.permission.OVERRIDE_COMPAT_CHANGE_CONFIG; import static android.Manifest.permission.READ_COMPAT_CHANGE_CONFIG; import static android.content.pm.PackageManager.PERMISSION_GRANTED; import android.app.ActivityManager; import android.app.ActivityManager; import android.app.IActivityManager; import android.app.IActivityManager; import android.content.Context; import android.content.Context; Loading Loading @@ -67,12 +72,14 @@ public class PlatformCompat extends IPlatformCompat.Stub { @Override @Override public void reportChange(long changeId, ApplicationInfo appInfo) { public void reportChange(long changeId, ApplicationInfo appInfo) { checkCompatChangeLogPermission(); reportChange(changeId, appInfo.uid, reportChange(changeId, appInfo.uid, StatsLog.APP_COMPATIBILITY_CHANGE_REPORTED__STATE__LOGGED); StatsLog.APP_COMPATIBILITY_CHANGE_REPORTED__STATE__LOGGED); } } @Override @Override public void reportChangeByPackageName(long changeId, String packageName, int userId) { public void reportChangeByPackageName(long changeId, String packageName, int userId) { checkCompatChangeLogPermission(); ApplicationInfo appInfo = getApplicationInfo(packageName, userId); ApplicationInfo appInfo = getApplicationInfo(packageName, userId); if (appInfo == null) { if (appInfo == null) { return; return; Loading @@ -82,11 +89,13 @@ public class PlatformCompat extends IPlatformCompat.Stub { @Override @Override public void reportChangeByUid(long changeId, int uid) { public void reportChangeByUid(long changeId, int uid) { checkCompatChangeLogPermission(); reportChange(changeId, uid, StatsLog.APP_COMPATIBILITY_CHANGE_REPORTED__STATE__LOGGED); reportChange(changeId, uid, StatsLog.APP_COMPATIBILITY_CHANGE_REPORTED__STATE__LOGGED); } } @Override @Override public boolean isChangeEnabled(long changeId, ApplicationInfo appInfo) { public boolean isChangeEnabled(long changeId, ApplicationInfo appInfo) { checkCompatChangeReadPermission(); if (mCompatConfig.isChangeEnabled(changeId, appInfo)) { if (mCompatConfig.isChangeEnabled(changeId, appInfo)) { reportChange(changeId, appInfo.uid, reportChange(changeId, appInfo.uid, StatsLog.APP_COMPATIBILITY_CHANGE_REPORTED__STATE__ENABLED); StatsLog.APP_COMPATIBILITY_CHANGE_REPORTED__STATE__ENABLED); Loading @@ -99,6 +108,7 @@ public class PlatformCompat extends IPlatformCompat.Stub { @Override @Override public boolean isChangeEnabledByPackageName(long changeId, String packageName, int userId) { public boolean isChangeEnabledByPackageName(long changeId, String packageName, int userId) { checkCompatChangeReadPermission(); ApplicationInfo appInfo = getApplicationInfo(packageName, userId); ApplicationInfo appInfo = getApplicationInfo(packageName, userId); if (appInfo == null) { if (appInfo == null) { return true; return true; Loading @@ -108,6 +118,7 @@ public class PlatformCompat extends IPlatformCompat.Stub { @Override @Override public boolean isChangeEnabledByUid(long changeId, int uid) { public boolean isChangeEnabledByUid(long changeId, int uid) { checkCompatChangeReadPermission(); String[] packages = mContext.getPackageManager().getPackagesForUid(uid); String[] packages = mContext.getPackageManager().getPackagesForUid(uid); if (packages == null || packages.length == 0) { if (packages == null || packages.length == 0) { return true; return true; Loading Loading @@ -140,6 +151,7 @@ public class PlatformCompat extends IPlatformCompat.Stub { @Override @Override public void setOverrides(CompatibilityChangeConfig overrides, String packageName) public void setOverrides(CompatibilityChangeConfig overrides, String packageName) throws RemoteException, SecurityException { throws RemoteException, SecurityException { checkCompatChangeOverridePermission(); mCompatConfig.addOverrides(overrides, packageName); mCompatConfig.addOverrides(overrides, packageName); killPackage(packageName); killPackage(packageName); } } Loading @@ -147,11 +159,13 @@ public class PlatformCompat extends IPlatformCompat.Stub { @Override @Override public void setOverridesForTest(CompatibilityChangeConfig overrides, String packageName) public void setOverridesForTest(CompatibilityChangeConfig overrides, String packageName) throws RemoteException, SecurityException { throws RemoteException, SecurityException { checkCompatChangeOverridePermission(); mCompatConfig.addOverrides(overrides, packageName); mCompatConfig.addOverrides(overrides, packageName); } } @Override @Override public void clearOverrides(String packageName) throws RemoteException, SecurityException { public void clearOverrides(String packageName) throws RemoteException, SecurityException { checkCompatChangeOverridePermission(); mCompatConfig.removePackageOverrides(packageName); mCompatConfig.removePackageOverrides(packageName); killPackage(packageName); killPackage(packageName); } } Loading @@ -159,12 +173,14 @@ public class PlatformCompat extends IPlatformCompat.Stub { @Override @Override public void clearOverridesForTest(String packageName) public void clearOverridesForTest(String packageName) throws RemoteException, SecurityException { throws RemoteException, SecurityException { checkCompatChangeOverridePermission(); mCompatConfig.removePackageOverrides(packageName); mCompatConfig.removePackageOverrides(packageName); } } @Override @Override public boolean clearOverride(long changeId, String packageName) public boolean clearOverride(long changeId, String packageName) throws RemoteException, SecurityException { throws RemoteException, SecurityException { checkCompatChangeOverridePermission(); boolean existed = mCompatConfig.removeOverride(changeId, packageName); boolean existed = mCompatConfig.removeOverride(changeId, packageName); killPackage(packageName); killPackage(packageName); return existed; return existed; Loading @@ -172,11 +188,13 @@ public class PlatformCompat extends IPlatformCompat.Stub { @Override @Override public CompatibilityChangeConfig getAppConfig(ApplicationInfo appInfo) { public CompatibilityChangeConfig getAppConfig(ApplicationInfo appInfo) { checkCompatChangeReadPermission(); return mCompatConfig.getAppConfig(appInfo); return mCompatConfig.getAppConfig(appInfo); } } @Override @Override public CompatibilityChangeInfo[] listAllChanges() { public CompatibilityChangeInfo[] listAllChanges() { checkCompatChangeReadPermission(); return mCompatConfig.dumpChanges(); return mCompatConfig.dumpChanges(); } } Loading Loading @@ -215,6 +233,7 @@ public class PlatformCompat extends IPlatformCompat.Stub { @Override @Override protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) { protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) { checkCompatChangeReadPermission(); if (!DumpUtils.checkDumpAndUsageStatsPermission(mContext, "platform_compat", pw)) return; if (!DumpUtils.checkDumpAndUsageStatsPermission(mContext, "platform_compat", pw)) return; mCompatConfig.dumpConfig(pw); mCompatConfig.dumpConfig(pw); } } Loading Loading @@ -276,4 +295,25 @@ public class PlatformCompat extends IPlatformCompat.Stub { Binder.restoreCallingIdentity(identity); Binder.restoreCallingIdentity(identity); } } } } private void checkCompatChangeLogPermission() throws SecurityException { if (mContext.checkCallingOrSelfPermission(LOG_COMPAT_CHANGE) != PERMISSION_GRANTED) { throw new SecurityException("Cannot log compat change usage"); } } private void checkCompatChangeReadPermission() throws SecurityException { if (mContext.checkCallingOrSelfPermission(READ_COMPAT_CHANGE_CONFIG) != PERMISSION_GRANTED) { throw new SecurityException("Cannot read compat change"); } } private void checkCompatChangeOverridePermission() throws SecurityException { if (mContext.checkCallingOrSelfPermission(OVERRIDE_COMPAT_CHANGE_CONFIG) != PERMISSION_GRANTED) { throw new SecurityException("Cannot override compat change"); } } } }
services/tests/servicestests/AndroidManifest.xml +2 −0 Original line number Original line Diff line number Diff line Loading @@ -65,6 +65,8 @@ <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/> <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/> <uses-permission android:name="android.permission.SUSPEND_APPS"/> <uses-permission android:name="android.permission.SUSPEND_APPS"/> <uses-permission android:name="android.permission.CONTROL_KEYGUARD"/> <uses-permission android:name="android.permission.CONTROL_KEYGUARD"/> <uses-permission android:name="android.permission.READ_COMPAT_CHANGE_CONFIG"/> <uses-permission android:name="android.permission.LOG_COMPAT_CHANGE"/> <uses-permission android:name="android.permission.MANAGE_BIND_INSTANT_SERVICE"/> <uses-permission android:name="android.permission.MANAGE_BIND_INSTANT_SERVICE"/> <uses-permission android:name="android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS" /> <uses-permission android:name="android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS" /> <uses-permission android:name="android.permission.READ_DEVICE_CONFIG" /> <uses-permission android:name="android.permission.READ_DEVICE_CONFIG" /> Loading
tests/PlatformCompatGating/Android.bp +0 −1 Original line number Original line Diff line number Diff line Loading @@ -18,7 +18,6 @@ android_test { name: "PlatformCompatGating", name: "PlatformCompatGating", // Only compile source java files in this apk. // Only compile source java files in this apk. srcs: ["src/**/*.java"], srcs: ["src/**/*.java"], certificate: "platform", libs: [ libs: [ "android.test.runner", "android.test.runner", "android.test.base", "android.test.base", Loading
tests/PlatformCompatGating/test-rules/src/android/compat/testing/PlatformCompatChangeRule.java +7 −0 Original line number Original line Diff line number Diff line Loading @@ -16,7 +16,9 @@ package android.compat.testing; package android.compat.testing; import android.Manifest; import android.app.Instrumentation; import android.app.Instrumentation; import android.app.UiAutomation; import android.compat.Compatibility; import android.compat.Compatibility; import android.compat.Compatibility.ChangeConfig; import android.compat.Compatibility.ChangeConfig; import android.content.Context; import android.content.Context; Loading Loading @@ -83,12 +85,16 @@ public class PlatformCompatChangeRule extends CoreCompatChangeRule { @Override @Override public void evaluate() throws Throwable { public void evaluate() throws Throwable { Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation(); Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation(); UiAutomation uiAutomation = instrumentation.getUiAutomation(); String packageName = instrumentation.getTargetContext().getPackageName(); String packageName = instrumentation.getTargetContext().getPackageName(); IPlatformCompat platformCompat = IPlatformCompat.Stub IPlatformCompat platformCompat = IPlatformCompat.Stub .asInterface(ServiceManager.getService(Context.PLATFORM_COMPAT_SERVICE)); .asInterface(ServiceManager.getService(Context.PLATFORM_COMPAT_SERVICE)); if (platformCompat == null) { if (platformCompat == null) { throw new IllegalStateException("Could not get IPlatformCompat service!"); throw new IllegalStateException("Could not get IPlatformCompat service!"); } } uiAutomation.adoptShellPermissionIdentity( Manifest.permission.READ_COMPAT_CHANGE_CONFIG, Manifest.permission.OVERRIDE_COMPAT_CHANGE_CONFIG); Compatibility.setOverrides(mConfig); Compatibility.setOverrides(mConfig); try { try { platformCompat.setOverridesForTest(new CompatibilityChangeConfig(mConfig), platformCompat.setOverridesForTest(new CompatibilityChangeConfig(mConfig), Loading @@ -101,6 +107,7 @@ public class PlatformCompatChangeRule extends CoreCompatChangeRule { } catch (RemoteException e) { } catch (RemoteException e) { throw new RuntimeException("Could not call IPlatformCompat binder method!", e); throw new RuntimeException("Could not call IPlatformCompat binder method!", e); } finally { } finally { uiAutomation.dropShellPermissionIdentity(); Compatibility.clearOverrides(); Compatibility.clearOverrides(); } } } } Loading