From e51d8515c070f21784b906a598b2d400e82587d5 Mon Sep 17 00:00:00 2001 From: SongFerng Wang Date: Wed, 20 Dec 2023 11:38:47 +0000 Subject: [PATCH] Using ACTION_SIM_CARD_STATE_CHANGED to detect simSlotMapping is complete Sometime modem can't return the GET_SIM_STATUS immediately, so that the settings send the sim switching too early after simSlotMapping. Bug: 291733084 Change-Id: If547c8b02020bc86c83915334e29945176a4ee9f Test: tester will test it manually. (cherry picked from commit ba2a86ad9ff9858dc3e64c8c1ff6dd70299a2691) --- .../settings/network/UiccSlotUtil.java | 21 ++++++++++++------- .../settings/network/UiccSlotUtilTest.java | 9 +++++--- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/com/android/settings/network/UiccSlotUtil.java b/src/com/android/settings/network/UiccSlotUtil.java index 49a1a852ff1..cc15e6e3215 100644 --- a/src/com/android/settings/network/UiccSlotUtil.java +++ b/src/com/android/settings/network/UiccSlotUtil.java @@ -58,22 +58,29 @@ public class UiccSlotUtil { public static final int INVALID_PORT_ID = -1; @VisibleForTesting - static class SimSlotChangeReceiver extends BroadcastReceiver{ + static class SimCardStateChangeReceiver extends BroadcastReceiver{ private final CountDownLatch mLatch; - SimSlotChangeReceiver(CountDownLatch latch) { + SimCardStateChangeReceiver(CountDownLatch latch) { mLatch = latch; } public void registerOn(Context context) { context.registerReceiver(this, - new IntentFilter(TelephonyManager.ACTION_SIM_SLOT_STATUS_CHANGED), - Context.RECEIVER_EXPORTED/*UNAUDITED*/); + new IntentFilter(TelephonyManager.ACTION_SIM_CARD_STATE_CHANGED), + Context.RECEIVER_NOT_EXPORTED); } @Override public void onReceive(Context context, Intent intent) { Log.i(TAG, "Action: " + intent.getAction()); - if (TelephonyManager.ACTION_SIM_SLOT_STATUS_CHANGED.equals(intent.getAction())) { + if (!TelephonyManager.ACTION_SIM_CARD_STATE_CHANGED.equals(intent.getAction())) { + return; + } + final int simState = intent.getIntExtra( + TelephonyManager.EXTRA_SIM_STATE, TelephonyManager.SIM_STATE_UNKNOWN); + Log.i(TAG, "simState: " + simState); + if (simState != TelephonyManager.SIM_STATE_UNKNOWN + && simState != TelephonyManager.SIM_STATE_ABSENT) { mLatch.countDown(); } } @@ -269,8 +276,8 @@ public class UiccSlotUtil { try { CountDownLatch latch = new CountDownLatch(1); if (isMultipleEnabledProfilesSupported(telMgr)) { - receiver = new SimSlotChangeReceiver(latch); - ((SimSlotChangeReceiver) receiver).registerOn(context); + receiver = new SimCardStateChangeReceiver(latch); + ((SimCardStateChangeReceiver) receiver).registerOn(context); } else { receiver = new CarrierConfigChangedReceiver(latch); ((CarrierConfigChangedReceiver) receiver).registerOn(context); diff --git a/tests/unit/src/com/android/settings/network/UiccSlotUtilTest.java b/tests/unit/src/com/android/settings/network/UiccSlotUtilTest.java index 2e17fb271cd..5261b3ec445 100644 --- a/tests/unit/src/com/android/settings/network/UiccSlotUtilTest.java +++ b/tests/unit/src/com/android/settings/network/UiccSlotUtilTest.java @@ -752,11 +752,14 @@ public class UiccSlotUtilTest { } @Test - public void onReceiveSimSlotChangeReceiver_receiveAction_timerCountDown() { + public void onReceiveSimCardStateChangeReceiver_receiveAction_timerCountDown() { CountDownLatch latch = spy(new CountDownLatch(1)); - UiccSlotUtil.SimSlotChangeReceiver receive = new UiccSlotUtil.SimSlotChangeReceiver(latch); + UiccSlotUtil.SimCardStateChangeReceiver receive = + new UiccSlotUtil.SimCardStateChangeReceiver(latch); + Intent intent = new Intent(TelephonyManager.ACTION_SIM_SLOT_STATUS_CHANGED); + intent.putExtra(TelephonyManager.EXTRA_SIM_STATE, TelephonyManager.SIM_STATE_PRESENT); - receive.onReceive(mContext, new Intent(TelephonyManager.ACTION_SIM_SLOT_STATUS_CHANGED)); + receive.onReceive(mContext, intent); verify(latch).countDown(); }