OSDN Git Service

Framework change for #2583442: Navigation dies when night mode changes
authorDianne Hackborn <hackbod@google.com>
Tue, 13 Apr 2010 06:11:38 +0000 (23:11 -0700)
committerDianne Hackborn <hackbod@google.com>
Wed, 14 Apr 2010 01:01:40 +0000 (18:01 -0700)
The window manager doesn't retain its keep screen on lock while
in the process of destroying and creating new activity windows during
a config change.  Now it does.

Unfortunately, this doesn't help maps, since it doesn't use our
lovely KEEP_SCREEN_ON flag. :p

Change-Id: Ida4bc0fcfe132cdff2bd4eeb7ba0ce9731504d14

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

index 0fa62e8..657b6af 100644 (file)
@@ -148,6 +148,7 @@ public class WindowManagerService extends IWindowManager.Stub
     static final boolean DEBUG_STARTING_WINDOW = false;
     static final boolean DEBUG_REORDER = false;
     static final boolean DEBUG_WALLPAPER = false;
+    static final boolean DEBUG_FREEZE = false;
     static final boolean SHOW_TRANSACTIONS = false;
     static final boolean HIDE_STACK_CRAWLS = true;
     static final boolean MEASURE_LATENCY = false;
@@ -10695,23 +10696,28 @@ public class WindowManagerService extends IWindowManager.Stub
         } else if (animating) {
             requestAnimationLocked(currentTime+(1000/60)-SystemClock.uptimeMillis());
         }
-        mQueue.setHoldScreenLocked(holdScreen != null);
-        if (screenBrightness < 0 || screenBrightness > 1.0f) {
-            mPowerManager.setScreenBrightnessOverride(-1);
-        } else {
-            mPowerManager.setScreenBrightnessOverride((int)
-                    (screenBrightness * Power.BRIGHTNESS_ON));
-        }
-        if (buttonBrightness < 0 || buttonBrightness > 1.0f) {
-            mPowerManager.setButtonBrightnessOverride(-1);
-        } else {
-            mPowerManager.setButtonBrightnessOverride((int)
-                    (buttonBrightness * Power.BRIGHTNESS_ON));
-        }
-        if (holdScreen != mHoldingScreenOn) {
-            mHoldingScreenOn = holdScreen;
-            Message m = mH.obtainMessage(H.HOLD_SCREEN_CHANGED, holdScreen);
-            mH.sendMessage(m);
+        
+        if (DEBUG_FREEZE) Slog.v(TAG, "Layout: mDisplayFrozen=" + mDisplayFrozen
+                + " holdScreen=" + holdScreen);
+        if (!mDisplayFrozen) {
+            mQueue.setHoldScreenLocked(holdScreen != null);
+            if (screenBrightness < 0 || screenBrightness > 1.0f) {
+                mPowerManager.setScreenBrightnessOverride(-1);
+            } else {
+                mPowerManager.setScreenBrightnessOverride((int)
+                        (screenBrightness * Power.BRIGHTNESS_ON));
+            }
+            if (buttonBrightness < 0 || buttonBrightness > 1.0f) {
+                mPowerManager.setButtonBrightnessOverride(-1);
+            } else {
+                mPowerManager.setButtonBrightnessOverride((int)
+                        (buttonBrightness * Power.BRIGHTNESS_ON));
+            }
+            if (holdScreen != mHoldingScreenOn) {
+                mHoldingScreenOn = holdScreen;
+                Message m = mH.obtainMessage(H.HOLD_SCREEN_CHANGED, holdScreen);
+                mH.sendMessage(m);
+            }
         }
 
         if (mTurnOnScreen) {
@@ -10988,6 +10994,8 @@ public class WindowManagerService extends IWindowManager.Stub
             mFreezeGcPending = now;
         }
 
+        if (DEBUG_FREEZE) Slog.v(TAG, "*** FREEZING DISPLAY", new RuntimeException());
+        
         mDisplayFrozen = true;
         if (mNextAppTransition != WindowManagerPolicy.TRANSIT_UNSET) {
             mNextAppTransition = WindowManagerPolicy.TRANSIT_UNSET;
@@ -11011,6 +11019,8 @@ public class WindowManagerService extends IWindowManager.Stub
             return;
         }
         
+        if (DEBUG_FREEZE) Slog.v(TAG, "*** UNFREEZING DISPLAY", new RuntimeException());
+        
         mDisplayFrozen = false;
         mH.removeMessages(H.APP_FREEZE_TIMEOUT);
         if (PROFILE_ORIENTATION) {