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

Commit 3043c92b authored by Louis Chang's avatar Louis Chang
Browse files

Allow resumed activity to turn-screen-on only when being started

In order to prevent activity being resumed while top activity
finished and unexpectedly wake up device.

Bug: 227538244
Test: atest ActivityVisibilityTests#testTurnScreenOnActivity
Change-Id: I7b06d3ab4d90e1c3f9b86e8553bb6e6d9823a2c2
parent 148fdaa8
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -5460,7 +5460,10 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
                wasStopped, this);
        mAppStopped = false;
        // Allow the window to turn the screen on once the app is resumed again.
        if (mAtmService.getActivityStartController().isInExecution()) {
            setCurrentLaunchCanTurnScreenOn(true);
        }

        if (!wasStopped) {
            destroySurfaces(true /*cleanupOnResume*/);
        }
+10 −0
Original line number Diff line number Diff line
@@ -90,6 +90,8 @@ public class ActivityStartController {

    boolean mCheckedForSetup = false;

    private boolean mInExecution = false;

    /**
     * TODO(b/64750076): Capture information necessary for dump and
     * {@link #postStartActivityProcessingForLastStarter} rather than keeping the entire object
@@ -123,7 +125,15 @@ public class ActivityStartController {
        return mFactory.obtain().setIntent(intent).setReason(reason);
    }

    void onExecutionStarted(ActivityStarter starter) {
        mInExecution = true;
    }

    boolean isInExecution() {
        return mInExecution;
    }
    void onExecutionComplete(ActivityStarter starter) {
        mInExecution = false;
        if (mLastStarter == null) {
            mLastStarter = mFactory.obtain();
        }
+6 −0
Original line number Diff line number Diff line
@@ -633,6 +633,8 @@ class ActivityStarter {
     */
    int execute() {
        try {
            onExecutionStarted();

            // Refuse possible leaked file descriptors
            if (mRequest.intent != null && mRequest.intent.hasFileDescriptors()) {
                throw new IllegalArgumentException("File descriptors passed in Intent");
@@ -1247,6 +1249,10 @@ class ActivityStarter {
        mController.onExecutionComplete(this);
    }

    private void onExecutionStarted() {
        mController.onExecutionStarted(this);
    }

    private boolean isHomeApp(int uid, @Nullable String packageName) {
        if (mService.mHomeProcess != null) {
            // Fast check