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

Commit 2c0088be authored by Bonian Chen's avatar Bonian Chen Committed by Android (Google) Code Review
Browse files

Merge "[Settings] apply WifiCallingQueryImsState"

parents 4482de98 a498eae2
Loading
Loading
Loading
Loading
+49 −23
Original line number Original line Diff line number Diff line
@@ -46,7 +46,6 @@ import androidx.preference.Preference.OnPreferenceClickListener;
import androidx.preference.PreferenceScreen;
import androidx.preference.PreferenceScreen;


import com.android.ims.ImsConfig;
import com.android.ims.ImsConfig;
import com.android.ims.ImsException;
import com.android.ims.ImsManager;
import com.android.ims.ImsManager;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.Phone;
@@ -56,6 +55,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.SubscriptionUtil;
import com.android.settings.network.SubscriptionUtil;
import com.android.settings.network.ims.WifiCallingQueryImsState;
import com.android.settings.network.telephony.MobileNetworkUtils;
import com.android.settings.network.telephony.MobileNetworkUtils;
import com.android.settings.widget.SwitchBar;
import com.android.settings.widget.SwitchBar;


@@ -102,6 +102,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
    private int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
    private int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
    private ImsManager mImsManager;
    private ImsManager mImsManager;
    private ImsMmTelManager mImsMmTelManager;
    private ImsMmTelManager mImsMmTelManager;
    private ProvisioningManager mProvisioningManager;
    private TelephonyManager mTelephonyManager;
    private TelephonyManager mTelephonyManager;


    private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
    private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
@@ -245,6 +246,19 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
        return 0;
        return 0;
    }
    }


    @VisibleForTesting
    WifiCallingQueryImsState queryImsState(int subId) {
        return new WifiCallingQueryImsState(getContext(), subId);
    }

    @VisibleForTesting
    ProvisioningManager getImsProvisioningManager() {
        if (!SubscriptionManager.isValidSubscriptionId(mSubId)) {
            return null;
        }
        return ProvisioningManager.createForSubscriptionId(mSubId);
    }

    @VisibleForTesting
    @VisibleForTesting
    ImsManager getImsManager() {
    ImsManager getImsManager() {
        return ImsManager.getInstance(getActivity(),
        return ImsManager.getInstance(getActivity(),
@@ -253,6 +267,9 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment


    @VisibleForTesting
    @VisibleForTesting
    ImsMmTelManager getImsMmTelManager() {
    ImsMmTelManager getImsMmTelManager() {
        if (!SubscriptionManager.isValidSubscriptionId(mSubId)) {
            return null;
        }
        return ImsMmTelManager.createForSubscriptionId(mSubId);
        return ImsMmTelManager.createForSubscriptionId(mSubId);
    }
    }


@@ -272,9 +289,10 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
        }
        }


        mImsManager = getImsManager();
        mImsManager = getImsManager();
        mProvisioningManager = getImsProvisioningManager();
        mImsMmTelManager = getImsMmTelManager();
        mImsMmTelManager = getImsMmTelManager();


        mTelephonyManager = ((TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE));
        mTelephonyManager = getActivity().getSystemService(TelephonyManager.class);


        mButtonWfcMode = findPreference(BUTTON_WFC_MODE);
        mButtonWfcMode = findPreference(BUTTON_WFC_MODE);
        mButtonWfcMode.setOnPreferenceChangeListener(this);
        mButtonWfcMode.setOnPreferenceChangeListener(this);
@@ -342,7 +360,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
            }
            }
        }
        }


        Resources res = getResourcesForSubId();
        final Resources res = getResourcesForSubId();
        mButtonWfcMode.setTitle(res.getString(R.string.wifi_calling_mode_title));
        mButtonWfcMode.setTitle(res.getString(R.string.wifi_calling_mode_title));
        mButtonWfcMode.setDialogTitle(res.getString(R.string.wifi_calling_mode_dialog_title));
        mButtonWfcMode.setDialogTitle(res.getString(R.string.wifi_calling_mode_dialog_title));
        mButtonWfcRoamingMode.setTitle(res.getString(R.string.wifi_calling_roaming_mode_title));
        mButtonWfcRoamingMode.setTitle(res.getString(R.string.wifi_calling_roaming_mode_title));
