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

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

Merge "[Settings] Replace VT and VOLTE provisioning API"

parents 7f88b518 65817204
Loading
Loading
Loading
Loading
+30 −4
Original line number Diff line number Diff line
@@ -23,6 +23,9 @@ import android.telephony.CarrierConfigManager;
import android.telephony.PhoneStateListener;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.telephony.ims.ProvisioningManager;
import android.telephony.ims.feature.MmTelFeature;
import android.telephony.ims.stub.ImsRegistrationImplBase;

import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
@@ -50,6 +53,8 @@ public class Enhanced4gBasePreferenceController extends TelephonyTogglePreferenc
    @VisibleForTesting
    ImsManager mImsManager;
    private PhoneCallStateListener mPhoneStateListener;
    @VisibleForTesting
    Integer mCallState;
    private final List<On4gLteUpdateListener> m4gLteListeners;

    protected static final int MODE_NONE = -1;
@@ -70,7 +75,8 @@ public class Enhanced4gBasePreferenceController extends TelephonyTogglePreferenc
            return this;
        }
        mSubId = subId;
        mTelephonyManager = TelephonyManager.from(mContext).createForSubscriptionId(mSubId);
        mTelephonyManager = mContext.getSystemService(TelephonyManager.class)
                .createForSubscriptionId(mSubId);
        mCarrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
        if (mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
            mImsManager = ImsManager.getInstance(mContext, SubscriptionManager.getPhoneId(mSubId));
@@ -86,6 +92,11 @@ public class Enhanced4gBasePreferenceController extends TelephonyTogglePreferenc
        return this;
    }

    @VisibleForTesting
    ProvisioningManager getProvisioningManager(int subId) {
        return ProvisioningManager.createForSubscriptionId(subId);
    }

    @Override
    public int getAvailabilityStatus(int subId) {
        init(subId);
@@ -96,7 +107,7 @@ public class Enhanced4gBasePreferenceController extends TelephonyTogglePreferenc
        final boolean isVisible = subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
                && mImsManager != null && carrierConfig != null
                && mImsManager.isVolteEnabledByPlatform()
                && mImsManager.isVolteProvisionedOnDevice()
                && isVolteProvisionedOnDevice(mSubId)
                && MobileNetworkUtils.isImsServiceStateReady(mImsManager)
                && !carrierConfig.getBoolean(CarrierConfigManager.KEY_HIDE_ENHANCED_4G_LTE_BOOL);
        return isVisible
@@ -159,13 +170,26 @@ public class Enhanced4gBasePreferenceController extends TelephonyTogglePreferenc

    private boolean isPrefEnabled() {
        return mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
                && mTelephonyManager.getCallState(mSubId) == TelephonyManager.CALL_STATE_IDLE
                && (mCallState != null) && (mCallState == TelephonyManager.CALL_STATE_IDLE)
                && mImsManager != null
                && mImsManager.isNonTtyOrTtyOnVolteEnabled()
                && mCarrierConfig.getBoolean(
                CarrierConfigManager.KEY_EDITABLE_ENHANCED_4G_LTE_BOOL);
    }

    private boolean isVolteProvisionedOnDevice(int subId) {
        if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
            return true;
        }
        final ProvisioningManager provisioningMgr = getProvisioningManager(subId);
        if (provisioningMgr == null) {
            return true;
        }
        return provisioningMgr.getProvisioningStatusForCapability(
                MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE,
                ImsRegistrationImplBase.REGISTRATION_TECH_LTE);
    }

    private class PhoneCallStateListener extends PhoneStateListener {

        public PhoneCallStateListener(Looper looper) {
@@ -174,15 +198,17 @@ public class Enhanced4gBasePreferenceController extends TelephonyTogglePreferenc

        @Override
        public void onCallStateChanged(int state, String incomingNumber) {
            mCallState = state;
            updateState(mPreference);
        }

        public void register(int subId) {
            mSubId = subId;
            Enhanced4gBasePreferenceController.this.mSubId = subId;
            mTelephonyManager.listen(this, PhoneStateListener.LISTEN_CALL_STATE);
        }

        public void unregister() {
            mCallState = null;
            mTelephonyManager.listen(this, PhoneStateListener.LISTEN_NONE);
        }
    }
+20 −3
Original line number Diff line number Diff line
@@ -27,6 +27,9 @@ import android.net.Uri;
import android.os.PersistableBundle;
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionManager;
import android.telephony.ims.ProvisioningManager;
import android.telephony.ims.feature.MmTelFeature;
import android.telephony.ims.stub.ImsRegistrationImplBase;
import android.util.Log;

import androidx.annotation.VisibleForTesting;
@@ -122,7 +125,7 @@ public class Enhanced4gLteSliceHelper {
        final ImsManager imsManager = getImsManager(subId);

        if (!imsManager.isVolteEnabledByPlatform()
                || !imsManager.isVolteProvisionedOnDevice()) {
                || !isVolteProvisionedOnDevice(subId)) {
            Log.d(TAG, "Setting is either not provisioned or not enabled by Platform");
            return null;
        }
@@ -188,6 +191,11 @@ public class Enhanced4gLteSliceHelper {
        return ImsManager.getInstance(mContext, SubscriptionManager.getPhoneId(subId));
    }

    @VisibleForTesting
    ProvisioningManager getProvisioningManager(int subId) {
        return ProvisioningManager.createForSubscriptionId(subId);
    }

    /**
     * Handles Enhanced 4G LTE mode setting change from Enhanced 4G LTE slice and posts
     * notification. Should be called when intent action is ACTION_ENHANCED_4G_LTE_CHANGED
@@ -199,8 +207,7 @@ public class Enhanced4gLteSliceHelper {

        if (subId > SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
            final ImsManager imsManager = getImsManager(subId);
            if (imsManager.isVolteEnabledByPlatform()
                    && imsManager.isVolteProvisionedOnDevice()) {
            if (imsManager.isVolteEnabledByPlatform() && isVolteProvisionedOnDevice(subId)) {
                final boolean currentValue = imsManager.isEnhanced4gLteModeSettingEnabledByUser()
                        && imsManager.isNonTtyOrTtyOnVolteEnabled();
                final boolean newValue = intent.getBooleanExtra(EXTRA_TOGGLE_STATE,
@@ -278,5 +285,15 @@ public class Enhanced4gLteSliceHelper {
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        return PendingIntent.getActivity(mContext, 0 /* requestCode */, intent, 0 /* flags */);
    }

    private boolean isVolteProvisionedOnDevice(int subId) {
        final ProvisioningManager provisioningMgr = getProvisioningManager(subId);
        if (provisioningMgr == null) {
            return true;
        }
        return provisioningMgr.getProvisioningStatusForCapability(
                MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE,
                ImsRegistrationImplBase.REGISTRATION_TECH_LTE);
    }
}
+23 −2
Original line number Diff line number Diff line
@@ -23,6 +23,9 @@ import android.telephony.CarrierConfigManager;
import android.telephony.PhoneStateListener;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.telephony.ims.ProvisioningManager;
import android.telephony.ims.feature.MmTelFeature;
import android.telephony.ims.stub.ImsRegistrationImplBase;

