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

Commit 75e3baed authored by Jing Ji's avatar Jing Ji Committed by Android (Google) Code Review
Browse files

Merge "Handle the AM error dialogs in system UI thread" into sc-dev

parents 19e79e06 c9e036d8
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")