diff --git a/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java b/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java index 30ba084639f..3906fc87975 100644 --- a/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java +++ b/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java @@ -268,7 +268,8 @@ public class SimStatusDialogController implements LifecycleObserver, OnResume, O PhoneStateListener.LISTEN_DATA_CONNECTION_STATE | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS | PhoneStateListener.LISTEN_SERVICE_STATE); - mSubscriptionManager.addOnSubscriptionsChangedListener(mOnSubscriptionsChangedListener); + mSubscriptionManager.addOnSubscriptionsChangedListener( + mContext.getMainExecutor(), mOnSubscriptionsChangedListener); registerImsRegistrationCallback(mSubscriptionInfo.getSubscriptionId()); if (mShowLatestAreaInfo) { diff --git a/src/com/android/settings/network/ActiveSubsciptionsListener.java b/src/com/android/settings/network/ActiveSubsciptionsListener.java index 3e4272d62ce..99dfd55415b 100644 --- a/src/com/android/settings/network/ActiveSubsciptionsListener.java +++ b/src/com/android/settings/network/ActiveSubsciptionsListener.java @@ -46,6 +46,26 @@ public abstract class ActiveSubsciptionsListener private static final String TAG = "ActiveSubsciptions"; private static final boolean DEBUG = false; + private Looper mLooper; + private Context mContext; + + private static final int STATE_NOT_LISTENING = 0; + private static final int STATE_STOPPING = 1; + private static final int STATE_PREPARING = 2; + private static final int STATE_LISTENING = 3; + private static final int STATE_DATA_CACHED = 4; + + private AtomicInteger mCacheState; + private SubscriptionManager mSubscriptionManager; + + private IntentFilter mSubscriptionChangeIntentFilter; + private BroadcastReceiver mSubscriptionChangeReceiver; + + private static final int MAX_SUBSCRIPTION_UNKNOWN = -1; + + private AtomicInteger mMaxActiveSubscriptionInfos; + private List mCachedActiveSubscriptionInfo; + /** * Constructor * @@ -93,26 +113,6 @@ public abstract class ActiveSubsciptionsListener }; } - private Looper mLooper; - private Context mContext; - - private static final int STATE_NOT_LISTENING = 0; - private static final int STATE_STOPPING = 1; - private static final int STATE_PREPARING = 2; - private static final int STATE_LISTENING = 3; - private static final int STATE_DATA_CACHED = 4; - - private AtomicInteger mCacheState; - private SubscriptionManager mSubscriptionManager; - - private IntentFilter mSubscriptionChangeIntentFilter; - private BroadcastReceiver mSubscriptionChangeReceiver; - - private static final int MAX_SUBSCRIPTION_UNKNOWN = -1; - - private AtomicInteger mMaxActiveSubscriptionInfos; - private List mCachedActiveSubscriptionInfo; - /** * Active subscriptions got changed */ @@ -266,6 +266,12 @@ public abstract class ActiveSubsciptionsListener mCachedActiveSubscriptionInfo = null; } + @VisibleForTesting + void registerForSubscriptionsChange() { + getSubscriptionManager().addOnSubscriptionsChangedListener( + mContext.getMainExecutor(), this); + } + private void monitorSubscriptionsChange(boolean on) { if (on) { if (!mCacheState.compareAndSet(STATE_NOT_LISTENING, STATE_PREPARING)) { @@ -277,7 +283,7 @@ public abstract class ActiveSubsciptionsListener } mContext.registerReceiver(mSubscriptionChangeReceiver, mSubscriptionChangeIntentFilter, null, new Handler(mLooper)); - getSubscriptionManager().addOnSubscriptionsChangedListener(this); + registerForSubscriptionsChange(); mCacheState.compareAndSet(STATE_PREPARING, STATE_LISTENING); return; } diff --git a/src/com/android/settings/network/SubscriptionsChangeListener.java b/src/com/android/settings/network/SubscriptionsChangeListener.java index 1ecd7705405..1b50a54ba45 100644 --- a/src/com/android/settings/network/SubscriptionsChangeListener.java +++ b/src/com/android/settings/network/SubscriptionsChangeListener.java @@ -67,7 +67,8 @@ public class SubscriptionsChangeListener extends ContentObserver { } public void start() { - mSubscriptionManager.addOnSubscriptionsChangedListener(mSubscriptionsChangedListener); + mSubscriptionManager.addOnSubscriptionsChangedListener( + mContext.getMainExecutor(), mSubscriptionsChangedListener); mContext.getContentResolver() .registerContentObserver(mAirplaneModeSettingUri, false, this); final IntentFilter radioTechnologyChangedFilter = new IntentFilter( diff --git a/tests/robotests/src/com/android/settings/network/ActiveSubsciptionsListenerTest.java b/tests/robotests/src/com/android/settings/network/ActiveSubsciptionsListenerTest.java index 4c7b55b64f0..5565ca34fc3 100644 --- a/tests/robotests/src/com/android/settings/network/ActiveSubsciptionsListenerTest.java +++ b/tests/robotests/src/com/android/settings/network/ActiveSubsciptionsListenerTest.java @@ -108,6 +108,10 @@ public class ActiveSubsciptionsListenerTest { private ActiveSubsciptionsListenerImpl(Looper looper, Context context) { super(looper, context); } + + @Override + void registerForSubscriptionsChange() {} + public void onChanged() {} } diff --git a/tests/robotests/src/com/android/settings/network/SubscriptionsChangeListenerTest.java b/tests/robotests/src/com/android/settings/network/SubscriptionsChangeListenerTest.java index 9f302dfdee4..d0756559d85 100644 --- a/tests/robotests/src/com/android/settings/network/SubscriptionsChangeListenerTest.java +++ b/tests/robotests/src/com/android/settings/network/SubscriptionsChangeListenerTest.java @@ -83,7 +83,7 @@ public class SubscriptionsChangeListenerTest { initListener(false); verify(contentResolver, never()).registerContentObserver(any(Uri.class), anyBoolean(), any(ContentObserver.class)); - verify(mSubscriptionManager, never()).addOnSubscriptionsChangedListener(any()); + verify(mSubscriptionManager, never()).addOnSubscriptionsChangedListener(any(), any()); verify(mContext, never()).registerReceiver(any(), any()); } @@ -92,7 +92,7 @@ public class SubscriptionsChangeListenerTest { initListener(true); final ArgumentCaptor captor = ArgumentCaptor.forClass(SubscriptionManager.OnSubscriptionsChangedListener.class); - verify(mSubscriptionManager).addOnSubscriptionsChangedListener(captor.capture()); + verify(mSubscriptionManager).addOnSubscriptionsChangedListener(any(), captor.capture()); captor.getValue().onSubscriptionsChanged(); verify(mClient).onSubscriptionsChanged(); }