OSDN Git Service

Force divider visibility reevaluation when system ui registers listener.
authorFilip Gruszczynski <gruszczy@google.com>
Fri, 4 Dec 2015 17:21:37 +0000 (09:21 -0800)
committerFilip Gruszczynski <gruszczy@google.com>
Fri, 4 Dec 2015 17:21:37 +0000 (09:21 -0800)
If system UI dies and then returns, we need to make sure it receives
information about visibility of the divider.

Bug: 26009659
Change-Id: I067d2023ce27b2d36723070127a18c71b694eb45

services/core/java/com/android/server/wm/DockedStackDividerController.java
services/core/java/com/android/server/wm/WindowManagerService.java

index df8d5d6..32c9b2a 100644 (file)
@@ -20,8 +20,6 @@ import android.content.Context;
 import android.graphics.Rect;
 import android.os.RemoteException;
 import android.util.Slog;
-import android.util.SparseArray;
-import android.util.SparseIntArray;
 import android.view.IDockDividerVisibilityListener;
 
 import static android.app.ActivityManager.StackId.DOCKED_STACK_ID;
@@ -46,6 +44,7 @@ public class DockedStackDividerController {
     private final Rect mLastRect = new Rect();
     private IDockDividerVisibilityListener mListener;
     private boolean mLastVisibility = false;
+    private boolean mForceVisibilityReevaluation;
 
     DockedStackDividerController(Context context, DisplayContent displayContent) {
         mDisplayContent = displayContent;
@@ -69,16 +68,16 @@ public class DockedStackDividerController {
 
     void setWindow(WindowState window) {
         mWindow = window;
-        reevaluateVisibility();
+        reevaluateVisibility(false);
     }
 
-    void reevaluateVisibility() {
+    void reevaluateVisibility(boolean force) {
         if (mWindow == null) {
             return;
         }
         TaskStack stack = mDisplayContent.mService.mStackIdToStack.get(DOCKED_STACK_ID);
         final boolean visible = stack != null && stack.isVisibleLocked();
-        if (mLastVisibility == visible) {
+        if (mLastVisibility == visible && !force) {
             return;
         }
         mLastVisibility = visible;
@@ -131,5 +130,6 @@ public class DockedStackDividerController {
             throw new IllegalStateException("Dock divider visibility listener already set!");
         }
         mListener = listener;
+        reevaluateVisibility(true);
     }
 }
index f25f1e3..de1f4d1 100644 (file)
@@ -8030,7 +8030,7 @@ public class WindowManagerService extends IWindowManager.Stub
                 case UPDATE_DOCKED_STACK_DIVIDER: {
                     synchronized (mWindowMap) {
                         getDefaultDisplayContentLocked().getDockedDividerController()
-                                .reevaluateVisibility();
+                                .reevaluateVisibility(false);
                     }
                 }
                 break;