summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java148
-rw-r--r--packages/SystemUI/src/com/android/systemui/user/legacyhelper/ui/LegacyUserUiHelper.kt7
2 files changed, 88 insertions, 67 deletions
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
index 8e01e04c155e..431f04882c8d 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
@@ -315,6 +315,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
};
private final FaceWakeUpTriggersConfig mFaceWakeUpTriggersConfig;
+ private final Object mSimDataLockObject = new Object();
HashMap<Integer, SimData> mSimDatas = new HashMap<>();
HashMap<Integer, ServiceState> mServiceStates = new HashMap<>();
@@ -610,14 +611,26 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
// It is possible for active subscriptions to become invalid (-1), and these will not be
// present in the subscriptionInfo list
- Iterator<Map.Entry<Integer, SimData>> iter = mSimDatas.entrySet().iterator();
- while (iter.hasNext()) {
- Map.Entry<Integer, SimData> simData = iter.next();
- if (!activeSubIds.contains(simData.getKey())) {
- mSimLogger.logInvalidSubId(simData.getKey());
- iter.remove();
-
- SimData data = simData.getValue();
+ synchronized (mSimDataLockObject) {
+ Iterator<Map.Entry<Integer, SimData>> iter = mSimDatas.entrySet().iterator();
+ while (iter.hasNext()) {
+ Map.Entry<Integer, SimData> simData = iter.next();
+ if (!activeSubIds.contains(simData.getKey())) {
+ mSimLogger.logInvalidSubId(simData.getKey());
+ iter.remove();
+
+ SimData data = simData.getValue();
+ for (int j = 0; j < mCallbacks.size(); j++) {
+ KeyguardUpdateMonitorCallback cb = mCallbacks.get(j).get();
+ if (cb != null) {
+ cb.onSimStateChanged(data.subId, data.slotId, data.simState);
+ }
+ }
+ }
+ }
+
+ 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) {
@@ -625,18 +638,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
}
}
}
+ callbacksRefreshCarrierInfo();
}
-
- 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) {
- cb.onSimStateChanged(data.subId, data.slotId, data.simState);
- }
- }
- }
- callbacksRefreshCarrierInfo();
}
private void handleAirplaneModeChanged() {
@@ -3376,12 +3379,15 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
* Removes all valid subscription info from the map for the given slotId.
*/
private void invalidateSlot(int slotId) {
- Iterator<Map.Entry<Integer, SimData>> iter = mSimDatas.entrySet().iterator();
- while (iter.hasNext()) {
- SimData data = iter.next().getValue();
- if (data.slotId == slotId && SubscriptionManager.isValidSubscriptionId(data.subId)) {
- mSimLogger.logInvalidSubId(data.subId);
- iter.remove();
+ synchronized (mSimDataLockObject) {
+ Iterator<Map.Entry<Integer, SimData>> iter = mSimDatas.entrySet().iterator();
+ while (iter.hasNext()) {
+ SimData data = iter.next().getValue();
+ if (data.slotId == slotId
+ && SubscriptionManager.isValidSubscriptionId(data.subId)) {
+ mSimLogger.logInvalidSubId(data.subId);
+ iter.remove();
+ }
}
}
}
@@ -3408,23 +3414,25 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
}
// TODO(b/327476182): Preserve SIM_STATE_CARD_IO_ERROR sims in a separate data source.
- 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.subId != subId || data.slotId != slotId);
- data.simState = state;
- data.subId = subId;
- data.slotId = slotId;
- }
- if ((changed || becameAbsent)) {
- for (int i = 0; i < mCallbacks.size(); i++) {
- KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
- if (cb != null) {
- cb.onSimStateChanged(subId, slotId, state);
+ synchronized (mSimDataLockObject) {
+ 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.subId != subId || data.slotId != slotId);
+ data.simState = state;
+ data.subId = subId;
+ data.slotId = slotId;
+ }
+ if ((changed || becameAbsent)) {
+ for (int i = 0; i < mCallbacks.size(); i++) {
+ KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
+ if (cb != null) {
+ cb.onSimStateChanged(subId, slotId, state);
+ }
}
}
}
@@ -3684,9 +3692,11 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
callback.onKeyguardVisibilityChanged(isKeyguardVisible());
callback.onTelephonyCapable(mTelephonyCapable);
- for (Entry<Integer, SimData> data : mSimDatas.entrySet()) {
- final SimData state = data.getValue();
- callback.onSimStateChanged(state.subId, state.slotId, state.simState);
+ synchronized (mSimDataLockObject) {
+ for (Entry<Integer, SimData> data : mSimDatas.entrySet()) {
+ final SimData state = data.getValue();
+ callback.onSimStateChanged(state.subId, state.slotId, state.simState);
+ }
}
}
@@ -3823,19 +3833,23 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
}
public int getSimState(int subId) {
- if (mSimDatas.containsKey(subId)) {
- return mSimDatas.get(subId).simState;
- } else {
- return TelephonyManager.SIM_STATE_UNKNOWN;
+ synchronized (mSimDataLockObject) {
+ if (mSimDatas.containsKey(subId)) {
+ return mSimDatas.get(subId).simState;
+ } else {
+ return TelephonyManager.SIM_STATE_UNKNOWN;
+ }
}
}
private int getSlotId(int subId) {
- if (!mSimDatas.containsKey(subId)) {
- refreshSimState(subId, SubscriptionManager.getSlotIndex(subId));
+ synchronized (mSimDataLockObject) {
+ if (!mSimDatas.containsKey(subId)) {
+ refreshSimState(subId, SubscriptionManager.getSlotIndex(subId));
+ }
+ SimData simData = mSimDatas.get(subId);
+ return simData != null ? simData.slotId : SubscriptionManager.INVALID_SUBSCRIPTION_ID;
}
- SimData simData = mSimDatas.get(subId);
- return simData != null ? simData.slotId : SubscriptionManager.INVALID_SUBSCRIPTION_ID;
}
private final TaskStackChangeListener mTaskStackListener = new TaskStackChangeListener() {
@@ -3876,22 +3890,24 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
*/
private boolean refreshSimState(int subId, int slotId) {
int state = mTelephonyManager.getSimState(slotId);
- SimData data = mSimDatas.get(subId);
+ synchronized (mSimDataLockObject) {
+ SimData data = mSimDatas.get(subId);
- if (!SubscriptionManager.isValidSubscriptionId(subId)) {
- invalidateSlot(slotId);
- }
+ if (!SubscriptionManager.isValidSubscriptionId(subId)) {
+ invalidateSlot(slotId);
+ }
- 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;
+ 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;
}
- return changed;
}
/**
diff --git a/packages/SystemUI/src/com/android/systemui/user/legacyhelper/ui/LegacyUserUiHelper.kt b/packages/SystemUI/src/com/android/systemui/user/legacyhelper/ui/LegacyUserUiHelper.kt
index 8957fe1ee214..09cef1ed64fc 100644
--- a/packages/SystemUI/src/com/android/systemui/user/legacyhelper/ui/LegacyUserUiHelper.kt
+++ b/packages/SystemUI/src/com/android/systemui/user/legacyhelper/ui/LegacyUserUiHelper.kt
@@ -18,6 +18,7 @@
package com.android.systemui.user.legacyhelper.ui
import android.content.Context
+import android.util.Log
import androidx.annotation.DrawableRes
import androidx.annotation.StringRes
import com.android.systemui.res.R
@@ -32,6 +33,8 @@ import com.android.systemui.user.data.source.UserRecord
*/
object LegacyUserUiHelper {
+ private const val TAG = "LegacyUserUiHelper"
+
@JvmStatic
@DrawableRes
fun getUserSwitcherActionIconResourceId(
@@ -67,7 +70,9 @@ object LegacyUserUiHelper {
val resourceId: Int? = getGuestUserRecordNameResourceId(record)
return when {
resourceId != null -> context.getString(resourceId)
- record.info != null -> checkNotNull(record.info.name)
+ record.info != null ->
+ record.info.name
+ ?: "".also { Log.i(TAG, "Expected display name for: ${record.info}") }
else ->
context.getString(
getUserSwitcherActionTextResourceId(