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

Commit 00edf60a authored by Bonian Chen's avatar Bonian Chen Committed by Automerger Merge Worker
Browse files

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

parents f6605348 69c13dd4
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) {