From 5c71853bd9669b9c76829b755c0977f147ac988a Mon Sep 17 00:00:00 2001 From: Bonian Chen Date: Thu, 12 May 2022 11:14:47 +0800 Subject: [PATCH] [Settings] Expand scrollable area of Wifi calling UI 1. Replace InstrumentedDialogFragment by SettingsPreferenceFragment. Enable the capability of shirnking the size of title. 2. Move switch bar into Preference. Enlarge scrollable area within this UI page. Bug: 224661026 Test: local Change-Id: I6e0a491721e9f93858c389593b2bb891f6fa8f8d --- .../wifi_calling_settings_preferences.xml | 6 -- res/xml/wifi_calling_settings.xml | 4 + .../wifi/calling/WifiCallingSettings.java | 18 +--- .../calling/WifiCallingSettingsForSub.java | 86 ++++++++++--------- .../WifiCallingSettingsForSubTest.java | 32 ++++++- 5 files changed, 80 insertions(+), 66 deletions(-) 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) {