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 ba2a86ad9f
)
This commit is contained in:
@@ -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);
|
||||
|
@@ -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();
|
||||
}
|
||||
|
Reference in New Issue
Block a user