OSDN Git Service

Check wfc roaming config when read
authorYouming Ye <paulye@google.com>
Tue, 26 Mar 2019 20:55:44 +0000 (13:55 -0700)
committerYouming Ye <paulye@google.com>
Wed, 27 Mar 2019 17:23:15 +0000 (10:23 -0700)
Bug: 127913488
Test: Build
Change-Id: I0a3e8d3f4bc0590f12085f5963892a1d8278efdc

src/com/android/settings/network/telephony/WifiCallingPreferenceController.java
tests/robotests/src/com/android/settings/network/telephony/WifiCallingPreferenceControllerTest.java

index dfa1271..96521ea 100644 (file)
@@ -21,8 +21,10 @@ import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.os.Looper;
+import android.os.PersistableBundle;
 import android.telecom.PhoneAccountHandle;
 import android.telecom.TelecomManager;
+import android.telephony.CarrierConfigManager;
 import android.telephony.PhoneStateListener;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
@@ -50,17 +52,24 @@ public class WifiCallingPreferenceController extends TelephonyBasePreferenceCont
 
     private TelephonyManager mTelephonyManager;
     @VisibleForTesting
+    CarrierConfigManager mCarrierConfigManager;
+    @VisibleForTesting
     ImsManager mImsManager;
     @VisibleForTesting
     PhoneAccountHandle mSimCallManager;
     private PhoneCallStateListener mPhoneStateListener;
     private Preference mPreference;
+    private boolean mEditableWfcRoamingMode;
+    private boolean mUseWfcHomeModeForRoaming;
 
     public WifiCallingPreferenceController(Context context, String key) {
         super(context, key);
+        mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
         mTelephonyManager = context.getSystemService(TelephonyManager.class);
         mSimCallManager = context.getSystemService(TelecomManager.class).getSimCallManager();
         mPhoneStateListener = new PhoneCallStateListener(Looper.getMainLooper());
+        mEditableWfcRoamingMode = true;
+        mUseWfcHomeModeForRoaming = false;
     }
 
     @Override
