diff options
author | Dianne Hackborn <hackbod@google.com> | 2015-06-12 18:11:41 -0700 |
---|---|---|
committer | Dianne Hackborn <hackbod@google.com> | 2015-06-15 11:53:59 -0700 |
commit | 1958e5e7870579337f1d1d3e6c6fae096ba3abb9 (patch) | |
tree | fad208704fc337915aff86df8021895eb1910701 | |
parent | f63655e49fcccd922e8d5f61c67f58bd4a361211 (diff) | |
download | frameworks_base-1958e5e7870579337f1d1d3e6c6fae096ba3abb9.zip frameworks_base-1958e5e7870579337f1d1d3e6c6fae096ba3abb9.tar.gz frameworks_base-1958e5e7870579337f1d1d3e6c6fae096ba3abb9.tar.bz2 |
Fix issue #21813831: Need API for asking to be added to power whitelist
Add the API. Clean up a few related things.
Change-Id: I190adad1812f36f6095b98a1001fedb94874e8b5
-rw-r--r-- | api/current.txt | 1 | ||||
-rw-r--r-- | api/system-current.txt | 1 | ||||
-rw-r--r-- | core/java/android/content/Context.java | 8 | ||||
-rw-r--r-- | core/java/android/os/PowerManager.java | 21 | ||||
-rw-r--r-- | core/java/android/provider/Settings.java | 9 | ||||
-rw-r--r-- | services/core/java/com/android/server/DeviceIdleController.java | 4 | ||||
-rw-r--r-- | services/core/java/com/android/server/net/NetworkPolicyManagerService.java | 2 | ||||
-rw-r--r-- | services/usage/java/com/android/server/usage/UsageStatsService.java | 2 | ||||
-rw-r--r-- | tests/ActivityTests/src/com/google/android/test/activity/ActivityTestMain.java | 22 |
9 files changed, 58 insertions, 12 deletions
diff --git a/api/current.txt b/api/current.txt index 72b5ca4..4b30051 100644 --- a/api/current.txt +++ b/api/current.txt @@ -23419,6 +23419,7 @@ package android.os { public final class PowerManager { method public boolean isDeviceIdleMode(); + method public boolean isIgnoringBatteryOptimizations(java.lang.String); method public boolean isInteractive(); method public boolean isPowerSaveMode(); method public deprecated boolean isScreenOn(); diff --git a/api/system-current.txt b/api/system-current.txt index 6ef78d0..582e146 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -25341,6 +25341,7 @@ package android.os { public final class PowerManager { method public boolean isDeviceIdleMode(); + method public boolean isIgnoringBatteryOptimizations(java.lang.String); method public boolean isInteractive(); method public boolean isPowerSaveMode(); method public boolean isScreenBrightnessBoosted(); diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java index 970623a..83ce087 100644 --- a/core/java/android/content/Context.java +++ b/core/java/android/content/Context.java @@ -2248,6 +2248,7 @@ public abstract class Context { //@hide: VOICE_INTERACTION_MANAGER_SERVICE, //@hide: BACKUP_SERVICE, DROPBOX_SERVICE, + //@hide: DEVICE_IDLE_CONTROLLER, DEVICE_POLICY_SERVICE, UI_MODE_SERVICE, DOWNLOAD_SERVICE, @@ -2874,6 +2875,13 @@ public abstract class Context { public static final String DROPBOX_SERVICE = "dropbox"; /** + * System service name for the DeviceIdleController. There is no Java API for this. + * @see #getSystemService + * @hide + */ + public static final String DEVICE_IDLE_CONTROLLER = "deviceidle"; + + /** * Use with {@link #getSystemService} to retrieve a * {@link android.app.admin.DevicePolicyManager} for working with global * device policy management. diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java index 7a1aa1e..6ef1cd0 100644 --- a/core/java/android/os/PowerManager.java +++ b/core/java/android/os/PowerManager.java @@ -392,6 +392,8 @@ public final class PowerManager { final IPowerManager mService; final Handler mHandler; + IDeviceIdleController mIDeviceIdleController; + /** * {@hide} */ @@ -892,6 +894,25 @@ public final class PowerManager { } /** + * Return whether the given application package name is on the device's power whitelist. + * Apps can be placed on the whitelist through the settings UI invoked by + * {@link android.provider.Settings#ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS}. + */ + public boolean isIgnoringBatteryOptimizations(String packageName) { + synchronized (this) { + if (mIDeviceIdleController == null) { + mIDeviceIdleController = IDeviceIdleController.Stub.asInterface( + ServiceManager.getService(Context.DEVICE_IDLE_CONTROLLER)); + } + } + try { + return mIDeviceIdleController.isPowerSaveWhitelistApp(packageName); + } catch (RemoteException e) { + return false; + } + } + + /** * Turn off the device. * * @param confirm If true, shows a shutdown confirmation dialog. diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index e335f6d..dfd72c2 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -579,13 +579,14 @@ public final class Settings { /** * Activity Action: Show screen for controlling which apps can ignore battery optimizations. * <p> - * In some cases, a matching Activity may not exist, so ensure you - * safeguard against this. - * <p> - * Input: The Intent's data URI specifies the application package name + * Input: Optionally, the Intent's data URI specifies the application package name * to be shown, with the "package" scheme. That is "package:com.my.app". * <p> * Output: Nothing. + * <p> + * You can use {@link android.os.PowerManager#isIgnoringBatteryOptimizations + * PowerManager.isIgnoringBatteryOptimizations()} to determine if an application is + * already ignoring optimizations. */ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) public static final String ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS = diff --git a/services/core/java/com/android/server/DeviceIdleController.java b/services/core/java/com/android/server/DeviceIdleController.java index ad34b37..6eba3f6 100644 --- a/services/core/java/com/android/server/DeviceIdleController.java +++ b/services/core/java/com/android/server/DeviceIdleController.java @@ -95,8 +95,6 @@ public class DeviceIdleController extends SystemService private static final boolean COMPRESS_TIME = false; - public static final String SERVICE_NAME = "deviceidle"; - private static final String ACTION_STEP_IDLE_STATE = "com.android.server.device_idle.STEP_IDLE_STATE"; @@ -636,7 +634,7 @@ public class DeviceIdleController extends SystemService mInactiveTimeout = mConstants.INACTIVE_TIMEOUT; } - publishBinderService(SERVICE_NAME, new BinderService()); + publishBinderService(Context.DEVICE_IDLE_CONTROLLER, new BinderService()); } @Override diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java index 81ef4d5..e009455 100644 --- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java @@ -338,7 +338,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub mNetworkStats = checkNotNull(networkStats, "missing networkStats"); mNetworkManager = checkNotNull(networkManagement, "missing networkManagement"); mDeviceIdleController = IDeviceIdleController.Stub.asInterface(ServiceManager.getService( - DeviceIdleController.SERVICE_NAME)); + Context.DEVICE_IDLE_CONTROLLER)); mTime = checkNotNull(time, "missing TrustedTime"); mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE); diff --git a/services/usage/java/com/android/server/usage/UsageStatsService.java b/services/usage/java/com/android/server/usage/UsageStatsService.java index 837570b..75b8278 100644 --- a/services/usage/java/com/android/server/usage/UsageStatsService.java +++ b/services/usage/java/com/android/server/usage/UsageStatsService.java @@ -196,7 +196,7 @@ public class UsageStatsService extends SystemService implements mAppWidgetManager = getContext().getSystemService(AppWidgetManager.class); mDeviceIdleController = IDeviceIdleController.Stub.asInterface( - ServiceManager.getService(DeviceIdleController.SERVICE_NAME)); + ServiceManager.getService(Context.DEVICE_IDLE_CONTROLLER)); mBatteryStats = IBatteryStats.Stub.asInterface( ServiceManager.getService(BatteryStats.SERVICE_NAME)); mDisplayManager = (DisplayManager) getContext().getSystemService( diff --git a/tests/ActivityTests/src/com/google/android/test/activity/ActivityTestMain.java b/tests/ActivityTests/src/com/google/android/test/activity/ActivityTestMain.java index 94cbabf..2f0bf39 100644 --- a/tests/ActivityTests/src/com/google/android/test/activity/ActivityTestMain.java +++ b/tests/ActivityTests/src/com/google/android/test/activity/ActivityTestMain.java @@ -32,15 +32,18 @@ import android.content.ContentProviderClient; import android.content.Intent; import android.content.ServiceConnection; import android.graphics.BitmapFactory; +import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; import android.os.Message; +import android.os.PowerManager; import android.os.RemoteException; import android.os.SystemClock; import android.os.UserHandle; import android.os.UserManager; import android.graphics.Bitmap; +import android.provider.Settings; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; @@ -60,6 +63,7 @@ public class ActivityTestMain extends Activity { static final String KEY_CONFIGURATION = "configuration"; ActivityManager mAm; + PowerManager mPower; AlarmManager mAlarm; Configuration mOverrideConfig; int mSecondUser; @@ -158,8 +162,9 @@ public class ActivityTestMain extends Activity { Log.i(TAG, "Referrer: " + getReferrer()); - mAm = (ActivityManager)getSystemService(ACTIVITY_SERVICE); - mAlarm = (AlarmManager)getSystemService(ALARM_SERVICE); + mAm = getSystemService(ActivityManager.class); + mPower = getSystemService(PowerManager.class); + mAlarm = getSystemService(AlarmManager.class); if (savedInstanceState != null) { mOverrideConfig = savedInstanceState.getParcelable(KEY_CONFIGURATION); if (mOverrideConfig != null) { @@ -445,7 +450,7 @@ public class ActivityTestMain extends Activity { new MenuItem.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { Intent intent = new Intent(Intent.ACTION_MAIN); - intent.putExtra("gulp", new int[1024*1024]); + intent.putExtra("gulp", new int[1024 * 1024]); startActivity(intent); return true; } @@ -457,6 +462,17 @@ public class ActivityTestMain extends Activity { return true; } }); + menu.add("Ignore battery optimizations").setOnMenuItemClickListener( + new MenuItem.OnMenuItemClickListener() { + @Override public boolean onMenuItemClick(MenuItem item) { + Intent intent = new Intent(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS); + if (!mPower.isIgnoringBatteryOptimizations(getPackageName())) { + intent.setData(Uri.fromParts("package", getPackageName(), null)); + } + startActivity(intent); + return true; + } + }); return true; } |