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

Commit 32bf4ed0 authored by Joonhun Shin's avatar Joonhun Shin Committed by Android (Google) Code Review
Browse files

Merge "Set the number of slots for IMS enable for each slot" into main

parents 5fbed8e6 9297736d
Loading
Loading
Loading
Loading
+16 −8
Original line number Diff line number Diff line
@@ -60,6 +60,7 @@ import com.android.ims.internal.IImsServiceFeatureCallback;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.os.SomeArgs;
import com.android.internal.telephony.PhoneConfigurationManager;
import com.android.internal.telephony.flags.FeatureFlags;
import com.android.internal.util.IndentingPrintWriter;

import java.io.FileDescriptor;
@@ -139,11 +140,12 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal
     * Create the ImsResolver Service singleton instance.
     */
    public static void make(Context context, String defaultMmTelPackageName,
            String defaultRcsPackageName, int numSlots, ImsFeatureBinderRepository repo) {
            String defaultRcsPackageName, int numSlots, ImsFeatureBinderRepository repo,
            FeatureFlags featureFlags) {
        if (sInstance == null) {
            sHandlerThread.start();
            sInstance = new ImsResolver(context, defaultMmTelPackageName, defaultRcsPackageName,
                    numSlots, repo, sHandlerThread.getLooper());
                    numSlots, repo, sHandlerThread.getLooper(), featureFlags);
        }
    }

@@ -372,7 +374,7 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal
         */
        ImsServiceController create(Context context, ComponentName componentName,
                ImsServiceController.ImsServiceControllerCallbacks callbacks,
                ImsFeatureBinderRepository repo);
                ImsFeatureBinderRepository repo, FeatureFlags featureFlags);
    }

    private ImsServiceControllerFactory mImsServiceControllerFactory =
@@ -386,8 +388,9 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal
        @Override
        public ImsServiceController create(Context context, ComponentName componentName,
                ImsServiceController.ImsServiceControllerCallbacks callbacks,
                ImsFeatureBinderRepository repo) {
            return new ImsServiceController(context, componentName, callbacks, repo);
                ImsFeatureBinderRepository repo, FeatureFlags featureFlags) {
                    return new ImsServiceController(context, componentName, callbacks, repo,
                            featureFlags);
        }
    };

@@ -410,7 +413,7 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal
                @Override
                public ImsServiceController create(Context context, ComponentName componentName,
                        ImsServiceController.ImsServiceControllerCallbacks callbacks,
                        ImsFeatureBinderRepository repo) {
                        ImsFeatureBinderRepository repo, FeatureFlags featureFlags) {
                    return new ImsServiceControllerCompat(context, componentName, callbacks, repo);
                }
            };
