Merge "DOZE instead of DOZE_AOD when batterySaver=active" into tm-dev
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java b/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java
index 0a2e69f..8e1d645 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java
@@ -319,9 +319,10 @@
     /**
      * Appends the doze state that was suppressed to the doze event log
      * @param suppressedState The {@link DozeMachine.State} that was suppressed
+     * @param reason what suppressed always on
      */
-    public void traceAlwaysOnSuppressed(DozeMachine.State suppressedState) {
-        mLogger.logAlwaysOnSuppressed(suppressedState);
+    public void traceAlwaysOnSuppressed(DozeMachine.State suppressedState, String reason) {
+        mLogger.logAlwaysOnSuppressed(suppressedState, reason);
     }
 
     /**
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeLogger.kt b/packages/SystemUI/src/com/android/systemui/doze/DozeLogger.kt
index f3f6be2..4c81563 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeLogger.kt
@@ -267,11 +267,12 @@
         })
     }
 
-    fun logAlwaysOnSuppressed(state: DozeMachine.State) {
+    fun logAlwaysOnSuppressed(state: DozeMachine.State, reason: String) {
         buffer.log(TAG, INFO, {
             str1 = state.name
+            str2 = reason
         }, {
-            "Always-on state suppressed, suppressed state=$str1"
+            "Always-on state suppressed, suppressed state=$str1 reason=$str2"
         })
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java b/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java
index ae01f0a..5779bb3 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java
@@ -358,8 +358,13 @@
             return State.FINISH;
         }
         if (mDozeHost.isAlwaysOnSuppressed() && requestedState.isAlwaysOn()) {
-            Log.i(TAG, "Doze is suppressed. Suppressing state: " + requestedState);
-            mDozeLog.traceAlwaysOnSuppressed(requestedState);
+            Log.i(TAG, "Doze is suppressed by an app. Suppressing state: " + requestedState);
+            mDozeLog.traceAlwaysOnSuppressed(requestedState, "app");
+            return State.DOZE;
+        }
+        if (mDozeHost.isPowerSaveActive() && requestedState.isAlwaysOn()) {
+            Log.i(TAG, "Doze is suppressed by battery saver. Suppressing state: " + requestedState);
+            mDozeLog.traceAlwaysOnSuppressed(requestedState, "batterySaver");
             return State.DOZE;
         }
         if ((mState == State.DOZE_AOD_PAUSED || mState == State.DOZE_AOD_PAUSING
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeService.java b/packages/SystemUI/src/com/android/systemui/doze/DozeService.java
index 19b0ea1..b06bf89 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeService.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeService.java
@@ -136,6 +136,8 @@
     @Override
     public void setDozeScreenState(int state) {
         super.setDozeScreenState(state);
-        mDozeMachine.onScreenState(state);
+        if (mDozeMachine != null) {
+            mDozeMachine.onScreenState(state);
+        }
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeSuppressor.java b/packages/SystemUI/src/com/android/systemui/doze/DozeSuppressor.java
index 31d43b5..89f50ad 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeSuppressor.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeSuppressor.java
@@ -166,6 +166,8 @@
     private DozeHost.Callback mHostCallback = new DozeHost.Callback() {
         @Override
         public void onPowerSaveChanged(boolean active) {
+            // handles suppression changes, while DozeMachine#transitionPolicy handles gating
+            // transitions to DOZE_AOD
             DozeMachine.State nextState = null;
             if (mDozeHost.isPowerSaveActive()) {
                 nextState = DozeMachine.State.DOZE;
@@ -182,6 +184,8 @@
 
         @Override
         public void onAlwaysOnSuppressedChanged(boolean suppressed) {
+            // handles suppression changes, while DozeMachine#transitionPolicy handles gating
+            // transitions to DOZE_AOD
             final DozeMachine.State nextState;
             if (mConfig.alwaysOnEnabled(UserHandle.USER_CURRENT) && !suppressed) {
                 nextState = DozeMachine.State.DOZE_AOD;