Merge "Show charging speed on Keyguard" into mnc-dr-dev
This commit is contained in:
@@ -101,6 +101,13 @@ public class BatteryManager {
|
||||
*/
|
||||
public static final String EXTRA_INVALID_CHARGER = "invalid_charger";
|
||||
|
||||
/**
|
||||
* Extra for {@link android.content.Intent#ACTION_BATTERY_CHANGED}:
|
||||
* Int value set to the maximum charging current supported by the charger in micro amperes.
|
||||
* {@hide}
|
||||
*/
|
||||
public static final String EXTRA_MAX_CHARGING_CURRENT = "max_charging_current";
|
||||
|
||||
// values for "status" field in the ACTION_BATTERY_CHANGED Intent
|
||||
public static final int BATTERY_STATUS_UNKNOWN = 1;
|
||||
public static final int BATTERY_STATUS_CHARGING = 2;
|
||||
|
||||
@@ -22,6 +22,7 @@ public class BatteryProperties implements Parcelable {
|
||||
public boolean chargerAcOnline;
|
||||
public boolean chargerUsbOnline;
|
||||
public boolean chargerWirelessOnline;
|
||||
public int maxChargingCurrent;
|
||||
public int batteryStatus;
|
||||
public int batteryHealth;
|
||||
public boolean batteryPresent;
|
||||
@@ -37,6 +38,7 @@ public class BatteryProperties implements Parcelable {
|
||||
chargerAcOnline = other.chargerAcOnline;
|
||||
chargerUsbOnline = other.chargerUsbOnline;
|
||||
chargerWirelessOnline = other.chargerWirelessOnline;
|
||||
maxChargingCurrent = other.maxChargingCurrent;
|
||||
batteryStatus = other.batteryStatus;
|
||||
batteryHealth = other.batteryHealth;
|
||||
batteryPresent = other.batteryPresent;
|
||||
@@ -55,6 +57,7 @@ public class BatteryProperties implements Parcelable {
|
||||
chargerAcOnline = p.readInt() == 1 ? true : false;
|
||||
chargerUsbOnline = p.readInt() == 1 ? true : false;
|
||||
chargerWirelessOnline = p.readInt() == 1 ? true : false;
|
||||
maxChargingCurrent = p.readInt();
|
||||
batteryStatus = p.readInt();
|
||||
batteryHealth = p.readInt();
|
||||
batteryPresent = p.readInt() == 1 ? true : false;
|
||||
@@ -68,6 +71,7 @@ public class BatteryProperties implements Parcelable {
|
||||
p.writeInt(chargerAcOnline ? 1 : 0);
|
||||
p.writeInt(chargerUsbOnline ? 1 : 0);
|
||||
p.writeInt(chargerWirelessOnline ? 1 : 0);
|
||||
p.writeInt(maxChargingCurrent);
|
||||
p.writeInt(batteryStatus);
|
||||
p.writeInt(batteryHealth);
|
||||
p.writeInt(batteryPresent ? 1 : 0);
|
||||
|
||||
@@ -22,4 +22,10 @@
|
||||
|
||||
<!-- Allow the menu hard key to be disabled in LockScreen on some devices [DO NOT TRANSLATE] -->
|
||||
<bool name="config_disableMenuKeyInLockScreen">false</bool>
|
||||
|
||||
<!-- Threshold in micro amperes below which a charger is rated as "slow" -->
|
||||
<integer name="config_chargingSlowlyThreshold">1000000</integer>
|
||||
|
||||
<!-- Threshold in micro amperes above which a charger is rated as "fast" -->
|
||||
<integer name="config_chargingFastThreshold">1500000</integer>
|
||||
</resources>
|
||||
|
||||
@@ -56,6 +56,14 @@
|
||||
is not fully charged, say that it's charging. -->
|
||||
<string name="keyguard_plugged_in">Charging</string>
|
||||
|
||||
<!-- When the lock screen is showing and the phone plugged in, and the battery
|
||||
is not fully charged, and it's plugged into a fast charger, say that it's charging fast. -->
|
||||
<string name="keyguard_plugged_in_charging_fast">Charging rapidly</string>
|
||||
|
||||
<!-- When the lock screen is showing and the phone plugged in, and the battery
|
||||
is not fully charged, and it's plugged into a slow charger, say that it's charging slowly. -->
|
||||
<string name="keyguard_plugged_in_charging_slowly">Charging slowly</string>
|
||||
|
||||
<!-- When the lock screen is showing and the battery is low, warn user to plug
|
||||
in the phone soon. -->
|
||||
<string name="keyguard_low_battery">Connect your charger.</string>
|
||||
|
||||
@@ -37,6 +37,7 @@ import static android.os.BatteryManager.EXTRA_STATUS;
|
||||
import static android.os.BatteryManager.EXTRA_PLUGGED;
|
||||
import static android.os.BatteryManager.EXTRA_LEVEL;
|
||||
import static android.os.BatteryManager.EXTRA_HEALTH;
|
||||
import static android.os.BatteryManager.EXTRA_MAX_CHARGING_CURRENT;
|
||||
|
||||
import android.media.AudioManager;
|
||||
import android.os.BatteryManager;
|
||||
@@ -489,8 +490,10 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
|
||||
final int plugged = intent.getIntExtra(EXTRA_PLUGGED, 0);
|
||||
final int level = intent.getIntExtra(EXTRA_LEVEL, 0);
|
||||
final int health = intent.getIntExtra(EXTRA_HEALTH, BATTERY_HEALTH_UNKNOWN);
|
||||
final int maxChargingCurrent = intent.getIntExtra(EXTRA_MAX_CHARGING_CURRENT, -1);
|
||||
final Message msg = mHandler.obtainMessage(
|
||||
MSG_BATTERY_UPDATE, new BatteryStatus(status, level, plugged, health));
|
||||
MSG_BATTERY_UPDATE, new BatteryStatus(status, level, plugged, health,
|
||||
maxChargingCurrent));
|
||||
mHandler.sendMessage(msg);
|
||||
} else if (TelephonyIntents.ACTION_SIM_STATE_CHANGED.equals(action)) {
|
||||
SimData args = SimData.fromIntent(intent);
|
||||
@@ -641,15 +644,22 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
|
||||
}
|
||||
|
||||
public static class BatteryStatus {
|
||||
public static final int CHARGING_UNKNOWN = -1;
|
||||
public static final int CHARGING_SLOWLY = 0;
|
||||
public static final int CHARGING_REGULAR = 1;
|
||||
public static final int CHARGING_FAST = 2;
|
||||
|
||||
public final int status;
|
||||
public final int level;
|
||||
public final int plugged;
|
||||
public final int health;
|
||||
public BatteryStatus(int status, int level, int plugged, int health) {
|
||||
public final int maxChargingCurrent;
|
||||
public BatteryStatus(int status, int level, int plugged, int health, int maxChargingCurrent) {
|
||||
this.status = status;
|
||||
this.level = level;
|
||||
this.plugged = plugged;
|
||||
this.health = health;
|
||||
this.maxChargingCurrent = maxChargingCurrent;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -680,6 +690,12 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
|
||||
return level < LOW_BATTERY_THRESHOLD;
|
||||
}
|
||||
|
||||
public final int getChargingSpeed(int slowThreshold, int fastThreshold) {
|
||||
return maxChargingCurrent <= 0 ? CHARGING_UNKNOWN :
|
||||
maxChargingCurrent < slowThreshold ? CHARGING_SLOWLY :
|
||||
maxChargingCurrent > fastThreshold ? CHARGING_FAST :
|
||||
CHARGING_REGULAR;
|
||||
}
|
||||
}
|
||||
|
||||
public static KeyguardUpdateMonitor getInstance(Context context) {
|
||||
@@ -746,7 +762,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
|
||||
}
|
||||
|
||||
// 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);
|
||||
mBatteryStatus = new BatteryStatus(BATTERY_STATUS_UNKNOWN, 100, 0, 0, 0);
|
||||
|
||||
// Watch for interesting updates
|
||||
final IntentFilter filter = new IntentFilter();
|
||||
|
||||
@@ -26,6 +26,7 @@ import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.Color;
|
||||
import android.os.BatteryManager;
|
||||
import android.os.BatteryStats;
|
||||
@@ -45,6 +46,7 @@ import android.view.View;
|
||||
public class KeyguardIndicationController {
|
||||
|
||||
private static final String TAG = "KeyguardIndicationController";
|
||||
private static final boolean DEBUG_CHARGING_CURRENT = false;
|
||||
|
||||
private static final int MSG_HIDE_TRANSIENT = 1;
|
||||
|
||||
@@ -52,6 +54,9 @@ public class KeyguardIndicationController {
|
||||
private final KeyguardIndicationTextView mTextView;
|
||||
private final IBatteryStats mBatteryInfo;
|
||||
|
||||
private final int mSlowThreshold;
|
||||
private final int mFastThreshold;
|
||||
|
||||
private String mRestingIndication;
|
||||
private String mTransientIndication;
|
||||
private int mTransientTextColor;
|
||||
@@ -59,11 +64,18 @@ public class KeyguardIndicationController {
|
||||
|
||||
private boolean mPowerPluggedIn;
|
||||
private boolean mPowerCharged;
|
||||
private int mChargingSpeed;
|
||||
private int mChargingCurrent;
|
||||
|
||||
public KeyguardIndicationController(Context context, KeyguardIndicationTextView textView) {
|
||||
mContext = context;
|
||||
mTextView = textView;
|
||||
|
||||
Resources res = context.getResources();
|
||||
mSlowThreshold = res.getInteger(R.integer.config_chargingSlowlyThreshold);
|
||||
mFastThreshold = res.getInteger(R.integer.config_chargingFastThreshold);
|
||||
|
||||
|
||||
mBatteryInfo = IBatteryStats.Stub.asInterface(
|
||||
ServiceManager.getService(BatteryStats.SERVICE_NAME));
|
||||
KeyguardUpdateMonitor.getInstance(context).registerCallback(mUpdateMonitor);
|
||||
@@ -150,7 +162,11 @@ public class KeyguardIndicationController {
|
||||
return mTransientIndication;
|
||||
}
|
||||
if (mPowerPluggedIn) {
|
||||
return computePowerIndication();
|
||||
String indication = computePowerIndication();
|
||||
if (DEBUG_CHARGING_CURRENT) {
|
||||
indication = indication + mChargingCurrent;
|
||||
}
|
||||
return indication;
|
||||
}
|
||||
return mRestingIndication;
|
||||
}
|
||||
@@ -174,7 +190,19 @@ public class KeyguardIndicationController {
|
||||
}
|
||||
|
||||
// Fall back to simple charging label.
|
||||
return mContext.getResources().getString(R.string.keyguard_plugged_in);
|
||||
int chargingId;
|
||||
switch (mChargingSpeed) {
|
||||
case KeyguardUpdateMonitor.BatteryStatus.CHARGING_FAST:
|
||||
chargingId = R.string.keyguard_plugged_in_charging_fast;
|
||||
break;
|
||||
case KeyguardUpdateMonitor.BatteryStatus.CHARGING_SLOWLY:
|
||||
chargingId = R.string.keyguard_plugged_in_charging_slowly;
|
||||
break;
|
||||
default:
|
||||
chargingId = R.string.keyguard_plugged_in;
|
||||
break;
|
||||
}
|
||||
return mContext.getResources().getString(chargingId);
|
||||
}
|
||||
|
||||
KeyguardUpdateMonitorCallback mUpdateMonitor = new KeyguardUpdateMonitorCallback() {
|
||||
@@ -184,6 +212,8 @@ public class KeyguardIndicationController {
|
||||
|| status.status == BatteryManager.BATTERY_STATUS_FULL;
|
||||
mPowerPluggedIn = status.isPluggedIn() && isChargingOrFull;
|
||||
mPowerCharged = status.isCharged();
|
||||
mChargingCurrent = status.maxChargingCurrent;
|
||||
mChargingSpeed = status.getChargingSpeed(mSlowThreshold, mFastThreshold);
|
||||
updateIndication();
|
||||
}
|
||||
};
|
||||
|
||||
@@ -323,6 +323,7 @@ public final class BatteryService extends SystemService {
|
||||
+ "chargerAcOnline=" + mBatteryProps.chargerAcOnline
|
||||
+ ", chargerUsbOnline=" + mBatteryProps.chargerUsbOnline
|
||||
+ ", chargerWirelessOnline=" + mBatteryProps.chargerWirelessOnline
|
||||
+ ", maxChargingCurrent" + mBatteryProps.maxChargingCurrent
|
||||
+ ", batteryStatus=" + mBatteryProps.batteryStatus
|
||||
+ ", batteryHealth=" + mBatteryProps.batteryHealth
|
||||
+ ", batteryPresent=" + mBatteryProps.batteryPresent
|
||||
@@ -503,17 +504,21 @@ public final class BatteryService extends SystemService {
|
||||
intent.putExtra(BatteryManager.EXTRA_TEMPERATURE, mBatteryProps.batteryTemperature);
|
||||
intent.putExtra(BatteryManager.EXTRA_TECHNOLOGY, mBatteryProps.batteryTechnology);
|
||||
intent.putExtra(BatteryManager.EXTRA_INVALID_CHARGER, mInvalidCharger);
|
||||
intent.putExtra(BatteryManager.EXTRA_MAX_CHARGING_CURRENT, mBatteryProps.maxChargingCurrent);
|
||||
|
||||
if (DEBUG) {
|
||||
Slog.d(TAG, "Sending ACTION_BATTERY_CHANGED. level:" + mBatteryProps.batteryLevel +
|
||||
", scale:" + BATTERY_SCALE + ", status:" + mBatteryProps.batteryStatus +
|
||||
", health:" + mBatteryProps.batteryHealth + ", present:" + mBatteryProps.batteryPresent +
|
||||
", health:" + mBatteryProps.batteryHealth +
|
||||
", present:" + mBatteryProps.batteryPresent +
|
||||
", voltage: " + mBatteryProps.batteryVoltage +
|
||||
", temperature: " + mBatteryProps.batteryTemperature +
|
||||
", technology: " + mBatteryProps.batteryTechnology +
|
||||
", AC powered:" + mBatteryProps.chargerAcOnline + ", USB powered:" + mBatteryProps.chargerUsbOnline +
|
||||
", AC powered:" + mBatteryProps.chargerAcOnline +
|
||||
", USB powered:" + mBatteryProps.chargerUsbOnline +
|
||||
", Wireless powered:" + mBatteryProps.chargerWirelessOnline +
|
||||
", icon:" + icon + ", invalid charger:" + mInvalidCharger);
|
||||
", icon:" + icon + ", invalid charger:" + mInvalidCharger +
|
||||
", maxChargingCurrent:" + mBatteryProps.maxChargingCurrent);
|
||||
}
|
||||
|
||||
mHandler.post(new Runnable() {
|
||||
@@ -618,6 +623,7 @@ public final class BatteryService extends SystemService {
|
||||
pw.println(" AC powered: " + mBatteryProps.chargerAcOnline);
|
||||
pw.println(" USB powered: " + mBatteryProps.chargerUsbOnline);
|
||||
pw.println(" Wireless powered: " + mBatteryProps.chargerWirelessOnline);
|
||||
pw.println(" Max charging current: " + mBatteryProps.maxChargingCurrent);
|
||||
pw.println(" status: " + mBatteryProps.batteryStatus);
|
||||
pw.println(" health: " + mBatteryProps.batteryHealth);
|
||||
pw.println(" present: " + mBatteryProps.batteryPresent);
|
||||
|
||||
Reference in New Issue
Block a user