Loading src/java/com/android/internal/telephony/Phone.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -603,8 +603,8 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { if (imsManager != null && !imsManager.isDynamicBinding()) { if (imsManager != null && !imsManager.isDynamicBinding()) { filter.addAction(ImsManager.ACTION_IMS_SERVICE_UP); filter.addAction(ImsManager.ACTION_IMS_SERVICE_UP); filter.addAction(ImsManager.ACTION_IMS_SERVICE_DOWN); filter.addAction(ImsManager.ACTION_IMS_SERVICE_DOWN); } mContext.registerReceiver(mImsIntentReceiver, filter); mContext.registerReceiver(mImsIntentReceiver, filter); } // Monitor IMS service - but first poll to see if already up (could miss // 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, // 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 Original line Diff line number Diff line Loading @@ -149,18 +149,6 @@ public class PhoneFactory { where as in single SIM mode only instance. isMultiSimEnabled() function checks where as in single SIM mode only instance. isMultiSimEnabled() function checks whether it is single SIM or multi SIM mode */ whether it is single SIM or multi SIM mode */ int numPhones = TelephonyManager.getDefault().getPhoneCount(); 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]; int[] networkModes = new int[numPhones]; sPhones = new Phone[numPhones]; sPhones = new Phone[numPhones]; Loading Loading @@ -234,13 +222,32 @@ public class PhoneFactory { BackgroundThread.get().getLooper(), context, sPhones, sCommandsInterfaces); BackgroundThread.get().getLooper(), context, sPhones, sCommandsInterfaces); SubscriptionController.getInstance().updatePhonesAvailability(sPhones); 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. // Start monitoring after defaults have been made. // Default phone must be ready before ImsPhone is created because ImsService might // Default phone must be ready before ImsPhone is created because ImsService // need it when it is being opened. This should initialize multiple ImsPhones for // might need it when it is being opened. This should initialize multiple // ImsResolver implementations of ImsService. // ImsPhones for ImsResolver implementations of ImsService. for (int i = 0; i < numPhones; i++) { for (int i = 0; i < numPhones; i++) { sPhones[i].startMonitoringImsService(); sPhones[i].startMonitoringImsService(); } } } else { Rlog.i(LOG_TAG, "IMS is not supported on this device, skipping ImsResolver."); } ITelephonyRegistry tr = ITelephonyRegistry.Stub.asInterface( ITelephonyRegistry tr = ITelephonyRegistry.Stub.asInterface( ServiceManager.getService("telephony.registry")); ServiceManager.getService("telephony.registry")); Loading Loading @@ -326,7 +333,11 @@ public class PhoneFactory { return sSubInfoRecordUpdater; 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; return sImsResolver; } } Loading tests/telephonytests/src/android/telephony/ims/ImsMmTelManagerTests.java +12 −5 Original line number Original line Diff line number Diff line Loading @@ -19,10 +19,12 @@ package android.telephony.ims; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.verify; 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.AccessNetworkConstants; import android.telephony.ims.aidl.IImsRegistrationCallback; import android.telephony.ims.aidl.IImsRegistrationCallback; import android.telephony.ims.stub.ImsRegistrationImplBase; import android.telephony.ims.stub.ImsRegistrationImplBase; Loading @@ -40,9 +42,9 @@ import org.mockito.Mock; public class ImsMmTelManagerTests extends TelephonyTest { public class ImsMmTelManagerTests extends TelephonyTest { @Mock @Mock IBinder mMockBinder; ITelephony.Stub mMockTelephonyInterface; @Mock @Mock ITelephony mMockTelephonyInterface; IPackageManager.Stub mMockPackageManager; public class LocalCallback extends ImsMmTelManager.RegistrationCallback { public class LocalCallback extends ImsMmTelManager.RegistrationCallback { int mRegResult = -1; int mRegResult = -1; Loading @@ -56,8 +58,13 @@ public class ImsMmTelManagerTests extends TelephonyTest { @Before @Before public void setUp() throws Exception { public void setUp() throws Exception { super.setUp("ImsMmTelManagerTests"); super.setUp("ImsMmTelManagerTests"); doReturn(mMockTelephonyInterface).when(mMockBinder).queryLocalInterface(anyString()); doReturn(mMockTelephonyInterface).when(mMockTelephonyInterface).queryLocalInterface( mServiceManagerMockedServices.put("phone", mMockBinder); 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 @After Loading tests/telephonytests/src/com/android/internal/telephony/ContextFixture.java +9 −0 Original line number Original line Diff line number Diff line Loading @@ -530,6 +530,7 @@ public class ContextFixture implements TestFixture<Context> { private final Multimap<Intent, BroadcastReceiver> mOrderedBroadcastReceivers = private final Multimap<Intent, BroadcastReceiver> mOrderedBroadcastReceivers = ArrayListMultimap.create(); ArrayListMultimap.create(); private final HashSet<String> mPermissionTable = new HashSet<>(); private final HashSet<String> mPermissionTable = new HashSet<>(); private final HashSet<String> mSystemFeatures = new HashSet<>(); Loading Loading @@ -595,6 +596,10 @@ public class ContextFixture implements TestFixture<Context> { } catch (NameNotFoundException e) { } catch (NameNotFoundException e) { } } doAnswer((Answer<Boolean>) invocation -> mSystemFeatures.contains((String) invocation.getArgument(0))) .when(mPackageManager).hasSystemFeature(any()); doReturn(mBundle).when(mCarrierConfigManager).getConfigForSubId(anyInt()); doReturn(mBundle).when(mCarrierConfigManager).getConfigForSubId(anyInt()); //doReturn(mBundle).when(mCarrierConfigManager).getConfig(anyInt()); //doReturn(mBundle).when(mCarrierConfigManager).getConfig(anyInt()); doReturn(mBundle).when(mCarrierConfigManager).getConfig(); doReturn(mBundle).when(mCarrierConfigManager).getConfig(); Loading Loading @@ -706,6 +711,10 @@ public class ContextFixture implements TestFixture<Context> { } } } } public void addSystemFeature(String feature) { mSystemFeatures.add(feature); } private static void logd(String s) { private static void logd(String s) { Log.d(TAG, s); Log.d(TAG, s); } } Loading tests/telephonytests/src/com/android/internal/telephony/ims/ImsManagerTest.java +2 −0 Original line number Original line 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.verify; import static org.mockito.Mockito.when; import static org.mockito.Mockito.when; import android.content.pm.PackageManager; import android.os.IBinder; import android.os.IBinder; import android.os.PersistableBundle; import android.os.PersistableBundle; import android.telephony.CarrierConfigManager; import android.telephony.CarrierConfigManager; Loading Loading @@ -95,6 +96,7 @@ public class ImsManagerTest extends TelephonyTest { mServiceManagerMockedServices.put("isub", mBinder); mServiceManagerMockedServices.put("isub", mBinder); doReturn(true).when(mMmTelFeatureConnection).isBinderAlive(); doReturn(true).when(mMmTelFeatureConnection).isBinderAlive(); mContextFixture.addSystemFeature(PackageManager.FEATURE_TELEPHONY_IMS); mImsManagerInstances.remove(mPhoneId); mImsManagerInstances.remove(mPhoneId); Loading Loading
src/java/com/android/internal/telephony/Phone.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -603,8 +603,8 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { if (imsManager != null && !imsManager.isDynamicBinding()) { if (imsManager != null && !imsManager.isDynamicBinding()) { filter.addAction(ImsManager.ACTION_IMS_SERVICE_UP); filter.addAction(ImsManager.ACTION_IMS_SERVICE_UP); filter.addAction(ImsManager.ACTION_IMS_SERVICE_DOWN); filter.addAction(ImsManager.ACTION_IMS_SERVICE_DOWN); } mContext.registerReceiver(mImsIntentReceiver, filter); mContext.registerReceiver(mImsIntentReceiver, filter); } // Monitor IMS service - but first poll to see if already up (could miss // 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, // 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 Original line Diff line number Diff line Loading @@ -149,18 +149,6 @@ public class PhoneFactory { where as in single SIM mode only instance. isMultiSimEnabled() function checks where as in single SIM mode only instance. isMultiSimEnabled() function checks whether it is single SIM or multi SIM mode */ whether it is single SIM or multi SIM mode */ int numPhones = TelephonyManager.getDefault().getPhoneCount(); 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]; int[] networkModes = new int[numPhones]; sPhones = new Phone[numPhones]; sPhones = new Phone[numPhones]; Loading Loading @@ -234,13 +222,32 @@ public class PhoneFactory { BackgroundThread.get().getLooper(), context, sPhones, sCommandsInterfaces); BackgroundThread.get().getLooper(), context, sPhones, sCommandsInterfaces); SubscriptionController.getInstance().updatePhonesAvailability(sPhones); 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. // Start monitoring after defaults have been made. // Default phone must be ready before ImsPhone is created because ImsService might // Default phone must be ready before ImsPhone is created because ImsService // need it when it is being opened. This should initialize multiple ImsPhones for // might need it when it is being opened. This should initialize multiple // ImsResolver implementations of ImsService. // ImsPhones for ImsResolver implementations of ImsService. for (int i = 0; i < numPhones; i++) { for (int i = 0; i < numPhones; i++) { sPhones[i].startMonitoringImsService(); sPhones[i].startMonitoringImsService(); } } } else { Rlog.i(LOG_TAG, "IMS is not supported on this device, skipping ImsResolver."); } ITelephonyRegistry tr = ITelephonyRegistry.Stub.asInterface( ITelephonyRegistry tr = ITelephonyRegistry.Stub.asInterface( ServiceManager.getService("telephony.registry")); ServiceManager.getService("telephony.registry")); Loading Loading @@ -326,7 +333,11 @@ public class PhoneFactory { return sSubInfoRecordUpdater; 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; return sImsResolver; } } Loading
tests/telephonytests/src/android/telephony/ims/ImsMmTelManagerTests.java +12 −5 Original line number Original line Diff line number Diff line Loading @@ -19,10 +19,12 @@ package android.telephony.ims; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.verify; 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.AccessNetworkConstants; import android.telephony.ims.aidl.IImsRegistrationCallback; import android.telephony.ims.aidl.IImsRegistrationCallback; import android.telephony.ims.stub.ImsRegistrationImplBase; import android.telephony.ims.stub.ImsRegistrationImplBase; Loading @@ -40,9 +42,9 @@ import org.mockito.Mock; public class ImsMmTelManagerTests extends TelephonyTest { public class ImsMmTelManagerTests extends TelephonyTest { @Mock @Mock IBinder mMockBinder; ITelephony.Stub mMockTelephonyInterface; @Mock @Mock ITelephony mMockTelephonyInterface; IPackageManager.Stub mMockPackageManager; public class LocalCallback extends ImsMmTelManager.RegistrationCallback { public class LocalCallback extends ImsMmTelManager.RegistrationCallback { int mRegResult = -1; int mRegResult = -1; Loading @@ -56,8 +58,13 @@ public class ImsMmTelManagerTests extends TelephonyTest { @Before @Before public void setUp() throws Exception { public void setUp() throws Exception { super.setUp("ImsMmTelManagerTests"); super.setUp("ImsMmTelManagerTests"); doReturn(mMockTelephonyInterface).when(mMockBinder).queryLocalInterface(anyString()); doReturn(mMockTelephonyInterface).when(mMockTelephonyInterface).queryLocalInterface( mServiceManagerMockedServices.put("phone", mMockBinder); 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 @After Loading
tests/telephonytests/src/com/android/internal/telephony/ContextFixture.java +9 −0 Original line number Original line Diff line number Diff line Loading @@ -530,6 +530,7 @@ public class ContextFixture implements TestFixture<Context> { private final Multimap<Intent, BroadcastReceiver> mOrderedBroadcastReceivers = private final Multimap<Intent, BroadcastReceiver> mOrderedBroadcastReceivers = ArrayListMultimap.create(); ArrayListMultimap.create(); private final HashSet<String> mPermissionTable = new HashSet<>(); private final HashSet<String> mPermissionTable = new HashSet<>(); private final HashSet<String> mSystemFeatures = new HashSet<>(); Loading Loading @@ -595,6 +596,10 @@ public class ContextFixture implements TestFixture<Context> { } catch (NameNotFoundException e) { } catch (NameNotFoundException e) { } } doAnswer((Answer<Boolean>) invocation -> mSystemFeatures.contains((String) invocation.getArgument(0))) .when(mPackageManager).hasSystemFeature(any()); doReturn(mBundle).when(mCarrierConfigManager).getConfigForSubId(anyInt()); doReturn(mBundle).when(mCarrierConfigManager).getConfigForSubId(anyInt()); //doReturn(mBundle).when(mCarrierConfigManager).getConfig(anyInt()); //doReturn(mBundle).when(mCarrierConfigManager).getConfig(anyInt()); doReturn(mBundle).when(mCarrierConfigManager).getConfig(); doReturn(mBundle).when(mCarrierConfigManager).getConfig(); Loading Loading @@ -706,6 +711,10 @@ public class ContextFixture implements TestFixture<Context> { } } } } public void addSystemFeature(String feature) { mSystemFeatures.add(feature); } private static void logd(String s) { private static void logd(String s) { Log.d(TAG, s); Log.d(TAG, s); } } Loading
tests/telephonytests/src/com/android/internal/telephony/ims/ImsManagerTest.java +2 −0 Original line number Original line 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.verify; import static org.mockito.Mockito.when; import static org.mockito.Mockito.when; import android.content.pm.PackageManager; import android.os.IBinder; import android.os.IBinder; import android.os.PersistableBundle; import android.os.PersistableBundle; import android.telephony.CarrierConfigManager; import android.telephony.CarrierConfigManager; Loading Loading @@ -95,6 +96,7 @@ public class ImsManagerTest extends TelephonyTest { mServiceManagerMockedServices.put("isub", mBinder); mServiceManagerMockedServices.put("isub", mBinder); doReturn(true).when(mMmTelFeatureConnection).isBinderAlive(); doReturn(true).when(mMmTelFeatureConnection).isBinderAlive(); mContextFixture.addSystemFeature(PackageManager.FEATURE_TELEPHONY_IMS); mImsManagerInstances.remove(mPhoneId); mImsManagerInstances.remove(mPhoneId); Loading