From b4eafda7de11276522946d13e5860652aacccd4c Mon Sep 17 00:00:00 2001 From: Adnan Begovic Date: Mon, 7 Mar 2016 11:49:52 -0800 Subject: [PATCH] cmsdk: Add PerformanceManager tests, Change target permission. Since PerformanceManager is strictly a CyanogenMod construct, it doesn't make sense to enforce the interfaces with an android specific permission (even though the implementation is delegated to power manager). To keep consistency with the other api's, modify the enforcing permission to a cm specific declaration. Also add test cases for the PerformanceManager public interfaces. Change-Id: I430b69dbee73bf94bb60932d1942ab97e3ba193e --- api/cm_current.txt | 1 + .../internal/PerformanceManagerService.java | 6 +- cm/res/AndroidManifest.xml | 33 ++++--- cm/res/res/values/strings.xml | 4 + .../cyanogenmod/power/PerformanceManager.java | 3 +- system-api/cm_system-current.txt | 1 + tests/AndroidManifest.xml | 1 + .../power/unit/PerfomanceManagerTest.java | 95 +++++++++++++++++++ 8 files changed, 128 insertions(+), 16 deletions(-) create mode 100644 tests/src/org/cyanogenmod/tests/power/unit/PerfomanceManagerTest.java diff --git a/api/cm_current.txt b/api/cm_current.txt index 12b3165..0e3e14b 100644 --- a/api/cm_current.txt +++ b/api/cm_current.txt @@ -569,6 +569,7 @@ package cyanogenmod.platform { field public static final java.lang.String MODIFY_NETWORK_SETTINGS = "cyanogenmod.permission.MODIFY_NETWORK_SETTINGS"; field public static final java.lang.String MODIFY_PROFILES = "cyanogenmod.permission.MODIFY_PROFILES"; field public static final java.lang.String MODIFY_SOUND_SETTINGS = "cyanogenmod.permission.MODIFY_SOUND_SETTINGS"; + field public static final java.lang.String PERFORMANCE_ACCESS = "cyanogenmod.permission.PERFORMANCE_ACCESS"; field public static final java.lang.String PROTECTED_APP = "cyanogenmod.permission.PROTECTED_APP"; field public static final java.lang.String PUBLISH_CUSTOM_TILE = "cyanogenmod.permission.PUBLISH_CUSTOM_TILE"; field public static final java.lang.String READ_ALARMS = "cyanogenmod.permission.READ_ALARMS"; diff --git a/cm/lib/main/java/org/cyanogenmod/platform/internal/PerformanceManagerService.java b/cm/lib/main/java/org/cyanogenmod/platform/internal/PerformanceManagerService.java index d4e8403..4b03ba0 100644 --- a/cm/lib/main/java/org/cyanogenmod/platform/internal/PerformanceManagerService.java +++ b/cm/lib/main/java/org/cyanogenmod/platform/internal/PerformanceManagerService.java @@ -218,12 +218,14 @@ public class PerformanceManagerService extends SystemService { return false; } - mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null); + // Enforce the performance access permission declared by cm's res package + mContext.enforceCallingOrSelfPermission( + cyanogenmod.platform.Manifest.permission.PERFORMANCE_ACCESS, null); long token = Binder.clearCallingIdentity(); mCurrentProfile = profile; - + mHandler.removeMessages(MSG_CPU_BOOST); mHandler.removeMessages(MSG_LAUNCH_BOOST); mHandler.sendMessage( diff --git a/cm/res/AndroidManifest.xml b/cm/res/AndroidManifest.xml index b5e6f74..eb4ee81 100644 --- a/cm/res/AndroidManifest.xml +++ b/cm/res/AndroidManifest.xml @@ -133,10 +133,10 @@ + android:name="cyanogenmod.permission.PROTECTED_APP" + android:label="@string/permlab_protectedApp" + android:description="@string/permdesc_protectedApp" + android:protectionLevel="signature|privileged" /> + android:label="@string/permlab_accessThemeService" + android:description="@string/permdesc_accessThemeService" + android:protectionLevel="normal" /> + android:label="@string/permlab_readThemes" + android:description="@string/permdesc_readThemesDesc" + android:protectionLevel="normal" /> + android:label="@string/permlab_writeThemes" + android:description="@string/permdesc_writeThemesDesc" + android:protectionLevel="normal" /> + + + Allows the app to insert new themes and modify which theme you have applied. + + access performance manager + + Allows an app to access the performance service. Should never be needed for normal apps diff --git a/src/java/cyanogenmod/power/PerformanceManager.java b/src/java/cyanogenmod/power/PerformanceManager.java index e8e41b4..bbe203b 100644 --- a/src/java/cyanogenmod/power/PerformanceManager.java +++ b/src/java/cyanogenmod/power/PerformanceManager.java @@ -94,7 +94,8 @@ public class PerformanceManager { return sInstance; } - private static IPerformanceManager getService() { + /** @hide */ + public static IPerformanceManager getService() { if (sService != null) { return sService; } diff --git a/system-api/cm_system-current.txt b/system-api/cm_system-current.txt index 12b3165..0e3e14b 100644 --- a/system-api/cm_system-current.txt +++ b/system-api/cm_system-current.txt @@ -569,6 +569,7 @@ package cyanogenmod.platform { field public static final java.lang.String MODIFY_NETWORK_SETTINGS = "cyanogenmod.permission.MODIFY_NETWORK_SETTINGS"; field public static final java.lang.String MODIFY_PROFILES = "cyanogenmod.permission.MODIFY_PROFILES"; field public static final java.lang.String MODIFY_SOUND_SETTINGS = "cyanogenmod.permission.MODIFY_SOUND_SETTINGS"; + field public static final java.lang.String PERFORMANCE_ACCESS = "cyanogenmod.permission.PERFORMANCE_ACCESS"; field public static final java.lang.String PROTECTED_APP = "cyanogenmod.permission.PROTECTED_APP"; field public static final java.lang.String PUBLISH_CUSTOM_TILE = "cyanogenmod.permission.PUBLISH_CUSTOM_TILE"; field public static final java.lang.String READ_ALARMS = "cyanogenmod.permission.READ_ALARMS"; diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml index 5016a35..28fc932 100644 --- a/tests/AndroidManifest.xml +++ b/tests/AndroidManifest.xml @@ -20,6 +20,7 @@ + 0); + } + + @SmallTest + public void testGetPowerProfile() { + assertNotSame(IMPOSSIBLE_POWER_PROFILE, mSavedPerfProfile); + } + + @SmallTest + public void testSetAndGetPowerProfile() { + int[] expectedStates = new int[] { PerformanceManager.PROFILE_POWER_SAVE, + PerformanceManager.PROFILE_BALANCED, + PerformanceManager.PROFILE_HIGH_PERFORMANCE}; + + // Set the state + for (int profile : expectedStates) { + // If the target perf profile is the same as the current one, + // setPowerProfile will noop, ignore that scenario + if (mCMPerformanceManager.getPowerProfile() != profile) { + mCMPerformanceManager.setPowerProfile(profile); + // Verify that it was set correctly. + assertEquals(profile, mCMPerformanceManager.getPowerProfile()); + } + } + } + + @SmallTest + public void testGetPerfProfileHasAppProfiles() { + // No application has power save by default + assertEquals(false, mCMPerformanceManager.getProfileHasAppProfiles( + PerformanceManager.PROFILE_POWER_SAVE)); + } + + @Override + protected void tearDown() throws Exception { + super.tearDown(); + // Reset + mCMPerformanceManager.setPowerProfile(mSavedPerfProfile); + } +}