Merge "Check appOp in testWakefulnessAwake_AcquireCausesWakeup" into tm-dev am: fbcba37205

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17399949

Change-Id: I72920ee2620b3f990948591ac825211fd7677009
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
TreeHugger Robot
2022-04-21 19:28:33 +00:00
committed by Automerger Merge Worker
2 changed files with 41 additions and 3 deletions

View File

@@ -293,6 +293,7 @@ public final class PowerManagerService extends SystemService
private final Clock mClock; private final Clock mClock;
private final Injector mInjector; private final Injector mInjector;
private AppOpsManager mAppOpsManager;
private LightsManager mLightsManager; private LightsManager mLightsManager;
private BatteryManagerInternal mBatteryManagerInternal; private BatteryManagerInternal mBatteryManagerInternal;
private DisplayManagerInternal mDisplayManagerInternal; private DisplayManagerInternal mDisplayManagerInternal;
@@ -990,6 +991,10 @@ public final class PowerManagerService extends SystemService
LowPowerStandbyController createLowPowerStandbyController(Context context, Looper looper) { LowPowerStandbyController createLowPowerStandbyController(Context context, Looper looper) {
return new LowPowerStandbyController(context, looper, SystemClock::elapsedRealtime); return new LowPowerStandbyController(context, looper, SystemClock::elapsedRealtime);
} }
AppOpsManager createAppOpsManager(Context context) {
return context.getSystemService(AppOpsManager.class);
}
} }
final Constants mConstants; final Constants mConstants;
@@ -1044,6 +1049,8 @@ public final class PowerManagerService extends SystemService
mInattentiveSleepWarningOverlayController = mInattentiveSleepWarningOverlayController =
mInjector.createInattentiveSleepWarningController(); mInjector.createInattentiveSleepWarningController();
mAppOpsManager = injector.createAppOpsManager(mContext);
mPowerGroupWakefulnessChangeListener = new PowerGroupWakefulnessChangeListener(); mPowerGroupWakefulnessChangeListener = new PowerGroupWakefulnessChangeListener();
// Save brightness values: // Save brightness values:
@@ -1562,8 +1569,7 @@ public final class PowerManagerService extends SystemService
} }
return true; return true;
} }
if (mContext.getSystemService(AppOpsManager.class).checkOpNoThrow( if (mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_TURN_SCREEN_ON, opUid, opPackageName)
AppOpsManager.OP_TURN_SCREEN_ON, opUid, opPackageName)
== AppOpsManager.MODE_ALLOWED) { == AppOpsManager.MODE_ALLOWED) {
if (DEBUG_SPEW) { if (DEBUG_SPEW) {
Slog.d(TAG, "Allowing device wake-up for app with special access " + opPackageName); Slog.d(TAG, "Allowing device wake-up for app with special access " + opPackageName);

View File

@@ -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_BOUND_TOP;
import static android.app.ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE; 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_ASLEEP;
import static android.os.PowerManagerInternal.WAKEFULNESS_AWAKE; import static android.os.PowerManagerInternal.WAKEFULNESS_AWAKE;
import static android.os.PowerManagerInternal.WAKEFULNESS_DOZING; import static android.os.PowerManagerInternal.WAKEFULNESS_DOZING;
@@ -46,6 +48,7 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.app.ActivityManagerInternal; import android.app.ActivityManagerInternal;
import android.app.AppOpsManager;
import android.attention.AttentionManagerInternal; import android.attention.AttentionManagerInternal;
import android.content.Context; import android.content.Context;
import android.content.ContextWrapper; import android.content.ContextWrapper;
@@ -140,6 +143,7 @@ public class PowerManagerServiceTest {
@Mock private WirelessChargerDetector mWirelessChargerDetectorMock; @Mock private WirelessChargerDetector mWirelessChargerDetectorMock;
@Mock private AmbientDisplayConfiguration mAmbientDisplayConfigurationMock; @Mock private AmbientDisplayConfiguration mAmbientDisplayConfigurationMock;
@Mock private SystemPropertiesWrapper mSystemPropertiesMock; @Mock private SystemPropertiesWrapper mSystemPropertiesMock;
@Mock private AppOpsManager mAppOpsManagerMock;
@Mock @Mock
private InattentiveSleepWarningController mInattentiveSleepWarningControllerMock; private InattentiveSleepWarningController mInattentiveSleepWarningControllerMock;
@@ -297,6 +301,11 @@ public class PowerManagerServiceTest {
return new LowPowerStandbyController(context, mTestLooper.getLooper(), return new LowPowerStandbyController(context, mTestLooper.getLooper(),
SystemClock::elapsedRealtime); SystemClock::elapsedRealtime);
} }
@Override
AppOpsManager createAppOpsManager(Context context) {
return mAppOpsManagerMock;
}
}); });
return mService; return mService;
} }
@@ -461,7 +470,7 @@ public class PowerManagerServiceTest {
} }
@Test @Test
public void testWakefulnessAwake_AcquireCausesWakeup() { public void testWakefulnessAwake_AcquireCausesWakeup_turnScreenOnAllowed() {
createService(); createService();
startSystem(); startSystem();
forceSleep(); forceSleep();
@@ -469,6 +478,8 @@ public class PowerManagerServiceTest {
IBinder token = new Binder(); IBinder token = new Binder();
String tag = "acq_causes_wakeup"; String tag = "acq_causes_wakeup";
String packageName = "pkg.name"; 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 // First, ensure that a normal full wake lock does not cause a wakeup
int flags = PowerManager.FULL_WAKE_LOCK; int flags = PowerManager.FULL_WAKE_LOCK;
@@ -492,6 +503,27 @@ public class PowerManagerServiceTest {
mService.getBinderServiceInstance().releaseWakeLock(token, 0 /* flags */); 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 @Test
public void testWakefulnessAwake_IPowerManagerWakeUp() { public void testWakefulnessAwake_IPowerManagerWakeUp() {
createService(); createService();