Loading services/core/java/com/android/server/am/AppBatteryTracker.java +1 −1 Original line number Diff line number Diff line Loading @@ -2014,7 +2014,7 @@ final class AppBatteryTracker extends BaseAppStateTracker<AppBatteryPolicy> if (!mBgCurrentDrainHighThresholdByBgLocation) { return false; } if (mTracker.mContext.checkPermission(ACCESS_BACKGROUND_LOCATION, if (mTracker.mInjector.checkPermission(ACCESS_BACKGROUND_LOCATION, Process.INVALID_PID, uid) == PERMISSION_GRANTED) { return true; } Loading services/core/java/com/android/server/am/AppPermissionTracker.java +1 −1 Original line number Diff line number Diff line Loading @@ -293,7 +293,7 @@ final class AppPermissionTracker extends BaseAppStateTracker<AppPermissionPolicy mPermissionGranted = true; return; } mPermissionGranted = mContext.checkPermission(mPermission, Process.INVALID_PID, mUid) mPermissionGranted = mInjector.checkPermission(mPermission, Process.INVALID_PID, mUid) == PERMISSION_GRANTED; } Loading services/core/java/com/android/server/am/AppRestrictionController.java +8 −2 Original line number Diff line number Diff line Loading @@ -235,6 +235,7 @@ public final class AppRestrictionController { private final HandlerThread mBgHandlerThread; private final BgHandler mBgHandler; private final HandlerExecutor mBgExecutor; private final HandlerExecutor mExecutor; // No lock is needed, as it's immutable after initialization in constructor. private final ArrayList<BaseAppStateTracker> mAppStateTrackers = new ArrayList<>(); Loading Loading @@ -1489,6 +1490,7 @@ public final class AppRestrictionController { mConstantsObserver = new ConstantsObserver(mBgHandler, mContext); mNotificationHelper = new NotificationHelper(this); injector.initAppStateTrackers(this); mExecutor = new HandlerExecutor(injector.getDefaultHandler()); } void onSystemReady() { Loading @@ -1506,7 +1508,7 @@ public final class AppRestrictionController { mInjector.getAppStateTracker().addBackgroundRestrictedAppListener( mBackgroundRestrictionListener); mInjector.getAppStandbyInternal().addListener(mAppIdleStateChangeListener); mInjector.getRoleManager().addOnRoleHoldersChangedListenerAsUser(mBgExecutor, mInjector.getRoleManager().addOnRoleHoldersChangedListenerAsUser(mExecutor, mRoleHolderChangedListener, UserHandle.ALL); mInjector.scheduleInitTrackers(mBgHandler, () -> { for (int i = 0, size = mAppStateTrackers.size(); i < size; i++) { Loading Loading @@ -2896,7 +2898,7 @@ public final class AppRestrictionController { for (int i = 0; i < numPhones; i++) { final PhoneCarrierPrivilegesCallback callback = new PhoneCarrierPrivilegesCallback(i); callbacks.add(callback); telephonyManager.registerCarrierPrivilegesCallback(i, mBgExecutor, callback); telephonyManager.registerCarrierPrivilegesCallback(i, mExecutor, callback); } mCarrierPrivilegesCallbacks = callbacks; } Loading Loading @@ -3288,6 +3290,10 @@ public final class AppRestrictionController { return System.currentTimeMillis(); } Handler getDefaultHandler() { return mAppRestrictionController.mActivityManagerService.mHandler; } boolean isTest() { return false; } Loading services/core/java/com/android/server/am/BaseAppStateTracker.java +7 −1 Original line number Diff line number Diff line Loading @@ -75,11 +75,11 @@ public abstract class BaseAppStateTracker<T extends BaseAppStatePolicy> { static final int STATE_TYPE_INDEX_PERMISSION = 4; protected final AppRestrictionController mAppRestrictionController; protected final Injector<T> mInjector; protected final Context mContext; protected final Handler mBgHandler; protected final Object mLock; protected final ArrayList<StateListener> mStateListeners = new ArrayList<>(); final Injector<T> mInjector; interface StateListener { void onStateChange(int uid, String packageName, boolean start, long now, int stateType); Loading Loading @@ -292,6 +292,7 @@ public abstract class BaseAppStateTracker<T extends BaseAppStatePolicy> { RoleManager mRoleManager; NotificationManagerInternal mNotificationManagerInternal; IAppOpsService mIAppOpsService; Context mContext; void setPolicy(T policy) { mAppStatePolicy = policy; Loading @@ -316,6 +317,7 @@ public abstract class BaseAppStateTracker<T extends BaseAppStatePolicy> { NotificationManagerInternal.class); mIAppOpsService = IAppOpsService.Stub.asInterface( ServiceManager.getService(Context.APP_OPS_SERVICE)); mContext = context; getPolicy().onSystemReady(); } Loading Loading @@ -390,5 +392,9 @@ public abstract class BaseAppStateTracker<T extends BaseAppStatePolicy> { IAppOpsService getIAppOpsService() { return mIAppOpsService; } int checkPermission(String perm, int pid, int uid) { return mContext.checkPermission(perm, pid, uid); } } } services/tests/mockingservicestests/src/com/android/server/am/BackgroundRestrictionTest.java +22 −4 Original line number Diff line number Diff line Loading @@ -126,6 +126,7 @@ import android.os.BatteryManagerInternal; import android.os.BatteryStatsInternal; import android.os.BatteryUsageStats; import android.os.Handler; import android.os.Looper; import android.os.MessageQueue; import android.os.Process; import android.os.RemoteException; Loading Loading @@ -321,6 +322,7 @@ public final class BackgroundRestrictionTest { private BindServiceEventListener mBindServiceEventListener; private Context mContext = getInstrumentation().getTargetContext(); private Handler mDefaultHandler = new Handler(Looper.getMainLooper()); private TestBgRestrictionInjector mInjector; private AppRestrictionController mBgRestrictionController; private AppBatteryTracker mAppBatteryTracker; Loading @@ -346,10 +348,6 @@ public final class BackgroundRestrictionTest { mActivityManagerService.mConstants = mActivityManagerConstants; mPhoneCarrierPrivileges = new PhoneCarrierPrivileges( mInjector.getTelephonyManager(), MOCK_PRIVILEGED_PACKAGES.length); for (int i = 0; i < MOCK_PRIVILEGED_PACKAGES.length; i++) { mPhoneCarrierPrivileges.addNewPrivilegePackages(i, MOCK_PRIVILEGED_PACKAGES[i], MOCK_PRIVILEGED_UIDS[i]); } doReturn(PROCESS_STATE_FOREGROUND_SERVICE).when(mActivityManagerInternal) .getUidProcessState(anyInt()); Loading Loading @@ -3048,6 +3046,11 @@ public final class BackgroundRestrictionTest { @Test public void testCarrierPrivilegedAppListener() throws Exception { for (int i = 0; i < MOCK_PRIVILEGED_PACKAGES.length; i++) { mPhoneCarrierPrivileges.addNewPrivilegePackages(i, MOCK_PRIVILEGED_PACKAGES[i], MOCK_PRIVILEGED_UIDS[i]); } final long shortMs = 1_000L; for (int i = 0; i < MOCK_PRIVILEGED_PACKAGES.length; i++) { verifyPotentialSystemExemptionReason(REASON_CARRIER_PRIVILEGED_APP, Loading Loading @@ -3355,6 +3358,11 @@ public final class BackgroundRestrictionTest { return mCurrentTimeMillis; } @Override Handler getDefaultHandler() { return mDefaultHandler; } @Override boolean isTest() { return true; Loading Loading @@ -3445,6 +3453,16 @@ public final class BackgroundRestrictionTest { IAppOpsService getIAppOpsService() { return BackgroundRestrictionTest.this.mIAppOpsService; } @Override int checkPermission(String perm, int pid, int uid) { try { return BackgroundRestrictionTest.this.mIActivityManager.checkPermission( perm, pid, uid); } catch (RemoteException e) { return PERMISSION_DENIED; } } } private class TestAppBatteryTrackerInjector extends TestBaseTrackerInjector<AppBatteryPolicy> { Loading Loading
services/core/java/com/android/server/am/AppBatteryTracker.java +1 −1 Original line number Diff line number Diff line Loading @@ -2014,7 +2014,7 @@ final class AppBatteryTracker extends BaseAppStateTracker<AppBatteryPolicy> if (!mBgCurrentDrainHighThresholdByBgLocation) { return false; } if (mTracker.mContext.checkPermission(ACCESS_BACKGROUND_LOCATION, if (mTracker.mInjector.checkPermission(ACCESS_BACKGROUND_LOCATION, Process.INVALID_PID, uid) == PERMISSION_GRANTED) { return true; } Loading
services/core/java/com/android/server/am/AppPermissionTracker.java +1 −1 Original line number Diff line number Diff line Loading @@ -293,7 +293,7 @@ final class AppPermissionTracker extends BaseAppStateTracker<AppPermissionPolicy mPermissionGranted = true; return; } mPermissionGranted = mContext.checkPermission(mPermission, Process.INVALID_PID, mUid) mPermissionGranted = mInjector.checkPermission(mPermission, Process.INVALID_PID, mUid) == PERMISSION_GRANTED; } Loading
services/core/java/com/android/server/am/AppRestrictionController.java +8 −2 Original line number Diff line number Diff line Loading @@ -235,6 +235,7 @@ public final class AppRestrictionController { private final HandlerThread mBgHandlerThread; private final BgHandler mBgHandler; private final HandlerExecutor mBgExecutor; private final HandlerExecutor mExecutor; // No lock is needed, as it's immutable after initialization in constructor. private final ArrayList<BaseAppStateTracker> mAppStateTrackers = new ArrayList<>(); Loading Loading @@ -1489,6 +1490,7 @@ public final class AppRestrictionController { mConstantsObserver = new ConstantsObserver(mBgHandler, mContext); mNotificationHelper = new NotificationHelper(this); injector.initAppStateTrackers(this); mExecutor = new HandlerExecutor(injector.getDefaultHandler()); } void onSystemReady() { Loading @@ -1506,7 +1508,7 @@ public final class AppRestrictionController { mInjector.getAppStateTracker().addBackgroundRestrictedAppListener( mBackgroundRestrictionListener); mInjector.getAppStandbyInternal().addListener(mAppIdleStateChangeListener); mInjector.getRoleManager().addOnRoleHoldersChangedListenerAsUser(mBgExecutor, mInjector.getRoleManager().addOnRoleHoldersChangedListenerAsUser(mExecutor, mRoleHolderChangedListener, UserHandle.ALL); mInjector.scheduleInitTrackers(mBgHandler, () -> { for (int i = 0, size = mAppStateTrackers.size(); i < size; i++) { Loading Loading @@ -2896,7 +2898,7 @@ public final class AppRestrictionController { for (int i = 0; i < numPhones; i++) { final PhoneCarrierPrivilegesCallback callback = new PhoneCarrierPrivilegesCallback(i); callbacks.add(callback); telephonyManager.registerCarrierPrivilegesCallback(i, mBgExecutor, callback); telephonyManager.registerCarrierPrivilegesCallback(i, mExecutor, callback); } mCarrierPrivilegesCallbacks = callbacks; } Loading Loading @@ -3288,6 +3290,10 @@ public final class AppRestrictionController { return System.currentTimeMillis(); } Handler getDefaultHandler() { return mAppRestrictionController.mActivityManagerService.mHandler; } boolean isTest() { return false; } Loading
services/core/java/com/android/server/am/BaseAppStateTracker.java +7 −1 Original line number Diff line number Diff line Loading @@ -75,11 +75,11 @@ public abstract class BaseAppStateTracker<T extends BaseAppStatePolicy> { static final int STATE_TYPE_INDEX_PERMISSION = 4; protected final AppRestrictionController mAppRestrictionController; protected final Injector<T> mInjector; protected final Context mContext; protected final Handler mBgHandler; protected final Object mLock; protected final ArrayList<StateListener> mStateListeners = new ArrayList<>(); final Injector<T> mInjector; interface StateListener { void onStateChange(int uid, String packageName, boolean start, long now, int stateType); Loading Loading @@ -292,6 +292,7 @@ public abstract class BaseAppStateTracker<T extends BaseAppStatePolicy> { RoleManager mRoleManager; NotificationManagerInternal mNotificationManagerInternal; IAppOpsService mIAppOpsService; Context mContext; void setPolicy(T policy) { mAppStatePolicy = policy; Loading @@ -316,6 +317,7 @@ public abstract class BaseAppStateTracker<T extends BaseAppStatePolicy> { NotificationManagerInternal.class); mIAppOpsService = IAppOpsService.Stub.asInterface( ServiceManager.getService(Context.APP_OPS_SERVICE)); mContext = context; getPolicy().onSystemReady(); } Loading Loading @@ -390,5 +392,9 @@ public abstract class BaseAppStateTracker<T extends BaseAppStatePolicy> { IAppOpsService getIAppOpsService() { return mIAppOpsService; } int checkPermission(String perm, int pid, int uid) { return mContext.checkPermission(perm, pid, uid); } } }
services/tests/mockingservicestests/src/com/android/server/am/BackgroundRestrictionTest.java +22 −4 Original line number Diff line number Diff line Loading @@ -126,6 +126,7 @@ import android.os.BatteryManagerInternal; import android.os.BatteryStatsInternal; import android.os.BatteryUsageStats; import android.os.Handler; import android.os.Looper; import android.os.MessageQueue; import android.os.Process; import android.os.RemoteException; Loading Loading @@ -321,6 +322,7 @@ public final class BackgroundRestrictionTest { private BindServiceEventListener mBindServiceEventListener; private Context mContext = getInstrumentation().getTargetContext(); private Handler mDefaultHandler = new Handler(Looper.getMainLooper()); private TestBgRestrictionInjector mInjector; private AppRestrictionController mBgRestrictionController; private AppBatteryTracker mAppBatteryTracker; Loading @@ -346,10 +348,6 @@ public final class BackgroundRestrictionTest { mActivityManagerService.mConstants = mActivityManagerConstants; mPhoneCarrierPrivileges = new PhoneCarrierPrivileges( mInjector.getTelephonyManager(), MOCK_PRIVILEGED_PACKAGES.length); for (int i = 0; i < MOCK_PRIVILEGED_PACKAGES.length; i++) { mPhoneCarrierPrivileges.addNewPrivilegePackages(i, MOCK_PRIVILEGED_PACKAGES[i], MOCK_PRIVILEGED_UIDS[i]); } doReturn(PROCESS_STATE_FOREGROUND_SERVICE).when(mActivityManagerInternal) .getUidProcessState(anyInt()); Loading Loading @@ -3048,6 +3046,11 @@ public final class BackgroundRestrictionTest { @Test public void testCarrierPrivilegedAppListener() throws Exception { for (int i = 0; i < MOCK_PRIVILEGED_PACKAGES.length; i++) { mPhoneCarrierPrivileges.addNewPrivilegePackages(i, MOCK_PRIVILEGED_PACKAGES[i], MOCK_PRIVILEGED_UIDS[i]); } final long shortMs = 1_000L; for (int i = 0; i < MOCK_PRIVILEGED_PACKAGES.length; i++) { verifyPotentialSystemExemptionReason(REASON_CARRIER_PRIVILEGED_APP, Loading Loading @@ -3355,6 +3358,11 @@ public final class BackgroundRestrictionTest { return mCurrentTimeMillis; } @Override Handler getDefaultHandler() { return mDefaultHandler; } @Override boolean isTest() { return true; Loading Loading @@ -3445,6 +3453,16 @@ public final class BackgroundRestrictionTest { IAppOpsService getIAppOpsService() { return BackgroundRestrictionTest.this.mIAppOpsService; } @Override int checkPermission(String perm, int pid, int uid) { try { return BackgroundRestrictionTest.this.mIActivityManager.checkPermission( perm, pid, uid); } catch (RemoteException e) { return PERMISSION_DENIED; } } } private class TestAppBatteryTrackerInjector extends TestBaseTrackerInjector<AppBatteryPolicy> { Loading