import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
@@ -133,6 +136,24 @@ public class VideoCallingPreferenceController extends TelephonyTogglePreferenceC
        return isVideoCallEnabled(subId, imsManager);
    }

    @VisibleForTesting
    ProvisioningManager getProvisioningManager(int subId) {
        return ProvisioningManager.createForSubscriptionId(subId);
    }

    private boolean isVtProvisionedOnDevice(int subId) {
        if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
            return true;
        }
        final ProvisioningManager provisioningMgr = getProvisioningManager(subId);
        if (provisioningMgr == null) {
            return true;
        }
        return provisioningMgr.getProvisioningStatusForCapability(
                MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VIDEO,
                ImsRegistrationImplBase.REGISTRATION_TECH_LTE);
    }

    @VisibleForTesting
    boolean isVideoCallEnabled(int subId, ImsManager imsManager) {
        final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(subId);
@@ -142,7 +163,7 @@ public class VideoCallingPreferenceController extends TelephonyTogglePreferenceC
        }
        return carrierConfig != null && imsManager != null
                && imsManager.isVtEnabledByPlatform()
                && imsManager.isVtProvisionedOnDevice()
                && isVtProvisionedOnDevice(subId)
                && MobileNetworkUtils.isImsServiceStateReady(imsManager)
                && (carrierConfig.getBoolean(
                CarrierConfigManager.KEY_IGNORE_DATA_ENABLED_CHANGED_FOR_VIDEO_CALLS)
@@ -167,7 +188,7 @@ public class VideoCallingPreferenceController extends TelephonyTogglePreferenceC
        }

        public void register(int subId) {
            mSubId = subId;
            VideoCallingPreferenceController.this.mSubId = subId;
            mTelephonyManager.listen(this, PhoneStateListener.LISTEN_CALL_STATE);
        }

