diff --git a/res/layout/wifi_calling_settings_preferences.xml b/res/layout/wifi_calling_settings_preferences.xml index 9a6cbe6698b..bad90ad0434 100644 --- a/res/layout/wifi_calling_settings_preferences.xml +++ b/res/layout/wifi_calling_settings_preferences.xml @@ -21,12 +21,6 @@ android:layout_height="match_parent" android:orientation="vertical"> - - + + mSil; @@ -317,17 +317,7 @@ public class WifiCallingSettings extends InstrumentedFragment implements HelpRes } // close this fragment - finish(); - } - - protected void finish() { - FragmentActivity activity = getActivity(); - if (activity == null) return; - if (getFragmentManager().getBackStackEntryCount() > 0) { - getFragmentManager().popBackStack(); - } else { - activity.finish(); - } + finishFragment(); } protected int [] subscriptionIdList(List subInfoList) { diff --git a/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java b/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java index 749af3ecbfc..492a2284edb 100644 --- a/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java +++ b/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java @@ -27,7 +27,6 @@ import android.content.res.Resources; import android.os.Bundle; import android.os.PersistableBundle; import android.telephony.CarrierConfigManager; -import android.telephony.PhoneStateListener; import android.telephony.SubscriptionManager; import android.telephony.TelephonyCallback; import android.telephony.TelephonyManager; @@ -40,7 +39,6 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Switch; -import android.widget.TextView; import androidx.appcompat.app.AlertDialog; import androidx.preference.Preference; @@ -56,8 +54,7 @@ import com.android.settings.SettingsPreferenceFragment; import com.android.settings.Utils; import com.android.settings.core.SubSettingLauncher; import com.android.settings.network.ims.WifiCallingQueryImsState; -import com.android.settings.widget.SettingsMainSwitchBar; -import com.android.settings.wifi.calling.LinkifyDescriptionPreference; +import com.android.settings.widget.SettingsMainSwitchPreference; import com.android.settingslib.widget.OnMainSwitchChangeListener; import java.util.List; @@ -72,6 +69,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment private static final String TAG = "WifiCallingForSub"; //String keys for preference lookup + private static final String SWITCH_BAR = "wifi_calling_switch_bar"; private static final String BUTTON_WFC_MODE = "wifi_calling_mode"; private static final String BUTTON_WFC_ROAMING_MODE = "wifi_calling_roaming_mode"; private static final String PREFERENCE_EMERGENCY_ADDRESS = "emergency_address_key"; @@ -91,7 +89,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment public static final int LAUCH_APP_UPDATE = 1; //UI objects - private SettingsMainSwitchBar mSwitchBar; + private SettingsMainSwitchPreference mSwitchBar; private ListWithEntrySummaryPreference mButtonWfcMode; private ListWithEntrySummaryPreference mButtonWfcRoamingMode; private Preference mUpdateAddress; @@ -119,41 +117,57 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment @Override public void onCallStateChanged(int state) { final SettingsActivity activity = (SettingsActivity) getActivity(); - final boolean isNonTtyOrTtyOnVolteEnabled = - queryImsState(WifiCallingSettingsForSub.this.mSubId).isAllowUserControl(); - final boolean isWfcEnabled = mSwitchBar.isChecked() - && isNonTtyOrTtyOnVolteEnabled; - boolean isCallStateIdle = getTelephonyManagerForSub( - WifiCallingSettingsForSub.this.mSubId).getCallState() - == TelephonyManager.CALL_STATE_IDLE; - mSwitchBar.setEnabled(isCallStateIdle - && isNonTtyOrTtyOnVolteEnabled); + + boolean isWfcEnabled = false; + boolean isCallStateIdle = false; + + final SettingsMainSwitchPreference prefSwitch = (SettingsMainSwitchPreference) + getPreferenceScreen().findPreference(SWITCH_BAR); + if (prefSwitch != null) { + isWfcEnabled = prefSwitch.isChecked(); + isCallStateIdle = getTelephonyManagerForSub( + WifiCallingSettingsForSub.this.mSubId).getCallState() + == TelephonyManager.CALL_STATE_IDLE; + + boolean isNonTtyOrTtyOnVolteEnabled = true; + if (isWfcEnabled || isCallStateIdle) { + isNonTtyOrTtyOnVolteEnabled = + queryImsState(WifiCallingSettingsForSub.this.mSubId) + .isAllowUserControl(); + } + + isWfcEnabled = isWfcEnabled && isNonTtyOrTtyOnVolteEnabled; + prefSwitch.setEnabled(isCallStateIdle && isNonTtyOrTtyOnVolteEnabled); + } boolean isWfcModeEditable = true; boolean isWfcRoamingModeEditable = false; - final CarrierConfigManager configManager = (CarrierConfigManager) - activity.getSystemService(Context.CARRIER_CONFIG_SERVICE); - if (configManager != null) { - PersistableBundle b = - configManager.getConfigForSubId(WifiCallingSettingsForSub.this.mSubId); - if (b != null) { - isWfcModeEditable = b.getBoolean( - CarrierConfigManager.KEY_EDITABLE_WFC_MODE_BOOL); - isWfcRoamingModeEditable = b.getBoolean( - CarrierConfigManager.KEY_EDITABLE_WFC_ROAMING_MODE_BOOL); + if (isWfcEnabled && isCallStateIdle) { + final CarrierConfigManager configManager = (CarrierConfigManager) + activity.getSystemService(Context.CARRIER_CONFIG_SERVICE); + if (configManager != null) { + PersistableBundle b = configManager.getConfigForSubId( + WifiCallingSettingsForSub.this.mSubId); + if (b != null) { + isWfcModeEditable = b.getBoolean( + CarrierConfigManager.KEY_EDITABLE_WFC_MODE_BOOL); + isWfcRoamingModeEditable = b.getBoolean( + CarrierConfigManager.KEY_EDITABLE_WFC_ROAMING_MODE_BOOL); + } } + } else { + isWfcModeEditable = false; + isWfcRoamingModeEditable = false; } final Preference pref = getPreferenceScreen().findPreference(BUTTON_WFC_MODE); if (pref != null) { - pref.setEnabled(isWfcEnabled && isWfcModeEditable - && isCallStateIdle); + pref.setEnabled(isWfcModeEditable); } final Preference pref_roam = getPreferenceScreen().findPreference(BUTTON_WFC_ROAMING_MODE); if (pref_roam != null) { - pref_roam.setEnabled(isWfcEnabled && isWfcRoamingModeEditable - && isCallStateIdle); + pref_roam.setEnabled(isWfcRoamingModeEditable); } } } @@ -184,20 +198,6 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment } }; - @Override - public void onActivityCreated(Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - - mSwitchBar = getView().findViewById(R.id.switch_bar); - mSwitchBar.show(); - } - - @Override - public void onDestroyView() { - super.onDestroyView(); - mSwitchBar.hide(); - } - @VisibleForTesting void showAlert(Intent intent) { final Context context = getActivity(); @@ -292,6 +292,8 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment mProvisioningManager = getImsProvisioningManager(); mImsMmTelManager = getImsMmTelManager(); + mSwitchBar = (SettingsMainSwitchPreference) findPreference(SWITCH_BAR); + mButtonWfcMode = findPreference(BUTTON_WFC_MODE); mButtonWfcMode.setOnPreferenceChangeListener(this); diff --git a/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsForSubTest.java b/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsForSubTest.java index 74bdddabbe5..e2c5ca33b4c 100644 --- a/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsForSubTest.java +++ b/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsForSubTest.java @@ -55,6 +55,7 @@ import com.android.settings.network.ims.MockWifiCallingQueryImsState; import com.android.settings.network.ims.WifiCallingQueryImsState; import com.android.settings.testutils.shadow.ShadowFragment; import com.android.settings.widget.SettingsMainSwitchBar; +import com.android.settings.widget.SettingsMainSwitchPreference; import org.junit.Before; import org.junit.Test; @@ -72,6 +73,7 @@ import org.robolectric.util.ReflectionHelpers; public class WifiCallingSettingsForSubTest { private static final int SUB_ID = 2; + private static final String SWITCH_BAR = "wifi_calling_switch_bar"; private static final String BUTTON_WFC_MODE = "wifi_calling_mode"; private static final String BUTTON_WFC_ROAMING_MODE = "wifi_calling_roaming_mode"; private static final String PREFERENCE_NO_OPTIONS_DESC = "no_options_description"; @@ -100,6 +102,8 @@ public class WifiCallingSettingsForSubTest { @Mock private View mView; @Mock + private SettingsMainSwitchPreference mSwitchBarPreference; + @Mock private LinkifyDescriptionPreference mDescriptionView; @Mock private ListWithEntrySummaryPreference mButtonWfcMode; @@ -116,6 +120,7 @@ public class WifiCallingSettingsForSubTest { doReturn(mContext.getTheme()).when(mActivity).getTheme(); mFragment = spy(new TestFragment()); + mFragment.setSwitchBar(mSwitchBarPreference); doReturn(mActivity).when(mFragment).getActivity(); doReturn(mContext).when(mFragment).getContext(); doReturn(mock(Intent.class)).when(mActivity).getIntent(); @@ -125,10 +130,6 @@ public class WifiCallingSettingsForSubTest { final Bundle bundle = new Bundle(); when(mFragment.getArguments()).thenReturn(bundle); doNothing().when(mFragment).addPreferencesFromResource(anyInt()); - doReturn(mock(ListWithEntrySummaryPreference.class)).when(mFragment).findPreference(any()); - doReturn(mButtonWfcMode).when(mFragment).findPreference(BUTTON_WFC_MODE); - doReturn(mButtonWfcRoamingMode).when(mFragment).findPreference(BUTTON_WFC_ROAMING_MODE); - doReturn(mDescriptionView).when(mFragment).findPreference(PREFERENCE_NO_OPTIONS_DESC); doNothing().when(mFragment).finish(); doReturn(mView).when(mFragment).getView(); @@ -344,6 +345,29 @@ public class WifiCallingSettingsForSubTest { } protected class TestFragment extends WifiCallingSettingsForSub { + private SettingsMainSwitchPreference mSwitchPref; + + protected void setSwitchBar(SettingsMainSwitchPreference switchPref) { + mSwitchPref = switchPref; + } + + @Override + public T findPreference(CharSequence key) { + if (SWITCH_BAR.equals(key)) { + return (T) mSwitchPref; + } + if (BUTTON_WFC_MODE.equals(key)) { + return (T) mButtonWfcMode; + } + if (BUTTON_WFC_ROAMING_MODE.equals(key)) { + return (T) mButtonWfcRoamingMode; + } + if (PREFERENCE_NO_OPTIONS_DESC.equals(key)) { + return (T) mDescriptionView; + } + return (T) mock(ListWithEntrySummaryPreference.class); + } + @Override protected Object getSystemService(final String name) { switch (name) {