@@ -109,9 +118,9 @@ public class WifiCallingPreferenceController extends TelephonyBasePreferenceCont
         } else {
             int resId = com.android.internal.R.string.wifi_calling_off_summary;
             if (mImsManager.isWfcEnabledByUser()) {
+                boolean wfcRoamingEnabled = mEditableWfcRoamingMode && !mUseWfcHomeModeForRoaming;
                 final boolean isRoaming = mTelephonyManager.isNetworkRoaming();
-                int wfcMode = mImsManager.getWfcMode(isRoaming);
-
+                int wfcMode = mImsManager.getWfcMode(isRoaming && wfcRoamingEnabled);
                 switch (wfcMode) {
                     case ImsConfig.WfcModeFeatureValueConstants.WIFI_ONLY:
                         resId = com.android.internal.R.string.wfc_mode_wifi_only_summary;
@@ -137,6 +146,16 @@ public class WifiCallingPreferenceController extends TelephonyBasePreferenceCont
         mSubId = subId;
         mTelephonyManager = TelephonyManager.from(mContext).createForSubscriptionId(mSubId);
         mImsManager = ImsManager.getInstance(mContext, SubscriptionManager.getPhoneId(mSubId));
+        if (mCarrierConfigManager != null) {
+            final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
+            if (carrierConfig != null) {
+                mEditableWfcRoamingMode = carrierConfig.getBoolean(
+                        CarrierConfigManager.KEY_EDITABLE_WFC_ROAMING_MODE_BOOL);
+                mUseWfcHomeModeForRoaming = carrierConfig.getBoolean(
+                        CarrierConfigManager
+                                .KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL);
+            }
+        }
     }
 
     private class PhoneCallStateListener extends PhoneStateListener {
index c0b1dab..9eb62f6 100644 (file)
@@ -18,11 +18,14 @@ package com.android.settings.network.telephony;
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.junit.Assert.assertNull;
 import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
 
 import android.content.Context;
+import android.os.PersistableBundle;
+import android.telephony.CarrierConfigManager;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
 
@@ -32,6 +35,7 @@ import androidx.preference.PreferenceScreen;
 
 import com.android.ims.ImsConfig;
 import com.android.ims.ImsManager;
+import com.android.internal.R;
 import com.android.settings.core.BasePreferenceController;
 
 import org.junit.Before;
@@ -47,6 +51,8 @@ public class WifiCallingPreferenceControllerTest {
     private static final int SUB_ID = 2;
 
     @Mock
+    private CarrierConfigManager mCarrierConfigManager;
+    @Mock
     private TelephonyManager mTelephonyManager;
     @Mock
     private ImsManager mImsManager;
@@ -57,6 +63,7 @@ public class WifiCallingPreferenceControllerTest {
     private Preference mPreference;
     private PreferenceCategory mPreferenceCategory;
     private Context mContext;
+    private PersistableBundle mCarrierConfig;
 
     @Before
     public void setUp() {
@@ -69,10 +76,14 @@ public class WifiCallingPreferenceControllerTest {
 
         mPreference = new Preference(mContext);
         mController = new WifiCallingPreferenceController(mContext, "wifi_calling");
+        mController.mCarrierConfigManager = mCarrierConfigManager;
         mController.init(SUB_ID);
         mController.mImsManager = mImsManager;
         mPreference.setKey(mController.getPreferenceKey());
 
+        mCarrierConfig = new PersistableBundle();
+        when(mCarrierConfigManager.getConfigForSubId(SUB_ID)).thenReturn(mCarrierConfig);
+
         mPreferenceCategory = new PreferenceCategory(mContext);
         when(mPreferenceScreen.findPreference(
                 WifiCallingPreferenceController.KEY_PREFERENCE_CATEGORY)).thenReturn(
@@ -103,6 +114,42 @@ public class WifiCallingPreferenceControllerTest {
     }
 
     @Test
+    public void updateState_wfcNonRoaming() {
+        assertNull(mController.mSimCallManager);
+        mCarrierConfig.putBoolean(CarrierConfigManager.KEY_EDITABLE_WFC_ROAMING_MODE_BOOL, false);
+        // update the config value by calling init again.
+        mController.init(SUB_ID);
+        mController.mImsManager = mImsManager;
+
+        when(mImsManager.getWfcMode(true)).thenReturn(
+                ImsConfig.WfcModeFeatureValueConstants.WIFI_PREFERRED);
+        when(mImsManager.getWfcMode(false)).thenReturn(
+                ImsConfig.WfcModeFeatureValueConstants.CELLULAR_PREFERRED);
+        when(mImsManager.isWfcEnabledByUser()).thenReturn(true);
+        when(mTelephonyManager.isNetworkRoaming()).thenReturn(true);
+
+        mController.updateState(mPreference);
+        assertThat(mPreference.getSummary())
+                .isEqualTo(mContext.getString(R.string.wfc_mode_cellular_preferred_summary));
+    }
+
+    @Test
+    public void updateState_wfcRoaming() {
+        assertNull(mController.mSimCallManager);
+
+        when(mImsManager.getWfcMode(true)).thenReturn(
+                ImsConfig.WfcModeFeatureValueConstants.WIFI_PREFERRED);
+        when(mImsManager.getWfcMode(false)).thenReturn(
+                ImsConfig.WfcModeFeatureValueConstants.CELLULAR_PREFERRED);
+        when(mImsManager.isWfcEnabledByUser()).thenReturn(true);
+        when(mTelephonyManager.isNetworkRoaming()).thenReturn(true);
+
+        mController.updateState(mPreference);
+        assertThat(mPreference.getSummary())
+                .isEqualTo(mContext.getString(R.string.wfc_mode_wifi_preferred_summary));
+    }
+
+    @Test
     public void displayPreference_notAvailable_setCategoryInvisible() {
         mController.init(SubscriptionManager.INVALID_SUBSCRIPTION_ID);