Loading src/com/android/settings/network/telephony/WifiCallingPreferenceController.java +21 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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; Loading @@ -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 { Loading tests/robotests/src/com/android/settings/network/telephony/WifiCallingPreferenceControllerTest.java +47 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -46,6 +50,8 @@ import org.robolectric.RuntimeEnvironment; public class WifiCallingPreferenceControllerTest { private static final int SUB_ID = 2; @Mock private CarrierConfigManager mCarrierConfigManager; @Mock private TelephonyManager mTelephonyManager; @Mock Loading @@ -57,6 +63,7 @@ public class WifiCallingPreferenceControllerTest { private Preference mPreference; private PreferenceCategory mPreferenceCategory; private Context mContext; private PersistableBundle mCarrierConfig; @Before public void setUp() { Loading @@ -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( Loading Loading @@ -102,6 +113,42 @@ public class WifiCallingPreferenceControllerTest { assertThat(mPreference.isEnabled()).isFalse(); } @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); Loading Loading
src/com/android/settings/network/telephony/WifiCallingPreferenceController.java +21 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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; Loading @@ -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 { Loading
tests/robotests/src/com/android/settings/network/telephony/WifiCallingPreferenceControllerTest.java +47 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -46,6 +50,8 @@ import org.robolectric.RuntimeEnvironment; public class WifiCallingPreferenceControllerTest { private static final int SUB_ID = 2; @Mock private CarrierConfigManager mCarrierConfigManager; @Mock private TelephonyManager mTelephonyManager; @Mock Loading @@ -57,6 +63,7 @@ public class WifiCallingPreferenceControllerTest { private Preference mPreference; private PreferenceCategory mPreferenceCategory; private Context mContext; private PersistableBundle mCarrierConfig; @Before public void setUp() { Loading @@ -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( Loading Loading @@ -102,6 +113,42 @@ public class WifiCallingPreferenceControllerTest { assertThat(mPreference.isEnabled()).isFalse(); } @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); Loading