Loading res/values/strings.xml +2 −0 Original line number Original line Diff line number Diff line Loading @@ -7193,6 +7193,8 @@ <string name="help_url_sound" translatable="false"></string> <string name="help_url_sound" translatable="false"></string> <!-- Help URL, Battery [DO NOT TRANSLATE] --> <!-- Help URL, Battery [DO NOT TRANSLATE] --> <string name="help_url_battery" translatable="false"></string> <string name="help_url_battery" translatable="false"></string> <!-- Help URL, Battery Defender [DO NOT TRANSLATE] --> <string name="help_url_battery_defender" translatable="false"></string> <!-- Help URL, Accounts [DO NOT TRANSLATE] --> <!-- Help URL, Accounts [DO NOT TRANSLATE] --> <string name="help_url_accounts" translatable="false"></string> <string name="help_url_accounts" translatable="false"></string> <!-- Help URL, Choose lockscreen [DO NOT TRANSLATE] --> <!-- Help URL, Choose lockscreen [DO NOT TRANSLATE] --> src/com/android/settings/fuelgauge/BatteryBroadcastReceiver.java +13 −1 Original line number Original line Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Context; import android.content.Intent; import android.content.Intent; import android.content.IntentFilter; import android.content.IntentFilter; import android.os.BatteryManager; import android.os.PowerManager; import android.os.PowerManager; import android.util.Log; import android.util.Log; Loading @@ -39,6 +40,7 @@ import java.lang.annotation.RetentionPolicy; * 1. Battery level(e.g. 100%->99%) * 1. Battery level(e.g. 100%->99%) * 2. Battery status(e.g. plugged->unplugged) * 2. Battery status(e.g. plugged->unplugged) * 3. Battery saver(e.g. off->on) * 3. Battery saver(e.g. off->on) * 4. Battery health(e.g. good->overheat) */ */ public class BatteryBroadcastReceiver extends BroadcastReceiver { public class BatteryBroadcastReceiver extends BroadcastReceiver { Loading @@ -49,6 +51,7 @@ public class BatteryBroadcastReceiver extends BroadcastReceiver { * 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) */ */ public interface OnBatteryChangedListener { public interface OnBatteryChangedListener { void onBatteryChanged(@BatteryUpdateType int type); void onBatteryChanged(@BatteryUpdateType int type); Loading @@ -59,19 +62,23 @@ public class BatteryBroadcastReceiver extends BroadcastReceiver { BatteryUpdateType.BATTERY_LEVEL, BatteryUpdateType.BATTERY_LEVEL, BatteryUpdateType.BATTERY_SAVER, BatteryUpdateType.BATTERY_SAVER, BatteryUpdateType.BATTERY_STATUS, BatteryUpdateType.BATTERY_STATUS, BatteryUpdateType.BATTERY_HEALTH, BatteryUpdateType.BATTERY_NOT_PRESENT}) BatteryUpdateType.BATTERY_NOT_PRESENT}) public @interface BatteryUpdateType { public @interface BatteryUpdateType { int MANUAL = 0; int MANUAL = 0; int BATTERY_LEVEL = 1; int BATTERY_LEVEL = 1; int BATTERY_SAVER = 2; int BATTERY_SAVER = 2; int BATTERY_STATUS = 3; int BATTERY_STATUS = 3; int BATTERY_NOT_PRESENT = 4; int BATTERY_HEALTH = 4; int BATTERY_NOT_PRESENT = 5; } } @VisibleForTesting @VisibleForTesting String mBatteryLevel; String mBatteryLevel; @VisibleForTesting @VisibleForTesting String mBatteryStatus; String mBatteryStatus; @VisibleForTesting int mBatteryHealth; private OnBatteryChangedListener mBatteryListener; private OnBatteryChangedListener mBatteryListener; private Context mContext; private Context mContext; Loading Loading @@ -106,11 +113,15 @@ public class BatteryBroadcastReceiver extends BroadcastReceiver { if (Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())) { if (Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())) { final String batteryLevel = Utils.getBatteryPercentage(intent); final String batteryLevel = Utils.getBatteryPercentage(intent); final String batteryStatus = Utils.getBatteryStatus(mContext, intent); final String batteryStatus = Utils.getBatteryStatus(mContext, intent); final int batteryHealth = intent.getIntExtra( BatteryManager.EXTRA_HEALTH, BatteryManager.BATTERY_HEALTH_UNKNOWN); 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 (batteryHealth != mBatteryHealth) { mBatteryListener.onBatteryChanged(BatteryUpdateType.BATTERY_HEALTH); } else if(!batteryLevel.equals(mBatteryLevel)) { } else if(!batteryLevel.equals(mBatteryLevel)) { mBatteryListener.onBatteryChanged(BatteryUpdateType.BATTERY_LEVEL); mBatteryListener.onBatteryChanged(BatteryUpdateType.BATTERY_LEVEL); } else if (!batteryStatus.equals(mBatteryStatus)) { } else if (!batteryStatus.equals(mBatteryStatus)) { Loading @@ -118,6 +129,7 @@ public class BatteryBroadcastReceiver extends BroadcastReceiver { } } mBatteryLevel = batteryLevel; mBatteryLevel = batteryLevel; mBatteryStatus = batteryStatus; mBatteryStatus = batteryStatus; mBatteryHealth = batteryHealth; } else if (PowerManager.ACTION_POWER_SAVE_MODE_CHANGED.equals(intent.getAction())) { } else if (PowerManager.ACTION_POWER_SAVE_MODE_CHANGED.equals(intent.getAction())) { mBatteryListener.onBatteryChanged(BatteryUpdateType.BATTERY_SAVER); mBatteryListener.onBatteryChanged(BatteryUpdateType.BATTERY_SAVER); } } Loading src/com/android/settings/fuelgauge/BatteryHeaderPreferenceController.java +3 −1 Original line number Original line Diff line number Diff line Loading @@ -124,7 +124,9 @@ public class BatteryHeaderPreferenceController extends BasePreferenceController public void updateHeaderPreference(BatteryInfo info) { public void updateHeaderPreference(BatteryInfo info) { mBatteryPercentText.setText(formatBatteryPercentageText(info.batteryLevel)); mBatteryPercentText.setText(formatBatteryPercentageText(info.batteryLevel)); if (!mBatteryStatusFeatureProvider.triggerBatteryStatusUpdate(this, info)) { if (!mBatteryStatusFeatureProvider.triggerBatteryStatusUpdate(this, info)) { if (info.remainingLabel == null) { if (BatteryUtils.isBatteryDefenderOn(info)) { mSummary1.setText(null); } else if (info.remainingLabel == null) { mSummary1.setText(info.statusLabel); mSummary1.setText(info.statusLabel); } else { } else { mSummary1.setText(info.remainingLabel); mSummary1.setText(info.remainingLabel); Loading src/com/android/settings/fuelgauge/BatteryInfo.java +10 −1 Original line number Original line Diff line number Diff line Loading @@ -45,6 +45,7 @@ public class BatteryInfo { public CharSequence remainingLabel; public CharSequence remainingLabel; public int batteryLevel; public int batteryLevel; public boolean discharging = true; public boolean discharging = true; public boolean isOverheated; 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 @@ -232,6 +233,9 @@ public class BatteryInfo { info.batteryPercentString = Utils.formatPercentage(info.batteryLevel); info.batteryPercentString = Utils.formatPercentage(info.batteryLevel); info.mCharging = batteryBroadcast.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0) != 0; info.mCharging = batteryBroadcast.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0) != 0; info.averageTimeToDischarge = estimate.getAverageDischargeTime(); info.averageTimeToDischarge = estimate.getAverageDischargeTime(); info.isOverheated = batteryBroadcast.getIntExtra( BatteryManager.EXTRA_HEALTH, BatteryManager.BATTERY_HEALTH_UNKNOWN) == BatteryManager.BATTERY_HEALTH_OVERHEAT; info.statusLabel = Utils.getBatteryStatus(context, batteryBroadcast); info.statusLabel = Utils.getBatteryStatus(context, batteryBroadcast); if (!info.mCharging) { if (!info.mCharging) { Loading @@ -251,7 +255,12 @@ public class BatteryInfo { BatteryManager.BATTERY_STATUS_UNKNOWN); BatteryManager.BATTERY_STATUS_UNKNOWN); info.discharging = false; info.discharging = false; info.suggestionLabel = null; info.suggestionLabel = null; if (chargeTime > 0 && status != BatteryManager.BATTERY_STATUS_FULL) { if (info.isOverheated && status != BatteryManager.BATTERY_STATUS_FULL) { info.remainingLabel = null; int chargingLimitedResId = R.string.power_charging_limited; info.chargeLabel = context.getString(chargingLimitedResId, info.batteryPercentString); } else if (chargeTime > 0 && status != BatteryManager.BATTERY_STATUS_FULL) { info.remainingTimeUs = chargeTime; info.remainingTimeUs = chargeTime; CharSequence timeString = StringUtil.formatElapsedTime(context, CharSequence timeString = StringUtil.formatElapsedTime(context, PowerUtil.convertUsToMs(info.remainingTimeUs), false /* withSeconds */); PowerUtil.convertUsToMs(info.remainingTimeUs), false /* withSeconds */); Loading src/com/android/settings/fuelgauge/BatteryUtils.java +7 −0 Original line number Original line Diff line number Diff line Loading @@ -403,6 +403,13 @@ public class BatteryUtils { Log.d(tag, message + ": " + (System.currentTimeMillis() - startTime) + "ms"); Log.d(tag, message + ": " + (System.currentTimeMillis() - startTime) + "ms"); } } /** * Return {@code true} if battery is overheated and charging. */ public static boolean isBatteryDefenderOn(BatteryInfo batteryInfo) { return batteryInfo.isOverheated && !batteryInfo.discharging; } /** /** * Find package uid from package name * Find package uid from package name * * Loading Loading
res/values/strings.xml +2 −0 Original line number Original line Diff line number Diff line Loading @@ -7193,6 +7193,8 @@ <string name="help_url_sound" translatable="false"></string> <string name="help_url_sound" translatable="false"></string> <!-- Help URL, Battery [DO NOT TRANSLATE] --> <!-- Help URL, Battery [DO NOT TRANSLATE] --> <string name="help_url_battery" translatable="false"></string> <string name="help_url_battery" translatable="false"></string> <!-- Help URL, Battery Defender [DO NOT TRANSLATE] --> <string name="help_url_battery_defender" translatable="false"></string> <!-- Help URL, Accounts [DO NOT TRANSLATE] --> <!-- Help URL, Accounts [DO NOT TRANSLATE] --> <string name="help_url_accounts" translatable="false"></string> <string name="help_url_accounts" translatable="false"></string> <!-- Help URL, Choose lockscreen [DO NOT TRANSLATE] --> <!-- Help URL, Choose lockscreen [DO NOT TRANSLATE] -->
src/com/android/settings/fuelgauge/BatteryBroadcastReceiver.java +13 −1 Original line number Original line Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Context; import android.content.Intent; import android.content.Intent; import android.content.IntentFilter; import android.content.IntentFilter; import android.os.BatteryManager; import android.os.PowerManager; import android.os.PowerManager; import android.util.Log; import android.util.Log; Loading @@ -39,6 +40,7 @@ import java.lang.annotation.RetentionPolicy; * 1. Battery level(e.g. 100%->99%) * 1. Battery level(e.g. 100%->99%) * 2. Battery status(e.g. plugged->unplugged) * 2. Battery status(e.g. plugged->unplugged) * 3. Battery saver(e.g. off->on) * 3. Battery saver(e.g. off->on) * 4. Battery health(e.g. good->overheat) */ */ public class BatteryBroadcastReceiver extends BroadcastReceiver { public class BatteryBroadcastReceiver extends BroadcastReceiver { Loading @@ -49,6 +51,7 @@ public class BatteryBroadcastReceiver extends BroadcastReceiver { * 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) */ */ public interface OnBatteryChangedListener { public interface OnBatteryChangedListener { void onBatteryChanged(@BatteryUpdateType int type); void onBatteryChanged(@BatteryUpdateType int type); Loading @@ -59,19 +62,23 @@ public class BatteryBroadcastReceiver extends BroadcastReceiver { BatteryUpdateType.BATTERY_LEVEL, BatteryUpdateType.BATTERY_LEVEL, BatteryUpdateType.BATTERY_SAVER, BatteryUpdateType.BATTERY_SAVER, BatteryUpdateType.BATTERY_STATUS, BatteryUpdateType.BATTERY_STATUS, BatteryUpdateType.BATTERY_HEALTH, BatteryUpdateType.BATTERY_NOT_PRESENT}) BatteryUpdateType.BATTERY_NOT_PRESENT}) public @interface BatteryUpdateType { public @interface BatteryUpdateType { int MANUAL = 0; int MANUAL = 0; int BATTERY_LEVEL = 1; int BATTERY_LEVEL = 1; int BATTERY_SAVER = 2; int BATTERY_SAVER = 2; int BATTERY_STATUS = 3; int BATTERY_STATUS = 3; int BATTERY_NOT_PRESENT = 4; int BATTERY_HEALTH = 4; int BATTERY_NOT_PRESENT = 5; } } @VisibleForTesting @VisibleForTesting String mBatteryLevel; String mBatteryLevel; @VisibleForTesting @VisibleForTesting String mBatteryStatus; String mBatteryStatus; @VisibleForTesting int mBatteryHealth; private OnBatteryChangedListener mBatteryListener; private OnBatteryChangedListener mBatteryListener; private Context mContext; private Context mContext; Loading Loading @@ -106,11 +113,15 @@ public class BatteryBroadcastReceiver extends BroadcastReceiver { if (Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())) { if (Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())) { final String batteryLevel = Utils.getBatteryPercentage(intent); final String batteryLevel = Utils.getBatteryPercentage(intent); final String batteryStatus = Utils.getBatteryStatus(mContext, intent); final String batteryStatus = Utils.getBatteryStatus(mContext, intent); final int batteryHealth = intent.getIntExtra( BatteryManager.EXTRA_HEALTH, BatteryManager.BATTERY_HEALTH_UNKNOWN); 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 (batteryHealth != mBatteryHealth) { mBatteryListener.onBatteryChanged(BatteryUpdateType.BATTERY_HEALTH); } else if(!batteryLevel.equals(mBatteryLevel)) { } else if(!batteryLevel.equals(mBatteryLevel)) { mBatteryListener.onBatteryChanged(BatteryUpdateType.BATTERY_LEVEL); mBatteryListener.onBatteryChanged(BatteryUpdateType.BATTERY_LEVEL); } else if (!batteryStatus.equals(mBatteryStatus)) { } else if (!batteryStatus.equals(mBatteryStatus)) { Loading @@ -118,6 +129,7 @@ public class BatteryBroadcastReceiver extends BroadcastReceiver { } } mBatteryLevel = batteryLevel; mBatteryLevel = batteryLevel; mBatteryStatus = batteryStatus; mBatteryStatus = batteryStatus; mBatteryHealth = batteryHealth; } else if (PowerManager.ACTION_POWER_SAVE_MODE_CHANGED.equals(intent.getAction())) { } else if (PowerManager.ACTION_POWER_SAVE_MODE_CHANGED.equals(intent.getAction())) { mBatteryListener.onBatteryChanged(BatteryUpdateType.BATTERY_SAVER); mBatteryListener.onBatteryChanged(BatteryUpdateType.BATTERY_SAVER); } } Loading
src/com/android/settings/fuelgauge/BatteryHeaderPreferenceController.java +3 −1 Original line number Original line Diff line number Diff line Loading @@ -124,7 +124,9 @@ public class BatteryHeaderPreferenceController extends BasePreferenceController public void updateHeaderPreference(BatteryInfo info) { public void updateHeaderPreference(BatteryInfo info) { mBatteryPercentText.setText(formatBatteryPercentageText(info.batteryLevel)); mBatteryPercentText.setText(formatBatteryPercentageText(info.batteryLevel)); if (!mBatteryStatusFeatureProvider.triggerBatteryStatusUpdate(this, info)) { if (!mBatteryStatusFeatureProvider.triggerBatteryStatusUpdate(this, info)) { if (info.remainingLabel == null) { if (BatteryUtils.isBatteryDefenderOn(info)) { mSummary1.setText(null); } else if (info.remainingLabel == null) { mSummary1.setText(info.statusLabel); mSummary1.setText(info.statusLabel); } else { } else { mSummary1.setText(info.remainingLabel); mSummary1.setText(info.remainingLabel); Loading
src/com/android/settings/fuelgauge/BatteryInfo.java +10 −1 Original line number Original line Diff line number Diff line Loading @@ -45,6 +45,7 @@ public class BatteryInfo { public CharSequence remainingLabel; public CharSequence remainingLabel; public int batteryLevel; public int batteryLevel; public boolean discharging = true; public boolean discharging = true; public boolean isOverheated; 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 @@ -232,6 +233,9 @@ public class BatteryInfo { info.batteryPercentString = Utils.formatPercentage(info.batteryLevel); info.batteryPercentString = Utils.formatPercentage(info.batteryLevel); info.mCharging = batteryBroadcast.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0) != 0; info.mCharging = batteryBroadcast.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0) != 0; info.averageTimeToDischarge = estimate.getAverageDischargeTime(); info.averageTimeToDischarge = estimate.getAverageDischargeTime(); info.isOverheated = batteryBroadcast.getIntExtra( BatteryManager.EXTRA_HEALTH, BatteryManager.BATTERY_HEALTH_UNKNOWN) == BatteryManager.BATTERY_HEALTH_OVERHEAT; info.statusLabel = Utils.getBatteryStatus(context, batteryBroadcast); info.statusLabel = Utils.getBatteryStatus(context, batteryBroadcast); if (!info.mCharging) { if (!info.mCharging) { Loading @@ -251,7 +255,12 @@ public class BatteryInfo { BatteryManager.BATTERY_STATUS_UNKNOWN); BatteryManager.BATTERY_STATUS_UNKNOWN); info.discharging = false; info.discharging = false; info.suggestionLabel = null; info.suggestionLabel = null; if (chargeTime > 0 && status != BatteryManager.BATTERY_STATUS_FULL) { if (info.isOverheated && status != BatteryManager.BATTERY_STATUS_FULL) { info.remainingLabel = null; int chargingLimitedResId = R.string.power_charging_limited; info.chargeLabel = context.getString(chargingLimitedResId, info.batteryPercentString); } else if (chargeTime > 0 && status != BatteryManager.BATTERY_STATUS_FULL) { info.remainingTimeUs = chargeTime; info.remainingTimeUs = chargeTime; CharSequence timeString = StringUtil.formatElapsedTime(context, CharSequence timeString = StringUtil.formatElapsedTime(context, PowerUtil.convertUsToMs(info.remainingTimeUs), false /* withSeconds */); PowerUtil.convertUsToMs(info.remainingTimeUs), false /* withSeconds */); Loading
src/com/android/settings/fuelgauge/BatteryUtils.java +7 −0 Original line number Original line Diff line number Diff line Loading @@ -403,6 +403,13 @@ public class BatteryUtils { Log.d(tag, message + ": " + (System.currentTimeMillis() - startTime) + "ms"); Log.d(tag, message + ": " + (System.currentTimeMillis() - startTime) + "ms"); } } /** * Return {@code true} if battery is overheated and charging. */ public static boolean isBatteryDefenderOn(BatteryInfo batteryInfo) { return batteryInfo.isOverheated && !batteryInfo.discharging; } /** /** * Find package uid from package name * Find package uid from package name * * Loading