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