Loading src/com/android/settings/fuelgauge/BatteryBroadcastReceiver.java +19 −12 Original line number Original line Diff line number Diff line Loading @@ -34,24 +34,20 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy; /** /** * Use this broadcastReceiver to listen to the battery change, and it will invoke * Use this broadcastReceiver to listen to the battery change and it will invoke * {@link OnBatteryChangedListener} if any of the following has been changed: * {@link OnBatteryChangedListener} * * 1. Battery level(e.g. 100%->99%) * 2. Battery status(e.g. plugged->unplugged) * 3. Battery saver(e.g. off->on) * 4. Battery health(e.g. good->overheat) */ */ public class BatteryBroadcastReceiver extends BroadcastReceiver { public class BatteryBroadcastReceiver extends BroadcastReceiver { private static final String TAG = "BatteryBroadcastRcvr"; private static final String TAG = "BatteryBroadcastRcvr"; /** /** * Callback when the following has been changed: * Callback if any of the monitored fields has been changed: * * * Battery level(e.g. 100%->99%) * Battery level(e.g. 100%->99%) * Battery status(e.g. plugged->unplugged) * Battery status(e.g. plugged->unplugged) * Battery saver(e.g. off->on) * Battery saver(e.g. off->on) * Battery health(e.g. good->overheat) * Battery health(e.g. good->overheat) * Battery charging status(e.g. default->long life) */ */ public interface OnBatteryChangedListener { public interface OnBatteryChangedListener { void onBatteryChanged(@BatteryUpdateType int type); void onBatteryChanged(@BatteryUpdateType int type); Loading @@ -63,6 +59,7 @@ public class BatteryBroadcastReceiver extends BroadcastReceiver { BatteryUpdateType.BATTERY_SAVER, BatteryUpdateType.BATTERY_SAVER, BatteryUpdateType.BATTERY_STATUS, BatteryUpdateType.BATTERY_STATUS, BatteryUpdateType.BATTERY_HEALTH, BatteryUpdateType.BATTERY_HEALTH, BatteryUpdateType.CHARGING_STATUS, BatteryUpdateType.BATTERY_NOT_PRESENT}) BatteryUpdateType.BATTERY_NOT_PRESENT}) public @interface BatteryUpdateType { public @interface BatteryUpdateType { int MANUAL = 0; int MANUAL = 0; Loading @@ -70,7 +67,8 @@ public class BatteryBroadcastReceiver extends BroadcastReceiver { int BATTERY_SAVER = 2; int BATTERY_SAVER = 2; int BATTERY_STATUS = 3; int BATTERY_STATUS = 3; int BATTERY_HEALTH = 4; int BATTERY_HEALTH = 4; int BATTERY_NOT_PRESENT = 5; int CHARGING_STATUS = 5; int BATTERY_NOT_PRESENT = 6; } } @VisibleForTesting @VisibleForTesting Loading @@ -78,6 +76,8 @@ public class BatteryBroadcastReceiver extends BroadcastReceiver { @VisibleForTesting @VisibleForTesting String mBatteryStatus; String mBatteryStatus; @VisibleForTesting @VisibleForTesting int mChargingStatus; @VisibleForTesting int mBatteryHealth; int mBatteryHealth; private OnBatteryChangedListener mBatteryListener; private OnBatteryChangedListener mBatteryListener; private Context mContext; private Context mContext; Loading Loading @@ -121,21 +121,27 @@ public class BatteryBroadcastReceiver extends BroadcastReceiver { final String batteryLevel = Utils.getBatteryPercentage(intent); final String batteryLevel = Utils.getBatteryPercentage(intent); final String batteryStatus = final String batteryStatus = Utils.getBatteryStatus(mContext, intent, /* compactStatus= */ false); Utils.getBatteryStatus(mContext, intent, /* compactStatus= */ false); final int chargingStatus = intent.getIntExtra( BatteryManager.EXTRA_CHARGING_STATUS, BatteryManager.CHARGING_POLICY_DEFAULT); final int batteryHealth = intent.getIntExtra( final int batteryHealth = intent.getIntExtra( BatteryManager.EXTRA_HEALTH, BatteryManager.BATTERY_HEALTH_UNKNOWN); BatteryManager.EXTRA_HEALTH, BatteryManager.BATTERY_HEALTH_UNKNOWN); Log.d( Log.d( TAG, TAG, "Battery changed: level=" "Battery changed: level: " + batteryLevel + batteryLevel + ", status=" + "| status: " + batteryStatus + batteryStatus + ", health=" + "| chargingStatus: " + chargingStatus + "| health: " + batteryHealth); + batteryHealth); if (!Utils.isBatteryPresent(intent)) { if (!Utils.isBatteryPresent(intent)) { Log.w(TAG, "Problem reading the battery meter."); Log.w(TAG, "Problem reading the battery meter."); mBatteryListener.onBatteryChanged(BatteryUpdateType.BATTERY_NOT_PRESENT); mBatteryListener.onBatteryChanged(BatteryUpdateType.BATTERY_NOT_PRESENT); } else if (forceUpdate) { } else if (forceUpdate) { mBatteryListener.onBatteryChanged(BatteryUpdateType.MANUAL); mBatteryListener.onBatteryChanged(BatteryUpdateType.MANUAL); } else if (chargingStatus != mChargingStatus) { mBatteryListener.onBatteryChanged(BatteryUpdateType.CHARGING_STATUS); } else if (batteryHealth != mBatteryHealth) { } else if (batteryHealth != mBatteryHealth) { mBatteryListener.onBatteryChanged(BatteryUpdateType.BATTERY_HEALTH); mBatteryListener.onBatteryChanged(BatteryUpdateType.BATTERY_HEALTH); } else if(!batteryLevel.equals(mBatteryLevel)) { } else if(!batteryLevel.equals(mBatteryLevel)) { Loading @@ -145,6 +151,7 @@ public class BatteryBroadcastReceiver extends BroadcastReceiver { } } mBatteryLevel = batteryLevel; mBatteryLevel = batteryLevel; mBatteryStatus = batteryStatus; mBatteryStatus = batteryStatus; mChargingStatus = chargingStatus; mBatteryHealth = batteryHealth; mBatteryHealth = batteryHealth; } else if (PowerManager.ACTION_POWER_SAVE_MODE_CHANGED.equals(action)) { } else if (PowerManager.ACTION_POWER_SAVE_MODE_CHANGED.equals(action)) { mBatteryListener.onBatteryChanged(BatteryUpdateType.BATTERY_SAVER); mBatteryListener.onBatteryChanged(BatteryUpdateType.BATTERY_SAVER); Loading src/com/android/settings/fuelgauge/BatteryInfo.java +5 −5 Original line number Original line Diff line number Diff line Loading @@ -51,7 +51,7 @@ public class BatteryInfo { public int batteryStatus; public int batteryStatus; public int pluggedStatus; public int pluggedStatus; public boolean discharging = true; public boolean discharging = true; public boolean isOverheated; public boolean isBatteryDefender; public long remainingTimeUs = 0; public long remainingTimeUs = 0; public long averageTimeToDischarge = EstimateKt.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN; public long averageTimeToDischarge = EstimateKt.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN; public String batteryPercentString; public String batteryPercentString; Loading Loading @@ -257,9 +257,9 @@ public class BatteryInfo { info.pluggedStatus = batteryBroadcast.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0); info.pluggedStatus = batteryBroadcast.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0); info.mCharging = info.pluggedStatus != 0; info.mCharging = info.pluggedStatus != 0; info.averageTimeToDischarge = estimate.getAverageDischargeTime(); info.averageTimeToDischarge = estimate.getAverageDischargeTime(); info.isOverheated = batteryBroadcast.getIntExtra( info.isBatteryDefender = batteryBroadcast.getIntExtra( BatteryManager.EXTRA_HEALTH, BatteryManager.BATTERY_HEALTH_UNKNOWN) BatteryManager.EXTRA_CHARGING_STATUS, BatteryManager.CHARGING_POLICY_DEFAULT) == BatteryManager.BATTERY_HEALTH_OVERHEAT; == BatteryManager.CHARGING_POLICY_ADAPTIVE_LONGLIFE; info.statusLabel = Utils.getBatteryStatus(context, batteryBroadcast, isCompactStatus); info.statusLabel = Utils.getBatteryStatus(context, batteryBroadcast, isCompactStatus); info.batteryStatus = batteryBroadcast.getIntExtra( info.batteryStatus = batteryBroadcast.getIntExtra( Loading @@ -283,7 +283,7 @@ public class BatteryInfo { info.discharging = false; info.discharging = false; info.suggestionLabel = null; info.suggestionLabel = null; int dockDefenderMode = BatteryUtils.getCurrentDockDefenderMode(context, info); int dockDefenderMode = BatteryUtils.getCurrentDockDefenderMode(context, info); if ((info.isOverheated && status != BatteryManager.BATTERY_STATUS_FULL if ((info.isBatteryDefender && status != BatteryManager.BATTERY_STATUS_FULL && dockDefenderMode == BatteryUtils.DockDefenderMode.DISABLED) && dockDefenderMode == BatteryUtils.DockDefenderMode.DISABLED) || dockDefenderMode == BatteryUtils.DockDefenderMode.ACTIVE) { || dockDefenderMode == BatteryUtils.DockDefenderMode.ACTIVE) { // Battery defender active, battery charging paused // Battery defender active, battery charging paused Loading src/com/android/settings/fuelgauge/BatteryUtils.java +4 −5 Original line number Original line Diff line number Diff line Loading @@ -18,7 +18,6 @@ package com.android.settings.fuelgauge; import android.app.AppOpsManager; import android.app.AppOpsManager; import android.content.Context; import android.content.Context; import android.content.Intent; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo; import android.content.pm.InstallSourceInfo; import android.content.pm.InstallSourceInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageInfo; Loading Loading @@ -322,10 +321,10 @@ public class BatteryUtils { } } /** /** * Return {@code true} if battery is overheated and charging. * Return {@code true} if battery defender is on and charging. */ */ public static boolean isBatteryDefenderOn(BatteryInfo batteryInfo) { public static boolean isBatteryDefenderOn(BatteryInfo batteryInfo) { return batteryInfo.isOverheated && !batteryInfo.discharging; return batteryInfo.isBatteryDefender && !batteryInfo.discharging; } } /** /** Loading Loading @@ -627,11 +626,11 @@ public class BatteryUtils { if (Settings.Global.getInt(context.getContentResolver(), if (Settings.Global.getInt(context.getContentResolver(), SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS, 0) == 1) { SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS, 0) == 1) { return DockDefenderMode.TEMPORARILY_BYPASSED; return DockDefenderMode.TEMPORARILY_BYPASSED; } else if (batteryInfo.isOverheated && FeatureFactory.getFactory(context) } else if (batteryInfo.isBatteryDefender && FeatureFactory.getFactory(context) .getPowerUsageFeatureProvider(context) .getPowerUsageFeatureProvider(context) .isExtraDefend()) { .isExtraDefend()) { return DockDefenderMode.ACTIVE; return DockDefenderMode.ACTIVE; } else if (!batteryInfo.isOverheated) { } else if (!batteryInfo.isBatteryDefender) { return DockDefenderMode.FUTURE_BYPASS; return DockDefenderMode.FUTURE_BYPASS; } } } } Loading src/com/android/settings/fuelgauge/batterytip/detectors/BatteryDefenderDetector.java +7 −8 Original line number Original line Diff line number Diff line Loading @@ -37,9 +37,8 @@ public class BatteryDefenderDetector implements BatteryTipDetector { @Override @Override public BatteryTip detect() { public BatteryTip detect() { final boolean isBasicBatteryDefend = mBatteryInfo.isOverheated final boolean isBasicBatteryDefend = mBatteryInfo.isBatteryDefender && !FeatureFactory.getFactory(mContext) && !FeatureFactory.getFactory(mContext).getPowerUsageFeatureProvider(mContext) .getPowerUsageFeatureProvider(mContext) .isExtraDefend(); .isExtraDefend(); final int state = isBasicBatteryDefend final int state = isBasicBatteryDefend ? BatteryTip.StateType.NEW : BatteryTip.StateType.INVISIBLE; ? BatteryTip.StateType.NEW : BatteryTip.StateType.INVISIBLE; Loading tests/robotests/src/com/android/settings/fuelgauge/BatteryBroadcastReceiverTest.java +18 −2 Original line number Original line Diff line number Diff line Loading @@ -69,6 +69,7 @@ public class BatteryBroadcastReceiverTest { mBatteryBroadcastReceiver.mBatteryLevel = BATTERY_INIT_LEVEL; mBatteryBroadcastReceiver.mBatteryLevel = BATTERY_INIT_LEVEL; mBatteryBroadcastReceiver.mBatteryStatus = BATTERY_INIT_STATUS; mBatteryBroadcastReceiver.mBatteryStatus = BATTERY_INIT_STATUS; mBatteryBroadcastReceiver.mBatteryHealth = BatteryManager.BATTERY_HEALTH_UNKNOWN; mBatteryBroadcastReceiver.mBatteryHealth = BatteryManager.BATTERY_HEALTH_UNKNOWN; mBatteryBroadcastReceiver.mChargingStatus = BatteryManager.CHARGING_POLICY_DEFAULT; mBatteryBroadcastReceiver.setBatteryChangedListener(mBatteryListener); mBatteryBroadcastReceiver.setBatteryChangedListener(mBatteryListener); mChargingIntent = new Intent(Intent.ACTION_BATTERY_CHANGED); mChargingIntent = new Intent(Intent.ACTION_BATTERY_CHANGED); Loading @@ -91,8 +92,8 @@ public class BatteryBroadcastReceiverTest { @Test @Test public void onReceive_batteryHealthChanged_dataUpdated() { public void onReceive_batteryHealthChanged_dataUpdated() { mChargingIntent mChargingIntent.putExtra( .putExtra(BatteryManager.EXTRA_HEALTH, BatteryManager.BATTERY_HEALTH_OVERHEAT); BatteryManager.EXTRA_HEALTH, BatteryManager.BATTERY_HEALTH_OVERHEAT); mBatteryBroadcastReceiver.onReceive(mContext, mChargingIntent); mBatteryBroadcastReceiver.onReceive(mContext, mChargingIntent); assertThat(mBatteryBroadcastReceiver.mBatteryHealth) assertThat(mBatteryBroadcastReceiver.mBatteryHealth) Loading @@ -100,6 +101,17 @@ public class BatteryBroadcastReceiverTest { verify(mBatteryListener).onBatteryChanged(BatteryUpdateType.BATTERY_HEALTH); verify(mBatteryListener).onBatteryChanged(BatteryUpdateType.BATTERY_HEALTH); } } @Test public void onReceive_chargingStatusChanged_dataUpdated() { mChargingIntent.putExtra(BatteryManager.EXTRA_CHARGING_STATUS, BatteryManager.CHARGING_POLICY_ADAPTIVE_LONGLIFE); mBatteryBroadcastReceiver.onReceive(mContext, mChargingIntent); assertThat(mBatteryBroadcastReceiver.mChargingStatus) .isEqualTo(BatteryManager.CHARGING_POLICY_ADAPTIVE_LONGLIFE); verify(mBatteryListener).onBatteryChanged(BatteryUpdateType.CHARGING_STATUS); } @Test @Test public void onReceive_batteryNotPresent_shouldShowHelpMessage() { public void onReceive_batteryNotPresent_shouldShowHelpMessage() { mChargingIntent.putExtra(BatteryManager.EXTRA_PRESENT, false); mChargingIntent.putExtra(BatteryManager.EXTRA_PRESENT, false); Loading Loading @@ -131,6 +143,8 @@ public class BatteryBroadcastReceiverTest { assertThat(mBatteryBroadcastReceiver.mBatteryStatus).isEqualTo(batteryStatus); assertThat(mBatteryBroadcastReceiver.mBatteryStatus).isEqualTo(batteryStatus); assertThat(mBatteryBroadcastReceiver.mBatteryHealth) assertThat(mBatteryBroadcastReceiver.mBatteryHealth) .isEqualTo(BatteryManager.BATTERY_HEALTH_UNKNOWN); .isEqualTo(BatteryManager.BATTERY_HEALTH_UNKNOWN); assertThat(mBatteryBroadcastReceiver.mChargingStatus) .isEqualTo(BatteryManager.CHARGING_POLICY_DEFAULT); verify(mBatteryListener, never()).onBatteryChanged(anyInt()); verify(mBatteryListener, never()).onBatteryChanged(anyInt()); } } Loading Loading @@ -163,6 +177,8 @@ public class BatteryBroadcastReceiverTest { Utils.getBatteryStatus(mContext, mChargingIntent, /* compactStatus= */ false)); Utils.getBatteryStatus(mContext, mChargingIntent, /* compactStatus= */ false)); assertThat(mBatteryBroadcastReceiver.mBatteryHealth) assertThat(mBatteryBroadcastReceiver.mBatteryHealth) .isEqualTo(BatteryManager.BATTERY_HEALTH_UNKNOWN); .isEqualTo(BatteryManager.BATTERY_HEALTH_UNKNOWN); assertThat(mBatteryBroadcastReceiver.mChargingStatus) .isEqualTo(BatteryManager.CHARGING_POLICY_DEFAULT); // 2 times because register will force update the battery // 2 times because register will force update the battery verify(mBatteryListener, times(2)).onBatteryChanged(BatteryUpdateType.MANUAL); verify(mBatteryListener, times(2)).onBatteryChanged(BatteryUpdateType.MANUAL); } } Loading Loading
src/com/android/settings/fuelgauge/BatteryBroadcastReceiver.java +19 −12 Original line number Original line Diff line number Diff line Loading @@ -34,24 +34,20 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy; /** /** * Use this broadcastReceiver to listen to the battery change, and it will invoke * Use this broadcastReceiver to listen to the battery change and it will invoke * {@link OnBatteryChangedListener} if any of the following has been changed: * {@link OnBatteryChangedListener} * * 1. Battery level(e.g. 100%->99%) * 2. Battery status(e.g. plugged->unplugged) * 3. Battery saver(e.g. off->on) * 4. Battery health(e.g. good->overheat) */ */ public class BatteryBroadcastReceiver extends BroadcastReceiver { public class BatteryBroadcastReceiver extends BroadcastReceiver { private static final String TAG = "BatteryBroadcastRcvr"; private static final String TAG = "BatteryBroadcastRcvr"; /** /** * Callback when the following has been changed: * Callback if any of the monitored fields has been changed: * * * Battery level(e.g. 100%->99%) * Battery level(e.g. 100%->99%) * Battery status(e.g. plugged->unplugged) * Battery status(e.g. plugged->unplugged) * Battery saver(e.g. off->on) * Battery saver(e.g. off->on) * Battery health(e.g. good->overheat) * Battery health(e.g. good->overheat) * Battery charging status(e.g. default->long life) */ */ public interface OnBatteryChangedListener { public interface OnBatteryChangedListener { void onBatteryChanged(@BatteryUpdateType int type); void onBatteryChanged(@BatteryUpdateType int type); Loading @@ -63,6 +59,7 @@ public class BatteryBroadcastReceiver extends BroadcastReceiver { BatteryUpdateType.BATTERY_SAVER, BatteryUpdateType.BATTERY_SAVER, BatteryUpdateType.BATTERY_STATUS, BatteryUpdateType.BATTERY_STATUS, BatteryUpdateType.BATTERY_HEALTH, BatteryUpdateType.BATTERY_HEALTH, BatteryUpdateType.CHARGING_STATUS, BatteryUpdateType.BATTERY_NOT_PRESENT}) BatteryUpdateType.BATTERY_NOT_PRESENT}) public @interface BatteryUpdateType { public @interface BatteryUpdateType { int MANUAL = 0; int MANUAL = 0; Loading @@ -70,7 +67,8 @@ public class BatteryBroadcastReceiver extends BroadcastReceiver { int BATTERY_SAVER = 2; int BATTERY_SAVER = 2; int BATTERY_STATUS = 3; int BATTERY_STATUS = 3; int BATTERY_HEALTH = 4; int BATTERY_HEALTH = 4; int BATTERY_NOT_PRESENT = 5; int CHARGING_STATUS = 5; int BATTERY_NOT_PRESENT = 6; } } @VisibleForTesting @VisibleForTesting Loading @@ -78,6 +76,8 @@ public class BatteryBroadcastReceiver extends BroadcastReceiver { @VisibleForTesting @VisibleForTesting String mBatteryStatus; String mBatteryStatus; @VisibleForTesting @VisibleForTesting int mChargingStatus; @VisibleForTesting int mBatteryHealth; int mBatteryHealth; private OnBatteryChangedListener mBatteryListener; private OnBatteryChangedListener mBatteryListener; private Context mContext; private Context mContext; Loading Loading @@ -121,21 +121,27 @@ public class BatteryBroadcastReceiver extends BroadcastReceiver { final String batteryLevel = Utils.getBatteryPercentage(intent); final String batteryLevel = Utils.getBatteryPercentage(intent); final String batteryStatus = final String batteryStatus = Utils.getBatteryStatus(mContext, intent, /* compactStatus= */ false); Utils.getBatteryStatus(mContext, intent, /* compactStatus= */ false); final int chargingStatus = intent.getIntExtra( BatteryManager.EXTRA_CHARGING_STATUS, BatteryManager.CHARGING_POLICY_DEFAULT); final int batteryHealth = intent.getIntExtra( final int batteryHealth = intent.getIntExtra( BatteryManager.EXTRA_HEALTH, BatteryManager.BATTERY_HEALTH_UNKNOWN); BatteryManager.EXTRA_HEALTH, BatteryManager.BATTERY_HEALTH_UNKNOWN); Log.d( Log.d( TAG, TAG, "Battery changed: level=" "Battery changed: level: " + batteryLevel + batteryLevel + ", status=" + "| status: " + batteryStatus + batteryStatus + ", health=" + "| chargingStatus: " + chargingStatus + "| health: " + batteryHealth); + batteryHealth); if (!Utils.isBatteryPresent(intent)) { if (!Utils.isBatteryPresent(intent)) { Log.w(TAG, "Problem reading the battery meter."); Log.w(TAG, "Problem reading the battery meter."); mBatteryListener.onBatteryChanged(BatteryUpdateType.BATTERY_NOT_PRESENT); mBatteryListener.onBatteryChanged(BatteryUpdateType.BATTERY_NOT_PRESENT); } else if (forceUpdate) { } else if (forceUpdate) { mBatteryListener.onBatteryChanged(BatteryUpdateType.MANUAL); mBatteryListener.onBatteryChanged(BatteryUpdateType.MANUAL); } else if (chargingStatus != mChargingStatus) { mBatteryListener.onBatteryChanged(BatteryUpdateType.CHARGING_STATUS); } else if (batteryHealth != mBatteryHealth) { } else if (batteryHealth != mBatteryHealth) { mBatteryListener.onBatteryChanged(BatteryUpdateType.BATTERY_HEALTH); mBatteryListener.onBatteryChanged(BatteryUpdateType.BATTERY_HEALTH); } else if(!batteryLevel.equals(mBatteryLevel)) { } else if(!batteryLevel.equals(mBatteryLevel)) { Loading @@ -145,6 +151,7 @@ public class BatteryBroadcastReceiver extends BroadcastReceiver { } } mBatteryLevel = batteryLevel; mBatteryLevel = batteryLevel; mBatteryStatus = batteryStatus; mBatteryStatus = batteryStatus; mChargingStatus = chargingStatus; mBatteryHealth = batteryHealth; mBatteryHealth = batteryHealth; } else if (PowerManager.ACTION_POWER_SAVE_MODE_CHANGED.equals(action)) { } else if (PowerManager.ACTION_POWER_SAVE_MODE_CHANGED.equals(action)) { mBatteryListener.onBatteryChanged(BatteryUpdateType.BATTERY_SAVER); mBatteryListener.onBatteryChanged(BatteryUpdateType.BATTERY_SAVER); Loading
src/com/android/settings/fuelgauge/BatteryInfo.java +5 −5 Original line number Original line Diff line number Diff line Loading @@ -51,7 +51,7 @@ public class BatteryInfo { public int batteryStatus; public int batteryStatus; public int pluggedStatus; public int pluggedStatus; public boolean discharging = true; public boolean discharging = true; public boolean isOverheated; public boolean isBatteryDefender; public long remainingTimeUs = 0; public long remainingTimeUs = 0; public long averageTimeToDischarge = EstimateKt.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN; public long averageTimeToDischarge = EstimateKt.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN; public String batteryPercentString; public String batteryPercentString; Loading Loading @@ -257,9 +257,9 @@ public class BatteryInfo { info.pluggedStatus = batteryBroadcast.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0); info.pluggedStatus = batteryBroadcast.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0); info.mCharging = info.pluggedStatus != 0; info.mCharging = info.pluggedStatus != 0; info.averageTimeToDischarge = estimate.getAverageDischargeTime(); info.averageTimeToDischarge = estimate.getAverageDischargeTime(); info.isOverheated = batteryBroadcast.getIntExtra( info.isBatteryDefender = batteryBroadcast.getIntExtra( BatteryManager.EXTRA_HEALTH, BatteryManager.BATTERY_HEALTH_UNKNOWN) BatteryManager.EXTRA_CHARGING_STATUS, BatteryManager.CHARGING_POLICY_DEFAULT) == BatteryManager.BATTERY_HEALTH_OVERHEAT; == BatteryManager.CHARGING_POLICY_ADAPTIVE_LONGLIFE; info.statusLabel = Utils.getBatteryStatus(context, batteryBroadcast, isCompactStatus); info.statusLabel = Utils.getBatteryStatus(context, batteryBroadcast, isCompactStatus); info.batteryStatus = batteryBroadcast.getIntExtra( info.batteryStatus = batteryBroadcast.getIntExtra( Loading @@ -283,7 +283,7 @@ public class BatteryInfo { info.discharging = false; info.discharging = false; info.suggestionLabel = null; info.suggestionLabel = null; int dockDefenderMode = BatteryUtils.getCurrentDockDefenderMode(context, info); int dockDefenderMode = BatteryUtils.getCurrentDockDefenderMode(context, info); if ((info.isOverheated && status != BatteryManager.BATTERY_STATUS_FULL if ((info.isBatteryDefender && status != BatteryManager.BATTERY_STATUS_FULL && dockDefenderMode == BatteryUtils.DockDefenderMode.DISABLED) && dockDefenderMode == BatteryUtils.DockDefenderMode.DISABLED) || dockDefenderMode == BatteryUtils.DockDefenderMode.ACTIVE) { || dockDefenderMode == BatteryUtils.DockDefenderMode.ACTIVE) { // Battery defender active, battery charging paused // Battery defender active, battery charging paused Loading
src/com/android/settings/fuelgauge/BatteryUtils.java +4 −5 Original line number Original line Diff line number Diff line Loading @@ -18,7 +18,6 @@ package com.android.settings.fuelgauge; import android.app.AppOpsManager; import android.app.AppOpsManager; import android.content.Context; import android.content.Context; import android.content.Intent; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo; import android.content.pm.InstallSourceInfo; import android.content.pm.InstallSourceInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageInfo; Loading Loading @@ -322,10 +321,10 @@ public class BatteryUtils { } } /** /** * Return {@code true} if battery is overheated and charging. * Return {@code true} if battery defender is on and charging. */ */ public static boolean isBatteryDefenderOn(BatteryInfo batteryInfo) { public static boolean isBatteryDefenderOn(BatteryInfo batteryInfo) { return batteryInfo.isOverheated && !batteryInfo.discharging; return batteryInfo.isBatteryDefender && !batteryInfo.discharging; } } /** /** Loading Loading @@ -627,11 +626,11 @@ public class BatteryUtils { if (Settings.Global.getInt(context.getContentResolver(), if (Settings.Global.getInt(context.getContentResolver(), SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS, 0) == 1) { SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS, 0) == 1) { return DockDefenderMode.TEMPORARILY_BYPASSED; return DockDefenderMode.TEMPORARILY_BYPASSED; } else if (batteryInfo.isOverheated && FeatureFactory.getFactory(context) } else if (batteryInfo.isBatteryDefender && FeatureFactory.getFactory(context) .getPowerUsageFeatureProvider(context) .getPowerUsageFeatureProvider(context) .isExtraDefend()) { .isExtraDefend()) { return DockDefenderMode.ACTIVE; return DockDefenderMode.ACTIVE; } else if (!batteryInfo.isOverheated) { } else if (!batteryInfo.isBatteryDefender) { return DockDefenderMode.FUTURE_BYPASS; return DockDefenderMode.FUTURE_BYPASS; } } } } Loading
src/com/android/settings/fuelgauge/batterytip/detectors/BatteryDefenderDetector.java +7 −8 Original line number Original line Diff line number Diff line Loading @@ -37,9 +37,8 @@ public class BatteryDefenderDetector implements BatteryTipDetector { @Override @Override public BatteryTip detect() { public BatteryTip detect() { final boolean isBasicBatteryDefend = mBatteryInfo.isOverheated final boolean isBasicBatteryDefend = mBatteryInfo.isBatteryDefender && !FeatureFactory.getFactory(mContext) && !FeatureFactory.getFactory(mContext).getPowerUsageFeatureProvider(mContext) .getPowerUsageFeatureProvider(mContext) .isExtraDefend(); .isExtraDefend(); final int state = isBasicBatteryDefend final int state = isBasicBatteryDefend ? BatteryTip.StateType.NEW : BatteryTip.StateType.INVISIBLE; ? BatteryTip.StateType.NEW : BatteryTip.StateType.INVISIBLE; Loading
tests/robotests/src/com/android/settings/fuelgauge/BatteryBroadcastReceiverTest.java +18 −2 Original line number Original line Diff line number Diff line Loading @@ -69,6 +69,7 @@ public class BatteryBroadcastReceiverTest { mBatteryBroadcastReceiver.mBatteryLevel = BATTERY_INIT_LEVEL; mBatteryBroadcastReceiver.mBatteryLevel = BATTERY_INIT_LEVEL; mBatteryBroadcastReceiver.mBatteryStatus = BATTERY_INIT_STATUS; mBatteryBroadcastReceiver.mBatteryStatus = BATTERY_INIT_STATUS; mBatteryBroadcastReceiver.mBatteryHealth = BatteryManager.BATTERY_HEALTH_UNKNOWN; mBatteryBroadcastReceiver.mBatteryHealth = BatteryManager.BATTERY_HEALTH_UNKNOWN; mBatteryBroadcastReceiver.mChargingStatus = BatteryManager.CHARGING_POLICY_DEFAULT; mBatteryBroadcastReceiver.setBatteryChangedListener(mBatteryListener); mBatteryBroadcastReceiver.setBatteryChangedListener(mBatteryListener); mChargingIntent = new Intent(Intent.ACTION_BATTERY_CHANGED); mChargingIntent = new Intent(Intent.ACTION_BATTERY_CHANGED); Loading @@ -91,8 +92,8 @@ public class BatteryBroadcastReceiverTest { @Test @Test public void onReceive_batteryHealthChanged_dataUpdated() { public void onReceive_batteryHealthChanged_dataUpdated() { mChargingIntent mChargingIntent.putExtra( .putExtra(BatteryManager.EXTRA_HEALTH, BatteryManager.BATTERY_HEALTH_OVERHEAT); BatteryManager.EXTRA_HEALTH, BatteryManager.BATTERY_HEALTH_OVERHEAT); mBatteryBroadcastReceiver.onReceive(mContext, mChargingIntent); mBatteryBroadcastReceiver.onReceive(mContext, mChargingIntent); assertThat(mBatteryBroadcastReceiver.mBatteryHealth) assertThat(mBatteryBroadcastReceiver.mBatteryHealth) Loading @@ -100,6 +101,17 @@ public class BatteryBroadcastReceiverTest { verify(mBatteryListener).onBatteryChanged(BatteryUpdateType.BATTERY_HEALTH); verify(mBatteryListener).onBatteryChanged(BatteryUpdateType.BATTERY_HEALTH); } } @Test public void onReceive_chargingStatusChanged_dataUpdated() { mChargingIntent.putExtra(BatteryManager.EXTRA_CHARGING_STATUS, BatteryManager.CHARGING_POLICY_ADAPTIVE_LONGLIFE); mBatteryBroadcastReceiver.onReceive(mContext, mChargingIntent); assertThat(mBatteryBroadcastReceiver.mChargingStatus) .isEqualTo(BatteryManager.CHARGING_POLICY_ADAPTIVE_LONGLIFE); verify(mBatteryListener).onBatteryChanged(BatteryUpdateType.CHARGING_STATUS); } @Test @Test public void onReceive_batteryNotPresent_shouldShowHelpMessage() { public void onReceive_batteryNotPresent_shouldShowHelpMessage() { mChargingIntent.putExtra(BatteryManager.EXTRA_PRESENT, false); mChargingIntent.putExtra(BatteryManager.EXTRA_PRESENT, false); Loading Loading @@ -131,6 +143,8 @@ public class BatteryBroadcastReceiverTest { assertThat(mBatteryBroadcastReceiver.mBatteryStatus).isEqualTo(batteryStatus); assertThat(mBatteryBroadcastReceiver.mBatteryStatus).isEqualTo(batteryStatus); assertThat(mBatteryBroadcastReceiver.mBatteryHealth) assertThat(mBatteryBroadcastReceiver.mBatteryHealth) .isEqualTo(BatteryManager.BATTERY_HEALTH_UNKNOWN); .isEqualTo(BatteryManager.BATTERY_HEALTH_UNKNOWN); assertThat(mBatteryBroadcastReceiver.mChargingStatus) .isEqualTo(BatteryManager.CHARGING_POLICY_DEFAULT); verify(mBatteryListener, never()).onBatteryChanged(anyInt()); verify(mBatteryListener, never()).onBatteryChanged(anyInt()); } } Loading Loading @@ -163,6 +177,8 @@ public class BatteryBroadcastReceiverTest { Utils.getBatteryStatus(mContext, mChargingIntent, /* compactStatus= */ false)); Utils.getBatteryStatus(mContext, mChargingIntent, /* compactStatus= */ false)); assertThat(mBatteryBroadcastReceiver.mBatteryHealth) assertThat(mBatteryBroadcastReceiver.mBatteryHealth) .isEqualTo(BatteryManager.BATTERY_HEALTH_UNKNOWN); .isEqualTo(BatteryManager.BATTERY_HEALTH_UNKNOWN); assertThat(mBatteryBroadcastReceiver.mChargingStatus) .isEqualTo(BatteryManager.CHARGING_POLICY_DEFAULT); // 2 times because register will force update the battery // 2 times because register will force update the battery verify(mBatteryListener, times(2)).onBatteryChanged(BatteryUpdateType.MANUAL); verify(mBatteryListener, times(2)).onBatteryChanged(BatteryUpdateType.MANUAL); } } Loading