Merge "[Settings] Expand scrollable area of Wifi calling UI" into tm-dev am: 69c13dd49b

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/18335865

Change-Id: I97a8fa29785afb776db60ce8954be297d4decd25
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Bonian Chen
2022-05-13 09:31:55 +00:00
committed by Automerger Merge Worker
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) {