Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 779cbc17 authored by Philip Junker's avatar Philip Junker
Browse files

Check appOp in testWakefulnessAwake_AcquireCausesWakeup

Bug: 216114297
Test: atest PowerManagerServiceTest
Change-Id: Id92c00c2b558070b69ddf79b2e171665360cc13e
parent ce407722
Loading
Loading
Loading
Loading
+8 −2
Original line number Original line Diff line number Diff line
@@ -292,6 +292,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;
@@ -987,6 +988,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;
@@ -1041,6 +1046,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:
@@ -1564,8 +1571,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);
+33 −1
Original line number Original line Diff line number Diff line
@@ -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;
    }
    }
@@ -479,7 +488,7 @@ public class PowerManagerServiceTest {
    }
    }


    @Test
    @Test
    public void testWakefulnessAwake_AcquireCausesWakeup() {
    public void testWakefulnessAwake_AcquireCausesWakeup_turnScreenOnAllowed() {
        createService();
        createService();
        startSystem();
        startSystem();
        forceSleep();
        forceSleep();
@@ -487,6 +496,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;
@@ -510,6 +521,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();