Fix issue #2544466: Car Home brightness icon comes and goes while phone is in car dock in FRE83

There was a really dumb bug that was causing us to not always apply
the new configuration.  As a result of fixing this, there were new
glithes in the transition between car and regular mode, so further
work here to fix that.  And since I was actually working during the
night and seeing night mode, I noticed how obnoxiously bright the
status bar is compared to the car home at night, so it now nicely
dims itself when we switch to the night config.  Oh and in doing
that I also found and fixed a bug in dispatching config changes to
a window (where they wouldn't get dispatched if the window didn't
resize).

FINALLY...  tweak the wallpaper enter/exit animations a bit to
make them a little smoother.

Change-Id: I4e062093cbcfbc919307799a794846db2920216f
diff --git a/core/java/android/app/IUiModeManager.aidl b/core/java/android/app/IUiModeManager.aidl
index bd637b7..7b668d2 100644
--- a/core/java/android/app/IUiModeManager.aidl
+++ b/core/java/android/app/IUiModeManager.aidl
@@ -30,7 +30,7 @@
     /**
      * Disables the car mode.
      */
-    void disableCarMode();
+    void disableCarMode(int flags);
 
     /**
      * Return the current running mode.
diff --git a/core/java/android/app/UiModeManager.java b/core/java/android/app/UiModeManager.java
index 82da983..0007f58 100644
--- a/core/java/android/app/UiModeManager.java
+++ b/core/java/android/app/UiModeManager.java
@@ -116,12 +116,22 @@
     }
 
     /**
-     * Turn off special mode if currently in car mode.
+     * Flag for use with {@link #disableCarMode(int)}: go to the normal
+     * home activity as part of the disable.  Disabling this way ensures
+     * a clean transition between the current activity (in car mode) and
+     * the original home activity (which was typically last running without
+     * being in car mode).
      */
-    public void disableCarMode() {
+    public static final int DISABLE_CAR_MODE_GO_HOME = 0x0001;
+    
+    /**
+     * Turn off special mode if currently in car mode.
+     * @param flags May be 0 or {@link #DISABLE_CAR_MODE_GO_HOME}.
+     */
+    public void disableCarMode(int flags) {
         if (mService != null) {
             try {
-                mService.disableCarMode();
+                mService.disableCarMode(flags);
             } catch (RemoteException e) {
                 Log.e(TAG, "disableCarMode: RemoteException", e);
             }
diff --git a/core/java/android/view/ViewRoot.java b/core/java/android/view/ViewRoot.java
index 74943f3..ed83bca 100644
--- a/core/java/android/view/ViewRoot.java
+++ b/core/java/android/view/ViewRoot.java
@@ -1855,7 +1855,8 @@
 
             if (mWinFrame.width() == msg.arg1 && mWinFrame.height() == msg.arg2
                     && mPendingContentInsets.equals(ri.coveredInsets)
-                    && mPendingVisibleInsets.equals(ri.visibleInsets)) {
+                    && mPendingVisibleInsets.equals(ri.visibleInsets)
+                    && ((ResizedInfo)msg.obj).newConfig == null) {
                 break;
             }
             // fall through...
diff --git a/core/java/com/android/internal/app/DisableCarModeActivity.java b/core/java/com/android/internal/app/DisableCarModeActivity.java
index 95dc1f9..7943c61 100644
--- a/core/java/com/android/internal/app/DisableCarModeActivity.java
+++ b/core/java/com/android/internal/app/DisableCarModeActivity.java
@@ -18,6 +18,7 @@
 
 import android.app.Activity;
 import android.app.IUiModeManager;
+import android.app.UiModeManager;
 import android.os.Bundle;
 import android.os.RemoteException;
 import android.os.ServiceManager;
@@ -32,7 +33,7 @@
         try {
             IUiModeManager uiModeManager = IUiModeManager.Stub.asInterface(
                     ServiceManager.getService("uimode"));
-            uiModeManager.disableCarMode();
+            uiModeManager.disableCarMode(UiModeManager.DISABLE_CAR_MODE_GO_HOME);
         } catch (RemoteException e) {
             Log.e(TAG, "Failed to disable car mode", e);
         }