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

Commit af9884c9 authored by Hakjun Choi's avatar Hakjun Choi Committed by Automerger Merge Worker
Browse files

Merge changes from topics "imsservice subid notifications", "provisioning...

Merge changes from topics "imsservice subid notifications", "provisioning improvement" am: 9109e986 am: fcdb1710

Original change: https://android-review.googlesource.com/c/platform/frameworks/opt/net/ims/+/1958879

Change-Id: I22fdb4fb4ee0ca5912575f0b8d52d17ee2d51396
parents 1e7da7bb fcdb1710
Loading
Loading
Loading
Loading
+30 −8
Original line number Diff line number Diff line
@@ -20,10 +20,14 @@ import static android.telephony.ims.ProvisioningManager.KEY_VOIMS_OPT_IN_STATUS;

import android.annotation.NonNull;
import android.app.PendingIntent;
import android.app.compat.CompatChanges;
import android.compat.annotation.ChangeId;
import android.compat.annotation.EnabledSince;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.ContentResolver;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Binder;
import android.os.Build;
import android.os.Message;
import android.os.PersistableBundle;
@@ -1580,10 +1584,16 @@ public class ImsManager implements FeatureUpdates {
     * ImsConfig for that value.
     */
    private boolean getProvisionedBool(ImsConfig config, int item) throws ImsException {
        int value = config.getProvisionedValue(item);
        if (value == ImsConfigImplBase.CONFIG_RESULT_UNKNOWN) {
            throw new ImsException("getProvisionedBool failed with error for item: " + item,
                    ImsReasonInfo.CODE_LOCAL_INTERNAL_ERROR);
        int value = 0;
        ITelephony telephony = getITelephony();
        try {
            if (telephony != null) {
                value = telephony.getImsProvisioningInt(getSubId(), item);
            }
        } catch (RemoteException e) {
            throw new ImsException(
                    "getProvisionedBool : couldn't reach telephony! item: " + item,
                    ImsReasonInfo.CODE_LOCAL_SERVICE_UNAVAILABLE);
        }
        return value == ProvisioningManager.PROVISIONING_VALUE_ENABLED;
    }
@@ -1593,11 +1603,22 @@ public class ImsManager implements FeatureUpdates {
     * value.
     */
    private void setProvisionedBool(ImsConfig config, int item, int value) throws ImsException {
        int result = config.setConfig(item, value);
        int result = ImsConfigImplBase.CONFIG_RESULT_UNKNOWN;
        ITelephony telephony = getITelephony();
        try {
            if (telephony != null) {
                result = telephony.setImsProvisioningInt(getSubId(), item, value);
            }
        } catch (RemoteException e) {
            throw new ImsException(
                    "setProvisionedBool : couldn't reach telephony! item: " + item,
                    ImsReasonInfo.CODE_LOCAL_SERVICE_UNAVAILABLE);
        }
        if (result != ImsConfigImplBase.CONFIG_RESULT_SUCCESS) {
            throw new ImsException("setProvisionedBool failed with error for item: " + item,
                    ImsReasonInfo.CODE_LOCAL_INTERNAL_ERROR);
        }
        return;
    }

    /**
@@ -1870,7 +1891,7 @@ public class ImsManager implements FeatureUpdates {
            // currently.
            try {
                if (telephony != null) {
                    isProvisioned = telephony.isMmTelCapabilityProvisionedInCache(getSubId(),
                    isProvisioned = telephony.getImsProvisioningStatusForCapability(getSubId(),
                            MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_UT,
                            ImsRegistrationImplBase.REGISTRATION_TECH_LTE);
                }
@@ -1953,7 +1974,8 @@ public class ImsManager implements FeatureUpdates {
     */
    @VisibleForTesting
    public ImsManager(Context context, int phoneId, MmTelFeatureConnectionFactory factory,
            SubscriptionManagerProxy subManagerProxy, SettingsProxy settingsProxy) {
            SubscriptionManagerProxy subManagerProxy, SettingsProxy settingsProxy,
            BinderCacheManager binderCacheManager) {
        mContext = context;
        mPhoneId = phoneId;
        mMmTelFeatureConnectionFactory = factory;
@@ -1963,7 +1985,7 @@ public class ImsManager implements FeatureUpdates {
                Context.CARRIER_CONFIG_SERVICE);
        // Do not multithread tests
        mExecutor = Runnable::run;
        mBinderCache = new BinderCacheManager<>(ImsManager::getITelephonyInterface);
        mBinderCache = binderCacheManager;
        // MmTelFeatureConnection should be replaced for tests with mMmTelFeatureConnectionFactory.
        associate(null /*container*/, SubscriptionManager.INVALID_SUBSCRIPTION_ID);
    }
+77 −24
Original line number Diff line number Diff line
@@ -17,10 +17,10 @@
package com.android.ims;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
@@ -31,6 +31,8 @@ import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.os.IBinder;
import android.os.PersistableBundle;
import android.os.RemoteException;
import android.telephony.BinderCacheManager;
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionManager;
import android.telephony.ims.ImsMmTelManager;
@@ -42,10 +44,12 @@ import android.telephony.ims.feature.MmTelFeature;
import android.telephony.ims.stub.ImsConfigImplBase;
import android.telephony.ims.stub.ImsRegistrationImplBase;

import androidx.test.InstrumentationRegistry;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;

import com.android.internal.os.SomeArgs;
import com.android.internal.telephony.ITelephony;

import org.junit.After;
import org.junit.Before;
@@ -85,6 +89,8 @@ public class ImsManagerTest extends ImsTestBase {
    @Mock ISipTransport mSipTransport;
    @Mock ImsManager.SubscriptionManagerProxy mSubscriptionManagerProxy;
    @Mock ImsManager.SettingsProxy mSettingsProxy;
    @Mock BinderCacheManager mBinderCacheManager;
    @Mock ITelephony mITelephony;

    private final int[] mSubId = {0};
    private final int mPhoneId = 1;
@@ -108,11 +114,20 @@ public class ImsManagerTest extends ImsTestBase {


        setDefaultValues();

        // allow READ_PRIVILEGED_PHONE_STATE permission
        InstrumentationRegistry.getInstrumentation().getUiAutomation()
                .adoptShellPermissionIdentity(
                        "android.permission.READ_PRIVILEGED_PHONE_STATE");
    }

    @After
    public void tearDown() throws Exception {
        super.tearDown();

        // release permission
        InstrumentationRegistry.getInstrumentation().getUiAutomation()
                .dropShellPermissionIdentity();
    }

    private void setDefaultValues() {
@@ -247,39 +262,53 @@ public class ImsManagerTest extends ImsTestBase {
                eq(SubscriptionManager.WFC_IMS_ENABLED),
                eq("1"));
    }

    @Test
    public void testGetProvisionedValues() throws Exception {
        ImsManager imsManager = getImsManagerAndInitProvisionedValues();

        assertEquals(true, imsManager.isWfcProvisionedOnDevice());
        verify(mImsConfigImplBaseMock, times(1)).getConfigInt(
                eq(ImsConfig.ConfigConstants.VOICE_OVER_WIFI_SETTING_ENABLED));
        verify(mITelephony, times(1)).getImsProvisioningInt(
                anyInt(),
                eq(ProvisioningManager.KEY_VOICE_OVER_WIFI_ENABLED_OVERRIDE));
        clearInvocations(mITelephony);

        assertEquals(true, imsManager.isVtProvisionedOnDevice());
        verify(mImsConfigImplBaseMock, times(1)).getConfigInt(
                eq(ImsConfig.ConfigConstants.LVC_SETTING_ENABLED));
        verify(mITelephony, times(1)).getImsProvisioningInt(
                anyInt(),
                eq(ProvisioningManager.KEY_VT_PROVISIONING_STATUS));
        clearInvocations(mITelephony);

        assertEquals(true, imsManager.isVolteProvisionedOnDevice());
        verify(mImsConfigImplBaseMock, times(1)).getConfigInt(
                eq(ImsConfig.ConfigConstants.VLT_SETTING_ENABLED));
        verify(mITelephony, times(1)).getImsProvisioningInt(
                anyInt(),
                eq(ProvisioningManager.KEY_VOLTE_PROVISIONING_STATUS));
        clearInvocations(mITelephony);

        // If we call get again, times should still be one because the value should be fetched
        // from cache.
        assertEquals(true, imsManager.isWfcProvisionedOnDevice());
        verify(mImsConfigImplBaseMock, times(1)).getConfigInt(
                eq(ImsConfig.ConfigConstants.VOICE_OVER_WIFI_SETTING_ENABLED));
        verify(mITelephony, times(1)).getImsProvisioningInt(
                anyInt(),
                eq(ProvisioningManager.KEY_VOICE_OVER_WIFI_ENABLED_OVERRIDE));
        clearInvocations(mITelephony);

        assertEquals(true, imsManager.isVtProvisionedOnDevice());
        verify(mImsConfigImplBaseMock, times(1)).getConfigInt(
                eq(ImsConfig.ConfigConstants.LVC_SETTING_ENABLED));
        verify(mITelephony, times(1)).getImsProvisioningInt(
                anyInt(),
                eq(ProvisioningManager.KEY_VT_PROVISIONING_STATUS));
        clearInvocations(mITelephony);

        assertEquals(true, imsManager.isVolteProvisionedOnDevice());
        verify(mImsConfigImplBaseMock, times(1)).getConfigInt(
                eq(ImsConfig.ConfigConstants.VLT_SETTING_ENABLED));
        verify(mITelephony, times(1)).getImsProvisioningInt(
                anyInt(),
                eq(ProvisioningManager.KEY_VOLTE_PROVISIONING_STATUS));
        clearInvocations(mITelephony);

        assertEquals(true, imsManager.isEabProvisionedOnDevice());
        verify(mImsConfigImplBaseMock, times(1)).getConfigInt(
                eq(ImsConfig.ConfigConstants.EAB_SETTING_ENABLED));
        verify(mITelephony, times(1)).getImsProvisioningInt(
                anyInt(),
                eq(ProvisioningManager.KEY_EAB_PROVISIONING_STATUS));
    }

    @Test
@@ -287,8 +316,10 @@ public class ImsManagerTest extends ImsTestBase {
        ImsManager imsManager = getImsManagerAndInitProvisionedValues();

        assertEquals(true, imsManager.isWfcProvisionedOnDevice());
        verify(mImsConfigImplBaseMock, times(1)).getConfigInt(
                eq(ImsConfig.ConfigConstants.VOICE_OVER_WIFI_SETTING_ENABLED));

        verify(mITelephony, times(1)).getImsProvisioningInt(
                anyInt(), eq(ProvisioningManager.KEY_VOICE_OVER_WIFI_ENABLED_OVERRIDE));
        clearInvocations(mITelephony);

        imsManager.getConfigInterface().setProvisionedValue(
                ImsConfig.ConfigConstants.VOICE_OVER_WIFI_SETTING_ENABLED,
@@ -302,8 +333,10 @@ public class ImsManagerTest extends ImsTestBase {
        verify(mImsConfigImplBaseMock, times(1)).setConfig(
                eq(ImsConfig.ConfigConstants.VOICE_OVER_WIFI_SETTING_ENABLED),
                eq(0));
        verify(mImsConfigImplBaseMock, times(1)).getConfigInt(
                eq(ImsConfig.ConfigConstants.VOICE_OVER_WIFI_SETTING_ENABLED));

        verify(mITelephony, times(1)).getImsProvisioningInt(
                anyInt(),
                eq(ProvisioningManager.KEY_VOICE_OVER_WIFI_ENABLED_OVERRIDE));
    }

    @Test
@@ -311,8 +344,11 @@ public class ImsManagerTest extends ImsTestBase {
        ImsManager imsManager = getImsManagerAndInitProvisionedValues();

        assertEquals(true, imsManager.isEabProvisionedOnDevice());
        verify(mImsConfigImplBaseMock, times(1)).getConfigInt(
                eq(ImsConfig.ConfigConstants.EAB_SETTING_ENABLED));

        verify(mITelephony, times(1)).getImsProvisioningInt(
                anyInt(), eq(ProvisioningManager.KEY_EAB_PROVISIONING_STATUS));

        clearInvocations(mITelephony);

        imsManager.getConfigInterface().setProvisionedValue(
                ImsConfig.ConfigConstants.EAB_SETTING_ENABLED,
@@ -326,8 +362,9 @@ public class ImsManagerTest extends ImsTestBase {
        verify(mImsConfigImplBaseMock, times(1)).setConfig(
                eq(ImsConfig.ConfigConstants.EAB_SETTING_ENABLED),
                eq(0));
        verify(mImsConfigImplBaseMock, times(1)).getConfigInt(
                eq(ImsConfig.ConfigConstants.EAB_SETTING_ENABLED));

        verify(mITelephony, times(1)).getImsProvisioningInt(
                anyInt(), eq(ProvisioningManager.KEY_EAB_PROVISIONING_STATUS));
    }

    /**
@@ -873,9 +910,25 @@ public class ImsManagerTest extends ImsTestBase {
        mImsConfigStub = new ImsConfigImplBase.ImsConfigStub(mImsConfigImplBaseMock, Runnable::run);
        doReturn(mImsConfigStub).when(mMmTelFeatureConnection).getConfig();

        when(mBinderCacheManager.getBinder())
                .thenReturn(mITelephony);

        try {
            when(mITelephony.getImsProvisioningInt(anyInt(), anyInt()))
                    .thenAnswer(invocation -> {
                        return getProvisionedInt((Integer) (invocation.getArguments()[1]));
                    });
            when(mITelephony.setImsProvisioningInt(anyInt(), anyInt(), anyInt()))
                    .thenAnswer(invocation -> {
                        mProvisionedIntVals.put((Integer) (invocation.getArguments()[1]),
                                (Integer) (invocation.getArguments()[2]));
                        return ImsConfig.OperationStatusConstants.SUCCESS;
                    });
        } catch (RemoteException e) {}

        ImsManager mgr = new ImsManager(mContext, mPhoneId,
                (context, phoneId, subId, feature, c, r, s) -> mMmTelFeatureConnection,
                mSubscriptionManagerProxy, mSettingsProxy);
                mSubscriptionManagerProxy, mSettingsProxy, mBinderCacheManager);
        ImsFeatureContainer c = new ImsFeatureContainer(mMmTelFeature, mImsConfig, mImsReg,
                mSipTransport, 0 /*caps*/);
        mgr.associate(c, mSubId[0]);