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

Commit 30872761 authored by Amruth Ramachandran's avatar Amruth Ramachandran Committed by Android (Google) Code Review
Browse files

Merge "(ImsResolverTest Fix) Inject Looper to ImsResolver." into tm-dev

parents 96d114be 72e818aa
Loading
Loading
Loading
Loading
+88 −75
Original line number Diff line number Diff line
@@ -138,8 +138,9 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal
    public static void make(Context context, String defaultMmTelPackageName,
            String defaultRcsPackageName, int numSlots, ImsFeatureBinderRepository repo) {
        if (sInstance == null) {
            Looper looper = Looper.getMainLooper();
            sInstance = new ImsResolver(context, defaultMmTelPackageName, defaultRcsPackageName,
                    numSlots, repo);
                    numSlots, repo, looper);
        }
    }

@@ -444,7 +445,15 @@ 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 = new Handler(Looper.getMainLooper(), (msg) -> {
    private final Handler mHandler;
    private class ResolverHandler extends Handler {

        ResolverHandler(Looper looper) {
            super(looper);
        }

        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case HANDLER_ADD_PACKAGE: {
                    String packageName = (String) msg.obj;
@@ -462,12 +471,13 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal
                        mEventLog.log("handling BOOT_COMPLETE");
                        if (mCarrierConfigReceived) {
                            mEventLog.log("boot complete - reeval");
                        // Re-evaluate bound services for all slots after requerying packagemanager
                            // Re-evaluate bound services for all slots after requerying
                            //packagemanager
                            maybeAddedImsService(null /*packageName*/);
                        } else {
                            mEventLog.log("boot complete - update cache");
                            // Do not bind any ImsServices yet, just update the cache to include new
                        // services. All will be re-evaluated after first carrier config changed.
                            // services. All will be re-evaluated after first carrier config changed
                            updateInstalledServicesCache();
                        }
                    }
@@ -476,8 +486,8 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal
                case HANDLER_CONFIG_CHANGED: {
                    int slotId = msg.arg1;
                    int subId = msg.arg2;
                // If the msim config has changed and there is a residual event for an invalid slot,
                // ignore.
                    // If the msim config has changed and there is a residual event for an invalid
                    // slot,ignore.
                    if (slotId >= mNumSlots) {
                        Log.w(TAG, "HANDLER_CONFIG_CHANGED for invalid slotid=" + slotId);
                        break;
@@ -520,12 +530,12 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal
                    break;
                }
                default:
                return false;
                    break;
            }
        }
    }
        return true;
    });

    private final HandlerExecutor mRunnableExecutor = new HandlerExecutor(mHandler);
    private final HandlerExecutor mRunnableExecutor;

    // Results from dynamic queries to ImsService regarding the features they support.
    private final ImsServiceFeatureQueryManager.Listener mDynamicQueryListener =
@@ -571,7 +581,8 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal
    private final SparseIntArray mSlotIdToSubIdMap;

    public ImsResolver(Context context, String defaultMmTelPackageName,
            String defaultRcsPackageName, int numSlots, ImsFeatureBinderRepository repo) {
            String defaultRcsPackageName, int numSlots, ImsFeatureBinderRepository repo,
            Looper looper) {
        Log.i(TAG, "device MMTEL package: " + defaultMmTelPackageName + ", device RCS package:"
                + defaultRcsPackageName);
        mContext = context;
@@ -579,6 +590,8 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal
        mRepo = repo;
        mReceiverContext = context.createContextAsUser(UserHandle.ALL, 0 /*flags*/);

        mHandler = new ResolverHandler(looper);
        mRunnableExecutor = new HandlerExecutor(mHandler);
        mCarrierServices = new SparseArray<>(mNumSlots);
        setDeviceConfiguration(defaultMmTelPackageName, ImsFeature.FEATURE_EMERGENCY_MMTEL);
        setDeviceConfiguration(defaultMmTelPackageName, ImsFeature.FEATURE_MMTEL);
+26 −58
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertNull;
import static junit.framework.Assert.assertTrue;
import static junit.framework.Assert.fail;
import static junit.framework.TestCase.assertFalse;

import static org.mockito.ArgumentMatchers.argThat;
@@ -44,6 +43,7 @@ import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
import android.net.Uri;
import android.os.Bundle;
import android.os.Looper;
import android.os.PersistableBundle;
import android.os.RemoteException;
import android.os.UserManager;
@@ -112,7 +112,6 @@ public class ImsResolverTest extends ImsTestBase {
    private BroadcastReceiver mTestBootCompleteReceiver;
    private ImsServiceFeatureQueryManager.Listener mDynamicQueryListener;
    private PersistableBundle[] mCarrierConfigs;
    private TestableLooper mLooper;

    @Before
    @Override
@@ -134,7 +133,6 @@ public class ImsResolverTest extends ImsTestBase {
    public void tearDown() throws Exception {
        mTestImsResolver.destroy();
        mTestImsResolver = null;
        mLooper = null;
        mTestPackageBroadcastReceiver = null;
        mTestCarrierConfigReceiver = null;
        mTestBootCompleteReceiver = null;
@@ -220,15 +218,11 @@ public class ImsResolverTest extends ImsTestBase {

        // device package name should be returned for both features.
        final Boolean[] isConfigured = new Boolean[1];
        // Calling this method will block us until the looper processes the command, so use
        // runWithLooper to allow the message to be processed.
        mLooper.runWithLooper(() ->
        isConfigured[0] = mTestImsResolver.isImsServiceConfiguredForFeature(0,
                        ImsFeature.FEATURE_MMTEL));
                ImsFeature.FEATURE_MMTEL);
        assertTrue(isConfigured[0]);
        mLooper.runWithLooper(() ->
        isConfigured[0] = mTestImsResolver.isImsServiceConfiguredForFeature(0,
                        ImsFeature.FEATURE_RCS));
                ImsFeature.FEATURE_RCS);
        assertTrue(isConfigured[0]);
    }

@@ -253,15 +247,11 @@ public class ImsResolverTest extends ImsTestBase {

        // device package name should be returned for both features.
        final String[] packageName = new String[1];
        // Calling this method will block us until the looper processes the command, so use
        // runWithLooper to allow the message to be processed.
        mLooper.runWithLooper(() ->
        packageName[0] = mTestImsResolver.getConfiguredImsServicePackageName(0,
                        ImsFeature.FEATURE_MMTEL));
                ImsFeature.FEATURE_MMTEL);
        assertEquals(TEST_DEVICE_DEFAULT_NAME.getPackageName(), packageName[0]);
        mLooper.runWithLooper(() ->
        packageName[0] = mTestImsResolver.getConfiguredImsServicePackageName(0,
                        ImsFeature.FEATURE_RCS));
                ImsFeature.FEATURE_RCS);
        assertEquals(TEST_DEVICE_DEFAULT_NAME.getPackageName(), packageName[0]);
    }

