am c3014c8c: Merge "Fix issue #17705755: Battery stats resets at incorrect times" into lmp-dev

* commit 'c3014c8cf8932cb6a482e985edc7def97c50eede':
  Fix issue #17705755: Battery stats resets at incorrect times
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index 42fc613..c00d209 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -6732,7 +6732,6 @@
         Message m = mHandler.obtainMessage(MSG_REPORT_POWER_CHANGE);
         m.arg1 = onBattery ? 1 : 0;
         mHandler.sendMessage(m);
-        mOnBattery = mOnBatteryInternal = onBattery;
 
         final long uptime = mSecUptime * 1000;
         final long realtime = mSecRealtime * 1000;
@@ -6745,10 +6744,11 @@
             boolean reset = false;
             if (!mNoAutoReset && (oldStatus == BatteryManager.BATTERY_STATUS_FULL
                     || level >= 90
-                    || getLowDischargeAmountSinceCharge() >= 60)
-                    || (getHighDischargeAmountSinceCharge() >= 60
-                            && mHistoryBuffer.dataSize() >= MAX_HISTORY_BUFFER)) {
+                    || (mDischargeCurrentLevel < 20 && level >= 80)
+                    || (getHighDischargeAmountSinceCharge() >= 200
+                            && mHistoryBuffer.dataSize() >= MAX_HISTORY_BUFFER))) {
                 Slog.i(TAG, "Resetting battery stats: level=" + level + " status=" + oldStatus
+                        + " dischargeLevel=" + mDischargeCurrentLevel
                         + " lowAmount=" + getLowDischargeAmountSinceCharge()
                         + " highAmount=" + getHighDischargeAmountSinceCharge());
                 // Before we write, collect a snapshot of the final aggregated
@@ -6785,6 +6785,7 @@
                 reset = true;
                 mNumDischargeStepDurations = 0;
             }
+            mOnBattery = mOnBatteryInternal = onBattery;
             mLastDischargeStepLevel = level;
             mMinDischargeStepLevel = level;
             mLastDischargeStepTime = -1;
@@ -6812,6 +6813,7 @@
             mDischargeAmountScreenOff = 0;
             updateTimeBasesLocked(true, !screenOn, uptime, realtime);
         } else {
+            mOnBattery = mOnBatteryInternal = onBattery;
             pullPendingStateUpdatesLocked();
             mHistoryCur.batteryLevel = (byte)level;
             mHistoryCur.states |= HistoryItem.STATE_BATTERY_PLUGGED_FLAG;