[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
This commit is contained in:
Bonian Chen
2022-05-12 11:14:47 +08:00
parent 14c7ce7ccb
commit 5c71853bd9
5 changed files with 80 additions and 66 deletions

View File

@@ -21,12 +21,6 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical"> android:orientation="vertical">
<com.android.settings.widget.SettingsMainSwitchBar
android:id="@+id/switch_bar"
android:title="@string/wifi_calling_main_switch_title"
android:layout_height="wrap_content"
android:layout_width="match_parent" />
<FrameLayout <FrameLayout
android:id="@android:id/tabcontent" android:id="@android:id/tabcontent"
android:layout_width="match_parent" android:layout_width="match_parent"

View File

@@ -19,6 +19,10 @@
android:key="wifi_calling_settings" android:key="wifi_calling_settings"
android:title="@string/wifi_calling_settings_title"> android:title="@string/wifi_calling_settings_title">
<com.android.settings.widget.SettingsMainSwitchPreference
android:key="wifi_calling_switch_bar"
android:title="@string/wifi_calling_main_switch_title" />
<com.android.settings.wifi.calling.ListWithEntrySummaryPreference <com.android.settings.wifi.calling.ListWithEntrySummaryPreference
android:key="wifi_calling_mode" android:key="wifi_calling_mode"
isPreferenceVisible="false" isPreferenceVisible="false"

View File

@@ -30,13 +30,12 @@ import android.view.ViewGroup;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter; import androidx.fragment.app.FragmentPagerAdapter;
import com.android.internal.util.CollectionUtils; import com.android.internal.util.CollectionUtils;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.core.InstrumentedFragment; import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.network.ActiveSubscriptionsListener; import com.android.settings.network.ActiveSubscriptionsListener;
import com.android.settings.network.SubscriptionUtil; import com.android.settings.network.SubscriptionUtil;
import com.android.settings.network.ims.WifiCallingQueryImsState; import com.android.settings.network.ims.WifiCallingQueryImsState;
@@ -54,7 +53,8 @@ import java.util.List;
* "Wi-Fi Calling settings" screen. This is the container fragment which holds * "Wi-Fi Calling settings" screen. This is the container fragment which holds
* {@link WifiCallingSettingsForSub} fragments. * {@link WifiCallingSettingsForSub} fragments.
*/ */
public class WifiCallingSettings extends InstrumentedFragment implements HelpResourceProvider { public class WifiCallingSettings extends SettingsPreferenceFragment
implements HelpResourceProvider {
private static final String TAG = "WifiCallingSettings"; private static final String TAG = "WifiCallingSettings";
private int mConstructionSubId; private int mConstructionSubId;
private List<SubscriptionInfo> mSil; private List<SubscriptionInfo> mSil;
@@ -317,17 +317,7 @@ public class WifiCallingSettings extends InstrumentedFragment implements HelpRes
} }
// close this fragment // close this fragment
finish(); finishFragment();
}
protected void finish() {
FragmentActivity activity = getActivity();
if (activity == null) return;
if (getFragmentManager().getBackStackEntryCount() > 0) {
getFragmentManager().popBackStack();
} else {
activity.finish();
}
} }
protected int [] subscriptionIdList(List<SubscriptionInfo> subInfoList) { protected int [] subscriptionIdList(List<SubscriptionInfo> subInfoList) {

View File

@@ -27,7 +27,6 @@ import android.content.res.Resources;
import android.os.Bundle; import android.os.Bundle;
import android.os.PersistableBundle; import android.os.PersistableBundle;
import android.telephony.CarrierConfigManager; import android.telephony.CarrierConfigManager;
import android.telephony.PhoneStateListener;
import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager;
import android.telephony.TelephonyCallback; import android.telephony.TelephonyCallback;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
@@ -40,7 +39,6 @@ import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.Switch; import android.widget.Switch;
import android.widget.TextView;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import androidx.preference.Preference; import androidx.preference.Preference;
@@ -56,8 +54,7 @@ import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.Utils; import com.android.settings.Utils;
import com.android.settings.core.SubSettingLauncher; import com.android.settings.core.SubSettingLauncher;
import com.android.settings.network.ims.WifiCallingQueryImsState; import com.android.settings.network.ims.WifiCallingQueryImsState;
import com.android.settings.widget.SettingsMainSwitchBar; import com.android.settings.widget.SettingsMainSwitchPreference;
import com.android.settings.wifi.calling.LinkifyDescriptionPreference;
import com.android.settingslib.widget.OnMainSwitchChangeListener; import com.android.settingslib.widget.OnMainSwitchChangeListener;
import java.util.List; import java.util.List;
@@ -72,6 +69,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
private static final String TAG = "WifiCallingForSub"; private static final String TAG = "WifiCallingForSub";
//String keys for preference lookup //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_MODE = "wifi_calling_mode";
private static final String BUTTON_WFC_ROAMING_MODE = "wifi_calling_roaming_mode"; private static final String BUTTON_WFC_ROAMING_MODE = "wifi_calling_roaming_mode";
private static final String PREFERENCE_EMERGENCY_ADDRESS = "emergency_address_key"; 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; public static final int LAUCH_APP_UPDATE = 1;
//UI objects //UI objects
private SettingsMainSwitchBar mSwitchBar; private SettingsMainSwitchPreference mSwitchBar;
private ListWithEntrySummaryPreference mButtonWfcMode; private ListWithEntrySummaryPreference mButtonWfcMode;
private ListWithEntrySummaryPreference mButtonWfcRoamingMode; private ListWithEntrySummaryPreference mButtonWfcRoamingMode;
private Preference mUpdateAddress; private Preference mUpdateAddress;
@@ -119,41 +117,57 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
@Override @Override
public void onCallStateChanged(int state) { public void onCallStateChanged(int state) {
final SettingsActivity activity = (SettingsActivity) getActivity(); final SettingsActivity activity = (SettingsActivity) getActivity();
final boolean isNonTtyOrTtyOnVolteEnabled =
queryImsState(WifiCallingSettingsForSub.this.mSubId).isAllowUserControl(); boolean isWfcEnabled = false;
final boolean isWfcEnabled = mSwitchBar.isChecked() boolean isCallStateIdle = false;
&& isNonTtyOrTtyOnVolteEnabled;
boolean isCallStateIdle = getTelephonyManagerForSub( final SettingsMainSwitchPreference prefSwitch = (SettingsMainSwitchPreference)
WifiCallingSettingsForSub.this.mSubId).getCallState() getPreferenceScreen().findPreference(SWITCH_BAR);
== TelephonyManager.CALL_STATE_IDLE; if (prefSwitch != null) {
mSwitchBar.setEnabled(isCallStateIdle isWfcEnabled = prefSwitch.isChecked();
&& isNonTtyOrTtyOnVolteEnabled); 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 isWfcModeEditable = true;
boolean isWfcRoamingModeEditable = false; boolean isWfcRoamingModeEditable = false;
final CarrierConfigManager configManager = (CarrierConfigManager) if (isWfcEnabled && isCallStateIdle) {
activity.getSystemService(Context.CARRIER_CONFIG_SERVICE); final CarrierConfigManager configManager = (CarrierConfigManager)
if (configManager != null) { activity.getSystemService(Context.CARRIER_CONFIG_SERVICE);
PersistableBundle b = if (configManager != null) {
configManager.getConfigForSubId(WifiCallingSettingsForSub.this.mSubId); PersistableBundle b = configManager.getConfigForSubId(
if (b != null) { WifiCallingSettingsForSub.this.mSubId);
isWfcModeEditable = b.getBoolean( if (b != null) {
CarrierConfigManager.KEY_EDITABLE_WFC_MODE_BOOL); isWfcModeEditable = b.getBoolean(
isWfcRoamingModeEditable = b.getBoolean( CarrierConfigManager.KEY_EDITABLE_WFC_MODE_BOOL);
CarrierConfigManager.KEY_EDITABLE_WFC_ROAMING_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); final Preference pref = getPreferenceScreen().findPreference(BUTTON_WFC_MODE);
if (pref != null) { if (pref != null) {
pref.setEnabled(isWfcEnabled && isWfcModeEditable pref.setEnabled(isWfcModeEditable);
&& isCallStateIdle);
} }
final Preference pref_roam = final Preference pref_roam =
getPreferenceScreen().findPreference(BUTTON_WFC_ROAMING_MODE); getPreferenceScreen().findPreference(BUTTON_WFC_ROAMING_MODE);
if (pref_roam != null) { if (pref_roam != null) {
pref_roam.setEnabled(isWfcEnabled && isWfcRoamingModeEditable pref_roam.setEnabled(isWfcRoamingModeEditable);
&& isCallStateIdle);
} }
} }
} }
@@ -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 @VisibleForTesting
void showAlert(Intent intent) { void showAlert(Intent intent) {
final Context context = getActivity(); final Context context = getActivity();
@@ -292,6 +292,8 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
mProvisioningManager = getImsProvisioningManager(); mProvisioningManager = getImsProvisioningManager();
mImsMmTelManager = getImsMmTelManager(); mImsMmTelManager = getImsMmTelManager();
mSwitchBar = (SettingsMainSwitchPreference) findPreference(SWITCH_BAR);
mButtonWfcMode = findPreference(BUTTON_WFC_MODE); mButtonWfcMode = findPreference(BUTTON_WFC_MODE);
mButtonWfcMode.setOnPreferenceChangeListener(this); mButtonWfcMode.setOnPreferenceChangeListener(this);

View File

@@ -55,6 +55,7 @@ import com.android.settings.network.ims.MockWifiCallingQueryImsState;
import com.android.settings.network.ims.WifiCallingQueryImsState; import com.android.settings.network.ims.WifiCallingQueryImsState;
import com.android.settings.testutils.shadow.ShadowFragment; import com.android.settings.testutils.shadow.ShadowFragment;
import com.android.settings.widget.SettingsMainSwitchBar; import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settings.widget.SettingsMainSwitchPreference;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@@ -72,6 +73,7 @@ import org.robolectric.util.ReflectionHelpers;
public class WifiCallingSettingsForSubTest { public class WifiCallingSettingsForSubTest {
private static final int SUB_ID = 2; 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_MODE = "wifi_calling_mode";
private static final String BUTTON_WFC_ROAMING_MODE = "wifi_calling_roaming_mode"; private static final String BUTTON_WFC_ROAMING_MODE = "wifi_calling_roaming_mode";
private static final String PREFERENCE_NO_OPTIONS_DESC = "no_options_description"; private static final String PREFERENCE_NO_OPTIONS_DESC = "no_options_description";
@@ -100,6 +102,8 @@ public class WifiCallingSettingsForSubTest {
@Mock @Mock
private View mView; private View mView;
@Mock @Mock
private SettingsMainSwitchPreference mSwitchBarPreference;
@Mock
private LinkifyDescriptionPreference mDescriptionView; private LinkifyDescriptionPreference mDescriptionView;
@Mock @Mock
private ListWithEntrySummaryPreference mButtonWfcMode; private ListWithEntrySummaryPreference mButtonWfcMode;
@@ -116,6 +120,7 @@ public class WifiCallingSettingsForSubTest {
doReturn(mContext.getTheme()).when(mActivity).getTheme(); doReturn(mContext.getTheme()).when(mActivity).getTheme();
mFragment = spy(new TestFragment()); mFragment = spy(new TestFragment());
mFragment.setSwitchBar(mSwitchBarPreference);
doReturn(mActivity).when(mFragment).getActivity(); doReturn(mActivity).when(mFragment).getActivity();
doReturn(mContext).when(mFragment).getContext(); doReturn(mContext).when(mFragment).getContext();
doReturn(mock(Intent.class)).when(mActivity).getIntent(); doReturn(mock(Intent.class)).when(mActivity).getIntent();
@@ -125,10 +130,6 @@ public class WifiCallingSettingsForSubTest {
final Bundle bundle = new Bundle(); final Bundle bundle = new Bundle();
when(mFragment.getArguments()).thenReturn(bundle); when(mFragment.getArguments()).thenReturn(bundle);
doNothing().when(mFragment).addPreferencesFromResource(anyInt()); 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(); doNothing().when(mFragment).finish();
doReturn(mView).when(mFragment).getView(); doReturn(mView).when(mFragment).getView();
@@ -344,6 +345,29 @@ public class WifiCallingSettingsForSubTest {
} }
protected class TestFragment extends WifiCallingSettingsForSub { protected class TestFragment extends WifiCallingSettingsForSub {
private SettingsMainSwitchPreference mSwitchPref;
protected void setSwitchBar(SettingsMainSwitchPreference switchPref) {
mSwitchPref = switchPref;
}
@Override
public <T extends Preference> 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 @Override
protected Object getSystemService(final String name) { protected Object getSystemService(final String name) {
switch (name) { switch (name) {