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

Commit a5fce63f authored by Louis Chang's avatar Louis Chang
Browse files

Update visibility when visible activity crashed

Similar to [1], to ensure the visibility and focus are updated
when the app crashed.

[1] 8f42ef56

Bug: 383970345
Test: locally verified
Flag: EXEMPT bugfix
Change-Id: I40822b821320be5281322ac144b666969680fa20
parent 00b503d4
Loading
Loading
Loading
Loading
+17 −1
Original line number Diff line number Diff line
@@ -7175,7 +7175,23 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
        @Override
        public void onHandleAppCrash(@NonNull WindowProcessController wpc) {
            synchronized (mGlobalLock) {
                wpc.handleAppCrash();
                final boolean hasVisibleActivity;
                mTaskSupervisor.beginDeferResume();
                try {
                    hasVisibleActivity = wpc.handleAppCrash();
                } finally {
                    mTaskSupervisor.endDeferResume();
                }

                if (hasVisibleActivity) {
                    deferWindowLayout();
                    try {
                        mRootWindowContainer.ensureVisibilityOnVisibleActivityDiedOrCrashed(
                                "onHandleAppCrash");
                    } finally {
                        continueWindowLayout();
                    }
                }
            }
        }

+8 −3
Original line number Diff line number Diff line
@@ -465,17 +465,22 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio
        mCrashing = crashing;
    }

    void handleAppCrash() {
    boolean handleAppCrash() {
        boolean hasVisibleActivity = false;
        ArrayList<ActivityRecord> activities = new ArrayList<>(mActivities);
        for (int i = activities.size() - 1; i >= 0; --i) {
            final ActivityRecord r = activities.get(i);
            Slog.w(TAG, "  Force finishing activity "
                    + r.mActivityComponent.flattenToShortString());
            r.detachFromProcess();
            if (r.isVisibleRequested()) {
                hasVisibleActivity = true;
                r.mDisplayContent.requestTransitionAndLegacyPrepare(TRANSIT_CLOSE,
                        TRANSIT_FLAG_APP_CRASHED);
            }
            r.destroyIfPossible("handleAppCrashed");
        }
        return hasVisibleActivity;
    }

    boolean isCrashing() {