Loading src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java +36 −2 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import android.content.res.Resources; import android.os.Bundle; import android.os.PersistableBundle; import android.telephony.CarrierConfigManager; import android.telephony.ServiceState; import android.telephony.SubscriptionManager; import android.telephony.TelephonyCallback; import android.telephony.TelephonyManager; Loading @@ -49,6 +50,7 @@ import androidx.preference.PreferenceScreen; import com.android.ims.ImsConfig; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.Phone; import com.android.internal.telephony.flags.Flags; import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.SettingsPreferenceFragment; Loading Loading @@ -97,6 +99,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment private boolean mEditableWfcMode = true; private boolean mEditableWfcRoamingMode = true; private boolean mUseWfcHomeModeForRoaming = false; private boolean mOverrideWfcRoamingModeWhileUsingNtn = false; private int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; private ImsMmTelManager mImsMmTelManager; Loading Loading @@ -166,7 +169,8 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment final Preference pref_roam = getPreferenceScreen().findPreference(BUTTON_WFC_ROAMING_MODE); if (pref_roam != null) { pref_roam.setEnabled(isWfcRoamingModeEditable); pref_roam.setEnabled(isWfcRoamingModeEditable && !overrideWfcRoamingModeWhileUsingNtn()); } } } Loading Loading @@ -361,6 +365,9 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment false); isWifiOnlySupported = b.getBoolean( CarrierConfigManager.KEY_CARRIER_WFC_SUPPORTS_WIFI_ONLY_BOOL, true); mOverrideWfcRoamingModeWhileUsingNtn = b.getBoolean( CarrierConfigManager.KEY_OVERRIDE_WFC_ROAMING_MODE_WHILE_USING_NTN_BOOL, true); } } Loading Loading @@ -577,7 +584,8 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment mButtonWfcMode.setSummary(getWfcModeSummary(wfcMode)); mButtonWfcMode.setEnabled(wfcEnabled && mEditableWfcMode); // mButtonWfcRoamingMode.setSummary is not needed; summary is just selected value. mButtonWfcRoamingMode.setEnabled(wfcEnabled && mEditableWfcRoamingMode); mButtonWfcRoamingMode.setEnabled(wfcEnabled && mEditableWfcRoamingMode && !overrideWfcRoamingModeWhileUsingNtn()); final PreferenceScreen preferenceScreen = getPreferenceScreen(); final boolean updateAddressEnabled = (getCarrierActivityIntent() != null); Loading Loading @@ -711,4 +719,30 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment } mProvisioningManager.unregisterProvisioningChangedCallback(mProvisioningCallback); } /** * Determine whether to override roaming Wi-Fi calling preference when device is connected to * non-terrestrial network. * * @return {@code true} if phone is connected to non-terrestrial network and if * {@link CarrierConfigManager#KEY_OVERRIDE_WFC_ROAMING_MODE_WHILE_USING_NTN_BOOL} is true, * {@code false} otherwise. */ private boolean overrideWfcRoamingModeWhileUsingNtn() { if (!Flags.carrierEnabledSatelliteFlag()) { return false; } TelephonyManager tm = getTelephonyManagerForSub(mSubId); ServiceState serviceState = tm.getServiceState(); if (serviceState == null) { return false; } if (!serviceState.isUsingNonTerrestrialNetwork()) { return false; } return mOverrideWfcRoamingModeWhileUsingNtn; } } tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsForSubTest.java +32 −0 Original line number Diff line number Diff line Loading @@ -40,7 +40,10 @@ import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.PersistableBundle; import android.platform.test.flag.junit.SetFlagsRule; import android.telephony.CarrierConfigManager; import android.telephony.NetworkRegistrationInfo; import android.telephony.ServiceState; import android.telephony.TelephonyManager; import android.telephony.ims.ImsMmTelManager; import android.view.View; Loading @@ -48,6 +51,7 @@ import android.view.View; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import com.android.internal.telephony.flags.Flags; import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.network.ims.MockWifiCallingQueryImsState; Loading @@ -57,6 +61,7 @@ import com.android.settings.widget.SettingsMainSwitchBar; import com.android.settings.widget.SettingsMainSwitchPreference; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; Loading @@ -70,6 +75,7 @@ import org.robolectric.util.ReflectionHelpers; @Config(shadows = ShadowFragment.class) @RunWith(RobolectricTestRunner.class) public class WifiCallingSettingsForSubTest { @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); private static final int SUB_ID = 2; private static final String SWITCH_BAR = "wifi_calling_switch_bar"; Loading Loading @@ -158,6 +164,7 @@ public class WifiCallingSettingsForSubTest { mFragment.onAttach(mContext); mFragment.onCreate(null); mFragment.onActivityCreated(null); mSetFlagsRule.disableFlags(Flags.FLAG_CARRIER_ENABLED_SATELLITE_FLAG); } private void setDefaultCarrierConfigValues() { Loading Loading @@ -240,6 +247,31 @@ public class WifiCallingSettingsForSubTest { verify(mButtonWfcRoamingMode, times(1)).setVisible(false); } @Test public void onResume_overrideWfcRoamingModeWhileUsingNTN_shouldDisableWfcRoaming() { mSetFlagsRule.enableFlags(Flags.FLAG_CARRIER_ENABLED_SATELLITE_FLAG); mBundle.putBoolean( CarrierConfigManager.KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL, false); mBundle.putBoolean(CarrierConfigManager.KEY_EDITABLE_WFC_ROAMING_MODE_BOOL, true); mBundle.putBoolean( CarrierConfigManager.KEY_OVERRIDE_WFC_ROAMING_MODE_WHILE_USING_NTN_BOOL, true); // Phone connected to non-terrestrial network NetworkRegistrationInfo nri = new NetworkRegistrationInfo.Builder() .setIsNonTerrestrialNetwork(true) .build(); ServiceState ss = new ServiceState(); ss.addNetworkRegistrationInfo(nri); doReturn(ss).when(mTelephonyManager).getServiceState(); // Call onResume to update the WFC roaming preference. mFragment.onResume(); // Check that WFC roaming preference is visible but disabled verify(mButtonWfcRoamingMode, times(1)).setEnabled(false); verify(mButtonWfcRoamingMode, times(1)).setVisible(true); } @Test public void onResume_useWfcHomeModeConfigTrueAndNotEditable_shouldHideWfcRoaming() { mBundle.putBoolean( Loading Loading
src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java +36 −2 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import android.content.res.Resources; import android.os.Bundle; import android.os.PersistableBundle; import android.telephony.CarrierConfigManager; import android.telephony.ServiceState; import android.telephony.SubscriptionManager; import android.telephony.TelephonyCallback; import android.telephony.TelephonyManager; Loading @@ -49,6 +50,7 @@ import androidx.preference.PreferenceScreen; import com.android.ims.ImsConfig; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.Phone; import com.android.internal.telephony.flags.Flags; import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.SettingsPreferenceFragment; Loading Loading @@ -97,6 +99,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment private boolean mEditableWfcMode = true; private boolean mEditableWfcRoamingMode = true; private boolean mUseWfcHomeModeForRoaming = false; private boolean mOverrideWfcRoamingModeWhileUsingNtn = false; private int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; private ImsMmTelManager mImsMmTelManager; Loading Loading @@ -166,7 +169,8 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment final Preference pref_roam = getPreferenceScreen().findPreference(BUTTON_WFC_ROAMING_MODE); if (pref_roam != null) { pref_roam.setEnabled(isWfcRoamingModeEditable); pref_roam.setEnabled(isWfcRoamingModeEditable && !overrideWfcRoamingModeWhileUsingNtn()); } } } Loading Loading @@ -361,6 +365,9 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment false); isWifiOnlySupported = b.getBoolean( CarrierConfigManager.KEY_CARRIER_WFC_SUPPORTS_WIFI_ONLY_BOOL, true); mOverrideWfcRoamingModeWhileUsingNtn = b.getBoolean( CarrierConfigManager.KEY_OVERRIDE_WFC_ROAMING_MODE_WHILE_USING_NTN_BOOL, true); } } Loading Loading @@ -577,7 +584,8 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment mButtonWfcMode.setSummary(getWfcModeSummary(wfcMode)); mButtonWfcMode.setEnabled(wfcEnabled && mEditableWfcMode); // mButtonWfcRoamingMode.setSummary is not needed; summary is just selected value. mButtonWfcRoamingMode.setEnabled(wfcEnabled && mEditableWfcRoamingMode); mButtonWfcRoamingMode.setEnabled(wfcEnabled && mEditableWfcRoamingMode && !overrideWfcRoamingModeWhileUsingNtn()); final PreferenceScreen preferenceScreen = getPreferenceScreen(); final boolean updateAddressEnabled = (getCarrierActivityIntent() != null); Loading Loading @@ -711,4 +719,30 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment } mProvisioningManager.unregisterProvisioningChangedCallback(mProvisioningCallback); } /** * Determine whether to override roaming Wi-Fi calling preference when device is connected to * non-terrestrial network. * * @return {@code true} if phone is connected to non-terrestrial network and if * {@link CarrierConfigManager#KEY_OVERRIDE_WFC_ROAMING_MODE_WHILE_USING_NTN_BOOL} is true, * {@code false} otherwise. */ private boolean overrideWfcRoamingModeWhileUsingNtn() { if (!Flags.carrierEnabledSatelliteFlag()) { return false; } TelephonyManager tm = getTelephonyManagerForSub(mSubId); ServiceState serviceState = tm.getServiceState(); if (serviceState == null) { return false; } if (!serviceState.isUsingNonTerrestrialNetwork()) { return false; } return mOverrideWfcRoamingModeWhileUsingNtn; } }
tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsForSubTest.java +32 −0 Original line number Diff line number Diff line Loading @@ -40,7 +40,10 @@ import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.PersistableBundle; import android.platform.test.flag.junit.SetFlagsRule; import android.telephony.CarrierConfigManager; import android.telephony.NetworkRegistrationInfo; import android.telephony.ServiceState; import android.telephony.TelephonyManager; import android.telephony.ims.ImsMmTelManager; import android.view.View; Loading @@ -48,6 +51,7 @@ import android.view.View; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import com.android.internal.telephony.flags.Flags; import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.network.ims.MockWifiCallingQueryImsState; Loading @@ -57,6 +61,7 @@ import com.android.settings.widget.SettingsMainSwitchBar; import com.android.settings.widget.SettingsMainSwitchPreference; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; Loading @@ -70,6 +75,7 @@ import org.robolectric.util.ReflectionHelpers; @Config(shadows = ShadowFragment.class) @RunWith(RobolectricTestRunner.class) public class WifiCallingSettingsForSubTest { @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); private static final int SUB_ID = 2; private static final String SWITCH_BAR = "wifi_calling_switch_bar"; Loading Loading @@ -158,6 +164,7 @@ public class WifiCallingSettingsForSubTest { mFragment.onAttach(mContext); mFragment.onCreate(null); mFragment.onActivityCreated(null); mSetFlagsRule.disableFlags(Flags.FLAG_CARRIER_ENABLED_SATELLITE_FLAG); } private void setDefaultCarrierConfigValues() { Loading Loading @@ -240,6 +247,31 @@ public class WifiCallingSettingsForSubTest { verify(mButtonWfcRoamingMode, times(1)).setVisible(false); } @Test public void onResume_overrideWfcRoamingModeWhileUsingNTN_shouldDisableWfcRoaming() { mSetFlagsRule.enableFlags(Flags.FLAG_CARRIER_ENABLED_SATELLITE_FLAG); mBundle.putBoolean( CarrierConfigManager.KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL, false); mBundle.putBoolean(CarrierConfigManager.KEY_EDITABLE_WFC_ROAMING_MODE_BOOL, true); mBundle.putBoolean( CarrierConfigManager.KEY_OVERRIDE_WFC_ROAMING_MODE_WHILE_USING_NTN_BOOL, true); // Phone connected to non-terrestrial network NetworkRegistrationInfo nri = new NetworkRegistrationInfo.Builder() .setIsNonTerrestrialNetwork(true) .build(); ServiceState ss = new ServiceState(); ss.addNetworkRegistrationInfo(nri); doReturn(ss).when(mTelephonyManager).getServiceState(); // Call onResume to update the WFC roaming preference. mFragment.onResume(); // Check that WFC roaming preference is visible but disabled verify(mButtonWfcRoamingMode, times(1)).setEnabled(false); verify(mButtonWfcRoamingMode, times(1)).setVisible(true); } @Test public void onResume_useWfcHomeModeConfigTrueAndNotEditable_shouldHideWfcRoaming() { mBundle.putBoolean( Loading