Merge "Provide a way to keep dreaming when undocking." into tm-qpr-dev
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 098603e..8820627 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -550,6 +550,9 @@
     <!-- If this is true, long press on power button will be available from the non-interactive state -->
     <bool name="config_supportLongPressPowerWhenNonInteractive">false</bool>
 
+    <!-- If this is true, then keep dreaming when undocking. -->
+    <bool name="config_keepDreamingWhenUndocking">false</bool>
+
     <!-- Auto-rotation behavior -->
 
     <!-- If true, enables auto-rotation features using the accelerometer.
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 456ec43..c96e452 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -1978,6 +1978,7 @@
   <java-symbol type="bool" name="config_allowTheaterModeWakeFromLidSwitch" />
   <java-symbol type="bool" name="config_allowTheaterModeWakeFromDock" />
   <java-symbol type="bool" name="config_allowTheaterModeWakeFromWindowLayout" />
+  <java-symbol type="bool" name="config_keepDreamingWhenUndocking" />
   <java-symbol type="bool" name="config_goToSleepOnButtonPressTheaterMode" />
   <java-symbol type="bool" name="config_supportLongPressPowerWhenNonInteractive" />
   <java-symbol type="bool" name="config_wimaxEnabled" />
diff --git a/services/core/java/com/android/server/DockObserver.java b/services/core/java/com/android/server/DockObserver.java
index 8a6b54f..104d10d 100644
--- a/services/core/java/com/android/server/DockObserver.java
+++ b/services/core/java/com/android/server/DockObserver.java
@@ -69,6 +69,7 @@
 
     private boolean mUpdatesStopped;
 
+    private final boolean mKeepDreamingWhenUndocking;
     private final boolean mAllowTheaterModeWakeFromDock;
 
     private final List<ExtconStateConfig> mExtconStateConfigs;
@@ -164,6 +165,8 @@
         mWakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
         mAllowTheaterModeWakeFromDock = context.getResources().getBoolean(
                 com.android.internal.R.bool.config_allowTheaterModeWakeFromDock);
+        mKeepDreamingWhenUndocking = context.getResources().getBoolean(
+                com.android.internal.R.bool.config_keepDreamingWhenUndocking);
 
         mExtconStateConfigs = loadExtconStateConfigs(context);
 
@@ -216,10 +219,8 @@
         if (newState != mReportedDockState) {
             mReportedDockState = newState;
             if (mSystemReady) {
-                // Wake up immediately when docked or undocked except in theater mode.
-                if (mAllowTheaterModeWakeFromDock
-                        || Settings.Global.getInt(getContext().getContentResolver(),
-                            Settings.Global.THEATER_MODE_ON, 0) == 0) {
+                // Wake up immediately when docked or undocked unless prohibited from doing so.
+                if (allowWakeFromDock()) {
                     mPowerManager.wakeUp(SystemClock.uptimeMillis(),
                             "android.server:DOCK");
                 }
@@ -228,6 +229,15 @@
         }
     }
 
+    private boolean allowWakeFromDock() {
+        if (mKeepDreamingWhenUndocking) {
+            return false;
+        }
+        return (mAllowTheaterModeWakeFromDock
+                || Settings.Global.getInt(getContext().getContentResolver(),
+                Settings.Global.THEATER_MODE_ON, 0) == 0);
+    }
+
     private void updateLocked() {
         mWakeLock.acquire();
         mHandler.sendEmptyMessage(MSG_DOCK_STATE_CHANGED);
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
index 31f8741..7e310b4 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
@@ -1487,7 +1487,7 @@
         a.colorMode = ActivityInfo.COLOR_MODE_DEFAULT;
         a.flags |= ActivityInfo.FLAG_EXCLUDE_FROM_RECENTS;
         a.resizeMode = RESIZE_MODE_UNRESIZEABLE;
-        a.configChanges = ActivityInfo.CONFIG_ORIENTATION;
+        a.configChanges = 0xffffffff;
 
         final ActivityOptions options = ActivityOptions.makeBasic();
         options.setLaunchActivityType(ACTIVITY_TYPE_DREAM);