[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:
@@ -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"
|
||||||
|
@@ -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"
|
||||||
|
@@ -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) {
|
||||||
|
@@ -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);
|
||||||
|
|
||||||
|
@@ -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) {
|
||||||
|
Reference in New Issue
Block a user