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

Commit 28d7e404 authored by Jing Ji's avatar Jing Ji Committed by Automerger Merge Worker
Browse files

Merge "Handle the AM error dialogs in system UI thread" into sc-dev am: 75e3baed

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

Change-Id: I29bc4ccd59070bb729d2df22a074736be8ff7bbe
parents 4478771c 75e3baed
Loading
Loading
Loading
Loading
+15 −21
Original line number Diff line number Diff line
@@ -115,7 +115,7 @@ final class ErrorDialogController {
            return;
        }
        if (needDismiss) {
            forAllDialogs(mCrashDialogs, Dialog::dismiss);
            scheduleForAllDialogs(mCrashDialogs, Dialog::dismiss);
        }
        mCrashDialogs = null;
    }
@@ -125,7 +125,7 @@ final class ErrorDialogController {
        if (mAnrDialogs == null) {
            return;
        }
        forAllDialogs(mAnrDialogs, Dialog::dismiss);
        scheduleForAllDialogs(mAnrDialogs, Dialog::dismiss);
        mAnrDialogs = null;
        mAnrController = null;
    }
@@ -135,7 +135,7 @@ final class ErrorDialogController {
        if (mViolationDialogs == null) {
            return;
        }
        forAllDialogs(mViolationDialogs, Dialog::dismiss);
        scheduleForAllDialogs(mViolationDialogs, Dialog::dismiss);
        mViolationDialogs = null;
    }

@@ -148,6 +148,16 @@ final class ErrorDialogController {
        mWaitDialog = null;
    }

    @GuardedBy("mProcLock")
    void scheduleForAllDialogs(List<? extends BaseErrorDialog> dialogs,
            Consumer<BaseErrorDialog> c) {
        mService.mUiHandler.post(() -> {
            if (dialogs != null) {
                forAllDialogs(dialogs, c);
            }
        });
    }

    void forAllDialogs(List<? extends BaseErrorDialog> dialogs, Consumer<BaseErrorDialog> c) {
        for (int i = dialogs.size() - 1; i >= 0; i--) {
            c.accept(dialogs.get(i));
@@ -182,15 +192,7 @@ final class ErrorDialogController {
            final Context c = contexts.get(i);
            mAnrDialogs.add(new AppNotRespondingDialog(mService, c, data));
        }
        mService.mUiHandler.post(() -> {
            List<AppNotRespondingDialog> dialogs;
            synchronized (mProcLock) {
                dialogs = mAnrDialogs;
            }
            if (dialogs != null) {
                forAllDialogs(dialogs, Dialog::show);
            }
        });
        scheduleForAllDialogs(mAnrDialogs, Dialog::show);
    }

    @GuardedBy("mProcLock")
@@ -202,15 +204,7 @@ final class ErrorDialogController {
            mViolationDialogs.add(
                    new StrictModeViolationDialog(c, mService, res, mApp));
        }
        mService.mUiHandler.post(() -> {
            List<StrictModeViolationDialog> dialogs;
            synchronized (mProcLock) {
                dialogs = mViolationDialogs;
            }
            if (dialogs != null) {
                forAllDialogs(dialogs, Dialog::show);
            }
        });
        scheduleForAllDialogs(mViolationDialogs, Dialog::show);
    }

    @GuardedBy("mProcLock")