Skip to content

Commit 11bfc0c

Browse files
Jim MillerAndroid (Google) Code Review
authored andcommitted
Merge "Fix 5369428: Use full battery state information when determining charge status" into ics-mr1
2 parents c307d1a + 16464b8 commit 11bfc0c

File tree

1 file changed

+59
-44
lines changed

1 file changed

+59
-44
lines changed

policy/src/com/android/internal/policy/impl/KeyguardUpdateMonitor.java

Lines changed: 59 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,14 @@
2121
import android.content.Intent;
2222
import android.content.IntentFilter;
2323
import android.database.ContentObserver;
24-
import static android.os.BatteryManager.BATTERY_STATUS_CHARGING;
2524
import static android.os.BatteryManager.BATTERY_STATUS_FULL;
2625
import static android.os.BatteryManager.BATTERY_STATUS_UNKNOWN;
26+
import static android.os.BatteryManager.BATTERY_HEALTH_UNKNOWN;
27+
import static android.os.BatteryManager.EXTRA_STATUS;
28+
import static android.os.BatteryManager.EXTRA_PLUGGED;
29+
import static android.os.BatteryManager.EXTRA_LEVEL;
30+
import static android.os.BatteryManager.EXTRA_HEALTH;
2731
import android.media.AudioManager;
28-
import android.media.IRemoteControlClient;
2932
import android.os.BatteryManager;
3033
import android.os.Handler;
3134
import android.os.Message;
@@ -72,9 +75,7 @@ public class KeyguardUpdateMonitor {
7275

7376
private boolean mDeviceProvisioned;
7477

75-
private int mBatteryLevel;
76-
77-
private int mBatteryStatus;
78+
private BatteryStatus mBatteryStatus;
7879

7980
private CharSequence mTelephonyPlmn;
8081
private CharSequence mTelephonySpn;
@@ -151,6 +152,20 @@ public String toString() {
151152
}
152153
}
153154

