Introduce BATTERY_PREDICTION permission.
DEVICE_POWER is very powerful, so introduce the BATTERY_PREDICTION permission to allow privileged apps with the permission to provide the system with battery predictions. Bug: 139413884 Test: atest android.os.cts.PowerManagerTest Test: atest android.permission.cts.PowerManagerServicePermissionTest Test: atest CtsPermission2TestCases Test: atest SettingsProviderTest Change-Id: Ib52f20b5145785a5fc363601757ad9c57f40e254
This commit is contained in:
@@ -27,6 +27,7 @@ package android {
|
||||
field public static final String AMBIENT_WALLPAPER = "android.permission.AMBIENT_WALLPAPER";
|
||||
field public static final String APPROVE_INCIDENT_REPORTS = "android.permission.APPROVE_INCIDENT_REPORTS";
|
||||
field public static final String BACKUP = "android.permission.BACKUP";
|
||||
field public static final String BATTERY_PREDICTION = "android.permission.BATTERY_PREDICTION";
|
||||
field public static final String BIND_ATTENTION_SERVICE = "android.permission.BIND_ATTENTION_SERVICE";
|
||||
field public static final String BIND_AUGMENTED_AUTOFILL_SERVICE = "android.permission.BIND_AUGMENTED_AUTOFILL_SERVICE";
|
||||
field public static final String BIND_CELL_BROADCAST_SERVICE = "android.permission.BIND_CELL_BROADCAST_SERVICE";
|
||||
@@ -8529,7 +8530,7 @@ package android.os {
|
||||
method @RequiresPermission(android.Manifest.permission.READ_DREAM_STATE) public boolean isAmbientDisplaySuppressedForToken(@NonNull String);
|
||||
method @RequiresPermission(anyOf={android.Manifest.permission.DEVICE_POWER, android.Manifest.permission.POWER_SAVER}) public boolean setAdaptivePowerSaveEnabled(boolean);
|
||||
method @RequiresPermission(anyOf={android.Manifest.permission.DEVICE_POWER, android.Manifest.permission.POWER_SAVER}) public boolean setAdaptivePowerSavePolicy(@NonNull android.os.BatterySaverPolicyConfig);
|
||||
method @RequiresPermission(android.Manifest.permission.DEVICE_POWER) public void setBatteryDischargePrediction(@NonNull java.time.Duration, boolean);
|
||||
method @RequiresPermission(anyOf={android.Manifest.permission.BATTERY_PREDICTION, android.Manifest.permission.DEVICE_POWER}) public void setBatteryDischargePrediction(@NonNull java.time.Duration, boolean);
|
||||
method @RequiresPermission(android.Manifest.permission.POWER_SAVER) public boolean setDynamicPowerSaveHint(boolean, int);
|
||||
method @RequiresPermission(anyOf={android.Manifest.permission.DEVICE_POWER, android.Manifest.permission.POWER_SAVER}) public boolean setFullPowerSavePolicy(@NonNull android.os.BatterySaverPolicyConfig);
|
||||
method @RequiresPermission(anyOf={android.Manifest.permission.DEVICE_POWER, android.Manifest.permission.POWER_SAVER}) public boolean setPowerSaveModeEnabled(boolean);
|
||||
|
||||
@@ -1898,7 +1898,8 @@ public final class PowerManager {
|
||||
* These estimates will be displayed on system UI surfaces in place of the system computed
|
||||
* value.
|
||||
*
|
||||
* Calling this requires the {@link android.Manifest.permission#DEVICE_POWER} permission.
|
||||
* Calling this requires either the {@link android.Manifest.permission#DEVICE_POWER} or the
|
||||
* {@link android.Manifest.permission#BATTERY_PREDICTION} permissions.
|
||||
*
|
||||
* @param timeRemaining The time remaining as a {@link Duration}.
|
||||
* @param isPersonalized true if personalized based on device usage history, false otherwise.
|
||||
@@ -1906,7 +1907,10 @@ public final class PowerManager {
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
@RequiresPermission(android.Manifest.permission.DEVICE_POWER)
|
||||
@RequiresPermission(anyOf = {
|
||||
android.Manifest.permission.BATTERY_PREDICTION,
|
||||
android.Manifest.permission.DEVICE_POWER
|
||||
})
|
||||
public void setBatteryDischargePrediction(@NonNull Duration timeRemaining,
|
||||
boolean isPersonalized) {
|
||||
if (timeRemaining == null) {
|
||||
|
||||
@@ -4372,6 +4372,12 @@
|
||||
<permission android:name="android.permission.POWER_SAVER"
|
||||
android:protectionLevel="signature|privileged" />
|
||||
|
||||
<!-- Allows providing the system with battery predictions.
|
||||
Superseded by DEVICE_POWER permission. @hide @SystemApi
|
||||
-->
|
||||
<permission android:name="android.permission.BATTERY_PREDICTION"
|
||||
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"
|
||||
|
||||
@@ -316,6 +316,8 @@ applications that come with the platform
|
||||
<permission name="android.permission.MODIFY_DAY_NIGHT_MODE"/>
|
||||
<permission name="android.permission.ACCESS_LOWPAN_STATE"/>
|
||||
<permission name="android.permission.BACKUP"/>
|
||||
<!-- Needed for test only -->
|
||||
<permission name="android.permission.BATTERY_PREDICTION"/>
|
||||
<permission name="android.permission.BATTERY_STATS"/>
|
||||
<permission name="android.permission.BIND_APPWIDGET"/>
|
||||
<permission name="android.permission.CHANGE_APP_IDLE_STATE"/>
|
||||
|
||||
@@ -100,6 +100,7 @@
|
||||
<uses-permission android:name="android.permission.REBOOT" />
|
||||
<uses-permission android:name="android.permission.DEVICE_POWER" />
|
||||
<uses-permission android:name="android.permission.POWER_SAVER" />
|
||||
<uses-permission android:name="android.permission.BATTERY_PREDICTION" />
|
||||
<uses-permission android:name="android.permission.INSTALL_LOCATION_PROVIDER" />
|
||||
<uses-permission android:name="android.permission.BACKUP" />
|
||||
<uses-permission android:name="android.permission.FORCE_STOP_PACKAGES" />
|
||||
|
||||
@@ -5138,10 +5138,15 @@ public final class PowerManagerService extends SystemService
|
||||
// Get current time before acquiring the lock so that the calculated end time is as
|
||||
// accurate as possible.
|
||||
final long nowElapsed = SystemClock.elapsedRealtime();
|
||||
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null);
|
||||
if (mContext.checkCallingOrSelfPermission(
|
||||
android.Manifest.permission.BATTERY_PREDICTION)
|
||||
!= PackageManager.PERMISSION_GRANTED) {
|
||||
mContext.enforceCallingOrSelfPermission(
|
||||
android.Manifest.permission.DEVICE_POWER, "setBatteryDischargePrediction");
|
||||
}
|
||||
|
||||
final long timeRemainingMs = timeRemaining.getDuration().toMillis();
|
||||
// A non-positive number means the battery should be dead right now...
|
||||
// A non-positive number means the battery should be dead right now...
|
||||
Preconditions.checkArgumentPositive(timeRemainingMs,
|
||||
"Given time remaining is not positive: " + timeRemainingMs);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user