Merge "Handle the AM error dialogs in system UI thread" into sc-dev am: 75e3baedbb
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14537657 Change-Id: I0af39bf9140585dae01c38dda7d701d4424e31f5
This commit is contained in:
@@ -115,7 +115,7 @@ final class ErrorDialogController {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (needDismiss) {
|
if (needDismiss) {
|
||||||
forAllDialogs(mCrashDialogs, Dialog::dismiss);
|
scheduleForAllDialogs(mCrashDialogs, Dialog::dismiss);
|
||||||
}
|
}
|
||||||
mCrashDialogs = null;
|
mCrashDialogs = null;
|
||||||
}
|
}
|
||||||
@@ -125,7 +125,7 @@ final class ErrorDialogController {
|
|||||||
if (mAnrDialogs == null) {
|
if (mAnrDialogs == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
forAllDialogs(mAnrDialogs, Dialog::dismiss);
|
scheduleForAllDialogs(mAnrDialogs, Dialog::dismiss);
|
||||||
mAnrDialogs = null;
|
mAnrDialogs = null;
|
||||||
mAnrController = null;
|
mAnrController = null;
|
||||||
}
|
}
|
||||||
@@ -135,7 +135,7 @@ final class ErrorDialogController {
|
|||||||
if (mViolationDialogs == null) {
|
if (mViolationDialogs == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
forAllDialogs(mViolationDialogs, Dialog::dismiss);
|
scheduleForAllDialogs(mViolationDialogs, Dialog::dismiss);
|
||||||
mViolationDialogs = null;
|
mViolationDialogs = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -148,6 +148,16 @@ final class ErrorDialogController {
|
|||||||
mWaitDialog = null;
|
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) {
|
void forAllDialogs(List<? extends BaseErrorDialog> dialogs, Consumer<BaseErrorDialog> c) {
|
||||||
for (int i = dialogs.size() - 1; i >= 0; i--) {
|
for (int i = dialogs.size() - 1; i >= 0; i--) {
|
||||||
c.accept(dialogs.get(i));
|
c.accept(dialogs.get(i));
|
||||||
@@ -182,15 +192,7 @@ final class ErrorDialogController {
|
|||||||
final Context c = contexts.get(i);
|
final Context c = contexts.get(i);
|
||||||
mAnrDialogs.add(new AppNotRespondingDialog(mService, c, data));
|
mAnrDialogs.add(new AppNotRespondingDialog(mService, c, data));
|
||||||
}
|
}
|
||||||
mService.mUiHandler.post(() -> {
|
scheduleForAllDialogs(mAnrDialogs, Dialog::show);
|
||||||
List<AppNotRespondingDialog> dialogs;
|
|
||||||
synchronized (mProcLock) {
|
|
||||||
dialogs = mAnrDialogs;
|
|
||||||
}
|
|
||||||
if (dialogs != null) {
|
|
||||||
forAllDialogs(dialogs, Dialog::show);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@GuardedBy("mProcLock")
|
@GuardedBy("mProcLock")
|
||||||
@@ -202,15 +204,7 @@ final class ErrorDialogController {
|
|||||||
mViolationDialogs.add(
|
mViolationDialogs.add(
|
||||||
new StrictModeViolationDialog(c, mService, res, mApp));
|
new StrictModeViolationDialog(c, mService, res, mApp));
|
||||||
}
|
}
|
||||||
mService.mUiHandler.post(() -> {
|
scheduleForAllDialogs(mViolationDialogs, Dialog::show);
|
||||||
List<StrictModeViolationDialog> dialogs;
|
|
||||||
synchronized (mProcLock) {
|
|
||||||
dialogs = mViolationDialogs;
|
|
||||||
}
|
|
||||||
if (dialogs != null) {
|
|
||||||
forAllDialogs(dialogs, Dialog::show);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@GuardedBy("mProcLock")
|
@GuardedBy("mProcLock")
|
||||||
|
|||||||
Reference in New Issue
Block a user