Merge "[Settings] Fix CellDataPreferenceTest" into rvc-dev
diff --git a/src/com/android/settings/datausage/CellDataPreference.java b/src/com/android/settings/datausage/CellDataPreference.java
index 4a49f33..6dc40e8 100644
--- a/src/com/android/settings/datausage/CellDataPreference.java
+++ b/src/com/android/settings/datausage/CellDataPreference.java
@@ -50,15 +50,12 @@
     public int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
     public boolean mChecked;
     public boolean mMultiSimDialog;
-    @VisibleForTesting
-    ProxySubscriptionManager mProxySubscriptionMgr;
     private MobileDataEnabledListener mDataStateListener;
 
     public CellDataPreference(Context context, AttributeSet attrs) {
         super(context, attrs, TypedArrayUtils.getAttr(context,
                 androidx.preference.R.attr.switchPreferenceStyle,
                 android.R.attr.switchPreferenceStyle));
-        mProxySubscriptionMgr = ProxySubscriptionManager.getInstance(context);
         mDataStateListener = new MobileDataEnabledListener(context, this);
     }
 
@@ -88,13 +85,15 @@
     public void onAttached() {
         super.onAttached();
         mDataStateListener.start(mSubId);
-        mProxySubscriptionMgr.addActiveSubscriptionsListener(mOnSubscriptionsChangeListener);
+        getProxySubscriptionManager()
+                .addActiveSubscriptionsListener(mOnSubscriptionsChangeListener);
     }
 
     @Override
     public void onDetached() {
         mDataStateListener.stop();
-        mProxySubscriptionMgr.removeActiveSubscriptionsListener(mOnSubscriptionsChangeListener);
+        getProxySubscriptionManager()
+                .removeActiveSubscriptionsListener(mOnSubscriptionsChangeListener);
         super.onDetached();
     }
 
@@ -104,8 +103,8 @@
             throw new IllegalArgumentException("CellDataPreference needs a SubscriptionInfo");
         }
 
-        mProxySubscriptionMgr = ProxySubscriptionManager.getInstance(getContext());
-        mProxySubscriptionMgr.addActiveSubscriptionsListener(mOnSubscriptionsChangeListener);
+        getProxySubscriptionManager()
+                .addActiveSubscriptionsListener(mOnSubscriptionsChangeListener);
 
         if (mSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
             mSubId = subId;
@@ -115,6 +114,16 @@
         updateChecked();
     }
 
+    @VisibleForTesting
+    ProxySubscriptionManager getProxySubscriptionManager() {
+        return ProxySubscriptionManager.getInstance(getContext());
+    }
+
+    @VisibleForTesting
+    SubscriptionInfo getActiveSubscriptionInfo(int subId) {
+        return getProxySubscriptionManager().getActiveSubscriptionInfo(subId);
+    }
+
     private void updateChecked() {
         setChecked(getContext().getSystemService(TelephonyManager.class).getDataEnabled(mSubId));
     }
@@ -122,7 +131,7 @@
     private void updateEnabled() {
         // If this subscription is not active, for example, SIM card is taken out, we disable
         // the button.
-        setEnabled(mProxySubscriptionMgr.getActiveSubscriptionInfo(mSubId) != null);
+        setEnabled(getActiveSubscriptionInfo(mSubId) != null);
     }
 
     @Override
@@ -130,9 +139,8 @@
         final Context context = getContext();
         FeatureFactory.getFactory(context).getMetricsFeatureProvider()
                 .action(context, SettingsEnums.ACTION_CELL_DATA_TOGGLE, !mChecked);
