diff options
author | Jorim Jaggi <jjaggi@google.com> | 2015-01-14 15:13:05 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-01-14 15:13:09 +0000 |
commit | 86e1788db46cdbcc65331dd8d0b9e23241a534fe (patch) | |
tree | 824d65c0c8c5ada76860d6b6b75edb8603eabdb0 /packages | |
parent | bd0db7b18f2a78b2ac2ff13234bf5b3582c9aec4 (diff) | |
parent | 01ba98b856a018c735a911d7b2c1604ea2ff2f95 (diff) | |
download | frameworks_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.java | 29 |
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) { |