diff --git a/apex/jobscheduler/framework/java/android/os/DeviceIdleManager.java b/apex/jobscheduler/framework/java/android/os/DeviceIdleManager.java index 4c443349ea584..def60c8b78a11 100644 --- a/apex/jobscheduler/framework/java/android/os/DeviceIdleManager.java +++ b/apex/jobscheduler/framework/java/android/os/DeviceIdleManager.java @@ -70,17 +70,4 @@ public class DeviceIdleManager { return new String[0]; } } - - /** - * Return whether a given package is in the power-save whitelist or not. - * @hide - */ - public boolean isApplicationWhitelisted(@NonNull String packageName) { - try { - return mService.isPowerSaveWhitelistApp(packageName); - } catch (RemoteException e) { - e.rethrowFromSystemServer(); - return false; - } - } } diff --git a/apex/jobscheduler/framework/java/android/os/PowerWhitelistManager.java b/apex/jobscheduler/framework/java/android/os/PowerWhitelistManager.java index 0585825cc98b1..0ed05658fa4ba 100644 --- a/apex/jobscheduler/framework/java/android/os/PowerWhitelistManager.java +++ b/apex/jobscheduler/framework/java/android/os/PowerWhitelistManager.java @@ -123,6 +123,26 @@ public class PowerWhitelistManager { } } + /** + * Returns true if the app is whitelisted from power save restrictions. This does not include + * temporarily whitelisted apps. + * + * @param includingIdle Set to true if the app should be whitelisted from device + * idle as well as other power save restrictions + * @hide + */ + public boolean isWhitelisted(@NonNull String packageName, boolean includingIdle) { + try { + if (includingIdle) { + return mService.isPowerSaveWhitelistApp(packageName); + } else { + return mService.isPowerSaveWhitelistExceptIdleApp(packageName); + } + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + /** * Add an app to the temporary whitelist for a short amount of time. * diff --git a/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java b/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java index 5992253efda38..7f3ad6b3423e4 100644 --- a/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java +++ b/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java @@ -79,10 +79,10 @@ import android.os.BatteryStats; import android.os.Build; import android.os.Environment; import android.os.Handler; -import android.os.IDeviceIdleController; import android.os.Looper; import android.os.Message; import android.os.PowerManager; +import android.os.PowerWhitelistManager; import android.os.Process; import android.os.RemoteException; import android.os.ServiceManager; @@ -1009,7 +1009,7 @@ public class AppStandbyController implements AppStandbyInternal { // We allow all whitelisted apps, including those that don't want to be whitelisted // for idle mode, because app idle (aka app standby) is really not as big an issue // for controlling who participates vs. doze mode. - if (mInjector.isPowerSaveWhitelistExceptIdleApp(packageName)) { + if (mInjector.isNonIdleWhitelisted(packageName)) { return true; } } catch (RemoteException re) { @@ -1636,12 +1636,12 @@ public class AppStandbyController implements AppStandbyInternal { private final Context mContext; private final Looper mLooper; - private IDeviceIdleController mDeviceIdleController; private IBatteryStats mBatteryStats; private BatteryManager mBatteryManager; private PackageManagerInternal mPackageManagerInternal; private DisplayManager mDisplayManager; private PowerManager mPowerManager; + private PowerWhitelistManager mPowerWhitelistManager; private CrossProfileAppsInternal mCrossProfileAppsInternal; int mBootPhase; /** @@ -1665,8 +1665,7 @@ public class AppStandbyController implements AppStandbyInternal { void onBootPhase(int phase) { if (phase == PHASE_SYSTEM_SERVICES_READY) { - mDeviceIdleController = IDeviceIdleController.Stub.asInterface( - ServiceManager.getService(Context.DEVICE_IDLE_CONTROLLER)); + mPowerWhitelistManager = mContext.getSystemService(PowerWhitelistManager.class); mBatteryStats = IBatteryStats.Stub.asInterface( ServiceManager.getService(BatteryStats.SERVICE_NAME)); mPackageManagerInternal = LocalServices.getService(PackageManagerInternal.class); @@ -1717,8 +1716,8 @@ public class AppStandbyController implements AppStandbyInternal { return mBatteryManager.isCharging(); } - boolean isPowerSaveWhitelistExceptIdleApp(String packageName) throws RemoteException { - return mDeviceIdleController.isPowerSaveWhitelistExceptIdleApp(packageName); + boolean isNonIdleWhitelisted(String packageName) throws RemoteException { + return mPowerWhitelistManager.isWhitelisted(packageName, false); } File getDataSystemDirectory() { diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java index 199b5d55bb39f..40ff5ca4cb0e4 100644 --- a/core/java/android/os/PowerManager.java +++ b/core/java/android/os/PowerManager.java @@ -922,7 +922,7 @@ public final class PowerManager { final IThermalService mThermalService; /** We lazily initialize it.*/ - private DeviceIdleManager mDeviceIdleManager; + private PowerWhitelistManager mPowerWhitelistManager; private final ArrayMap mListenerMap = new ArrayMap<>(); @@ -938,12 +938,12 @@ public final class PowerManager { mHandler = handler; } - private DeviceIdleManager getDeviceIdleManager() { - if (mDeviceIdleManager == null) { + private PowerWhitelistManager getPowerWhitelistManager() { + if (mPowerWhitelistManager == null) { // No need for synchronization; getSystemService() will return the same object anyway. - mDeviceIdleManager = mContext.getSystemService(DeviceIdleManager.class); + mPowerWhitelistManager = mContext.getSystemService(PowerWhitelistManager.class); } - return mDeviceIdleManager; + return mPowerWhitelistManager; } /** @@ -1786,7 +1786,7 @@ public final class PowerManager { * {@link android.provider.Settings#ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS}. */ public boolean isIgnoringBatteryOptimizations(String packageName) { - return getDeviceIdleManager().isApplicationWhitelisted(packageName); + return getPowerWhitelistManager().isWhitelisted(packageName, true); } /** diff --git a/services/tests/servicestests/src/com/android/server/usage/AppStandbyControllerTests.java b/services/tests/servicestests/src/com/android/server/usage/AppStandbyControllerTests.java index 23613e0fccc1e..387e62d7e2574 100644 --- a/services/tests/servicestests/src/com/android/server/usage/AppStandbyControllerTests.java +++ b/services/tests/servicestests/src/com/android/server/usage/AppStandbyControllerTests.java @@ -161,7 +161,7 @@ public class AppStandbyControllerTests { long mElapsedRealtime; boolean mIsAppIdleEnabled = true; boolean mIsCharging; - List mPowerSaveWhitelistExceptIdle = new ArrayList<>(); + List mNonIdleWhitelistApps = new ArrayList<>(); boolean mDisplayOn; DisplayManager.DisplayListener mDisplayListener; String mBoundWidgetPackage = PACKAGE_EXEMPTED_1; @@ -203,8 +203,8 @@ public class AppStandbyControllerTests { } @Override - boolean isPowerSaveWhitelistExceptIdleApp(String packageName) throws RemoteException { - return mPowerSaveWhitelistExceptIdle.contains(packageName); + boolean isNonIdleWhitelisted(String packageName) throws RemoteException { + return mNonIdleWhitelistApps.contains(packageName); } @Override