summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/os/BatteryManager.java7
-rw-r--r--core/res/res/values/ice_config.xml6
-rw-r--r--core/res/res/values/ice_symbols.xml6
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/fuelgauge/BatteryStatus.java9
-rwxr-xr-xpackages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java7
-rw-r--r--services/core/java/com/android/server/BatteryService.java32
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);