From e57d5ac376022a042dd8afdc3a69bf5c0e015bd6 Mon Sep 17 00:00:00 2001 From: Kweku Adams Date: Thu, 18 Feb 2021 10:53:12 -0800 Subject: [PATCH] Remove unnecessary permission check. There's no reason for getPowerSaveModeTrigger to require the POWER_SAVER permission. The API is only marked as a SystemApi because it was designed for a specific use case and 3rd party apps don't need to know the information, but there's no problem if they get the value. All the value tells you is whether the device will turn on battery saver automatically based on the percentage level or if it'll turn on automatically based on a different dynamic signal. Bug: 174241855 Test: atest android.os.cts.PowerManagerTest Test: atest android.permission.cts.PowerManagerServicePermissionTest Test: atest CtsPermission2TestCases Test: atest SettingsProviderTest Change-Id: I3146a681d9c5da9c68a7e6b38b50314b293dc924 --- core/api/system-current.txt | 2 +- core/java/android/os/PowerManager.java | 5 ++++- .../java/com/android/server/power/PowerManagerService.java | 1 - 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/core/api/system-current.txt b/core/api/system-current.txt index f4990d4686c5e..6715ed246490b 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -8574,7 +8574,7 @@ package android.os { method @RequiresPermission(allOf={android.Manifest.permission.READ_DREAM_STATE, android.Manifest.permission.WRITE_DREAM_STATE}) public void dream(long); method @RequiresPermission(android.Manifest.permission.DEVICE_POWER) public boolean forceSuspend(); method @NonNull public android.os.BatterySaverPolicyConfig getFullPowerSavePolicy(); - method @RequiresPermission(android.Manifest.permission.POWER_SAVER) public int getPowerSaveModeTrigger(); + method public int getPowerSaveModeTrigger(); method @RequiresPermission(android.Manifest.permission.READ_DREAM_STATE) public boolean isAmbientDisplayAvailable(); method @RequiresPermission(android.Manifest.permission.READ_DREAM_STATE) public boolean isAmbientDisplaySuppressed(); method @RequiresPermission(android.Manifest.permission.READ_DREAM_STATE) public boolean isAmbientDisplaySuppressedForToken(@NonNull String); diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java index 3774fb5956808..e5887edbd3d0f 100644 --- a/core/java/android/os/PowerManager.java +++ b/core/java/android/os/PowerManager.java @@ -1875,6 +1875,10 @@ public final class PowerManager { * Returns the current battery saver control mode. Values it may return are defined in * AutoPowerSaveModeTriggers. Note that this is a global device state, not a per user setting. * + *

Note: Prior to Android version {@link Build.VERSION_CODES#S}, any app calling this method + * was required to hold the {@link android.Manifest.permission#POWER_SAVER} permission. Starting + * from Android version {@link Build.VERSION_CODES#S}, that permission is no longer required. + * * @return The current value power saver mode for the system. * * @see AutoPowerSaveModeTriggers @@ -1883,7 +1887,6 @@ public final class PowerManager { */ @AutoPowerSaveModeTriggers @SystemApi - @RequiresPermission(android.Manifest.permission.POWER_SAVER) public int getPowerSaveModeTrigger() { try { return mService.getPowerSaveModeTrigger(); diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java index c0b8202936491..508c73ec40c2d 100644 --- a/services/core/java/com/android/server/power/PowerManagerService.java +++ b/services/core/java/com/android/server/power/PowerManagerService.java @@ -5121,7 +5121,6 @@ public final class PowerManagerService extends SystemService @Override // Binder call public int getPowerSaveModeTrigger() { - mContext.enforceCallingOrSelfPermission(android.Manifest.permission.POWER_SAVER, null); final long ident = Binder.clearCallingIdentity(); try { return Settings.Global.getInt(mContext.getContentResolver(),