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

Commit 2289fe39 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: I0af39bf9140585dae01c38dda7d701d4424e31f5
parents 6e11bb3c 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")