@@ -281,15 +271,11 @@ public class ImsResolverTest extends ImsTestBase {

        // device package name should be returned for both features.
        final String[] packageName = new String[1];
        // Calling this method will block us until the looper processes the command, so use
        // runWithLooper to allow the message to be processed.
        mLooper.runWithLooper(() ->
        packageName[0] = mTestImsResolver.getConfiguredImsServicePackageName(0,
                        ImsFeature.FEATURE_MMTEL));
                ImsFeature.FEATURE_MMTEL);
        assertNull(packageName[0]);
        mLooper.runWithLooper(() ->
        packageName[0] = mTestImsResolver.getConfiguredImsServicePackageName(0,
                        ImsFeature.FEATURE_RCS));
                ImsFeature.FEATURE_RCS);
        assertNull(packageName[0]);
    }

@@ -314,15 +300,11 @@ public class ImsResolverTest extends ImsTestBase {

        // device package name should be returned for both features.
        final String[] packageName = new String[1];
        // Calling this method will block us until the looper processes the command, so use
        // runWithLooper to allow the message to be processed.
        mLooper.runWithLooper(() ->
        packageName[0] = mTestImsResolver.getConfiguredImsServicePackageName(0,
                        ImsFeature.FEATURE_MMTEL));
                ImsFeature.FEATURE_MMTEL);
        assertNull(packageName[0]);
        mLooper.runWithLooper(() ->
        packageName[0] = mTestImsResolver.getConfiguredImsServicePackageName(0,
                        ImsFeature.FEATURE_RCS));
                ImsFeature.FEATURE_RCS);
        assertNull(packageName[0]);
    }

@@ -358,15 +340,11 @@ public class ImsResolverTest extends ImsTestBase {

        // carrier package name should be returned for both features.
        final String[] packageName = new String[1];
        // Calling this method will block us until the looper processes the command, so use
        // runWithLooper to allow the message to be processed.
        mLooper.runWithLooper(() ->
        packageName[0] = mTestImsResolver.getConfiguredImsServicePackageName(0,
                        ImsFeature.FEATURE_MMTEL));
                ImsFeature.FEATURE_MMTEL);
        assertEquals(TEST_CARRIER_DEFAULT_NAME.getPackageName(), packageName[0]);
        mLooper.runWithLooper(() ->
        packageName[0] = mTestImsResolver.getConfiguredImsServicePackageName(0,
                        ImsFeature.FEATURE_RCS));
                ImsFeature.FEATURE_RCS);
        assertEquals(TEST_CARRIER_DEFAULT_NAME.getPackageName(), packageName[0]);
    }

@@ -396,15 +374,11 @@ public class ImsResolverTest extends ImsTestBase {
        startBindCarrierConfigAlreadySet();

        final String[] packageName = new String[1];
        // Calling this method will block us until the looper processes the command, so use
        // runWithLooper to allow the message to be processed.
        mLooper.runWithLooper(() ->
        packageName[0] = mTestImsResolver.getConfiguredImsServicePackageName(0,
                        ImsFeature.FEATURE_MMTEL));
                ImsFeature.FEATURE_MMTEL);
        assertEquals(TEST_DEVICE_DEFAULT_NAME.getPackageName(), packageName[0]);
        mLooper.runWithLooper(() ->
        packageName[0] = mTestImsResolver.getConfiguredImsServicePackageName(0,
                        ImsFeature.FEATURE_RCS));
                ImsFeature.FEATURE_RCS);
        assertEquals(TEST_DEVICE_DEFAULT_NAME.getPackageName(), packageName[0]);
    }

@@ -1946,13 +1920,7 @@ public class ImsResolverTest extends ImsTestBase {
        }

        mTestImsResolver = new ImsResolver(mMockContext, deviceMmTelPkgName, deviceRcsPkgName,
                numSlots, mMockRepo);
        try {
            mLooper = new TestableLooper(mTestImsResolver.getHandler().getLooper());
            monitorTestableLooper(mLooper);
        } catch (Exception e) {
            fail("Unable to create looper from handler.");
        }
                numSlots, mMockRepo, Looper.myLooper());

        mTestImsResolver.setSubscriptionManagerProxy(mTestSubscriptionManagerProxy);
        mTestImsResolver.setTelephonyManagerProxy(mTestTelephonyManagerProxy);