@@ -445,6 +448,9 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal
    // Synchronize all events on a handler to ensure that the cache includes the most recent
    // version of the installed ImsServices.
    private final Handler mHandler;

    private final FeatureFlags mFeatureFlags;

    private class ResolverHandler extends Handler {

        ResolverHandler(Looper looper) {
@@ -581,7 +587,7 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal

    public ImsResolver(Context context, String defaultMmTelPackageName,
            String defaultRcsPackageName, int numSlots, ImsFeatureBinderRepository repo,
            Looper looper) {
            Looper looper, FeatureFlags featureFlags) {
        Log.i(TAG, "device MMTEL package: " + defaultMmTelPackageName + ", device RCS package:"
                + defaultRcsPackageName);
        mContext = context;
@@ -591,6 +597,7 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal

        mHandler = new ResolverHandler(looper);
        mRunnableExecutor = new HandlerExecutor(mHandler);
        mFeatureFlags = featureFlags;
        mCarrierServices = new SparseArray<>(mNumSlots);
        setDeviceConfiguration(defaultMmTelPackageName, ImsFeature.FEATURE_EMERGENCY_MMTEL);
        setDeviceConfiguration(defaultMmTelPackageName, ImsFeature.FEATURE_MMTEL);
@@ -1233,7 +1240,8 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal
                    Log.w(TAG, "bindImsService: error=" + e.getMessage());
                }
            } else {
                controller = info.controllerFactory.create(mContext, info.name, this, mRepo);
                controller = info.controllerFactory.create(mContext, info.name, this, mRepo,
                        mFeatureFlags);
                Log.i(TAG, "Binding ImsService: " + controller.getComponentName()
                        + " with features: " + features);
                controller.bind(features, slotIdToSubIdMap);
+13 −2
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ import com.android.ims.ImsFeatureContainer;
import com.android.ims.internal.IImsFeatureStatusCallback;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.ExponentialBackoff;
import com.android.internal.telephony.flags.FeatureFlags;
import com.android.internal.telephony.util.TelephonyUtils;

import java.io.PrintWriter;
@@ -265,6 +266,7 @@ public class ImsServiceController {
    private final HandlerThread mHandlerThread = new HandlerThread("ImsServiceControllerHandler");
    private final Handler mHandler;
    private final LegacyPermissionManager mPermissionManager;
    private final FeatureFlags mFeatureFlags;
    private ImsFeatureBinderRepository mRepo;
    private ImsServiceControllerCallbacks mCallbacks;
    private ExponentialBackoff mBackoff;
@@ -353,7 +355,8 @@ public class ImsServiceController {
    };

    public ImsServiceController(Context context, ComponentName componentName,
            ImsServiceControllerCallbacks callbacks, ImsFeatureBinderRepository repo) {
            ImsServiceControllerCallbacks callbacks, ImsFeatureBinderRepository repo,
            FeatureFlags featureFlags) {
        mContext = context;
        mComponentName = componentName;
        mCallbacks = callbacks;
@@ -369,6 +372,7 @@ public class ImsServiceController {
                Context.LEGACY_PERMISSION_SERVICE);
        mRepo = repo;
        mImsEnablementTracker = new ImsEnablementTracker(mHandlerThread.getLooper(), componentName);
        mFeatureFlags = featureFlags;
        mPackageManager = mContext.getPackageManager();
        if (mPackageManager != null) {
            mChangedPackages = mPackageManager.getChangedPackages(mLastSequenceNumber);
@@ -383,7 +387,7 @@ public class ImsServiceController {
    // testing, use a handler supplied by the testing system.
    public ImsServiceController(Context context, ComponentName componentName,
            ImsServiceControllerCallbacks callbacks, Handler handler, RebindRetry rebindRetry,
            ImsFeatureBinderRepository repo) {
            ImsFeatureBinderRepository repo, FeatureFlags featureFlags) {
        mContext = context;
        mComponentName = componentName;
        mCallbacks = callbacks;
@@ -396,6 +400,7 @@ public class ImsServiceController {
                mRestartImsServiceRunnable);
        mPermissionManager = null;
        mRepo = repo;
        mFeatureFlags = featureFlags;
        mImsEnablementTracker = new ImsEnablementTracker(handler.getLooper(), componentName);
    }

@@ -493,6 +498,12 @@ public class ImsServiceController {
        synchronized (mLock) {
            HashSet<Integer> slotIDs = newImsFeatures.stream().map(e -> e.slotId).collect(
                    Collectors.toCollection(HashSet::new));

            // Set the number of slot for IMS enable for each slot
            if (mFeatureFlags.setNumberOfSimForImsEnable()) {
                mImsEnablementTracker.setNumOfSlots(slotIDs.size());
            }

            // detect which subIds have changed on a per-slot basis
            SparseIntArray changedSubIds = new SparseIntArray(slotIDs.size());
            for (Integer slotID : slotIDs) {
+4 −2
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ import com.android.ims.internal.IImsFeatureStatusCallback;
import com.android.ims.internal.IImsMMTelFeature;
import com.android.ims.internal.IImsServiceController;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.flags.FeatureFlagsImpl;

/**
 * Manages the Binding lifecycle of one ImsService as well as the relevant ImsFeatures that the
@@ -76,7 +77,7 @@ public class ImsServiceControllerCompat extends ImsServiceController {
    public ImsServiceControllerCompat(Context context, ComponentName componentName,
            ImsServiceController.ImsServiceControllerCallbacks callbacks,
            ImsFeatureBinderRepository repo) {
        super(context, componentName, callbacks, repo);
        super(context, componentName, callbacks, repo, new FeatureFlagsImpl());
        mMmTelFeatureFactory = MmTelFeatureCompatAdapter::new;
    }

@@ -84,7 +85,8 @@ public class ImsServiceControllerCompat extends ImsServiceController {
    public ImsServiceControllerCompat(Context context, ComponentName componentName,
            ImsServiceControllerCallbacks callbacks, Handler handler, RebindRetry rebindRetry,
            ImsFeatureBinderRepository repo, MmTelFeatureCompatFactory factory) {
        super(context, componentName, callbacks, handler, rebindRetry, repo);
        super(context, componentName, callbacks, handler, rebindRetry, repo,
                new FeatureFlagsImpl());
        mMmTelFeatureFactory = factory;
    }

+9 −6
Original line number Diff line number Diff line
@@ -62,6 +62,7 @@ import androidx.test.filters.SmallTest;

import com.android.ims.ImsFeatureBinderRepository;
import com.android.internal.telephony.PhoneConfigurationManager;
import com.android.internal.telephony.flags.FeatureFlags;

import org.junit.After;
import org.junit.Before;
@@ -113,6 +114,7 @@ public class ImsResolverTest extends ImsTestBase {
    private BroadcastReceiver mTestBootCompleteReceiver;
    private ImsServiceFeatureQueryManager.Listener mDynamicQueryListener;
    private PersistableBundle[] mCarrierConfigs;
    private FeatureFlags mFeatureFlags;

    @Before
    @Override
@@ -127,6 +129,7 @@ public class ImsResolverTest extends ImsTestBase {
        mMockQueryManagerFactory = mock(ImsResolver.ImsDynamicQueryManagerFactory.class);
        mMockQueryManager = mock(ImsServiceFeatureQueryManager.class);
        mMockRepo = mock(ImsFeatureBinderRepository.class);
        mFeatureFlags = mock(FeatureFlags.class);
    }

    @After
@@ -1969,7 +1972,7 @@ public class ImsResolverTest extends ImsTestBase {
        }

        mTestImsResolver = new ImsResolver(mMockContext, deviceMmTelPkgName, deviceRcsPkgName,
                numSlots, mMockRepo, Looper.myLooper());
                numSlots, mMockRepo, Looper.myLooper(), mFeatureFlags);

        mTestImsResolver.setSubscriptionManagerProxy(mTestSubscriptionManagerProxy);
        mTestImsResolver.setTelephonyManagerProxy(mTestTelephonyManagerProxy);
@@ -2008,7 +2011,7 @@ public class ImsResolverTest extends ImsTestBase {
                    @Override
                    public ImsServiceController create(Context context, ComponentName componentName,
                            ImsServiceController.ImsServiceControllerCallbacks callbacks,
                            ImsFeatureBinderRepository r) {
                            ImsFeatureBinderRepository r, FeatureFlags featureFlags) {
                        when(controller.getComponentName()).thenReturn(componentName);
                        return controller;
                    }
@@ -2118,7 +2121,7 @@ public class ImsResolverTest extends ImsTestBase {
                    @Override
                    public ImsServiceController create(Context context, ComponentName componentName,
                            ImsServiceController.ImsServiceControllerCallbacks callbacks,
                            ImsFeatureBinderRepository r) {
                            ImsFeatureBinderRepository r, FeatureFlags featureFlags) {
                        return controllerMap.get(componentName.getPackageName());
                    }
                });
@@ -2136,7 +2139,7 @@ public class ImsResolverTest extends ImsTestBase {
                    @Override
                    public ImsServiceController create(Context context, ComponentName componentName,
                            ImsServiceController.ImsServiceControllerCallbacks callbacks,
                            ImsFeatureBinderRepository r) {
                            ImsFeatureBinderRepository r, FeatureFlags featureFlags) {
                        if (TEST_DEVICE_DEFAULT_NAME.getPackageName().equals(
                                componentName.getPackageName())) {
                            when(deviceController.getComponentName()).thenReturn(componentName);
@@ -2163,7 +2166,7 @@ public class ImsResolverTest extends ImsTestBase {
                    @Override
                    public ImsServiceController create(Context context, ComponentName componentName,
                            ImsServiceController.ImsServiceControllerCallbacks callbacks,
                            ImsFeatureBinderRepository r) {
                            ImsFeatureBinderRepository r, FeatureFlags featureFlags) {
                        if (TEST_DEVICE_DEFAULT_NAME.getPackageName().equals(
                                componentName.getPackageName())) {
                            when(deviceController.getComponentName()).thenReturn(componentName);
@@ -2195,7 +2198,7 @@ public class ImsResolverTest extends ImsTestBase {
                    @Override
                    public ImsServiceController create(Context context, ComponentName componentName,
                            ImsServiceController.ImsServiceControllerCallbacks callbacks,
                            ImsFeatureBinderRepository r) {
                            ImsFeatureBinderRepository r, FeatureFlags featureFlags) {
                        if (TEST_DEVICE_DEFAULT_NAME.getPackageName().equals(
                                componentName.getPackageName())) {
                            when(deviceController1.getComponentName()).thenReturn(componentName);
+4 −1
Original line number Diff line number Diff line
@@ -57,6 +57,7 @@ import com.android.ims.ImsFeatureBinderRepository;
import com.android.ims.ImsFeatureContainer;
import com.android.ims.internal.IImsFeatureStatusCallback;
import com.android.ims.internal.IImsServiceFeatureCallback;
import com.android.internal.telephony.flags.FeatureFlags;

import org.junit.After;
import org.junit.Before;
@@ -126,6 +127,7 @@ public class ImsServiceControllerTest extends ImsTestBase {
    IImsRegistration mMockRcsRegistration;
    IImsServiceController mMockServiceControllerBinder;
    ImsServiceController.ImsServiceControllerCallbacks mMockCallbacks;
    FeatureFlags mFeatureFlags;
    Context mMockContext;

    private final ComponentName mTestComponentName = new ComponentName("TestPkg",
@@ -146,11 +148,12 @@ public class ImsServiceControllerTest extends ImsTestBase {
        mMockRcsRegistration = mock(IImsRegistration.class);
        mMockServiceControllerBinder = mock(IImsServiceController.class);
        mMockCallbacks = mock(ImsServiceController.ImsServiceControllerCallbacks.class);
        mFeatureFlags = mock(FeatureFlags.class);
        mMockContext = mock(Context.class);

        mRepo = new ImsFeatureBinderRepository();
        mTestImsServiceController = new ImsServiceController(mMockContext, mTestComponentName,
                mMockCallbacks, mHandler, REBIND_RETRY, mRepo);
                mMockCallbacks, mHandler, REBIND_RETRY, mRepo, mFeatureFlags);
        when(mMockContext.bindService(any(), any(), anyInt())).thenReturn(true);
        when(mMockServiceControllerBinder.createMmTelFeature(anyInt(), anyInt()))
                .thenReturn(mMockMmTelFeature);