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