diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index e8104c4c93770..1015a20687c8d 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -719,16 +719,21 @@ class DisplayContent { boolean canAddToastWindowForUid(int uid) { // We allow one toast window per UID being shown at a time. - WindowList windows = getWindowList(); - final int windowCount = windows.size(); + // Also if the app is focused adding more than one toast at + // a time for better backwards compatibility. + boolean alreadyHasToastWindow = false; + final int windowCount = mWindows.size(); for (int i = 0; i < windowCount; i++) { - WindowState window = windows.get(i); - if (window.mAttrs.type == TYPE_TOAST && window.mOwnerUid == uid + final WindowState window = mWindows.get(i); + if (window.isFocused() && window.getOwningUid() == uid) { + return true; + } + if (window.mAttrs.type == TYPE_TOAST && window.getOwningUid() == uid && !window.isRemovedOrHidden()) { - return false; + alreadyHasToastWindow = true; } } - return true; + return !alreadyHasToastWindow; } void scheduleToastWindowsTimeoutIfNeededLocked(WindowState oldFocus,