Loading src/java/com/android/internal/telephony/MultiSimSettingController.java +12 −3 Original line number Diff line number Diff line Loading @@ -110,6 +110,14 @@ public class MultiSimSettingController extends Handler { /** The singleton instance. */ private static MultiSimSettingController sInstance = null; // This will be set true when handling EVENT_ALL_SUBSCRIPTIONS_LOADED. The reason of keeping // a local variable instead of calling SubscriptionInfoUpdater#isSubInfoInitialized is, there // might be a race condition that we receive EVENT_SUBSCRIPTION_INFO_CHANGED first, then // EVENT_ALL_SUBSCRIPTIONS_LOADED. And calling SubscriptionInfoUpdater#isSubInfoInitialized // will make us handle EVENT_SUBSCRIPTION_INFO_CHANGED unexpectedly and causing us to believe // the SIMs are newly inserted instead of being initialized. private boolean mSubInfoInitialized = false; /** * Return the singleton or create one if not existed. */ Loading Loading @@ -252,6 +260,7 @@ public class MultiSimSettingController extends Handler { */ private void onAllSubscriptionsLoaded() { if (DBG) log("onAllSubscriptionsLoaded"); mSubInfoInitialized = true; updateDefaults(/*init*/ true); disableDataForNonDefaultNonOpportunisticSubscriptions(); deactivateGroupedOpportunisticSubscriptionIfNeeded(); Loading @@ -264,7 +273,7 @@ public class MultiSimSettingController extends Handler { */ private void onSubscriptionsChanged() { if (DBG) log("onSubscriptionsChanged"); if (!SubscriptionInfoUpdater.isSubInfoInitialized()) return; if (!mSubInfoInitialized) return; updateDefaults(/*init*/ false); disableDataForNonDefaultNonOpportunisticSubscriptions(); deactivateGroupedOpportunisticSubscriptionIfNeeded(); Loading Loading @@ -349,7 +358,7 @@ public class MultiSimSettingController extends Handler { private void updateDefaults(boolean init) { if (DBG) log("updateDefaults"); if (!SubscriptionInfoUpdater.isSubInfoInitialized()) return; if (!mSubInfoInitialized) return; List<SubscriptionInfo> activeSubInfos = mSubController .getActiveSubscriptionInfoList(mContext.getOpPackageName()); Loading Loading @@ -545,7 +554,7 @@ public class MultiSimSettingController extends Handler { } private void disableDataForNonDefaultNonOpportunisticSubscriptions() { if (!SubscriptionInfoUpdater.isSubInfoInitialized()) return; if (!mSubInfoInitialized) return; int defaultDataSub = mSubController.getDefaultDataSubId(); Loading tests/telephonytests/src/com/android/internal/telephony/MultiSimSettingControllerTest.java +0 −2 Original line number Diff line number Diff line Loading @@ -177,14 +177,12 @@ public class MultiSimSettingControllerTest extends TelephonyTest { doReturn(infoList).when(mSubControllerMock).getActiveSubscriptionInfoList(anyString()); // Mark subscription ready as false. The below sub info change should be ignored. replaceInstance(SubscriptionInfoUpdater.class, "sIsSubInfoInitialized", null, false); mMultiSimSettingControllerUT.notifySubscriptionInfoChanged(); waitABit(); verify(mSubControllerMock, never()).setDefaultDataSubId(anyInt()); verify(mSubControllerMock, never()).setDefaultVoiceSubId(anyInt()); verify(mSubControllerMock, never()).setDefaultSmsSubId(anyInt()); replaceInstance(SubscriptionInfoUpdater.class, "sIsSubInfoInitialized", null, true); mMultiSimSettingControllerUT.notifyAllSubscriptionLoaded(); waitABit(); Loading Loading
src/java/com/android/internal/telephony/MultiSimSettingController.java +12 −3 Original line number Diff line number Diff line Loading @@ -110,6 +110,14 @@ public class MultiSimSettingController extends Handler { /** The singleton instance. */ private static MultiSimSettingController sInstance = null; // This will be set true when handling EVENT_ALL_SUBSCRIPTIONS_LOADED. The reason of keeping // a local variable instead of calling SubscriptionInfoUpdater#isSubInfoInitialized is, there // might be a race condition that we receive EVENT_SUBSCRIPTION_INFO_CHANGED first, then // EVENT_ALL_SUBSCRIPTIONS_LOADED. And calling SubscriptionInfoUpdater#isSubInfoInitialized // will make us handle EVENT_SUBSCRIPTION_INFO_CHANGED unexpectedly and causing us to believe // the SIMs are newly inserted instead of being initialized. private boolean mSubInfoInitialized = false; /** * Return the singleton or create one if not existed. */ Loading Loading @@ -252,6 +260,7 @@ public class MultiSimSettingController extends Handler { */ private void onAllSubscriptionsLoaded() { if (DBG) log("onAllSubscriptionsLoaded"); mSubInfoInitialized = true; updateDefaults(/*init*/ true); disableDataForNonDefaultNonOpportunisticSubscriptions(); deactivateGroupedOpportunisticSubscriptionIfNeeded(); Loading @@ -264,7 +273,7 @@ public class MultiSimSettingController extends Handler { */ private void onSubscriptionsChanged() { if (DBG) log("onSubscriptionsChanged"); if (!SubscriptionInfoUpdater.isSubInfoInitialized()) return; if (!mSubInfoInitialized) return; updateDefaults(/*init*/ false); disableDataForNonDefaultNonOpportunisticSubscriptions(); deactivateGroupedOpportunisticSubscriptionIfNeeded(); Loading Loading @@ -349,7 +358,7 @@ public class MultiSimSettingController extends Handler { private void updateDefaults(boolean init) { if (DBG) log("updateDefaults"); if (!SubscriptionInfoUpdater.isSubInfoInitialized()) return; if (!mSubInfoInitialized) return; List<SubscriptionInfo> activeSubInfos = mSubController .getActiveSubscriptionInfoList(mContext.getOpPackageName()); Loading Loading @@ -545,7 +554,7 @@ public class MultiSimSettingController extends Handler { } private void disableDataForNonDefaultNonOpportunisticSubscriptions() { if (!SubscriptionInfoUpdater.isSubInfoInitialized()) return; if (!mSubInfoInitialized) return; int defaultDataSub = mSubController.getDefaultDataSubId(); Loading
tests/telephonytests/src/com/android/internal/telephony/MultiSimSettingControllerTest.java +0 −2 Original line number Diff line number Diff line Loading @@ -177,14 +177,12 @@ public class MultiSimSettingControllerTest extends TelephonyTest { doReturn(infoList).when(mSubControllerMock).getActiveSubscriptionInfoList(anyString()); // Mark subscription ready as false. The below sub info change should be ignored. replaceInstance(SubscriptionInfoUpdater.class, "sIsSubInfoInitialized", null, false); mMultiSimSettingControllerUT.notifySubscriptionInfoChanged(); waitABit(); verify(mSubControllerMock, never()).setDefaultDataSubId(anyInt()); verify(mSubControllerMock, never()).setDefaultVoiceSubId(anyInt()); verify(mSubControllerMock, never()).setDefaultSmsSubId(anyInt()); replaceInstance(SubscriptionInfoUpdater.class, "sIsSubInfoInitialized", null, true); mMultiSimSettingControllerUT.notifyAllSubscriptionLoaded(); waitABit(); Loading