+15 −3
Original line number Diff line number Diff line
@@ -26,6 +26,9 @@ import android.os.PersistableBundle;
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.telephony.ims.ProvisioningManager;
import android.telephony.ims.feature.MmTelFeature;
import android.telephony.ims.stub.ImsRegistrationImplBase;

import androidx.preference.SwitchPreference;

@@ -55,6 +58,8 @@ public class Enhanced4gBasePreferenceControllerTest {
    private CarrierConfigManager mCarrierConfigManager;
    @Mock
    private ImsManager mImsManager;
    @Mock
    private ProvisioningManager mProvisioningManager;

    private Enhanced4gLtePreferenceController mController;
    private SwitchPreference mPreference;
@@ -77,7 +82,12 @@ public class Enhanced4gBasePreferenceControllerTest {
        doReturn(mCarrierConfig).when(mCarrierConfigManager).getConfigForSubId(SUB_ID);

        mPreference = new RestrictedSwitchPreference(mContext);
        mController = new Enhanced4gLtePreferenceController(mContext, "roaming");
        mController = new Enhanced4gLtePreferenceController(mContext, "roaming") {
            @Override
            ProvisioningManager getProvisioningManager(int subId) {
                return mProvisioningManager;
            }
        };
        mController.init(SUB_ID);
        mController.mImsManager = mImsManager;
        mPreference.setKey(mController.getPreferenceKey());
@@ -94,7 +104,9 @@ public class Enhanced4gBasePreferenceControllerTest {
    @Test
    public void getAvailabilityStatus_volteDisabled_returnUnavailable() {
        doReturn(false).when(mImsManager).isVolteEnabledByPlatform();
        doReturn(true).when(mImsManager).isVolteProvisionedOnDevice();
        doReturn(true).when(mProvisioningManager).getProvisioningStatusForCapability(
                MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE,
                ImsRegistrationImplBase.REGISTRATION_TECH_LTE);

        assertThat(mController.getAvailabilityStatus()).isEqualTo(
                BasePreferenceController.CONDITIONALLY_UNAVAILABLE);
@@ -104,7 +116,7 @@ public class Enhanced4gBasePreferenceControllerTest {
    public void updateState_configEnabled_prefEnabled() {
        mPreference.setEnabled(false);
        mCarrierConfig.putInt(CarrierConfigManager.KEY_ENHANCED_4G_LTE_TITLE_VARIANT_INT, 1);
        doReturn(TelephonyManager.CALL_STATE_IDLE).when(mTelephonyManager).getCallState(SUB_ID);
        mController.mCallState = TelephonyManager.CALL_STATE_IDLE;
        doReturn(true).when(mImsManager).isNonTtyOrTtyOnVolteEnabled();
        mCarrierConfig.putBoolean(CarrierConfigManager.KEY_EDITABLE_ENHANCED_4G_LTE_BOOL, true);

+22 −6
Original line number Diff line number Diff line
@@ -31,6 +31,9 @@ import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.telephony.CarrierConfigManager;
import android.telephony.ims.ProvisioningManager;
import android.telephony.ims.feature.MmTelFeature;
import android.telephony.ims.stub.ImsRegistrationImplBase;

import androidx.slice.Slice;
import androidx.slice.SliceItem;
@@ -67,6 +70,8 @@ public class Enhanced4gLteSliceHelperTest {

    @Mock
    private ImsManager mMockImsManager;
    @Mock
    private ProvisioningManager mProvisioningManager;

    private Context mContext;
    private FakeEnhanced4gLteSliceHelper mEnhanced4gLteSliceHelper;
@@ -121,7 +126,9 @@ public class Enhanced4gLteSliceHelperTest {
    @Test
    public void test_CreateEnhanced4gLteSlice_success() {
        when(mMockImsManager.isVolteEnabledByPlatform()).thenReturn(true);
        when(mMockImsManager.isVolteProvisionedOnDevice()).thenReturn(true);
        when(mProvisioningManager.getProvisioningStatusForCapability(
                MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE,
                ImsRegistrationImplBase.REGISTRATION_TECH_LTE)).thenReturn(true);
        when(mMockImsManager.isEnhanced4gLteModeSettingEnabledByUser()).thenReturn(true);
        when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
        when(mMockCarrierConfigManager.getConfigForSubId(1)).thenReturn(null);
@@ -136,7 +143,9 @@ public class Enhanced4gLteSliceHelperTest {
    @Test
    public void test_SettingSliceProvider_getsRightSliceEnhanced4gLte() {
        when(mMockImsManager.isVolteEnabledByPlatform()).thenReturn(true);
        when(mMockImsManager.isVolteProvisionedOnDevice()).thenReturn(true);
        when(mProvisioningManager.getProvisioningStatusForCapability(
                MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE,
                ImsRegistrationImplBase.REGISTRATION_TECH_LTE)).thenReturn(true);
        when(mMockImsManager.isEnhanced4gLteModeSettingEnabledByUser()).thenReturn(true);
        when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
        when(mMockCarrierConfigManager.getConfigForSubId(1)).thenReturn(null);
@@ -152,17 +161,19 @@ public class Enhanced4gLteSliceHelperTest {
    @Test
    public void test_SliceBroadcastReceiver_toggleOffEnhanced4gLte() {
        when(mMockImsManager.isVolteEnabledByPlatform()).thenReturn(true);
        when(mMockImsManager.isVolteProvisionedOnDevice()).thenReturn(true);
        when(mProvisioningManager.getProvisioningStatusForCapability(
                MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE,
                ImsRegistrationImplBase.REGISTRATION_TECH_LTE)).thenReturn(true);
        when(mMockImsManager.isEnhanced4gLteModeSettingEnabledByUser()).thenReturn(false);
        when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
        when(mSlicesFeatureProvider.getNewEnhanced4gLteSliceHelper(mContext))
                .thenReturn(mEnhanced4gLteSliceHelper);

        ArgumentCaptor<Boolean> mEnhanced4gLteSettingCaptor = ArgumentCaptor.forClass(
        final ArgumentCaptor<Boolean> mEnhanced4gLteSettingCaptor = ArgumentCaptor.forClass(
                Boolean.class);

        // turn on Enhanced4gLte setting
        Intent intent = new Intent(Enhanced4gLteSliceHelper.ACTION_ENHANCED_4G_LTE_CHANGED);
        final Intent intent = new Intent(Enhanced4gLteSliceHelper.ACTION_ENHANCED_4G_LTE_CHANGED);
        intent.putExtra(EXTRA_TOGGLE_STATE, true);

        // change the setting
@@ -234,7 +245,7 @@ public class Enhanced4gLteSliceHelperTest {
    private void assertTitle(List<SliceItem> sliceItems, String title) {
        boolean hasTitle = false;
        for (SliceItem item : sliceItems) {
            List<SliceItem> titleItems = SliceQuery.findAll(item, FORMAT_TEXT, HINT_TITLE,
            final List<SliceItem> titleItems = SliceQuery.findAll(item, FORMAT_TEXT, HINT_TITLE,
                    null /* non-hints */);
            if (titleItems == null) {
                continue;
@@ -265,6 +276,11 @@ public class Enhanced4gLteSliceHelperTest {
            return mMockImsManager;
        }

        @Override
        ProvisioningManager getProvisioningManager(int subId) {
            return mProvisioningManager;
        }

        protected int getDefaultVoiceSubId() {
            return mSubId;
        }
Loading