summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSalvador Martinez <dehboxturtle@google.com>2018-10-02 16:24:04 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2018-10-02 16:24:04 +0000
commitbbd22043e0911ea7d4223be8ca7d00b25c309ed8 (patch)
tree2c20e878208af9fa90bb944c2a465e86666429b0
parentba0340ff276ea2455ed95de473ef498c57f6ec2e (diff)
parenta80bbab54c8cc02729508f6c7b1d51a0eabb331f (diff)
Merge "Add new POWER_SAVER permission & update api"
-rw-r--r--api/system-current.txt2
-rw-r--r--api/test-current.txt4
-rw-r--r--config/hiddenapi-light-greylist.txt1
-rw-r--r--core/java/android/os/PowerManager.java9
-rw-r--r--core/res/AndroidManifest.xml6
-rw-r--r--services/core/java/com/android/server/power/PowerManagerService.java7
6 files changed, 24 insertions, 5 deletions
diff --git a/api/system-current.txt b/api/system-current.txt
index 5785e4aa3969..b95a0857f3a3 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -128,6 +128,7 @@ package android {
field public static final java.lang.String PEERS_MAC_ADDRESS = "android.permission.PEERS_MAC_ADDRESS";
field public static final java.lang.String PERFORM_CDMA_PROVISIONING = "android.permission.PERFORM_CDMA_PROVISIONING";
field public static final java.lang.String PERFORM_SIM_ACTIVATION = "android.permission.PERFORM_SIM_ACTIVATION";
+ field public static final java.lang.String POWER_SAVER = "android.permission.POWER_SAVER";
field public static final java.lang.String PROVIDE_RESOLVER_RANKER_SERVICE = "android.permission.PROVIDE_RESOLVER_RANKER_SERVICE";
field public static final java.lang.String PROVIDE_TRUST_AGENT = "android.permission.PROVIDE_TRUST_AGENT";
field public static final java.lang.String QUERY_TIME_ZONE_RULES = "android.permission.QUERY_TIME_ZONE_RULES";
@@ -3995,6 +3996,7 @@ package android.os {
}
public final class PowerManager {
+ method public boolean setPowerSaveMode(boolean);
method public void userActivity(long, int, int);
field public static final int USER_ACTIVITY_EVENT_ACCESSIBILITY = 3; // 0x3
field public static final int USER_ACTIVITY_EVENT_BUTTON = 1; // 0x1
diff --git a/api/test-current.txt b/api/test-current.txt
index 956761615254..53ff06800182 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -708,6 +708,10 @@ package android.os {
method public void removeSyncBarrier(int);
}
+ public final class PowerManager {
+ method public boolean setPowerSaveMode(boolean);
+ }
+
public class Process {
method public static final int getThreadScheduler(int) throws java.lang.IllegalArgumentException;
}
diff --git a/config/hiddenapi-light-greylist.txt b/config/hiddenapi-light-greylist.txt
index ac16fd311c32..6af34f9151b9 100644
--- a/config/hiddenapi-light-greylist.txt
+++ b/config/hiddenapi-light-greylist.txt
@@ -867,7 +867,6 @@ Landroid/os/PowerManager;->GO_TO_SLEEP_REASON_TIMEOUT:I
Landroid/os/PowerManager;->isLightDeviceIdleMode()Z
Landroid/os/PowerManager;->mHandler:Landroid/os/Handler;
Landroid/os/PowerManager;->mService:Landroid/os/IPowerManager;
-Landroid/os/PowerManager;->setPowerSaveMode(Z)Z
Landroid/os/PowerManager;->validateWakeLockParameters(ILjava/lang/String;)V
Landroid/os/PowerManager;->wakeUp(JLjava/lang/String;)V
Landroid/os/Process;->BLUETOOTH_UID:I
diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java
index 89a5defd221d..8ea061e4a8d0 100644
--- a/core/java/android/os/PowerManager.java
+++ b/core/java/android/os/PowerManager.java
@@ -1154,10 +1154,15 @@ public final class PowerManager {
*
* @return True if the set was allowed.
*
- * @see #isPowerSaveMode()
- *
* @hide
+ * @see #isPowerSaveMode()
*/
+ @SystemApi
+ @TestApi
+ @RequiresPermission(anyOf = {
+ android.Manifest.permission.DEVICE_POWER,
+ android.Manifest.permission.POWER_SAVER
+ })
public boolean setPowerSaveMode(boolean mode) {
try {
return mService.setPowerSaveMode(mode);
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index ea92c60015ef..f654ce231161 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -3406,6 +3406,12 @@
<permission android:name="android.permission.DEVICE_POWER"
android:protectionLevel="signature" />
+ <!-- Allows toggling battery saver on the system.
+ Superseded by DEVICE_POWER permission. @hide @SystemApi
+ -->
+ <permission android:name="android.permission.POWER_SAVER"
+ android:protectionLevel="signature|privileged" />
+
<!-- Allows access to the PowerManager.userActivity function.
<p>Not for use by third-party applications. @hide @SystemApi -->
<permission android:name="android.permission.USER_ACTIVITY"
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
index 9f6b3dde5a49..b3f2a27cf99a 100644
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -4404,8 +4404,11 @@ public final class PowerManagerService extends SystemService
@Override // Binder call
public boolean setPowerSaveMode(boolean enabled) {
- mContext.enforceCallingOrSelfPermission(
- android.Manifest.permission.DEVICE_POWER, null);
+ if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.POWER_SAVER)
+ != PackageManager.PERMISSION_GRANTED) {
+ mContext.enforceCallingOrSelfPermission(
+ android.Manifest.permission.DEVICE_POWER, null);
+ }
final long ident = Binder.clearCallingIdentity();
try {
return setLowPowerModeInternal(enabled);