summaryrefslogtreecommitdiffstats
path: root/packages
diff options
context:
space:
mode:
authorJorim Jaggi <jjaggi@google.com>2015-01-14 15:13:05 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2015-01-14 15:13:09 +0000
commit86e1788db46cdbcc65331dd8d0b9e23241a534fe (patch)
tree824d65c0c8c5ada76860d6b6b75edb8603eabdb0 /packages
parentbd0db7b18f2a78b2ac2ff13234bf5b3582c9aec4 (diff)
parent01ba98b856a018c735a911d7b2c1604ea2ff2f95 (diff)
downloadframeworks_base-86e1788db46cdbcc65331dd8d0b9e23241a534fe.zip
frameworks_base-86e1788db46cdbcc65331dd8d0b9e23241a534fe.tar.gz
frameworks_base-86e1788db46cdbcc65331dd8d0b9e23241a534fe.tar.bz2
Merge "Only notify SIM state changes when it has actually changed" into lmp-mr1-dev
Diffstat (limited to 'packages')
-rw-r--r--packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java29
1 files changed, 23 insertions, 6 deletions
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java
index 48f2e42..64fb24b 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java
@@ -274,12 +274,16 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
// Hack level over 9000: Because the subscription id is not yet valid when we see the
// first update in handleSimStateChange, we need to force refresh all all SIM states
// so the subscription id for them is consistent.
+ ArrayList<SubscriptionInfo> changedSubscriptions = new ArrayList<>();
for (int i = 0; i < subscriptionInfos.size(); i++) {
SubscriptionInfo info = subscriptionInfos.get(i);
- refreshSimState(info.getSubscriptionId(), info.getSimSlotIndex());
+ boolean changed = refreshSimState(info.getSubscriptionId(), info.getSimSlotIndex());
+ if (changed) {
+ changedSubscriptions.add(info);
+ }
}
- for (int i = 0; i < subscriptionInfos.size(); i++) {
- SimData data = mSimDatas.get(mSubscriptionInfo.get(i).getSubscriptionId());
+ for (int i = 0; i < changedSubscriptions.size(); i++) {
+ SimData data = mSimDatas.get(changedSubscriptions.get(i).getSubscriptionId());
for (int j = 0; j < mCallbacks.size(); j++) {
KeyguardUpdateMonitorCallback cb = mCallbacks.get(j).get();
if (cb != null) {
@@ -1242,7 +1246,10 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
}
}
- private void refreshSimState(int subId, int slotId) {
+ /**
+ * @return true if and only if the state has changed for the specified {@code slotId}
+ */
+ private boolean refreshSimState(int subId, int slotId) {
// This is awful. It exists because there are two APIs for getting the SIM status
// that don't return the complete set of values and have different types. In Keyguard we
@@ -1256,8 +1263,18 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
} catch(IllegalArgumentException ex) {
Log.w(TAG, "Unknown sim state: " + simState);
state = State.UNKNOWN;
- }
- mSimDatas.put(subId, new SimData(state, slotId, subId));
+ }
+ SimData data = mSimDatas.get(subId);
+ final boolean changed;
+ if (data == null) {
+ data = new SimData(state, slotId, subId);
+ mSimDatas.put(subId, data);
+ changed = true; // no data yet; force update
+ } else {
+ changed = data.simState != state;
+ data.simState = state;
+ }
+ return changed;
}
public static boolean isSimPinSecure(IccCardConstants.State state) {