155+
private static class BatteryStatus {
156+
public final int status;
157+
public final int level;
158+
public final int plugged;
159+
public final int health;
160+
public BatteryStatus(int status, int level, int plugged, int health) {
161+
this.status = status;
162+
this.level = level;
163+
this.plugged = plugged;
164+
this.health = health;
165+
}
166+
167+
}
168+
154169
public KeyguardUpdateMonitor(Context context) {
155170
mContext = context;
156171

@@ -162,7 +177,7 @@ public void handleMessage(Message msg) {
162177
handleTimeUpdate();
163178
break;
164179
case MSG_BATTERY_UPDATE:
165-
handleBatteryUpdate(msg.arg1, msg.arg2);
180+
handleBatteryUpdate((BatteryStatus) msg.obj);
166181
break;
167182
case MSG_CARRIER_INFO_UPDATE:
168183
handleCarrierInfoUpdate();
@@ -226,8 +241,7 @@ public void onChange(boolean selfChange) {
226241

227242
// take a guess to start
228243
mSimState = IccCard.State.READY;
229-
mBatteryStatus = BATTERY_STATUS_UNKNOWN;
230-
mBatteryLevel = 100;
244+
mBatteryStatus = new BatteryStatus(BATTERY_STATUS_UNKNOWN, 100, 0, 0);
231245

232246
mTelephonyPlmn = getDefaultPlmn();
233247

@@ -256,13 +270,12 @@ public void onReceive(Context context, Intent intent) {
256270
mTelephonySpn = getTelephonySpnFrom(intent);
257271
mHandler.sendMessage(mHandler.obtainMessage(MSG_CARRIER_INFO_UPDATE));
258272
} else if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
259-
final int pluggedInStatus = intent
260-
.getIntExtra("status", BATTERY_STATUS_UNKNOWN);
261-
int batteryLevel = intent.getIntExtra("level", 0);
273+
final int status = intent.getIntExtra(EXTRA_STATUS, BATTERY_STATUS_UNKNOWN);
274+
final int plugged = intent.getIntExtra(EXTRA_PLUGGED, 0);
275+
final int level = intent.getIntExtra(EXTRA_LEVEL, 0);
276+
final int health = intent.getIntExtra(EXTRA_HEALTH, BATTERY_HEALTH_UNKNOWN);
262277
final Message msg = mHandler.obtainMessage(
263-
MSG_BATTERY_UPDATE,
264-
pluggedInStatus,
265-
batteryLevel);
278+
MSG_BATTERY_UPDATE, new BatteryStatus(status, level, plugged, health));
266279
mHandler.sendMessage(msg);
267280
} else if (TelephonyIntents.ACTION_SIM_STATE_CHANGED.equals(action)) {
268281
mHandler.sendMessage(mHandler.obtainMessage(
@@ -325,15 +338,16 @@ private void handleTimeUpdate() {
325338
/**
326339
* Handle {@link #MSG_BATTERY_UPDATE}
327340
*/
328-
private void handleBatteryUpdate(int batteryStatus, int batteryLevel) {
341+
private void handleBatteryUpdate(BatteryStatus batteryStatus) {
329342
if (DEBUG) Log.d(TAG, "handleBatteryUpdate");
330-
if (isBatteryUpdateInteresting(batteryStatus, batteryLevel)) {
331-
mBatteryStatus = batteryStatus;
332-
mBatteryLevel = batteryLevel;
333-
final boolean pluggedIn = isPluggedIn(batteryStatus);;
343+
final boolean batteryUpdateInteresting =
344+
isBatteryUpdateInteresting(mBatteryStatus, batteryStatus);
345+
mBatteryStatus = batteryStatus;
346+
if (batteryUpdateInteresting) {
334347
for (int i = 0; i < mInfoCallbacks.size(); i++) {
348+
// TODO: pass BatteryStatus object to onRefreshBatteryInfo() instead...
335349
mInfoCallbacks.get(i).onRefreshBatteryInfo(
336-
shouldShowBatteryInfo(), pluggedIn, batteryLevel);
350+
shouldShowBatteryInfo(),isPluggedIn(batteryStatus), batteryStatus.level);
337351
}
338352
}
339353
}
@@ -377,39 +391,40 @@ private void handleClockVisibilityChanged() {
377391
}
378392

379393
/**
380-
* @param status One of the statuses of {@link android.os.BatteryManager}
381-
* @return Whether the status maps to a status for being plugged in.
394+
* @param pluggedIn state from {@link android.os.BatteryManager#EXTRA_PLUGGED}
395+
* @return Whether the device is considered "plugged in."
382396
*/
383-
private boolean isPluggedIn(int status) {
384-
return status == BATTERY_STATUS_CHARGING || status == BATTERY_STATUS_FULL;
397+
private static boolean isPluggedIn(BatteryStatus status) {
398+
return status.plugged == BatteryManager.BATTERY_PLUGGED_AC
399+
|| status.plugged == BatteryManager.BATTERY_PLUGGED_USB;
385400
}
386401

387-
private boolean isBatteryUpdateInteresting(int batteryStatus, int batteryLevel) {
388-
// change in plug is always interesting
389-
final boolean isPluggedIn = isPluggedIn(batteryStatus);
390-
final boolean wasPluggedIn = isPluggedIn(mBatteryStatus);
402+
private static boolean isBatteryUpdateInteresting(BatteryStatus old, BatteryStatus current) {
403+
final boolean nowPluggedIn = isPluggedIn(current);
404+
final boolean wasPluggedIn = isPluggedIn(old);
391405
final boolean stateChangedWhilePluggedIn =
392-
wasPluggedIn == true && isPluggedIn == true && (mBatteryStatus != batteryStatus);
393-
if (wasPluggedIn != isPluggedIn || stateChangedWhilePluggedIn) {
406+
wasPluggedIn == true && nowPluggedIn == true
407+
&& (old.status != current.status);
408+
409+
// change in plug state is always interesting
410+
if (wasPluggedIn != nowPluggedIn || stateChangedWhilePluggedIn) {
394411
return true;
395412
}
396413

397414
// change in battery level while plugged in
398-
if (isPluggedIn && mBatteryLevel != batteryLevel) {
415+
if (nowPluggedIn && old.level != current.level) {
399416
return true;
400417
}
401418

402-
if (!isPluggedIn) {
403-
// not plugged in and below threshold
404-
if (isBatteryLow(batteryLevel) && batteryLevel != mBatteryLevel) {
405-
return true;
406-
}
419+
// change where battery needs charging
420+
if (!nowPluggedIn && isBatteryLow(current) && current.level != old.level) {
421+
return true;
407422
}
408423
return false;
409424
}
410425

411-
private boolean isBatteryLow(int batteryLevel) {
412-
return batteryLevel < LOW_BATTERY_THRESHOLD;
426+
private static boolean isBatteryLow(BatteryStatus status) {
427+
return status.level < LOW_BATTERY_THRESHOLD;
413428
}
414429

415430
/**
@@ -518,8 +533,8 @@ public void registerInfoCallback(InfoCallback callback) {
518533
if (!mInfoCallbacks.contains(callback)) {
519534
mInfoCallbacks.add(callback);
520535
// Notify listener of the current state
521-
callback.onRefreshBatteryInfo(shouldShowBatteryInfo(), isPluggedIn(mBatteryStatus),
522-
mBatteryLevel);
536+
callback.onRefreshBatteryInfo(shouldShowBatteryInfo(),isPluggedIn(mBatteryStatus),
537+
mBatteryStatus.level);
523538
callback.onTimeChanged();
524539
callback.onRingerModeChanged(mRingMode);
525540
callback.onPhoneStateChanged(mPhoneState);
@@ -573,16 +588,16 @@ public boolean isDevicePluggedIn() {
573588
}
574589

575590
public boolean isDeviceCharged() {
576-
return mBatteryStatus == BatteryManager.BATTERY_STATUS_FULL
577-
|| mBatteryLevel >= 100; // in case a particular device doesn't flag it
591+
return mBatteryStatus.status == BATTERY_STATUS_FULL
592+
|| mBatteryStatus.level >= 100; // in case particular device doesn't flag it
578593
}
579594

580595
public int getBatteryLevel() {
581-
return mBatteryLevel;
596+
return mBatteryStatus.level;
582597
}
583598

584599
public boolean shouldShowBatteryInfo() {
585-
return isPluggedIn(mBatteryStatus) || isBatteryLow(mBatteryLevel);
600+
return isPluggedIn(mBatteryStatus) || isBatteryLow(mBatteryStatus);
586601
}
587602

588603
public CharSequence getTelephonyPlmn() {

0 commit comments

Comments
 (0)