OSDN Git Service

Fix issue #2420340: if FLAG_SHOW_WHEN_LOCKED, do not show keyguard...
authorDianne Hackborn <hackbod@google.com>
Tue, 13 Apr 2010 04:36:49 +0000 (21:36 -0700)
committerDianne Hackborn <hackbod@google.com>
Tue, 13 Apr 2010 04:36:49 +0000 (21:36 -0700)
...go directly to unlock screen

Fix a problem where, when we are moving windows due to a configuration
change, our wait to have the windows get redrawn would also
inadvertently make us think their surfaces should be hidden, leading
to nasty things like the lock screen thinking it should be shown
again (and thus forcing the orientation back to portrait).

Change-Id: I79057cfbc93ff59fd3558da997d4f73796e6aabe

services/java/com/android/server/WindowManagerService.java

index cd6a131..0fa62e8 100644 (file)
@@ -4418,7 +4418,8 @@ public class WindowManagerService extends IWindowManager.Stub
             final int N = mWindows.size();
             for (int i=0; i<N; i++) {
                 WindowState w = (WindowState)mWindows.get(i);
-                if (w.isVisibleLw() && !w.mObscured && !w.isDrawnLw()) {
+                if (w.isVisibleLw() && !w.mObscured
+                        && (w.mOrientationChanging || !w.isDrawnLw())) {
                     return;
                 }
             }
@@ -7925,7 +7926,7 @@ public class WindowManagerService extends IWindowManager.Stub
             final AppWindowToken atoken = mAppToken;
             return mSurface != null && !mAttachedHidden
                     && (atoken == null ? mPolicyVisibility : !atoken.hiddenRequested)
-                    && !mDrawPending && !mCommitDrawPending
+                    && (mOrientationChanging || (!mDrawPending && !mCommitDrawPending))
                     && !mExiting && !mDestroying;
         }
 
@@ -8029,12 +8030,14 @@ public class WindowManagerService extends IWindowManager.Stub
 
         /**
          * Returns true if the window has a surface that it has drawn a
-         * complete UI in to.
+         * complete UI in to.  Note that this returns true if the orientation
+         * is changing even if the window hasn't redrawn because we don't want
+         * to stop things from executing during that time.
          */
         public boolean isDrawnLw() {
             final AppWindowToken atoken = mAppToken;
             return mSurface != null && !mDestroying
-                && !mDrawPending && !mCommitDrawPending;
+                && (mOrientationChanging || (!mDrawPending && !mCommitDrawPending));
         }
 
         public boolean fillsScreenLw(int screenWidth, int screenHeight,
@@ -10291,6 +10294,12 @@ public class WindowManagerService extends IWindowManager.Stub
                     if (w.mAttachedHidden || !w.isReadyForDisplay()) {
                         if (!w.mLastHidden) {
                             //dump();
+                            if (DEBUG_CONFIGURATION) Slog.v(TAG, "Window hiding: waitingToShow="
+                                    + w.mRootToken.waitingToShow + " polvis="
+                                    + w.mPolicyVisibility + " atthid="
+                                    + w.mAttachedHidden + " tokhid="
+                                    + w.mRootToken.hidden + " vis="
+                                    + w.mViewVisibility);
                             w.mLastHidden = true;
                             if (SHOW_TRANSACTIONS) logSurface(w,
                                     "HIDE (performLayout)", null);