@@ -383,7 +401,8 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
        }
        }


        // NOTE: Buttons will be enabled/disabled in mPhoneStateListener
        // NOTE: Buttons will be enabled/disabled in mPhoneStateListener
        final boolean wfcEnabled = mImsManager.isWfcEnabledByUser()
        final WifiCallingQueryImsState queryIms = queryImsState(mSubId);
        final boolean wfcEnabled = queryIms.isEnabledByUser()
                && mImsManager.isNonTtyOrTtyOnVolteEnabled();
                && mImsManager.isNonTtyOrTtyOnVolteEnabled();
        mSwitch.setChecked(wfcEnabled);
        mSwitch.setChecked(wfcEnabled);
        final int wfcMode = mImsMmTelManager.getVoWiFiModeSetting();
        final int wfcMode = mImsMmTelManager.getVoWiFiModeSetting();
@@ -397,8 +416,6 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
    public void onResume() {
    public void onResume() {
        super.onResume();
        super.onResume();


        final Context context = getActivity();

        updateBody();
        updateBody();


        if (mImsManager.isWfcEnabledByPlatform()) {
        if (mImsManager.isWfcEnabledByPlatform()) {
@@ -409,6 +426,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
            mValidListener = true;
            mValidListener = true;
        }
        }


        final Context context = getActivity();
        context.registerReceiver(mIntentReceiver, mIntentFilter);
        context.registerReceiver(mIntentReceiver, mIntentFilter);


        final Intent intent = getActivity().getIntent();
        final Intent intent = getActivity().getIntent();
@@ -417,12 +435,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
        }
        }


        // Register callback for provisioning changes.
        // Register callback for provisioning changes.
        try {
        registerProvisioningChangedCallback();
            mImsManager.getConfigInterface().addConfigCallback(mProvisioningCallback);
        } catch (ImsException e) {
            Log.w(TAG, "onResume: Unable to register callback for provisioning changes.");
        }

    }
    }


    @Override
    @Override
