|
26 | 26 | import static android.os.BatteryManager.BATTERY_STATUS_FULL; |
27 | 27 | import static android.os.BatteryManager.BATTERY_STATUS_UNKNOWN; |
28 | 28 | import android.media.AudioManager; |
| 29 | +import android.os.BatteryManager; |
29 | 30 | import android.os.Handler; |
30 | 31 | import android.os.Message; |
31 | 32 | import android.os.SystemClock; |
@@ -70,12 +71,12 @@ public class KeyguardUpdateMonitor { |
70 | 71 |
|
71 | 72 | private boolean mKeyguardBypassEnabled; |
72 | 73 |
|
73 | | - private boolean mDevicePluggedIn; |
74 | | - |
75 | 74 | private boolean mDeviceProvisioned; |
76 | 75 |
|
77 | 76 | private int mBatteryLevel; |
78 | 77 |
|
| 78 | + private int mBatteryStatus; |
| 79 | + |
79 | 80 | private CharSequence mTelephonyPlmn; |
80 | 81 | private CharSequence mTelephonySpn; |
81 | 82 |
|
@@ -203,7 +204,7 @@ public void onChange(boolean selfChange) { |
203 | 204 |
|
204 | 205 | // take a guess to start |
205 | 206 | mSimState = IccCard.State.READY; |
206 | | - mDevicePluggedIn = true; |
| 207 | + mBatteryStatus = BATTERY_STATUS_FULL; |
207 | 208 | mBatteryLevel = 100; |
208 | 209 |
|
209 | 210 | mTelephonyPlmn = getDefaultPlmn(); |
@@ -283,13 +284,12 @@ private void handleTimeUpdate() { |
283 | 284 | /** |
284 | 285 | * Handle {@link #MSG_BATTERY_UPDATE} |
285 | 286 | */ |
286 | | - private void handleBatteryUpdate(int pluggedInStatus, int batteryLevel) { |
| 287 | + private void handleBatteryUpdate(int batteryStatus, int batteryLevel) { |
287 | 288 | if (DEBUG) Log.d(TAG, "handleBatteryUpdate"); |
288 | | - final boolean pluggedIn = isPluggedIn(pluggedInStatus); |
289 | | - |
290 | | - if (isBatteryUpdateInteresting(pluggedIn, batteryLevel)) { |
| 289 | + if (isBatteryUpdateInteresting(batteryStatus, batteryLevel)) { |
| 290 | + mBatteryStatus = batteryStatus; |
291 | 291 | mBatteryLevel = batteryLevel; |
292 | | - mDevicePluggedIn = pluggedIn; |
| 292 | + final boolean pluggedIn = isPluggedIn(batteryStatus);; |
293 | 293 | for (int i = 0; i < mInfoCallbacks.size(); i++) { |
294 | 294 | mInfoCallbacks.get(i).onRefreshBatteryInfo( |
295 | 295 | shouldShowBatteryInfo(), pluggedIn, batteryLevel); |
@@ -336,26 +336,34 @@ private boolean isPluggedIn(int status) { |
336 | 336 | return status == BATTERY_STATUS_CHARGING || status == BATTERY_STATUS_FULL; |
337 | 337 | } |
338 | 338 |
|
339 | | - private boolean isBatteryUpdateInteresting(boolean pluggedIn, int batteryLevel) { |
| 339 | + private boolean isBatteryUpdateInteresting(int batteryStatus, int batteryLevel) { |
340 | 340 | // change in plug is always interesting |
341 | | - if (mDevicePluggedIn != pluggedIn) { |
| 341 | + final boolean isPluggedIn = isPluggedIn(batteryStatus); |
| 342 | + final boolean wasPluggedIn = isPluggedIn(mBatteryStatus); |
| 343 | + final boolean stateChangedWhilePluggedIn = |
| 344 | + wasPluggedIn == true && isPluggedIn == true && (mBatteryStatus != batteryStatus); |
| 345 | + if (wasPluggedIn != isPluggedIn || stateChangedWhilePluggedIn) { |
342 | 346 | return true; |
343 | 347 | } |
344 | 348 |
|
345 | 349 | // change in battery level while plugged in |
346 | | - if (pluggedIn && mBatteryLevel != batteryLevel) { |
| 350 | + if (isPluggedIn && mBatteryLevel != batteryLevel) { |
347 | 351 | return true; |
348 | 352 | } |
349 | 353 |
|
350 | | - if (!pluggedIn) { |
| 354 | + if (!isPluggedIn) { |
351 | 355 | // not plugged in and below threshold |
352 | | - if (batteryLevel < LOW_BATTERY_THRESHOLD && batteryLevel != mBatteryLevel) { |
| 356 | + if (isBatteryLow(batteryLevel) && batteryLevel != mBatteryLevel) { |
353 | 357 | return true; |
354 | 358 | } |
355 | 359 | } |
356 | 360 | return false; |
357 | 361 | } |
358 | 362 |
|
| 363 | + private boolean isBatteryLow(int batteryLevel) { |
| 364 | + return batteryLevel < LOW_BATTERY_THRESHOLD; |
| 365 | + } |
| 366 | + |
359 | 367 | /** |
360 | 368 | * @param intent The intent with action {@link Telephony.Intents#SPN_STRINGS_UPDATED_ACTION} |
361 | 369 | * @return The string to use for the plmn, or null if it should not be shown. |
@@ -485,15 +493,20 @@ public boolean isKeyguardBypassEnabled() { |
485 | 493 | } |
486 | 494 |
|
487 | 495 | public boolean isDevicePluggedIn() { |
488 | | - return mDevicePluggedIn; |
| 496 | + return isPluggedIn(mBatteryStatus); |
| 497 | + } |
| 498 | + |
| 499 | + public boolean isDeviceCharged() { |
| 500 | + return mBatteryStatus == BatteryManager.BATTERY_STATUS_FULL |
| 501 | + || mBatteryLevel >= 100; // in case a particular device doesn't flag it |
489 | 502 | } |
490 | 503 |
|
491 | 504 | public int getBatteryLevel() { |
492 | 505 | return mBatteryLevel; |
493 | 506 | } |
494 | 507 |
|
495 | 508 | public boolean shouldShowBatteryInfo() { |
496 | | - return mDevicePluggedIn || mBatteryLevel < LOW_BATTERY_THRESHOLD; |
| 509 | + return isPluggedIn(mBatteryStatus) || isBatteryLow(mBatteryLevel); |
497 | 510 | } |
498 | 511 |
|
499 | 512 | public CharSequence getTelephonyPlmn() { |
|
0 commit comments