diff --git a/src/com/android/settings/homepage/contextualcards/conditional/CellularDataConditionController.java b/src/com/android/settings/homepage/contextualcards/conditional/CellularDataConditionController.java index 4c0ddc9aa91..93b937b59a4 100644 --- a/src/com/android/settings/homepage/contextualcards/conditional/CellularDataConditionController.java +++ b/src/com/android/settings/homepage/contextualcards/conditional/CellularDataConditionController.java @@ -17,18 +17,17 @@ package com.android.settings.homepage.contextualcards.conditional; import android.app.settings.SettingsEnums; +import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.content.IntentFilter; import android.net.ConnectivityManager; -import android.telephony.PhoneStateListener; -import android.telephony.PreciseDataConnectionState; -import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; +import com.android.internal.telephony.TelephonyIntents; import com.android.settings.R; import com.android.settings.Settings; import com.android.settings.homepage.contextualcards.ContextualCard; -import com.android.settings.network.GlobalSettingsChangeListener; import java.util.Objects; @@ -36,35 +35,22 @@ public class CellularDataConditionController implements ConditionalCardControlle static final int ID = Objects.hash("CellularDataConditionController"); + private static final IntentFilter DATA_CONNECTION_FILTER = + new IntentFilter(TelephonyIntents.ACTION_ANY_DATA_CONNECTION_STATE_CHANGED); + private final Context mAppContext; private final ConditionManager mConditionManager; - private final GlobalSettingsChangeListener mDefaultDataSubscriptionIdListener; + private final Receiver mReceiver; + private final TelephonyManager mTelephonyManager; private final ConnectivityManager mConnectivityManager; - private int mSubId; - private TelephonyManager mTelephonyManager; - private boolean mIsListeningConnectionChange; - public CellularDataConditionController(Context appContext, ConditionManager conditionManager) { mAppContext = appContext; mConditionManager = conditionManager; - mSubId = getDefaultDataSubscriptionId(appContext); - mTelephonyManager = getTelephonyManager(appContext, mSubId); - mDefaultDataSubscriptionIdListener = new GlobalSettingsChangeListener(appContext, - android.provider.Settings.Global.MULTI_SIM_DATA_CALL_SUBSCRIPTION) { - public void onChanged(String field) { - final int subId = getDefaultDataSubscriptionId(mAppContext); - if (subId == mSubId) { - return; - } - mSubId = subId; - if (mIsListeningConnectionChange) { - restartPhoneStateListener(mAppContext, subId); - } - } - }; + mReceiver = new Receiver(); mConnectivityManager = appContext.getSystemService( ConnectivityManager.class); + mTelephonyManager = appContext.getSystemService(TelephonyManager.class); } @Override @@ -109,50 +95,21 @@ public class CellularDataConditionController implements ConditionalCardControlle @Override public void startMonitoringStateChange() { - restartPhoneStateListener(mAppContext, mSubId); + mAppContext.registerReceiver(mReceiver, DATA_CONNECTION_FILTER); } @Override public void stopMonitoringStateChange() { - stopPhoneStateListener(); + mAppContext.unregisterReceiver(mReceiver); } - private int getDefaultDataSubscriptionId(Context context) { - final SubscriptionManager subscriptionManager = - context.getSystemService(SubscriptionManager.class); - return subscriptionManager.getDefaultDataSubscriptionId(); - } - - private TelephonyManager getTelephonyManager(Context context, int subId) { - final TelephonyManager telephonyManager = - context.getSystemService(TelephonyManager.class); - return telephonyManager.createForSubscriptionId(subId); - } - - private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() { + public class Receiver extends BroadcastReceiver { @Override - public void onPreciseDataConnectionStateChanged( - PreciseDataConnectionState dataConnectionState) { - mConditionManager.onConditionChanged(); + public void onReceive(Context context, Intent intent) { + if (TelephonyIntents.ACTION_ANY_DATA_CONNECTION_STATE_CHANGED.equals( + intent.getAction())) { + mConditionManager.onConditionChanged(); + } } - }; - - private void stopPhoneStateListener() { - mIsListeningConnectionChange = false; - mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE); - } - - // restart monitoring when subscription has been changed - private void restartPhoneStateListener(Context context, int subId) { - stopPhoneStateListener(); - mIsListeningConnectionChange = true; - - // switch mTelephonyManager only when subscription been updated to valid ones - if (SubscriptionManager.isValidSubscriptionId(subId)) { - mTelephonyManager = getTelephonyManager(context, subId); - } - - mTelephonyManager.listen(mPhoneStateListener, - PhoneStateListener.LISTEN_PRECISE_DATA_CONNECTION_STATE); } } diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardManagerTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardManagerTest.java index d179cae0235..be3c6855a26 100644 --- a/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardManagerTest.java +++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardManagerTest.java @@ -33,19 +33,14 @@ import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -import static org.robolectric.Shadows.shadowOf; import android.content.Context; import android.net.Uri; import android.os.Bundle; import android.provider.Settings; -import android.telephony.SubscriptionManager; -import android.telephony.TelephonyManager; import android.util.ArrayMap; import android.util.FeatureFlagUtils; -import androidx.test.ext.junit.runners.AndroidJUnit4; - import com.android.settings.core.FeatureFlags; import com.android.settings.homepage.contextualcards.conditional.ConditionContextualCardController; import com.android.settings.homepage.contextualcards.conditional.ConditionFooterContextualCard; @@ -63,9 +58,8 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; -import org.robolectric.shadows.ShadowSubscriptionManager; -import org.robolectric.shadows.ShadowTelephonyManager; import java.util.ArrayList; import java.util.Arrays; @@ -73,9 +67,8 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; -@RunWith(AndroidJUnit4.class) +@RunWith(RobolectricTestRunner.class) public class ContextualCardManagerTest { - private static final int SUB_ID = 2; private static final String TEST_SLICE_URI = "context://test/test"; private static final String TEST_SLICE_NAME = "test_name"; @@ -86,8 +79,6 @@ public class ContextualCardManagerTest { Lifecycle mLifecycle; private Context mContext; - private ShadowSubscriptionManager mShadowSubscriptionManager; - private ShadowTelephonyManager mShadowTelephonyManager; private ContextualCardManager mManager; @Before @@ -95,16 +86,6 @@ public class ContextualCardManagerTest { MockitoAnnotations.initMocks(this); mContext = RuntimeEnvironment.application; FeatureFlagUtils.setEnabled(mContext, FeatureFlags.CONDITIONAL_CARDS, true); - - mShadowSubscriptionManager = shadowOf( - mContext.getSystemService(SubscriptionManager.class)); - mShadowSubscriptionManager.setDefaultDataSubscriptionId(SUB_ID); - - final TelephonyManager telephonyManager = - mContext.getSystemService(TelephonyManager.class); - mShadowTelephonyManager = shadowOf(telephonyManager); - mShadowTelephonyManager.setTelephonyManagerForSubscriptionId(SUB_ID, telephonyManager); - mManager = new ContextualCardManager(mContext, mLifecycle, null /* bundle */); } diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/ControllerRendererPoolTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/ControllerRendererPoolTest.java index ad2dd2adc82..0cb0598906c 100644 --- a/tests/robotests/src/com/android/settings/homepage/contextualcards/ControllerRendererPoolTest.java +++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/ControllerRendererPoolTest.java @@ -18,13 +18,7 @@ package com.android.settings.homepage.contextualcards; import static com.google.common.truth.Truth.assertThat; -import static org.mockito.ArgumentMatchers.anyInt; -import static org.mockito.Mockito.when; -import static org.robolectric.Shadows.shadowOf; - import android.content.Context; -import android.telephony.SubscriptionManager; -import android.telephony.TelephonyManager; import androidx.lifecycle.LifecycleOwner; @@ -33,17 +27,11 @@ import com.android.settingslib.core.lifecycle.Lifecycle; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; -import org.robolectric.shadow.api.Shadow; -import org.robolectric.shadows.ShadowSubscriptionManager; -import org.robolectric.shadows.ShadowTelephonyManager; @RunWith(RobolectricTestRunner.class) public class ControllerRendererPoolTest { - private static final int SUB_ID = 1; private static final int UNSUPPORTED_CARD_TYPE = -99999; private static final int UNSUPPORTED_VIEW_TYPE = -99999; @@ -53,27 +41,12 @@ public class ControllerRendererPoolTest { private Lifecycle mLifecycle; private LifecycleOwner mLifecycleOwner; - @Mock - private TelephonyManager mTelephonyMgr; - @Before public void setUp() { - MockitoAnnotations.initMocks(this); - mContext = RuntimeEnvironment.application; mLifecycleOwner = () -> mLifecycle; mLifecycle = new Lifecycle(mLifecycleOwner); - // SubscriptionManager and TelephonyManager for CellularDataConditionController - ShadowSubscriptionManager shadowSubscriptionMgr = shadowOf( - mContext.getSystemService(SubscriptionManager.class)); - shadowSubscriptionMgr.setDefaultDataSubscriptionId(SUB_ID); - - ShadowTelephonyManager shadowTelephonyMgr = Shadow.extract( - mContext.getSystemService(TelephonyManager.class)); - shadowTelephonyMgr.setTelephonyManagerForSubscriptionId(SUB_ID, mTelephonyMgr); - when(mTelephonyMgr.createForSubscriptionId(anyInt())).thenReturn(mTelephonyMgr); - mPool = new ControllerRendererPool(); }