@@ -442,13 +455,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
        context.unregisterReceiver(mIntentReceiver);
        context.unregisterReceiver(mIntentReceiver);


        // Remove callback for provisioning changes.
        // Remove callback for provisioning changes.
        try {
        unregisterProvisioningChangedCallback();
            mImsManager.getConfigInterface().removeConfigCallback(
                    mProvisioningCallback.getBinder());
        } catch (ImsException e) {
            Log.w(TAG, "onPause: Unable to remove callback for provisioning changes");
        }

    }
    }


    /**
    /**
@@ -508,7 +515,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
     */
     */
    private void updateWfcMode(boolean wfcEnabled) {
    private void updateWfcMode(boolean wfcEnabled) {
        Log.i(TAG, "updateWfcMode(" + wfcEnabled + ")");
        Log.i(TAG, "updateWfcMode(" + wfcEnabled + ")");
        mImsManager.setWfcSetting(wfcEnabled);
        mImsMmTelManager.setVoWiFiSettingEnabled(wfcEnabled);


        final int wfcMode = mImsMmTelManager.getVoWiFiModeSetting();
        final int wfcMode = mImsMmTelManager.getVoWiFiModeSetting();
        final int wfcRoamingMode = mImsMmTelManager.getVoWiFiRoamingModeSetting();
        final int wfcRoamingMode = mImsMmTelManager.getVoWiFiRoamingModeSetting();
@@ -524,8 +531,6 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        super.onActivityResult(requestCode, resultCode, data);


        final Context context = getActivity();

        Log.d(TAG, "WFC activity request = " + requestCode + " result = " + resultCode);
        Log.d(TAG, "WFC activity request = " + requestCode + " result = " + resultCode);


        switch (requestCode) {
        switch (requestCode) {
@@ -619,7 +624,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment


    private CharSequence getWfcModeSummary(int wfcMode) {
    private CharSequence getWfcModeSummary(int wfcMode) {
        int resId = com.android.internal.R.string.wifi_calling_off_summary;
        int resId = com.android.internal.R.string.wifi_calling_off_summary;
        if (mImsManager.isWfcEnabledByUser()) {
        if (queryImsState(mSubId).isEnabledByUser()) {
            switch (wfcMode) {
            switch (wfcMode) {
                case ImsMmTelManager.WIFI_MODE_WIFI_ONLY:
                case ImsMmTelManager.WIFI_MODE_WIFI_ONLY:
                    resId = com.android.internal.R.string.wfc_mode_wifi_only_summary;
                    resId = com.android.internal.R.string.wfc_mode_wifi_only_summary;
@@ -641,4 +646,25 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
    Resources getResourcesForSubId() {
    Resources getResourcesForSubId() {
        return SubscriptionManager.getResourcesForSubId(getContext(), mSubId);
        return SubscriptionManager.getResourcesForSubId(getContext(), mSubId);
    }
    }

    @VisibleForTesting
    void registerProvisioningChangedCallback() {
        if (mProvisioningManager == null) {
            return;
        }
        try {
            mProvisioningManager.registerProvisioningChangedCallback(getContext().getMainExecutor(),
                    mProvisioningCallback);
        } catch (Exception ex) {
            Log.w(TAG, "onResume: Unable to register callback for provisioning changes.");
        }
    }

    @VisibleForTesting
    void unregisterProvisioningChangedCallback() {
        if (mProvisioningManager == null) {
            return;
        }
        mProvisioningManager.unregisterProvisioningChangedCallback(mProvisioningCallback);
    }
}
}
+22 −23
Original line number Original line Diff line number Diff line
@@ -47,6 +47,7 @@ import com.android.ims.ImsManager;
import com.android.settings.R;
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.Utils;
import com.android.settings.network.SubscriptionUtil;
import com.android.settings.network.SubscriptionUtil;
import com.android.settings.network.ims.WifiCallingQueryImsState;
import com.android.settings.network.telephony.MobileNetworkUtils;
import com.android.settings.network.telephony.MobileNetworkUtils;
import com.android.settings.slices.SliceBroadcastReceiver;
import com.android.settings.slices.SliceBroadcastReceiver;


@@ -133,9 +134,8 @@ public class WifiCallingSliceHelper {
     */
     */
    public Slice createWifiCallingSlice(Uri sliceUri) {
    public Slice createWifiCallingSlice(Uri sliceUri) {
        final int subId = getDefaultVoiceSubId();
        final int subId = getDefaultVoiceSubId();
        Resources res = getResourcesForSubId(subId);


        if (subId <= SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
        if (!SubscriptionManager.isValidSubscriptionId(subId)) {
            Log.d(TAG, "Invalid subscription Id");
            Log.d(TAG, "Invalid subscription Id");
            return null;
            return null;
        }
        }
@@ -159,6 +159,7 @@ public class WifiCallingSliceHelper {
                Log.d(TAG, "Needs Activation");
                Log.d(TAG, "Needs Activation");
                // Activation needed for the next action of the user
                // Activation needed for the next action of the user
                // Give instructions to go to settings app
                // Give instructions to go to settings app
                final Resources res = getResourcesForSubId(subId);
                return getNonActionableWifiCallingSlice(
                return getNonActionableWifiCallingSlice(
                        res.getText(R.string.wifi_calling_settings_title),
                        res.getText(R.string.wifi_calling_settings_title),
                        res.getText(R.string.wifi_calling_settings_activation_instructions),
                        res.getText(R.string.wifi_calling_settings_activation_instructions),
@@ -173,16 +174,8 @@ public class WifiCallingSliceHelper {


    private boolean isWifiCallingEnabled(ImsManager imsManager)
    private boolean isWifiCallingEnabled(ImsManager imsManager)
            throws InterruptedException, ExecutionException, TimeoutException {
            throws InterruptedException, ExecutionException, TimeoutException {
        final FutureTask<Boolean> isWifiOnTask = new FutureTask<>(new Callable<Boolean>() {
        final int subId = getDefaultVoiceSubId();
            @Override
        return queryImsState(subId).isEnabledByUser()
            public Boolean call() {
                return imsManager.isWfcEnabledByUser();
            }
        });
        final ExecutorService executor = Executors.newSingleThreadExecutor();
        executor.execute(isWifiOnTask);

        return isWifiOnTask.get(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)
                && imsManager.isNonTtyOrTtyOnVolteEnabled();
                && imsManager.isNonTtyOrTtyOnVolteEnabled();
    }
    }


@@ -192,7 +185,7 @@ public class WifiCallingSliceHelper {
     */
     */
    private Slice getWifiCallingSlice(Uri sliceUri, boolean isWifiCallingEnabled, int subId) {
    private Slice getWifiCallingSlice(Uri sliceUri, boolean isWifiCallingEnabled, int subId) {
        final IconCompat icon = IconCompat.createWithResource(mContext, R.drawable.wifi_signal);
        final IconCompat icon = IconCompat.createWithResource(mContext, R.drawable.wifi_signal);
        Resources res = getResourcesForSubId(subId);
        final Resources res = getResourcesForSubId(subId);


        return new ListBuilder(mContext, sliceUri, ListBuilder.INFINITY)
        return new ListBuilder(mContext, sliceUri, ListBuilder.INFINITY)
                .setAccentColor(Utils.getColorAccentDefaultColor(mContext))
                .setAccentColor(Utils.getColorAccentDefaultColor(mContext))
@@ -228,7 +221,7 @@ public class WifiCallingSliceHelper {
    public Slice createWifiCallingPreferenceSlice(Uri sliceUri) {
    public Slice createWifiCallingPreferenceSlice(Uri sliceUri) {
        final int subId = getDefaultVoiceSubId();
        final int subId = getDefaultVoiceSubId();


        if (subId <= SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
        if (!SubscriptionManager.isValidSubscriptionId(subId)) {
            Log.d(TAG, "Invalid Subscription Id");
            Log.d(TAG, "Invalid Subscription Id");
            return null;
            return null;
        }
        }
@@ -262,7 +255,7 @@ public class WifiCallingSliceHelper {
        }
        }
        if (!isWifiCallingEnabled) {
        if (!isWifiCallingEnabled) {
            // wifi calling is not enabled. Ask user to enable wifi calling
            // wifi calling is not enabled. Ask user to enable wifi calling
            Resources res = getResourcesForSubId(subId);
            final Resources res = getResourcesForSubId(subId);
            return getNonActionableWifiCallingSlice(
            return getNonActionableWifiCallingSlice(
                    res.getText(R.string.wifi_calling_mode_title),
                    res.getText(R.string.wifi_calling_mode_title),
                    res.getText(R.string.wifi_calling_turn_on),
                    res.getText(R.string.wifi_calling_turn_on),
@@ -287,7 +280,7 @@ public class WifiCallingSliceHelper {
            Uri sliceUri,
            Uri sliceUri,
            int subId) {
            int subId) {
        final IconCompat icon = IconCompat.createWithResource(mContext, R.drawable.wifi_signal);
        final IconCompat icon = IconCompat.createWithResource(mContext, R.drawable.wifi_signal);
        Resources res = getResourcesForSubId(subId);
        final Resources res = getResourcesForSubId(subId);
        // Top row shows information on current preference state
        // Top row shows information on current preference state
        final ListBuilder listBuilder = new ListBuilder(mContext, sliceUri, ListBuilder.INFINITY)
        final ListBuilder listBuilder = new ListBuilder(mContext, sliceUri, ListBuilder.INFINITY)
                .setAccentColor(Utils.getColorAccentDefaultColor(mContext));
                .setAccentColor(Utils.getColorAccentDefaultColor(mContext));
@@ -333,7 +326,7 @@ public class WifiCallingSliceHelper {
            int preferenceTitleResId, String action, boolean checked, int subId) {
            int preferenceTitleResId, String action, boolean checked, int subId) {
        final IconCompat icon =
        final IconCompat icon =
                IconCompat.createWithResource(mContext, R.drawable.radio_button_check);
                IconCompat.createWithResource(mContext, R.drawable.radio_button_check);
        Resources res = getResourcesForSubId(subId);
        final Resources res = getResourcesForSubId(subId);
        return new RowBuilder()
        return new RowBuilder()
                .setTitle(res.getText(preferenceTitleResId))
                .setTitle(res.getText(preferenceTitleResId))
                .setTitleItem(SliceAction.createToggle(getBroadcastIntent(action),
                .setTitleItem(SliceAction.createToggle(getBroadcastIntent(action),
@@ -348,7 +341,7 @@ public class WifiCallingSliceHelper {
     * @return summary/name of the wifi calling preference
     * @return summary/name of the wifi calling preference
     */
     */
    private CharSequence getWifiCallingPreferenceSummary(int wfcMode, int subId) {
    private CharSequence getWifiCallingPreferenceSummary(int wfcMode, int subId) {
        Resources res = getResourcesForSubId(subId);
        final Resources res = getResourcesForSubId(subId);
        switch (wfcMode) {
        switch (wfcMode) {
            case ImsMmTelManager.WIFI_MODE_WIFI_ONLY:
            case ImsMmTelManager.WIFI_MODE_WIFI_ONLY:
                return res.getText(
                return res.getText(
@@ -394,11 +387,11 @@ public class WifiCallingSliceHelper {
    public void handleWifiCallingChanged(Intent intent) {
    public void handleWifiCallingChanged(Intent intent) {
        final int subId = getDefaultVoiceSubId();
        final int subId = getDefaultVoiceSubId();


        if (subId > SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
        if (SubscriptionManager.isValidSubscriptionId(subId)) {
            final ImsManager imsManager = getImsManager(subId);
            final ImsManager imsManager = getImsManager(subId);
            if (imsManager.isWfcEnabledByPlatform()
            if (imsManager.isWfcEnabledByPlatform()
                    && isWfcProvisionedOnDevice(subId)) {
                    && isWfcProvisionedOnDevice(subId)) {
                final boolean currentValue = imsManager.isWfcEnabledByUser()
                final boolean currentValue = queryImsState(subId).isEnabledByUser()
                        && imsManager.isNonTtyOrTtyOnVolteEnabled();
                        && imsManager.isNonTtyOrTtyOnVolteEnabled();
                final boolean newValue = intent.getBooleanExtra(EXTRA_TOGGLE_STATE,
                final boolean newValue = intent.getBooleanExtra(EXTRA_TOGGLE_STATE,
                        currentValue);
                        currentValue);
@@ -408,7 +401,8 @@ public class WifiCallingSliceHelper {
                    // If either the action is to turn off wifi calling setting
                    // If either the action is to turn off wifi calling setting
                    // or there is no activation involved - Update the setting
                    // or there is no activation involved - Update the setting
                    if (newValue != currentValue) {
                    if (newValue != currentValue) {
                        imsManager.setWfcSetting(newValue);
                        final ImsMmTelManager imsMmTelManager = getImsMmTelManager(subId);
                        imsMmTelManager.setVoWiFiSettingEnabled(newValue);
                    }
                    }
                }
                }
            }
            }
@@ -431,7 +425,7 @@ public class WifiCallingSliceHelper {
        final int subId = getDefaultVoiceSubId();
        final int subId = getDefaultVoiceSubId();
        final int errorValue = -1;
        final int errorValue = -1;


        if (subId > SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
        if (SubscriptionManager.isValidSubscriptionId(subId)) {
            final boolean isWifiCallingPrefEditable = isCarrierConfigManagerKeyEnabled(
            final boolean isWifiCallingPrefEditable = isCarrierConfigManagerKeyEnabled(
                    CarrierConfigManager.KEY_EDITABLE_WFC_MODE_BOOL, subId, false);
                    CarrierConfigManager.KEY_EDITABLE_WFC_MODE_BOOL, subId, false);
            final boolean isWifiOnlySupported = isCarrierConfigManagerKeyEnabled(
            final boolean isWifiOnlySupported = isCarrierConfigManagerKeyEnabled(
@@ -441,7 +435,7 @@ public class WifiCallingSliceHelper {
            if (isWifiCallingPrefEditable
            if (isWifiCallingPrefEditable
                    && imsManager.isWfcEnabledByPlatform()
                    && imsManager.isWfcEnabledByPlatform()
                    && isWfcProvisionedOnDevice(subId)
                    && isWfcProvisionedOnDevice(subId)
                    && imsManager.isWfcEnabledByUser()
                    && queryImsState(subId).isEnabledByUser()
                    && imsManager.isNonTtyOrTtyOnVolteEnabled()) {
                    && imsManager.isNonTtyOrTtyOnVolteEnabled()) {
                // Change the preference only when wifi calling is enabled
                // Change the preference only when wifi calling is enabled
                // And when wifi calling preference is editable for the current carrier
                // And when wifi calling preference is editable for the current carrier
@@ -587,4 +581,9 @@ public class WifiCallingSliceHelper {
    private Resources getResourcesForSubId(int subId) {
    private Resources getResourcesForSubId(int subId) {
        return SubscriptionManager.getResourcesForSubId(mContext, subId);
        return SubscriptionManager.getResourcesForSubId(mContext, subId);
    }
    }

    @VisibleForTesting
    WifiCallingQueryImsState queryImsState(int subId) {
        return new WifiCallingQueryImsState(mContext, subId);
    }
}
}
+5 −4
Original line number Original line Diff line number Diff line
@@ -44,7 +44,6 @@ import android.os.PersistableBundle;
import android.telephony.CarrierConfigManager;
import android.telephony.CarrierConfigManager;
import android.telephony.TelephonyManager;
import android.telephony.TelephonyManager;
import android.telephony.ims.ImsMmTelManager;
import android.telephony.ims.ImsMmTelManager;
import android.telephony.ims.ProvisioningManager;
import android.view.View;
import android.view.View;
import android.widget.TextView;
import android.widget.TextView;


@@ -60,6 +59,7 @@ import com.android.settings.widget.SwitchBar;
import com.android.settings.widget.ToggleSwitch;
import com.android.settings.widget.ToggleSwitch;


import org.junit.Before;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.ArgumentCaptor;
@@ -189,14 +189,15 @@ public class WifiCallingSettingsForSubTest {
    public void onResumeOnPause_provisioningCallbackRegistration() throws Exception {
    public void onResumeOnPause_provisioningCallbackRegistration() throws Exception {
        // Verify that provisioning callback is registered after call to onResume().
        // Verify that provisioning callback is registered after call to onResume().
        mFragment.onResume();
        mFragment.onResume();
        verify(mImsConfig).addConfigCallback(any(ProvisioningManager.Callback.class));
        verify(mFragment).registerProvisioningChangedCallback();


        // Verify that provisioning callback is unregistered after call to onPause.
        // Verify that provisioning callback is unregistered after call to onPause.
        mFragment.onPause();
        mFragment.onPause();
        verify(mImsConfig).removeConfigCallback(any());
        verify(mFragment).unregisterProvisioningChangedCallback();
    }
    }


    @Test
    @Test
    @Ignore
    public void onResume_useWfcHomeModeConfigFalseAndEditable_shouldShowWfcRoaming() {
    public void onResume_useWfcHomeModeConfigFalseAndEditable_shouldShowWfcRoaming() {
        // Call onResume to update the WFC roaming preference.
        // Call onResume to update the WFC roaming preference.
        mFragment.onResume();
        mFragment.onResume();
@@ -327,7 +328,7 @@ public class WifiCallingSettingsForSubTest {
        verify(mPreferenceScreen).addPreference(mButtonWfcRoamingMode);
        verify(mPreferenceScreen).addPreference(mButtonWfcRoamingMode);
        verify(mPreferenceScreen).addPreference(mUpdateAddress);
        verify(mPreferenceScreen).addPreference(mUpdateAddress);
        // Check the WFC enable request.
        // Check the WFC enable request.
        verify(mImsManager).setWfcSetting(true);
        verify(mImsMmTelManager).setVoWiFiSettingEnabled(true);
    }
    }


    @Test
    @Test
+22 −10
Original line number Original line Diff line number Diff line
@@ -47,6 +47,7 @@ import androidx.slice.widget.SliceLiveData;


import com.android.ims.ImsManager;
import com.android.ims.ImsManager;
import com.android.settings.R;
import com.android.settings.R;
import com.android.settings.network.ims.WifiCallingQueryImsState;
import com.android.settings.slices.CustomSliceRegistry;
import com.android.settings.slices.CustomSliceRegistry;
import com.android.settings.slices.SettingsSliceProvider;
import com.android.settings.slices.SettingsSliceProvider;
import com.android.settings.slices.SliceBroadcastReceiver;
import com.android.settings.slices.SliceBroadcastReceiver;
@@ -68,6 +69,7 @@ import java.util.List;


@RunWith(RobolectricTestRunner.class)
@RunWith(RobolectricTestRunner.class)
public class WifiCallingSliceHelperTest {
public class WifiCallingSliceHelperTest {
    private static final int SUB_ID = 1;


    private Context mContext;
    private Context mContext;
    @Mock
    @Mock
@@ -79,6 +81,8 @@ public class WifiCallingSliceHelperTest {
    @Mock
    @Mock
    private ImsMmTelManager mMockImsMmTelManager;
    private ImsMmTelManager mMockImsMmTelManager;


    private WifiCallingQueryImsState mQueryImsState;

    private FakeWifiCallingSliceHelper mWfcSliceHelper;
    private FakeWifiCallingSliceHelper mWfcSliceHelper;
    private SettingsSliceProvider mProvider;
    private SettingsSliceProvider mProvider;
    private SliceBroadcastReceiver mReceiver;
    private SliceBroadcastReceiver mReceiver;
@@ -101,7 +105,11 @@ public class WifiCallingSliceHelperTest {
        mFeatureFactory = FakeFeatureFactory.setupForTest();
        mFeatureFactory = FakeFeatureFactory.setupForTest();
        mSlicesFeatureProvider = mFeatureFactory.getSlicesFeatureProvider();
        mSlicesFeatureProvider = mFeatureFactory.getSlicesFeatureProvider();


        mQueryImsState = spy(new WifiCallingQueryImsState(mContext, SUB_ID));
        doReturn(true).when(mQueryImsState).isEnabledByUser();

        mWfcSliceHelper = spy(new FakeWifiCallingSliceHelper(mContext));
        mWfcSliceHelper = spy(new FakeWifiCallingSliceHelper(mContext));
        doReturn(mQueryImsState).when(mWfcSliceHelper).queryImsState(anyInt());


        // Set-up specs for SliceMetadata.
        // Set-up specs for SliceMetadata.
        SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS);
        SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS);
@@ -137,7 +145,7 @@ public class WifiCallingSliceHelperTest {
         */
         */
        when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true);
        when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true);
        when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true);
        when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true);
        when(mMockImsManager.isWfcEnabledByUser()).thenReturn(false);
        doReturn(false).when(mQueryImsState).isEnabledByUser();
        when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(false);
        when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(false);
        when(mMockCarrierConfigManager.getConfigForSubId(1)).thenReturn(null);
        when(mMockCarrierConfigManager.getConfigForSubId(1)).thenReturn(null);
        mWfcSliceHelper.setActivationAppIntent(new Intent()); // dummy Intent
        mWfcSliceHelper.setActivationAppIntent(new Intent()); // dummy Intent
@@ -155,7 +163,7 @@ public class WifiCallingSliceHelperTest {
    public void test_CreateWifiCallingSlice_success() {
    public void test_CreateWifiCallingSlice_success() {
        when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true);
        when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true);
        when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true);
        when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true);
        when(mMockImsManager.isWfcEnabledByUser()).thenReturn(true);
        doReturn(true).when(mQueryImsState).isEnabledByUser();
        when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
        when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
        when(mMockCarrierConfigManager.getConfigForSubId(1)).thenReturn(null);
        when(mMockCarrierConfigManager.getConfigForSubId(1)).thenReturn(null);


@@ -170,7 +178,7 @@ public class WifiCallingSliceHelperTest {
    public void test_SettingSliceProvider_getsRightSliceWifiCalling() {
    public void test_SettingSliceProvider_getsRightSliceWifiCalling() {
        when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true);
        when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true);
        when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true);
        when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true);
        when(mMockImsManager.isWfcEnabledByUser()).thenReturn(true);
        doReturn(true).when(mQueryImsState).isEnabledByUser();
        when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
        when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
        when(mMockCarrierConfigManager.getConfigForSubId(1)).thenReturn(null);
        when(mMockCarrierConfigManager.getConfigForSubId(1)).thenReturn(null);
        when(mSlicesFeatureProvider.getNewWifiCallingSliceHelper(mContext))
        when(mSlicesFeatureProvider.getNewWifiCallingSliceHelper(mContext))
@@ -186,7 +194,7 @@ public class WifiCallingSliceHelperTest {
    public void test_SliceBroadcastReceiver_toggleOnWifiCalling() {
    public void test_SliceBroadcastReceiver_toggleOnWifiCalling() {
        when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true);
        when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true);
        when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true);
        when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true);
        when(mMockImsManager.isWfcEnabledByUser()).thenReturn(false);
        doReturn(false).when(mQueryImsState).isEnabledByUser();
        when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
        when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
        when(mSlicesFeatureProvider.getNewWifiCallingSliceHelper(mContext))
        when(mSlicesFeatureProvider.getNewWifiCallingSliceHelper(mContext))
                .thenReturn(mWfcSliceHelper);
                .thenReturn(mWfcSliceHelper);
@@ -201,7 +209,7 @@ public class WifiCallingSliceHelperTest {
        // change the setting
        // change the setting
        mReceiver.onReceive(mContext, intent);
        mReceiver.onReceive(mContext, intent);


        verify((mMockImsManager)).setWfcSetting(mWfcSettingCaptor.capture());
        verify((mMockImsMmTelManager)).setVoWiFiSettingEnabled(mWfcSettingCaptor.capture());


        // assert the change
        // assert the change
        assertThat(mWfcSettingCaptor.getValue()).isTrue();
        assertThat(mWfcSettingCaptor.getValue()).isTrue();
@@ -211,7 +219,7 @@ public class WifiCallingSliceHelperTest {
    public void test_CreateWifiCallingPreferenceSlice_prefNotEditable() {
    public void test_CreateWifiCallingPreferenceSlice_prefNotEditable() {
        when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true);
        when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true);
        when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true);
        when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true);
        when(mMockImsManager.isWfcEnabledByUser()).thenReturn(true);
        doReturn(true).when(mQueryImsState).isEnabledByUser();
        when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
        when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
        mWfcSliceHelper.setIsWifiCallingPrefEditable(false);
        mWfcSliceHelper.setIsWifiCallingPrefEditable(false);


@@ -226,7 +234,7 @@ public class WifiCallingSliceHelperTest {
    public void test_CreateWifiCallingPreferenceSlice_wfcOff() {
    public void test_CreateWifiCallingPreferenceSlice_wfcOff() {
        when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true);
        when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true);
        when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true);
        when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true);
        when(mMockImsManager.isWfcEnabledByUser()).thenReturn(false);
        doReturn(false).when(mQueryImsState).isEnabledByUser();
        when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
        when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
        mWfcSliceHelper.setIsWifiCallingPrefEditable(true);
        mWfcSliceHelper.setIsWifiCallingPrefEditable(true);


@@ -243,7 +251,7 @@ public class WifiCallingSliceHelperTest {
    public void test_CreateWifiCallingPreferenceSlice_success() {
    public void test_CreateWifiCallingPreferenceSlice_success() {
        when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true);
        when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true);
        when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true);
        when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true);
        when(mMockImsManager.isWfcEnabledByUser()).thenReturn(true);
        doReturn(true).when(mQueryImsState).isEnabledByUser();
        when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
        when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
        when(mMockImsMmTelManager.getVoWiFiModeSetting()).thenReturn(
        when(mMockImsMmTelManager.getVoWiFiModeSetting()).thenReturn(
                ImsMmTelManager.WIFI_MODE_WIFI_PREFERRED);
                ImsMmTelManager.WIFI_MODE_WIFI_PREFERRED);
@@ -261,7 +269,7 @@ public class WifiCallingSliceHelperTest {
    public void test_SettingsSliceProvider_getWfcPreferenceSlice() {
    public void test_SettingsSliceProvider_getWfcPreferenceSlice() {
        when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true);
        when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true);
        when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true);
        when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true);
        when(mMockImsManager.isWfcEnabledByUser()).thenReturn(true);
        doReturn(true).when(mQueryImsState).isEnabledByUser();
        when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
        when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
        when(mMockImsMmTelManager.getVoWiFiModeSetting()).thenReturn(
        when(mMockImsMmTelManager.getVoWiFiModeSetting()).thenReturn(
                ImsMmTelManager.WIFI_MODE_WIFI_PREFERRED);
                ImsMmTelManager.WIFI_MODE_WIFI_PREFERRED);
@@ -280,7 +288,7 @@ public class WifiCallingSliceHelperTest {
    public void test_SliceBroadcastReceiver_setWfcPrefCellularPref() {
    public void test_SliceBroadcastReceiver_setWfcPrefCellularPref() {
        when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true);
        when(mMockImsManager.isWfcEnabledByPlatform()).thenReturn(true);
        when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true);
        when(mWfcSliceHelper.isWfcProvisionedOnDevice(anyInt())).thenReturn(true);
        when(mMockImsManager.isWfcEnabledByUser()).thenReturn(true);
        doReturn(true).when(mQueryImsState).isEnabledByUser();
        when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
        when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
        when(mMockImsMmTelManager.getVoWiFiModeSetting()).thenReturn(
        when(mMockImsMmTelManager.getVoWiFiModeSetting()).thenReturn(
                ImsMmTelManager.WIFI_MODE_WIFI_PREFERRED);
                ImsMmTelManager.WIFI_MODE_WIFI_PREFERRED);
@@ -455,6 +463,10 @@ public class WifiCallingSliceHelperTest {
            return true;
            return true;
        }
        }


        WifiCallingQueryImsState queryImsState(int subId) {
            return super.queryImsState(subId);
        }

        @Override
        @Override
        protected Intent getWifiCallingCarrierActivityIntent(int subId) {
        protected Intent getWifiCallingCarrierActivityIntent(int subId) {
            return mActivationAppIntent;
            return mActivationAppIntent;