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

Commit 3c95620e 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: Id0a062677c810ea1f30b741488ee431244d95600
parents 19fa6737 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")