add UiModeManager.ENABLE_CAR_MODE_NO_WAKE_LOCK flag for enableCarMode

- When this flag is set, system no longer keeps the display on while in car mode.

bug: 15472822
Change-Id: I277368be5227eaf96213684598f278c39e4c34db
diff --git a/services/core/java/com/android/server/UiModeManagerService.java b/services/core/java/com/android/server/UiModeManagerService.java
index f59edc7..4c6b772 100644
--- a/services/core/java/com/android/server/UiModeManagerService.java
+++ b/services/core/java/com/android/server/UiModeManagerService.java
@@ -73,6 +73,7 @@
     private boolean mTelevision;
     private boolean mWatch;
     private boolean mComputedNightMode;
+    private int mCarModeEnableFlags;
 
     int mCurUiMode = 0;
     private int mSetUiMode = 0;
@@ -193,7 +194,7 @@
             final long ident = Binder.clearCallingIdentity();
             try {
                 synchronized (mLock) {
-                    setCarModeLocked(true);
+                    setCarModeLocked(true, flags);
                     if (mSystemReady) {
                         updateLocked(flags, 0);
                     }
@@ -208,7 +209,7 @@
             final long ident = Binder.clearCallingIdentity();
             try {
                 synchronized (mLock) {
-                    setCarModeLocked(false);
+                    setCarModeLocked(false, 0);
                     if (mSystemReady) {
                         updateLocked(0, flags);
                     }
@@ -285,7 +286,8 @@
                     pw.print(" mLastBroadcastState="); pw.println(mLastBroadcastState);
             pw.print("  mNightMode="); pw.print(mNightMode);
                     pw.print(" mCarModeEnabled="); pw.print(mCarModeEnabled);
-                    pw.print(" mComputedNightMode="); pw.println(mComputedNightMode);
+                    pw.print(" mComputedNightMode="); pw.print(mComputedNightMode);
+                    pw.print(" mCarModeEnableFlags="); pw.println(mCarModeEnableFlags);
             pw.print("  mCurUiMode=0x"); pw.print(Integer.toHexString(mCurUiMode));
                     pw.print(" mSetUiMode=0x"); pw.println(Integer.toHexString(mSetUiMode));
             pw.print("  mHoldingConfiguration="); pw.print(mHoldingConfiguration);
@@ -311,17 +313,18 @@
         return mCarModeEnabled || mDockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;
     }
 
-    void setCarModeLocked(boolean enabled) {
+    void setCarModeLocked(boolean enabled, int flags) {
         if (mCarModeEnabled != enabled) {
             mCarModeEnabled = enabled;
         }
+        mCarModeEnableFlags = flags;
     }
 
     private void updateDockState(int newState) {
         synchronized (mLock) {
             if (newState != mDockState) {
                 mDockState = newState;
-                setCarModeLocked(mDockState == Intent.EXTRA_DOCK_STATE_CAR);
+                setCarModeLocked(mDockState == Intent.EXTRA_DOCK_STATE_CAR, 0);
                 if (mSystemReady) {
                     updateLocked(UiModeManager.ENABLE_CAR_MODE_GO_CAR_HOME, 0);
                 }
@@ -475,7 +478,8 @@
 
         // keep screen on when charging and in car mode
         boolean keepScreenOn = mCharging &&
-                ((mCarModeEnabled && mCarModeKeepsScreenOn) ||
+                ((mCarModeEnabled && mCarModeKeepsScreenOn &&
+                  (mCarModeEnableFlags & UiModeManager.ENABLE_CAR_MODE_NO_WAKE_LOCK) == 0) ||
                  (mCurUiMode == Configuration.UI_MODE_TYPE_DESK && mDeskModeKeepsScreenOn));
         if (keepScreenOn != mWakeLock.isHeld()) {
             if (keepScreenOn) {