Loading src/java/com/android/internal/telephony/ims/ImsResolver.java +88 −75 Original line number Diff line number Diff line Loading @@ -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); } } Loading Loading @@ -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; Loading @@ -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(); } } Loading @@ -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; Loading Loading @@ -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 = Loading Loading @@ -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; Loading @@ -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); Loading tests/telephonytests/src/com/android/internal/telephony/ims/ImsResolverTest.java +26 −58 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -112,7 +112,6 @@ public class ImsResolverTest extends ImsTestBase { private BroadcastReceiver mTestBootCompleteReceiver; private ImsServiceFeatureQueryManager.Listener mDynamicQueryListener; private PersistableBundle[] mCarrierConfigs; private TestableLooper mLooper; @Before @Override Loading @@ -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; Loading Loading @@ -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]); } Loading @@ -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]); } Loading @@ -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]); } Loading @@ -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]); } Loading Loading @@ -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]); } Loading Loading @@ -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]); } Loading Loading @@ -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); Loading Loading
src/java/com/android/internal/telephony/ims/ImsResolver.java +88 −75 Original line number Diff line number Diff line Loading @@ -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); } } Loading Loading @@ -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; Loading @@ -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(); } } Loading @@ -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; Loading Loading @@ -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 = Loading Loading @@ -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; Loading @@ -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); Loading
tests/telephonytests/src/com/android/internal/telephony/ims/ImsResolverTest.java +26 −58 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -112,7 +112,6 @@ public class ImsResolverTest extends ImsTestBase { private BroadcastReceiver mTestBootCompleteReceiver; private ImsServiceFeatureQueryManager.Listener mDynamicQueryListener; private PersistableBundle[] mCarrierConfigs; private TestableLooper mLooper; @Before @Override Loading @@ -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; Loading Loading @@ -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]); } Loading @@ -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]); } Loading @@ -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]); } Loading @@ -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]); } Loading Loading @@ -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]); } Loading Loading @@ -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]); } Loading Loading @@ -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); Loading