-        final SubscriptionInfo currentSir = mProxySubscriptionMgr.getActiveSubscriptionInfo(
-                mSubId);
-        final SubscriptionInfo nextSir = mProxySubscriptionMgr.getActiveSubscriptionInfo(
+        final SubscriptionInfo currentSir = getActiveSubscriptionInfo(mSubId);
+        final SubscriptionInfo nextSir = getActiveSubscriptionInfo(
                 SubscriptionManager.getDefaultDataSubscriptionId());
         if (mChecked) {
             setMobileDataEnabled(false);
@@ -186,9 +194,8 @@
 
     private void showMultiSimDialog(Builder builder,
             DialogInterface.OnClickListener listener) {
-        final SubscriptionInfo currentSir = mProxySubscriptionMgr.getActiveSubscriptionInfo(
-                mSubId);
-        final SubscriptionInfo nextSir = mProxySubscriptionMgr.getActiveSubscriptionInfo(
+        final SubscriptionInfo currentSir = getActiveSubscriptionInfo(mSubId);
+        final SubscriptionInfo nextSir = getActiveSubscriptionInfo(
                 SubscriptionManager.getDefaultDataSubscriptionId());
 
         final String previousName = (nextSir == null)
@@ -205,8 +212,7 @@
     }
 
     private void disableDataForOtherSubscriptions(int subId) {
-        final SubscriptionInfo subInfo = mProxySubscriptionMgr.getActiveSubscriptionInfo(
-                subId);
+        final SubscriptionInfo subInfo = getActiveSubscriptionInfo(subId);
         if (subInfo != null) {
             getContext().getSystemService(TelephonyManager.class).setDataEnabled(subId, false);
         }
@@ -218,7 +224,7 @@
             return;
         }
         if (mMultiSimDialog) {
-            mProxySubscriptionMgr.get().setDefaultDataSubId(mSubId);
+            getProxySubscriptionManager().get().setDefaultDataSubId(mSubId);
             setMobileDataEnabled(true);
             disableDataForOtherSubscriptions(mSubId);
         } else {
diff --git a/tests/robotests/src/com/android/settings/datausage/CellDataPreferenceTest.java b/tests/robotests/src/com/android/settings/datausage/CellDataPreferenceTest.java
index 5f2a54c..c0b12dc 100644
--- a/tests/robotests/src/com/android/settings/datausage/CellDataPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/CellDataPreferenceTest.java
@@ -17,11 +17,14 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
 
 import android.content.Context;
 import android.telephony.SubscriptionInfo;
+import android.telephony.SubscriptionManager;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.LinearLayout;
@@ -31,7 +34,6 @@
 import com.android.settings.network.ProxySubscriptionManager;
 
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
@@ -40,12 +42,13 @@
 import org.robolectric.RuntimeEnvironment;
 
 @RunWith(RobolectricTestRunner.class)
-@Ignore
 public class CellDataPreferenceTest {
 
     @Mock
     private ProxySubscriptionManager mProxySubscriptionMgr;
     @Mock
+    private SubscriptionManager mSubscriptionManager;
+    @Mock
     private SubscriptionInfo mSubInfo;
 
     private Context mContext;
@@ -57,8 +60,20 @@
         MockitoAnnotations.initMocks(this);
 
         mContext = RuntimeEnvironment.application;
-        mPreference = new CellDataPreference(mContext, null);
-        mPreference.mProxySubscriptionMgr = mProxySubscriptionMgr;
+        mPreference = new CellDataPreference(mContext, null) {
+            @Override
+            ProxySubscriptionManager getProxySubscriptionManager() {
+                return mProxySubscriptionMgr;
+            }
+            @Override
+            SubscriptionInfo getActiveSubscriptionInfo(int subId) {
+                return mSubInfo;
+            }
+        };
+        doNothing().when(mSubscriptionManager).setDefaultDataSubId(anyInt());
+        doReturn(mSubscriptionManager).when(mProxySubscriptionMgr).get();
+        doNothing().when(mProxySubscriptionMgr).addActiveSubscriptionsListener(any());
+        doNothing().when(mProxySubscriptionMgr).removeActiveSubscriptionsListener(any());
 
         final LayoutInflater inflater = LayoutInflater.from(mContext);
         final View view = inflater.inflate(mPreference.getLayoutResource(),
@@ -69,14 +84,13 @@
 
     @Test
     public void noActiveSub_shouldDisable() {
-        doReturn(null).when(mProxySubscriptionMgr).getActiveSubscriptionInfo(anyInt());
+        mSubInfo = null;
         mPreference.mOnSubscriptionsChangeListener.onChanged();
         assertThat(mPreference.isEnabled()).isFalse();
     }
 
     @Test
     public void hasActiveSub_shouldEnable() {
-        doReturn(mSubInfo).when(mProxySubscriptionMgr).getActiveSubscriptionInfo(anyInt());
         mPreference.mOnSubscriptionsChangeListener.onChanged();
         assertThat(mPreference.isEnabled()).isTrue();
     }