Loading src/java/com/android/internal/telephony/Phone.java +1 −1 Original line number Diff line number Diff line Loading @@ -604,8 +604,8 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { if (imsManager != null && !imsManager.isDynamicBinding()) { filter.addAction(ImsManager.ACTION_IMS_SERVICE_UP); filter.addAction(ImsManager.ACTION_IMS_SERVICE_DOWN); } mContext.registerReceiver(mImsIntentReceiver, filter); } // Monitor IMS service - but first poll to see if already up (could miss // intent). Also, when using new ImsResolver APIs, the service will be available soon, Loading src/java/com/android/internal/telephony/PhoneFactory.java +30 −19 Original line number Diff line number Diff line Loading @@ -149,18 +149,6 @@ public class PhoneFactory { where as in single SIM mode only instance. isMultiSimEnabled() function checks whether it is single SIM or multi SIM mode */ int numPhones = TelephonyManager.getDefault().getPhoneCount(); // Return whether or not the device should use dynamic binding or the static // implementation (deprecated) boolean isDynamicBinding = sContext.getResources().getBoolean( com.android.internal.R.bool.config_dynamic_bind_ims); // Get the package name of the default IMS implementation. String defaultImsPackage = sContext.getResources().getString( com.android.internal.R.string.config_ims_package); // Start ImsResolver and bind to ImsServices. Rlog.i(LOG_TAG, "ImsResolver: defaultImsPackage: " + defaultImsPackage); sImsResolver = new ImsResolver(sContext, defaultImsPackage, numPhones, isDynamicBinding); sImsResolver.initPopulateCacheAndStartBind(); int[] networkModes = new int[numPhones]; sPhones = new Phone[numPhones]; Loading Loading @@ -234,13 +222,32 @@ public class PhoneFactory { BackgroundThread.get().getLooper(), context, sPhones, sCommandsInterfaces); SubscriptionController.getInstance().updatePhonesAvailability(sPhones); // Only bring up IMS if the device supports having an IMS stack. if (context.getPackageManager().hasSystemFeature( PackageManager.FEATURE_TELEPHONY_IMS)) { // Return whether or not the device should use dynamic binding or the static // implementation (deprecated) boolean isDynamicBinding = sContext.getResources().getBoolean( com.android.internal.R.bool.config_dynamic_bind_ims); // Get the package name of the default IMS implementation. String defaultImsPackage = sContext.getResources().getString( com.android.internal.R.string.config_ims_package); // Start ImsResolver and bind to ImsServices. Rlog.i(LOG_TAG, "ImsResolver: defaultImsPackage: " + defaultImsPackage); sImsResolver = new ImsResolver(sContext, defaultImsPackage, numPhones, isDynamicBinding); sImsResolver.initPopulateCacheAndStartBind(); // Start monitoring after defaults have been made. // Default phone must be ready before ImsPhone is created because ImsService might // need it when it is being opened. This should initialize multiple ImsPhones for // ImsResolver implementations of ImsService. // Default phone must be ready before ImsPhone is created because ImsService // might need it when it is being opened. This should initialize multiple // ImsPhones for ImsResolver implementations of ImsService. for (int i = 0; i < numPhones; i++) { sPhones[i].startMonitoringImsService(); } } else { Rlog.i(LOG_TAG, "IMS is not supported on this device, skipping ImsResolver."); } ITelephonyRegistry tr = ITelephonyRegistry.Stub.asInterface( ServiceManager.getService("telephony.registry")); Loading Loading @@ -325,7 +332,11 @@ public class PhoneFactory { return sSubInfoRecordUpdater; } public static ImsResolver getImsResolver() { /** * @return The ImsResolver instance or null if IMS is not supported * (FEATURE_TELEPHONY_IMS is not defined). */ public static @Nullable ImsResolver getImsResolver() { return sImsResolver; } Loading tests/telephonytests/src/android/telephony/ims/ImsMmTelManagerTests.java +12 −5 Original line number Diff line number Diff line Loading @@ -19,10 +19,12 @@ package android.telephony.ims; import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.verify; import android.os.IBinder; import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.telephony.AccessNetworkConstants; import android.telephony.ims.aidl.IImsRegistrationCallback; import android.telephony.ims.stub.ImsRegistrationImplBase; Loading @@ -40,9 +42,9 @@ import org.mockito.Mock; public class ImsMmTelManagerTests extends TelephonyTest { @Mock IBinder mMockBinder; ITelephony.Stub mMockTelephonyInterface; @Mock ITelephony mMockTelephonyInterface; IPackageManager.Stub mMockPackageManager; public class LocalCallback extends ImsMmTelManager.RegistrationCallback { int mRegResult = -1; Loading @@ -56,8 +58,13 @@ public class ImsMmTelManagerTests extends TelephonyTest { @Before public void setUp() throws Exception { super.setUp("ImsMmTelManagerTests"); doReturn(mMockTelephonyInterface).when(mMockBinder).queryLocalInterface(anyString()); mServiceManagerMockedServices.put("phone", mMockBinder); doReturn(mMockTelephonyInterface).when(mMockTelephonyInterface).queryLocalInterface( anyString()); doReturn(mMockPackageManager).when(mMockPackageManager).queryLocalInterface(anyString()); doReturn(true).when(mMockPackageManager).hasSystemFeature( eq(PackageManager.FEATURE_TELEPHONY_IMS), anyInt()); mServiceManagerMockedServices.put("phone", mMockTelephonyInterface); mServiceManagerMockedServices.put("package", mMockPackageManager); } @After Loading tests/telephonytests/src/com/android/internal/telephony/ContextFixture.java +9 −0 Original line number Diff line number Diff line Loading @@ -528,6 +528,7 @@ public class ContextFixture implements TestFixture<Context> { private final Multimap<Intent, BroadcastReceiver> mOrderedBroadcastReceivers = ArrayListMultimap.create(); private final HashSet<String> mPermissionTable = new HashSet<>(); private final HashSet<String> mSystemFeatures = new HashSet<>(); Loading Loading @@ -586,6 +587,10 @@ public class ContextFixture implements TestFixture<Context> { } }).when(mPackageManager).queryIntentServicesAsUser((Intent) any(), anyInt(), anyInt()); doAnswer((Answer<Boolean>) invocation -> mSystemFeatures.contains((String) invocation.getArgument(0))) .when(mPackageManager).hasSystemFeature(any()); doReturn(mBundle).when(mCarrierConfigManager).getConfigForSubId(anyInt()); //doReturn(mBundle).when(mCarrierConfigManager).getConfig(anyInt()); doReturn(mBundle).when(mCarrierConfigManager).getConfig(); Loading Loading @@ -697,6 +702,10 @@ public class ContextFixture implements TestFixture<Context> { } } public void addSystemFeature(String feature) { mSystemFeatures.add(feature); } private static void logd(String s) { Log.d(TAG, s); } Loading tests/telephonytests/src/com/android/internal/telephony/ims/ImsManagerTest.java +2 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.pm.PackageManager; import android.os.IBinder; import android.os.PersistableBundle; import android.telephony.CarrierConfigManager; Loading Loading @@ -95,6 +96,7 @@ public class ImsManagerTest extends TelephonyTest { mServiceManagerMockedServices.put("isub", mBinder); doReturn(true).when(mMmTelFeatureConnection).isBinderAlive(); mContextFixture.addSystemFeature(PackageManager.FEATURE_TELEPHONY_IMS); mImsManagerInstances.remove(mPhoneId); Loading Loading
src/java/com/android/internal/telephony/Phone.java +1 −1 Original line number Diff line number Diff line Loading @@ -604,8 +604,8 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { if (imsManager != null && !imsManager.isDynamicBinding()) { filter.addAction(ImsManager.ACTION_IMS_SERVICE_UP); filter.addAction(ImsManager.ACTION_IMS_SERVICE_DOWN); } mContext.registerReceiver(mImsIntentReceiver, filter); } // Monitor IMS service - but first poll to see if already up (could miss // intent). Also, when using new ImsResolver APIs, the service will be available soon, Loading
src/java/com/android/internal/telephony/PhoneFactory.java +30 −19 Original line number Diff line number Diff line Loading @@ -149,18 +149,6 @@ public class PhoneFactory { where as in single SIM mode only instance. isMultiSimEnabled() function checks whether it is single SIM or multi SIM mode */ int numPhones = TelephonyManager.getDefault().getPhoneCount(); // Return whether or not the device should use dynamic binding or the static // implementation (deprecated) boolean isDynamicBinding = sContext.getResources().getBoolean( com.android.internal.R.bool.config_dynamic_bind_ims); // Get the package name of the default IMS implementation. String defaultImsPackage = sContext.getResources().getString( com.android.internal.R.string.config_ims_package); // Start ImsResolver and bind to ImsServices. Rlog.i(LOG_TAG, "ImsResolver: defaultImsPackage: " + defaultImsPackage); sImsResolver = new ImsResolver(sContext, defaultImsPackage, numPhones, isDynamicBinding); sImsResolver.initPopulateCacheAndStartBind(); int[] networkModes = new int[numPhones]; sPhones = new Phone[numPhones]; Loading Loading @@ -234,13 +222,32 @@ public class PhoneFactory { BackgroundThread.get().getLooper(), context, sPhones, sCommandsInterfaces); SubscriptionController.getInstance().updatePhonesAvailability(sPhones); // Only bring up IMS if the device supports having an IMS stack. if (context.getPackageManager().hasSystemFeature( PackageManager.FEATURE_TELEPHONY_IMS)) { // Return whether or not the device should use dynamic binding or the static // implementation (deprecated) boolean isDynamicBinding = sContext.getResources().getBoolean( com.android.internal.R.bool.config_dynamic_bind_ims); // Get the package name of the default IMS implementation. String defaultImsPackage = sContext.getResources().getString( com.android.internal.R.string.config_ims_package); // Start ImsResolver and bind to ImsServices. Rlog.i(LOG_TAG, "ImsResolver: defaultImsPackage: " + defaultImsPackage); sImsResolver = new ImsResolver(sContext, defaultImsPackage, numPhones, isDynamicBinding); sImsResolver.initPopulateCacheAndStartBind(); // Start monitoring after defaults have been made. // Default phone must be ready before ImsPhone is created because ImsService might // need it when it is being opened. This should initialize multiple ImsPhones for // ImsResolver implementations of ImsService. // Default phone must be ready before ImsPhone is created because ImsService // might need it when it is being opened. This should initialize multiple // ImsPhones for ImsResolver implementations of ImsService. for (int i = 0; i < numPhones; i++) { sPhones[i].startMonitoringImsService(); } } else { Rlog.i(LOG_TAG, "IMS is not supported on this device, skipping ImsResolver."); } ITelephonyRegistry tr = ITelephonyRegistry.Stub.asInterface( ServiceManager.getService("telephony.registry")); Loading Loading @@ -325,7 +332,11 @@ public class PhoneFactory { return sSubInfoRecordUpdater; } public static ImsResolver getImsResolver() { /** * @return The ImsResolver instance or null if IMS is not supported * (FEATURE_TELEPHONY_IMS is not defined). */ public static @Nullable ImsResolver getImsResolver() { return sImsResolver; } Loading
tests/telephonytests/src/android/telephony/ims/ImsMmTelManagerTests.java +12 −5 Original line number Diff line number Diff line Loading @@ -19,10 +19,12 @@ package android.telephony.ims; import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.verify; import android.os.IBinder; import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.telephony.AccessNetworkConstants; import android.telephony.ims.aidl.IImsRegistrationCallback; import android.telephony.ims.stub.ImsRegistrationImplBase; Loading @@ -40,9 +42,9 @@ import org.mockito.Mock; public class ImsMmTelManagerTests extends TelephonyTest { @Mock IBinder mMockBinder; ITelephony.Stub mMockTelephonyInterface; @Mock ITelephony mMockTelephonyInterface; IPackageManager.Stub mMockPackageManager; public class LocalCallback extends ImsMmTelManager.RegistrationCallback { int mRegResult = -1; Loading @@ -56,8 +58,13 @@ public class ImsMmTelManagerTests extends TelephonyTest { @Before public void setUp() throws Exception { super.setUp("ImsMmTelManagerTests"); doReturn(mMockTelephonyInterface).when(mMockBinder).queryLocalInterface(anyString()); mServiceManagerMockedServices.put("phone", mMockBinder); doReturn(mMockTelephonyInterface).when(mMockTelephonyInterface).queryLocalInterface( anyString()); doReturn(mMockPackageManager).when(mMockPackageManager).queryLocalInterface(anyString()); doReturn(true).when(mMockPackageManager).hasSystemFeature( eq(PackageManager.FEATURE_TELEPHONY_IMS), anyInt()); mServiceManagerMockedServices.put("phone", mMockTelephonyInterface); mServiceManagerMockedServices.put("package", mMockPackageManager); } @After Loading
tests/telephonytests/src/com/android/internal/telephony/ContextFixture.java +9 −0 Original line number Diff line number Diff line Loading @@ -528,6 +528,7 @@ public class ContextFixture implements TestFixture<Context> { private final Multimap<Intent, BroadcastReceiver> mOrderedBroadcastReceivers = ArrayListMultimap.create(); private final HashSet<String> mPermissionTable = new HashSet<>(); private final HashSet<String> mSystemFeatures = new HashSet<>(); Loading Loading @@ -586,6 +587,10 @@ public class ContextFixture implements TestFixture<Context> { } }).when(mPackageManager).queryIntentServicesAsUser((Intent) any(), anyInt(), anyInt()); doAnswer((Answer<Boolean>) invocation -> mSystemFeatures.contains((String) invocation.getArgument(0))) .when(mPackageManager).hasSystemFeature(any()); doReturn(mBundle).when(mCarrierConfigManager).getConfigForSubId(anyInt()); //doReturn(mBundle).when(mCarrierConfigManager).getConfig(anyInt()); doReturn(mBundle).when(mCarrierConfigManager).getConfig(); Loading Loading @@ -697,6 +702,10 @@ public class ContextFixture implements TestFixture<Context> { } } public void addSystemFeature(String feature) { mSystemFeatures.add(feature); } private static void logd(String s) { Log.d(TAG, s); } Loading
tests/telephonytests/src/com/android/internal/telephony/ims/ImsManagerTest.java +2 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.pm.PackageManager; import android.os.IBinder; import android.os.PersistableBundle; import android.telephony.CarrierConfigManager; Loading Loading @@ -95,6 +96,7 @@ public class ImsManagerTest extends TelephonyTest { mServiceManagerMockedServices.put("isub", mBinder); doReturn(true).when(mMmTelFeatureConnection).isBinderAlive(); mContextFixture.addSystemFeature(PackageManager.FEATURE_TELEPHONY_IMS); mImsManagerInstances.remove(mPhoneId); Loading