Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5c71853b authored by Bonian Chen's avatar Bonian Chen
Browse files

[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
parent 14c7ce7c
Loading
Loading
Loading
Loading
+0 −6
Original line number Diff line number Diff line
@@ -21,12 +21,6 @@
    android:layout_height="match_parent"
    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
        android:id="@android:id/tabcontent"
        android:layout_width="match_parent"
+4 −0
Original line number Diff line number Diff line
@@ -19,6 +19,10 @@
                  android:key="wifi_calling_settings"
                  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
            android:key="wifi_calling_mode"
            isPreferenceVisible="false"
+4 −14
Original line number Diff line number Diff line
@@ -30,13 +30,12 @@ import android.view.ViewGroup;

import androidx.annotation.VisibleForTesting;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;

import com.android.internal.util.CollectionUtils;
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.SubscriptionUtil;
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
 * {@link WifiCallingSettingsForSub} fragments.
 */
public class WifiCallingSettings extends InstrumentedFragment implements HelpResourceProvider {
public class WifiCallingSettings extends SettingsPreferenceFragment
        implements HelpResourceProvider {
    private static final String TAG = "WifiCallingSettings";
    private int mConstructionSubId;
    private List<SubscriptionInfo> 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<SubscriptionInfo> subInfoList) {
+44 −42
Original line number Diff line number Diff line
@@ -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,23 +117,37 @@ 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(

            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;
            mSwitchBar.setEnabled(isCallStateIdle
                    && isNonTtyOrTtyOnVolteEnabled);

                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;
            if (isWfcEnabled && isCallStateIdle) {
                final CarrierConfigManager configManager = (CarrierConfigManager)
                        activity.getSystemService(Context.CARRIER_CONFIG_SERVICE);
                if (configManager != null) {
                PersistableBundle b =
                        configManager.getConfigForSubId(WifiCallingSettingsForSub.this.mSubId);
                    PersistableBundle b = configManager.getConfigForSubId(
                            WifiCallingSettingsForSub.this.mSubId);
                    if (b != null) {
                        isWfcModeEditable = b.getBoolean(
                                CarrierConfigManager.KEY_EDITABLE_WFC_MODE_BOOL);
@@ -143,17 +155,19 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
                                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);

+28 −4
Original line number Diff line number Diff line
@@ -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 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
        protected Object getSystemService(final String name) {
            switch (name) {