Loading services/core/java/com/android/server/power/PowerManagerService.java +8 −2 Original line number Diff line number Diff line Loading @@ -293,6 +293,7 @@ public final class PowerManagerService extends SystemService private final Clock mClock; private final Injector mInjector; private AppOpsManager mAppOpsManager; private LightsManager mLightsManager; private BatteryManagerInternal mBatteryManagerInternal; private DisplayManagerInternal mDisplayManagerInternal; Loading Loading @@ -990,6 +991,10 @@ public final class PowerManagerService extends SystemService LowPowerStandbyController createLowPowerStandbyController(Context context, Looper looper) { return new LowPowerStandbyController(context, looper, SystemClock::elapsedRealtime); } AppOpsManager createAppOpsManager(Context context) { return context.getSystemService(AppOpsManager.class); } } final Constants mConstants; Loading Loading @@ -1044,6 +1049,8 @@ public final class PowerManagerService extends SystemService mInattentiveSleepWarningOverlayController = mInjector.createInattentiveSleepWarningController(); mAppOpsManager = injector.createAppOpsManager(mContext); mPowerGroupWakefulnessChangeListener = new PowerGroupWakefulnessChangeListener(); // Save brightness values: Loading Loading @@ -1562,8 +1569,7 @@ public final class PowerManagerService extends SystemService } return true; } if (mContext.getSystemService(AppOpsManager.class).checkOpNoThrow( AppOpsManager.OP_TURN_SCREEN_ON, opUid, opPackageName) if (mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_TURN_SCREEN_ON, opUid, opPackageName) == AppOpsManager.MODE_ALLOWED) { if (DEBUG_SPEW) { Slog.d(TAG, "Allowing device wake-up for app with special access " + opPackageName); Loading services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java +33 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ package com.android.server.power; import static android.app.ActivityManager.PROCESS_STATE_BOUND_TOP; import static android.app.ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE; import static android.app.AppOpsManager.MODE_ALLOWED; import static android.app.AppOpsManager.MODE_ERRORED; import static android.os.PowerManagerInternal.WAKEFULNESS_ASLEEP; import static android.os.PowerManagerInternal.WAKEFULNESS_AWAKE; import static android.os.PowerManagerInternal.WAKEFULNESS_DOZING; Loading Loading @@ -46,6 +48,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.app.ActivityManagerInternal; import android.app.AppOpsManager; import android.attention.AttentionManagerInternal; import android.content.Context; import android.content.ContextWrapper; Loading Loading @@ -140,6 +143,7 @@ public class PowerManagerServiceTest { @Mock private WirelessChargerDetector mWirelessChargerDetectorMock; @Mock private AmbientDisplayConfiguration mAmbientDisplayConfigurationMock; @Mock private SystemPropertiesWrapper mSystemPropertiesMock; @Mock private AppOpsManager mAppOpsManagerMock; @Mock private InattentiveSleepWarningController mInattentiveSleepWarningControllerMock; Loading Loading @@ -297,6 +301,11 @@ public class PowerManagerServiceTest { return new LowPowerStandbyController(context, mTestLooper.getLooper(), SystemClock::elapsedRealtime); } @Override AppOpsManager createAppOpsManager(Context context) { return mAppOpsManagerMock; } }); return mService; } Loading Loading @@ -461,7 +470,7 @@ public class PowerManagerServiceTest { } @Test public void testWakefulnessAwake_AcquireCausesWakeup() { public void testWakefulnessAwake_AcquireCausesWakeup_turnScreenOnAllowed() { createService(); startSystem(); forceSleep(); Loading @@ -469,6 +478,8 @@ public class PowerManagerServiceTest { IBinder token = new Binder(); String tag = "acq_causes_wakeup"; String packageName = "pkg.name"; when(mAppOpsManagerMock.checkOpNoThrow(AppOpsManager.OP_TURN_SCREEN_ON, Binder.getCallingUid(), packageName)).thenReturn(MODE_ALLOWED); // First, ensure that a normal full wake lock does not cause a wakeup int flags = PowerManager.FULL_WAKE_LOCK; Loading @@ -492,6 +503,27 @@ public class PowerManagerServiceTest { mService.getBinderServiceInstance().releaseWakeLock(token, 0 /* flags */); } @Test public void testWakefulnessAwake_AcquireCausesWakeup_turnScreenOnDenied() { createService(); startSystem(); forceSleep(); IBinder token = new Binder(); String tag = "acq_causes_wakeup"; String packageName = "pkg.name"; when(mAppOpsManagerMock.checkOpNoThrow(AppOpsManager.OP_TURN_SCREEN_ON, Binder.getCallingUid(), packageName)).thenReturn(MODE_ERRORED); // Verify that flag has no effect when OP_TURN_SCREEN_ON is not allowed int flags = PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP; mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName, null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY, null); assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP); mService.getBinderServiceInstance().releaseWakeLock(token, 0 /* flags */); } @Test public void testWakefulnessAwake_IPowerManagerWakeUp() { createService(); Loading Loading
services/core/java/com/android/server/power/PowerManagerService.java +8 −2 Original line number Diff line number Diff line Loading @@ -293,6 +293,7 @@ public final class PowerManagerService extends SystemService private final Clock mClock; private final Injector mInjector; private AppOpsManager mAppOpsManager; private LightsManager mLightsManager; private BatteryManagerInternal mBatteryManagerInternal; private DisplayManagerInternal mDisplayManagerInternal; Loading Loading @@ -990,6 +991,10 @@ public final class PowerManagerService extends SystemService LowPowerStandbyController createLowPowerStandbyController(Context context, Looper looper) { return new LowPowerStandbyController(context, looper, SystemClock::elapsedRealtime); } AppOpsManager createAppOpsManager(Context context) { return context.getSystemService(AppOpsManager.class); } } final Constants mConstants; Loading Loading @@ -1044,6 +1049,8 @@ public final class PowerManagerService extends SystemService mInattentiveSleepWarningOverlayController = mInjector.createInattentiveSleepWarningController(); mAppOpsManager = injector.createAppOpsManager(mContext); mPowerGroupWakefulnessChangeListener = new PowerGroupWakefulnessChangeListener(); // Save brightness values: Loading Loading @@ -1562,8 +1569,7 @@ public final class PowerManagerService extends SystemService } return true; } if (mContext.getSystemService(AppOpsManager.class).checkOpNoThrow( AppOpsManager.OP_TURN_SCREEN_ON, opUid, opPackageName) if (mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_TURN_SCREEN_ON, opUid, opPackageName) == AppOpsManager.MODE_ALLOWED) { if (DEBUG_SPEW) { Slog.d(TAG, "Allowing device wake-up for app with special access " + opPackageName); Loading
services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java +33 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ package com.android.server.power; import static android.app.ActivityManager.PROCESS_STATE_BOUND_TOP; import static android.app.ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE; import static android.app.AppOpsManager.MODE_ALLOWED; import static android.app.AppOpsManager.MODE_ERRORED; import static android.os.PowerManagerInternal.WAKEFULNESS_ASLEEP; import static android.os.PowerManagerInternal.WAKEFULNESS_AWAKE; import static android.os.PowerManagerInternal.WAKEFULNESS_DOZING; Loading Loading @@ -46,6 +48,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.app.ActivityManagerInternal; import android.app.AppOpsManager; import android.attention.AttentionManagerInternal; import android.content.Context; import android.content.ContextWrapper; Loading Loading @@ -140,6 +143,7 @@ public class PowerManagerServiceTest { @Mock private WirelessChargerDetector mWirelessChargerDetectorMock; @Mock private AmbientDisplayConfiguration mAmbientDisplayConfigurationMock; @Mock private SystemPropertiesWrapper mSystemPropertiesMock; @Mock private AppOpsManager mAppOpsManagerMock; @Mock private InattentiveSleepWarningController mInattentiveSleepWarningControllerMock; Loading Loading @@ -297,6 +301,11 @@ public class PowerManagerServiceTest { return new LowPowerStandbyController(context, mTestLooper.getLooper(), SystemClock::elapsedRealtime); } @Override AppOpsManager createAppOpsManager(Context context) { return mAppOpsManagerMock; } }); return mService; } Loading Loading @@ -461,7 +470,7 @@ public class PowerManagerServiceTest { } @Test public void testWakefulnessAwake_AcquireCausesWakeup() { public void testWakefulnessAwake_AcquireCausesWakeup_turnScreenOnAllowed() { createService(); startSystem(); forceSleep(); Loading @@ -469,6 +478,8 @@ public class PowerManagerServiceTest { IBinder token = new Binder(); String tag = "acq_causes_wakeup"; String packageName = "pkg.name"; when(mAppOpsManagerMock.checkOpNoThrow(AppOpsManager.OP_TURN_SCREEN_ON, Binder.getCallingUid(), packageName)).thenReturn(MODE_ALLOWED); // First, ensure that a normal full wake lock does not cause a wakeup int flags = PowerManager.FULL_WAKE_LOCK; Loading @@ -492,6 +503,27 @@ public class PowerManagerServiceTest { mService.getBinderServiceInstance().releaseWakeLock(token, 0 /* flags */); } @Test public void testWakefulnessAwake_AcquireCausesWakeup_turnScreenOnDenied() { createService(); startSystem(); forceSleep(); IBinder token = new Binder(); String tag = "acq_causes_wakeup"; String packageName = "pkg.name"; when(mAppOpsManagerMock.checkOpNoThrow(AppOpsManager.OP_TURN_SCREEN_ON, Binder.getCallingUid(), packageName)).thenReturn(MODE_ERRORED); // Verify that flag has no effect when OP_TURN_SCREEN_ON is not allowed int flags = PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP; mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName, null /* workSource */, null /* historyTag */, Display.INVALID_DISPLAY, null); assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_ASLEEP); mService.getBinderServiceInstance().releaseWakeLock(token, 0 /* flags */); } @Test public void testWakefulnessAwake_IPowerManagerWakeUp() { createService(); Loading