OSDN Git Service

[DO NOT MERGE] Catch a missed case when adding a toast
authorSvetoslav Ganov <svetoslavganov@google.com>
Tue, 18 Oct 2016 01:41:48 +0000 (18:41 -0700)
committerSvetoslav Ganov <svetoslavganov@google.com>
Tue, 18 Oct 2016 20:21:27 +0000 (13:21 -0700)
We allow a single toast window per UID. It is possible that
the UID had another toast window that is going away and this
CL adds a missed check for when a window is scheduled to be
removed.

bug:31340854

Change-Id: I0621516019542c85fe7121f7fe61659e4d4eb672

services/core/java/com/android/server/wm/DisplayContent.java
services/core/java/com/android/server/wm/WindowState.java

index 7b1a523..e8104c4 100644 (file)
@@ -28,15 +28,11 @@ import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
 import static com.android.server.wm.WindowState.RESIZE_HANDLE_WIDTH_IN_DP;
 
 import android.app.ActivityManager.StackId;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageManager;
 import android.graphics.Matrix;
 import android.graphics.Rect;
 import android.graphics.RectF;
 import android.graphics.Region;
 import android.graphics.Region.Op;
-import android.os.Build;
-import android.os.UserHandle;
 import android.util.DisplayMetrics;
 import android.util.Slog;
 import android.view.Display;
@@ -728,8 +724,7 @@ class DisplayContent {
         for (int i = 0; i < windowCount; i++) {
             WindowState window = windows.get(i);
             if (window.mAttrs.type == TYPE_TOAST && window.mOwnerUid == uid
-                    && !window.mPermanentlyHidden && !window.mAnimatingExit
-                    && !window.mRemoveOnExit) {
+                    && !window.isRemovedOrHidden()) {
                 return false;
             }
         }
index 55bf394..fbef2c6 100644 (file)
@@ -2961,4 +2961,10 @@ final class WindowState implements WindowManagerPolicy.WindowState {
     public boolean isRtl() {
         return mMergedConfiguration.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
     }
+
+    public boolean isRemovedOrHidden() {
+        return mPermanentlyHidden || mAnimatingExit
+                || mRemoveOnExit || mWindowRemovalAllowed
+                || mViewVisibility == View.GONE;
+    }
 }