diff options
6 files changed, 63 insertions, 4 deletions
diff --git a/core/java/android/os/BatteryManager.java b/core/java/android/os/BatteryManager.java index 6d4593a2ce87..9702104321b5 100644 --- a/core/java/android/os/BatteryManager.java +++ b/core/java/android/os/BatteryManager.java @@ -163,6 +163,13 @@ public class BatteryManager { @SystemApi public static final String EXTRA_EVENT_TIMESTAMP = "android.os.extra.EVENT_TIMESTAMP"; + /** + * Extra for {@link android.content.Intent#ACTION_BATTERY_CHANGED}: + * boolean value to indicate OEM fast charging + * {@hide} + */ + public static final String EXTRA_OEM_FAST_CHARGER = "oem_fast_charger"; + // values for "status" field in the ACTION_BATTERY_CHANGED Intent public static final int BATTERY_STATUS_UNKNOWN = Constants.BATTERY_STATUS_UNKNOWN; public static final int BATTERY_STATUS_CHARGING = Constants.BATTERY_STATUS_CHARGING; diff --git a/core/res/res/values/ice_config.xml b/core/res/res/values/ice_config.xml index ee314977e8d9..ecf14aeb4fa3 100644 --- a/core/res/res/values/ice_config.xml +++ b/core/res/res/values/ice_config.xml @@ -39,4 +39,10 @@ <!-- Names of the key handler classes --> <string-array name="config_deviceKeyHandlerClasses" translatable="false"> </string-array> + + <!-- Path to fast charging status file to detect whether an oem fast charger is active --> + <string name="config_oemFastChargerStatusPath" translatable="false"></string> + + <!-- Expected value from fast charging status file --> + <string name="config_oemFastChargerStatusValue" translatable="false">1</string> </resources> diff --git a/core/res/res/values/ice_symbols.xml b/core/res/res/values/ice_symbols.xml index 8c5a79decaaa..4a17132148c1 100644 --- a/core/res/res/values/ice_symbols.xml +++ b/core/res/res/values/ice_symbols.xml @@ -25,4 +25,10 @@ <!-- Device keyhandlers --> <java-symbol type="array" name="config_deviceKeyHandlerLibs" /> <java-symbol type="array" name="config_deviceKeyHandlerClasses" /> + + <!-- Path to fast charging status file to detect whether an oem fast charger is active --> + <java-symbol type="string" name="config_oemFastChargerStatusPath" /> + + <!-- Expected value from fast charging status file --> + <java-symbol type="string" name="config_oemFastChargerStatusValue" /> </resources> diff --git a/packages/SettingsLib/src/com/android/settingslib/fuelgauge/BatteryStatus.java b/packages/SettingsLib/src/com/android/settingslib/fuelgauge/BatteryStatus.java index b56ae3864fb7..63e0673459b2 100644 --- a/packages/SettingsLib/src/com/android/settingslib/fuelgauge/BatteryStatus.java +++ b/packages/SettingsLib/src/com/android/settingslib/fuelgauge/BatteryStatus.java @@ -27,6 +27,7 @@ import static android.os.BatteryManager.EXTRA_MAX_CHARGING_VOLTAGE; import static android.os.BatteryManager.EXTRA_PLUGGED; import static android.os.BatteryManager.EXTRA_PRESENT; import static android.os.BatteryManager.EXTRA_STATUS; +import static android.os.BatteryManager.EXTRA_OEM_FAST_CHARGER; import android.content.Context; import android.content.Intent; @@ -51,15 +52,17 @@ public class BatteryStatus { public final int plugged; public final int health; public final int maxChargingWattage; + public final boolean oemFastChargeStatus; public final boolean present; public BatteryStatus(int status, int level, int plugged, int health, - int maxChargingWattage, boolean present) { + int maxChargingWattage, boolean oemFastChargeStatus, boolean present) { this.status = status; this.level = level; this.plugged = plugged; this.health = health; this.maxChargingWattage = maxChargingWattage; + this.oemFastChargeStatus = oemFastChargeStatus; this.present = present; } @@ -68,6 +71,7 @@ public class BatteryStatus { plugged = batteryChangedIntent.getIntExtra(EXTRA_PLUGGED, 0); level = batteryChangedIntent.getIntExtra(EXTRA_LEVEL, 0); health = batteryChangedIntent.getIntExtra(EXTRA_HEALTH, BATTERY_HEALTH_UNKNOWN); + oemFastChargeStatus = batteryChangedIntent.getBooleanExtra(EXTRA_OEM_FAST_CHARGER, false); present = batteryChangedIntent.getBooleanExtra(EXTRA_PRESENT, true); final int maxChargingMicroAmp = batteryChangedIntent.getIntExtra(EXTRA_MAX_CHARGING_CURRENT, @@ -152,6 +156,9 @@ public class BatteryStatus { * @return the charing speed */ public final int getChargingSpeed(Context context) { + if (oemFastChargeStatus) { + return CHARGING_FAST; + } final int slowThreshold = context.getResources().getInteger( R.integer.config_chargingSlowlyThreshold); final int fastThreshold = context.getResources().getInteger( diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java index 450949881aa4..df1d818cf318 100755 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java @@ -1928,7 +1928,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab } // Take a guess at initial SIM state, battery status and PLMN until we get an update - mBatteryStatus = new BatteryStatus(BATTERY_STATUS_UNKNOWN, 100, 0, 0, 0, true); + mBatteryStatus = new BatteryStatus(BATTERY_STATUS_UNKNOWN, 100, 0, 0, 0, false, true); // Watch for interesting updates final IntentFilter filter = new IntentFilter(); @@ -3046,6 +3046,11 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab return true; } + // change in oem fast charging while plugged in + if (nowPluggedIn && current.oemFastChargeStatus != old.oemFastChargeStatus) { + return true; + } + // Battery either showed up or disappeared if (wasPresent != nowPresent) { return true; diff --git a/services/core/java/com/android/server/BatteryService.java b/services/core/java/com/android/server/BatteryService.java index 1e608f5c1240..325a02ec0e38 100644 --- a/services/core/java/com/android/server/BatteryService.java +++ b/services/core/java/com/android/server/BatteryService.java @@ -177,6 +177,9 @@ public final class BatteryService extends SystemService { private boolean mBatteryLevelLow; + private boolean mOemFastCharger; + private boolean mLastOemFastCharger; + private long mDischargeStartTime; private int mDischargeStartLevel; @@ -517,6 +520,8 @@ public final class BatteryService extends SystemService { shutdownIfNoPowerLocked(); shutdownIfOverTempLocked(); + mOemFastCharger = isOemFastCharger(); + if (force || (mHealthInfo.batteryStatus != mLastBatteryStatus || mHealthInfo.batteryHealth != mLastBatteryHealth || mHealthInfo.batteryPresent != mLastBatteryPresent || @@ -527,7 +532,8 @@ public final class BatteryService extends SystemService { mHealthInfo.maxChargingCurrent != mLastMaxChargingCurrent || mHealthInfo.maxChargingVoltage != mLastMaxChargingVoltage || mHealthInfo.batteryChargeCounter != mLastChargeCounter || - mInvalidCharger != mLastInvalidCharger)) { + mInvalidCharger != mLastInvalidCharger || + mOemFastCharger != mLastOemFastCharger)) { if (mPlugType != mLastPlugType) { if (mLastPlugType == BATTERY_PLUGGED_NONE) { @@ -698,6 +704,7 @@ public final class BatteryService extends SystemService { mLastChargeCounter = mHealthInfo.batteryChargeCounter; mLastBatteryLevelCritical = mBatteryLevelCritical; mLastInvalidCharger = mInvalidCharger; + mLastOemFastCharger = mOemFastCharger; } } @@ -725,9 +732,11 @@ public final class BatteryService extends SystemService { intent.putExtra(BatteryManager.EXTRA_MAX_CHARGING_CURRENT, mHealthInfo.maxChargingCurrent); intent.putExtra(BatteryManager.EXTRA_MAX_CHARGING_VOLTAGE, mHealthInfo.maxChargingVoltage); intent.putExtra(BatteryManager.EXTRA_CHARGE_COUNTER, mHealthInfo.batteryChargeCounter); + intent.putExtra(BatteryManager.EXTRA_OEM_FAST_CHARGER, mOemFastCharger); if (DEBUG) { Slog.d(TAG, "Sending ACTION_BATTERY_CHANGED. scale:" + BATTERY_SCALE - + ", info:" + mHealthInfo.toString()); + + ", info:" + mHealthInfo.toString() + + ", mOemFastCharger:" + mOemFastCharger); } mHandler.post(() -> ActivityManager.broadcastStickyIntent(intent, UserHandle.USER_ALL)); @@ -779,6 +788,25 @@ public final class BatteryService extends SystemService { mLastBatteryLevelChangedSentMs = SystemClock.elapsedRealtime(); } + private boolean isOemFastCharger() { + final String path = mContext.getResources().getString( + com.android.internal.R.string.config_oemFastChargerStatusPath); + + if (path.isEmpty()) + return false; + + final String value = mContext.getResources().getString( + com.android.internal.R.string.config_oemFastChargerStatusValue); + + try { + return FileUtils.readTextFile(new File(path), value.length(), null).equals(value); + } catch (IOException e) { + Slog.e(TAG, "Failed to read oem fast charger status path: " + path); + } + + return false; + } + // TODO: Current code doesn't work since "--unplugged" flag in BSS was purposefully removed. private void logBatteryStatsLocked() { IBinder batteryInfoService = ServiceManager.getService(BatteryStats.SERVICE_NAME); |