diff --git a/apex/jobscheduler/framework/java/android/os/PowerWhitelistManager.java b/apex/jobscheduler/framework/java/android/os/PowerWhitelistManager.java index 4b4fb9623ba09..0585825cc98b1 100644 --- a/apex/jobscheduler/framework/java/android/os/PowerWhitelistManager.java +++ b/apex/jobscheduler/framework/java/android/os/PowerWhitelistManager.java @@ -24,6 +24,8 @@ import android.annotation.SystemService; import android.annotation.TestApi; import android.content.Context; +import libcore.util.EmptyArray; + import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.Collections; @@ -99,6 +101,28 @@ public class PowerWhitelistManager { } } + /** + * Get a list of app IDs of app that are whitelisted. 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 + */ + @NonNull + public int[] getWhitelistedAppIds(boolean includingIdle) { + try { + if (includingIdle) { + return mService.getAppIdWhitelist(); + } else { + return mService.getAppIdWhitelistExceptIdle(); + } + } catch (RemoteException e) { + e.rethrowFromSystemServer(); + return EmptyArray.INT; + } + } + /** * Add an app to the temporary whitelist for a short amount of time. * diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java index b6933623c559c..0b1c91f4e2f55 100644 --- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java @@ -171,7 +171,6 @@ import android.os.Environment; import android.os.Handler; import android.os.HandlerExecutor; import android.os.HandlerThread; -import android.os.IDeviceIdleController; import android.os.INetworkManagementService; import android.os.Message; import android.os.MessageQueue.IdleHandler; @@ -180,11 +179,11 @@ import android.os.PowerManager; import android.os.PowerManager.ServiceType; import android.os.PowerManagerInternal; import android.os.PowerSaveState; +import android.os.PowerWhitelistManager; import android.os.Process; import android.os.RemoteCallbackList; import android.os.RemoteException; import android.os.ResultReceiver; -import android.os.ServiceManager; import android.os.ShellCallback; import android.os.SystemClock; import android.os.SystemProperties; @@ -411,7 +410,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { private IConnectivityManager mConnManager; private PowerManagerInternal mPowerManagerInternal; - private IDeviceIdleController mDeviceIdleController; + private PowerWhitelistManager mPowerWhitelistManager; /** Current cached value of the current Battery Saver mode's setting for restrict background. */ @GuardedBy("mUidRulesFirstLock") @@ -618,8 +617,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { mContext = Objects.requireNonNull(context, "missing context"); mActivityManager = Objects.requireNonNull(activityManager, "missing activityManager"); mNetworkManager = Objects.requireNonNull(networkManagement, "missing networkManagement"); - mDeviceIdleController = IDeviceIdleController.Stub.asInterface(ServiceManager.getService( - Context.DEVICE_IDLE_CONTROLLER)); + mPowerWhitelistManager = mContext.getSystemService(PowerWhitelistManager.class); mClock = Objects.requireNonNull(clock, "missing Clock"); mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE); mCarrierConfigManager = mContext.getSystemService(CarrierConfigManager.class); @@ -651,23 +649,17 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { } @GuardedBy("mUidRulesFirstLock") - void updatePowerSaveWhitelistUL() { - try { - int[] whitelist = mDeviceIdleController.getAppIdWhitelistExceptIdle(); - mPowerSaveWhitelistExceptIdleAppIds.clear(); - if (whitelist != null) { - for (int uid : whitelist) { - mPowerSaveWhitelistExceptIdleAppIds.put(uid, true); - } - } - whitelist = mDeviceIdleController.getAppIdWhitelist(); - mPowerSaveWhitelistAppIds.clear(); - if (whitelist != null) { - for (int uid : whitelist) { - mPowerSaveWhitelistAppIds.put(uid, true); - } - } - } catch (RemoteException e) { + private void updatePowerSaveWhitelistUL() { + int[] whitelist = mPowerWhitelistManager.getWhitelistedAppIds(/* includingIdle */ false); + mPowerSaveWhitelistExceptIdleAppIds.clear(); + for (int uid : whitelist) { + mPowerSaveWhitelistExceptIdleAppIds.put(uid, true); + } + + whitelist = mPowerWhitelistManager.getWhitelistedAppIds(/* includingIdle */ true); + mPowerSaveWhitelistAppIds.clear(); + for (int uid : whitelist) { + mPowerSaveWhitelistAppIds.put(uid, true); } }