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

Commit 9e1bf7c7 authored by Robert Carr's avatar Robert Carr
Browse files

Don't "notifyAppStopping" when going to sleep.

The WindowManager interprets notifyAppStopping as a signal that the
app surface will be destroyed, but in the visible stopped states
of going to sleep this may not necessarily be true. notifyAppStopping
was only recently introduced for the purposes of handling detach children
which isn't needed when turning the screen off. Simply not executing
it when turning the screen off should be safe, if a little confusing.

Test: Manual of bug + mess around with SV apps a bunch
Bug: 80491358
Bug: 72921025
Change-Id: I7dd5d1e144e12ecfba038e15f84f9ae7c02aadd2
parent 1031bf5f
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -1405,6 +1405,11 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo
        newIntents.add(intent);
    }

    final boolean isSleeping() {
        final ActivityStack stack = getStack();
        return stack != null ? stack.shouldSleepActivities() : service.isSleepingLocked();
    }

    /**
     * Deliver a new Intent to an existing activity, so that its onNewIntent()
     * method will be called at the proper time.
@@ -1415,9 +1420,7 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo
                intent, getUriPermissionsLocked(), userId);
        final ReferrerIntent rintent = new ReferrerIntent(intent, referrer);
        boolean unsent = true;
        final ActivityStack stack = getStack();
        final boolean isTopActivityWhileSleeping = isTopRunningActivity()
                && (stack != null ? stack.shouldSleepActivities() : service.isSleepingLocked());
        final boolean isTopActivityWhileSleeping = isTopRunningActivity() && isSleeping();

        // We want to immediately deliver the intent to the activity if:
        // - It is currently resumed or paused. i.e. it is currently visible to the user and we want
@@ -1645,7 +1648,10 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo
            parent.onActivityStateChanged(this, state, reason);
        }

        if (state == STOPPING) {
        // The WindowManager interprets the app stopping signal as
        // an indication that the Surface will eventually be destroyed.
        // This however isn't necessarily true if we are going to sleep.
        if (state == STOPPING && !isSleeping()) {
            mWindowContainerController.notifyAppStopping();
        }
    }