Loading src/java/com/android/internal/telephony/Phone.java +8 −74 Original line number Original line Diff line number Diff line Loading @@ -19,10 +19,8 @@ package com.android.internal.telephony; import android.annotation.Nullable; import android.annotation.Nullable; import android.annotation.UnsupportedAppUsage; import android.annotation.UnsupportedAppUsage; import android.app.BroadcastOptions; import android.app.BroadcastOptions; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Context; import android.content.Intent; import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; import android.content.SharedPreferences; import android.net.LinkProperties; import android.net.LinkProperties; import android.net.NetworkCapabilities; import android.net.NetworkCapabilities; Loading Loading @@ -116,33 +114,6 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { protected final int USSD_MAX_QUEUE = 10; protected final int USSD_MAX_QUEUE = 10; private BroadcastReceiver mImsIntentReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Rlog.d(LOG_TAG, "mImsIntentReceiver: action " + intent.getAction()); if (intent.hasExtra(ImsManager.EXTRA_PHONE_ID)) { int extraPhoneId = intent.getIntExtra(ImsManager.EXTRA_PHONE_ID, SubscriptionManager.INVALID_PHONE_INDEX); Rlog.d(LOG_TAG, "mImsIntentReceiver: extraPhoneId = " + extraPhoneId); if (extraPhoneId == SubscriptionManager.INVALID_PHONE_INDEX || extraPhoneId != getPhoneId()) { return; } } synchronized (Phone.lockForRadioTechnologyChange) { if (intent.getAction().equals(ImsManager.ACTION_IMS_SERVICE_UP)) { mImsServiceReady = true; updateImsPhone(); ImsManager.getInstance(mContext, mPhoneId).updateImsServiceConfig(false); } else if (intent.getAction().equals(ImsManager.ACTION_IMS_SERVICE_DOWN)) { mImsServiceReady = false; updateImsPhone(); } } } }; // Key used to read and write the saved network selection numeric value // Key used to read and write the saved network selection numeric value public static final String NETWORK_SELECTION_KEY = "network_selection_key"; public static final String NETWORK_SELECTION_KEY = "network_selection_key"; // Key used to read and write the saved network selection operator name // Key used to read and write the saved network selection operator name Loading Loading @@ -323,7 +294,6 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { @UnsupportedAppUsage @UnsupportedAppUsage protected int mPhoneId; protected int mPhoneId; private boolean mImsServiceReady = false; @UnsupportedAppUsage @UnsupportedAppUsage protected Phone mImsPhone = null; protected Phone mImsPhone = null; Loading Loading @@ -586,34 +556,20 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { } } /** /** * Start listening for IMS service UP/DOWN events. If using the new ImsResolver APIs, we should * Start setup of ImsPhone, which will start trying to connect to the ImsResolver. Will not be * always be setting up ImsPhones. * called if this device does not support FEATURE_IMS_TELEPHONY. */ */ public void startMonitoringImsService() { public void createImsPhone() { if (getPhoneType() == PhoneConstants.PHONE_TYPE_SIP) { if (getPhoneType() == PhoneConstants.PHONE_TYPE_SIP) { return; return; } } synchronized(Phone.lockForRadioTechnologyChange) { synchronized(Phone.lockForRadioTechnologyChange) { IntentFilter filter = new IntentFilter(); if (mImsPhone == null) { ImsManager imsManager = ImsManager.getInstance(mContext, getPhoneId()); mImsPhone = PhoneFactory.makeImsPhone(mNotifier, this); // Don't listen to deprecated intents using the new dynamic binding. CallManager.getInstance().registerPhone(mImsPhone); if (imsManager != null && !imsManager.isDynamicBinding()) { mImsPhone.registerForSilentRedial( filter.addAction(ImsManager.ACTION_IMS_SERVICE_UP); this, EVENT_INITIATE_SILENT_REDIAL, null); 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, // so start trying to bind. if (imsManager != null) { // If it is dynamic binding, kick off ImsPhone creation now instead of waiting for // the service to be available. if (imsManager.isDynamicBinding() || imsManager.isServiceAvailable()) { mImsServiceReady = true; updateImsPhone(); } } } } } } } Loading Loading @@ -3461,28 +3417,6 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { public void dispose() { public void dispose() { } } private void updateImsPhone() { Rlog.d(LOG_TAG, "updateImsPhone" + " mImsServiceReady=" + mImsServiceReady); if (mImsServiceReady && (mImsPhone == null)) { mImsPhone = PhoneFactory.makeImsPhone(mNotifier, this); CallManager.getInstance().registerPhone(mImsPhone); mImsPhone.registerForSilentRedial( this, EVENT_INITIATE_SILENT_REDIAL, null); } else if (!mImsServiceReady && (mImsPhone != null)) { CallManager.getInstance().unregisterPhone(mImsPhone); mImsPhone.unregisterForSilentRedial(this); mImsPhone.dispose(); // Potential GC issue if someone keeps a reference to ImsPhone. // However: this change will make sure that such a reference does // not access functions through NULL pointer. //mImsPhone.removeReferences(); mImsPhone = null; } } /** /** * Dials a number. * Dials a number. * * Loading src/java/com/android/internal/telephony/PhoneFactory.java +3 −8 Original line number Original line Diff line number Diff line Loading @@ -211,24 +211,19 @@ public class PhoneFactory { // Only bring up IMS if the device supports having an IMS stack. // Only bring up IMS if the device supports having an IMS stack. if (context.getPackageManager().hasSystemFeature( if (context.getPackageManager().hasSystemFeature( PackageManager.FEATURE_TELEPHONY_IMS)) { 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. // Get the package name of the default IMS implementation. String defaultImsPackage = sContext.getResources().getString( String defaultImsPackage = sContext.getResources().getString( com.android.internal.R.string.config_ims_package); com.android.internal.R.string.config_ims_package); // Start ImsResolver and bind to ImsServices. // Start ImsResolver and bind to ImsServices. Rlog.i(LOG_TAG, "ImsResolver: defaultImsPackage: " + defaultImsPackage); Rlog.i(LOG_TAG, "ImsResolver: defaultImsPackage: " + defaultImsPackage); sImsResolver = new ImsResolver(sContext, defaultImsPackage, numPhones, sImsResolver = new ImsResolver(sContext, defaultImsPackage, numPhones); isDynamicBinding); sImsResolver.initialize(); sImsResolver.initialize(); // 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 // Default phone must be ready before ImsPhone is created because ImsService // might need it when it is being opened. This should initialize multiple // might need it when it is being opened. This should initialize multiple // ImsPhones for 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].createImsPhone(); } } } else { } else { Rlog.i(LOG_TAG, "IMS is not supported on this device, skipping ImsResolver."); Rlog.i(LOG_TAG, "IMS is not supported on this device, skipping ImsResolver."); Loading Loading @@ -284,7 +279,7 @@ public class PhoneFactory { sPhones[i] = createPhone(context, i); sPhones[i] = createPhone(context, i); if (context.getPackageManager().hasSystemFeature( if (context.getPackageManager().hasSystemFeature( PackageManager.FEATURE_TELEPHONY_IMS)) { PackageManager.FEATURE_TELEPHONY_IMS)) { sPhones[i].startMonitoringImsService(); sPhones[i].createImsPhone(); } } sTelephonyNetworkFactories[i] = new TelephonyNetworkFactory( sTelephonyNetworkFactories[i] = new TelephonyNetworkFactory( Looper.myLooper(), sPhones[i]); Looper.myLooper(), sPhones[i]); Loading src/java/com/android/internal/telephony/ims/ImsResolver.java +15 −61 Original line number Original line Diff line number Diff line Loading @@ -359,21 +359,6 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal } } }; }; private ImsServiceControllerFactory mImsServiceControllerFactoryStaticBindingCompat = new ImsServiceControllerFactory() { @Override public String getServiceInterface() { // The static method of binding does not use service interfaces. return null; } @Override public ImsServiceController create(Context context, ComponentName componentName, ImsServiceController.ImsServiceControllerCallbacks callbacks) { return new ImsServiceControllerStaticCompat(context, componentName, callbacks); } }; private ImsDynamicQueryManagerFactory mDynamicQueryManagerFactory = private ImsDynamicQueryManagerFactory mDynamicQueryManagerFactory = ImsServiceFeatureQueryManager::new; ImsServiceFeatureQueryManager::new; Loading @@ -388,7 +373,6 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal // ImsServiceController callbacks. // ImsServiceController callbacks. private final Object mBoundServicesLock = new Object(); private final Object mBoundServicesLock = new Object(); private final int mNumSlots; private final int mNumSlots; private final boolean mIsDynamicBinding; // Package name of the default device service. // Package name of the default device service. private String mDeviceService; private String mDeviceService; // Persistent Logging // Persistent Logging Loading Loading @@ -512,22 +496,13 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal private Map<ComponentName, ImsServiceInfo> mInstalledServicesCache = new HashMap<>(); private Map<ComponentName, ImsServiceInfo> mInstalledServicesCache = new HashMap<>(); // not locked, only accessed on a handler thread. // not locked, only accessed on a handler thread. private Map<ComponentName, ImsServiceController> mActiveControllers = new HashMap<>(); private Map<ComponentName, ImsServiceController> mActiveControllers = new HashMap<>(); // Only used as the Component name for legacy ImsServices that did not use dynamic binding. private final ComponentName mStaticComponent; private ImsServiceFeatureQueryManager mFeatureQueryManager; private ImsServiceFeatureQueryManager mFeatureQueryManager; public ImsResolver(Context context, String defaultImsPackageName, int numSlots, public ImsResolver(Context context, String defaultImsPackageName, int numSlots) { boolean isDynamicBinding) { mContext = context; mContext = context; mReceiverContext = context.createContextAsUser(UserHandle.ALL, 0 /*flags*/); mReceiverContext = context.createContextAsUser(UserHandle.ALL, 0 /*flags*/); mDeviceService = defaultImsPackageName; mDeviceService = defaultImsPackageName; mNumSlots = numSlots; mNumSlots = numSlots; mIsDynamicBinding = isDynamicBinding; mStaticComponent = new ComponentName(mContext, ImsResolver.class); if (!mIsDynamicBinding) { Log.i(TAG, "ImsResolver initialized with static binding."); mDeviceService = mStaticComponent.getPackageName(); } mCarrierConfigManager = (CarrierConfigManager) mContext.getSystemService( mCarrierConfigManager = (CarrierConfigManager) mContext.getSystemService( Context.CARRIER_CONFIG_SERVICE); Context.CARRIER_CONFIG_SERVICE); mCarrierServices = new String[numSlots]; mCarrierServices = new String[numSlots]; Loading @@ -535,8 +510,6 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal mBoundImsServicesByFeature = Stream.generate(SparseArray<ImsServiceController>::new) mBoundImsServicesByFeature = Stream.generate(SparseArray<ImsServiceController>::new) .limit(mNumSlots).collect(Collectors.toList()); .limit(mNumSlots).collect(Collectors.toList()); // Only register for Package/CarrierConfig updates if dynamic binding. if(mIsDynamicBinding) { IntentFilter appChangedFilter = new IntentFilter(); IntentFilter appChangedFilter = new IntentFilter(); appChangedFilter.addAction(Intent.ACTION_PACKAGE_CHANGED); appChangedFilter.addAction(Intent.ACTION_PACKAGE_CHANGED); appChangedFilter.addAction(Intent.ACTION_PACKAGE_REMOVED); appChangedFilter.addAction(Intent.ACTION_PACKAGE_REMOVED); Loading @@ -548,7 +521,6 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal mReceiverContext.registerReceiver(mBootCompleted, new IntentFilter( mReceiverContext.registerReceiver(mBootCompleted, new IntentFilter( Intent.ACTION_BOOT_COMPLETED)); Intent.ACTION_BOOT_COMPLETED)); } } } @VisibleForTesting @VisibleForTesting public void setTelephonyManagerProxy(TelephonyManagerProxy proxy) { public void setTelephonyManagerProxy(TelephonyManagerProxy proxy) { Loading Loading @@ -1331,27 +1303,10 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal // get all packages that support ImsServices. // get all packages that support ImsServices. private List<ImsServiceInfo> getImsServiceInfo(String packageName) { private List<ImsServiceInfo> getImsServiceInfo(String packageName) { List<ImsServiceInfo> infos = new ArrayList<>(); List<ImsServiceInfo> infos = new ArrayList<>(); if (!mIsDynamicBinding) { // always return the same ImsService info. infos.addAll(getStaticImsService()); } else { // Search for Current ImsService implementations // Search for Current ImsService implementations infos.addAll(searchForImsServices(packageName, mImsServiceControllerFactory)); infos.addAll(searchForImsServices(packageName, mImsServiceControllerFactory)); // Search for compat ImsService Implementations // Search for compat ImsService Implementations infos.addAll(searchForImsServices(packageName, mImsServiceControllerFactoryCompat)); infos.addAll(searchForImsServices(packageName, mImsServiceControllerFactoryCompat)); } return infos; } private List<ImsServiceInfo> getStaticImsService() { List<ImsServiceInfo> infos = new ArrayList<>(); ImsServiceInfo info = new ImsServiceInfo(mNumSlots); info.name = mStaticComponent; info.controllerFactory = mImsServiceControllerFactoryStaticBindingCompat; info.addFeatureForAllSlots(ImsFeature.FEATURE_EMERGENCY_MMTEL); info.addFeatureForAllSlots(ImsFeature.FEATURE_MMTEL); infos.add(info); return infos; return infos; } } Loading Loading @@ -1428,7 +1383,6 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal IndentingPrintWriter pw = new IndentingPrintWriter(printWriter, " "); IndentingPrintWriter pw = new IndentingPrintWriter(printWriter, " "); pw.println("ImsResolver:"); pw.println("ImsResolver:"); pw.increaseIndent(); pw.increaseIndent(); pw.println("mIsDynamicBinding = " + mIsDynamicBinding); pw.println("mDeviceService = " + mDeviceService); pw.println("mDeviceService = " + mDeviceService); pw.println("mCarrierServices: "); pw.println("mCarrierServices: "); pw.increaseIndent(); pw.increaseIndent(); Loading src/java/com/android/internal/telephony/ims/ImsServiceController.java +1 −10 Original line number Original line Diff line number Diff line Loading @@ -376,7 +376,7 @@ public class ImsServiceController { mLocalLog.log("binding " + imsFeatureSet); mLocalLog.log("binding " + imsFeatureSet); Log.i(LOG_TAG, "Binding ImsService:" + mComponentName); Log.i(LOG_TAG, "Binding ImsService:" + mComponentName); try { try { boolean bindSucceeded = startBindToService(imsServiceIntent, boolean bindSucceeded = mContext.bindService(imsServiceIntent, mImsServiceConnection, serviceFlags); mImsServiceConnection, serviceFlags); if (!bindSucceeded) { if (!bindSucceeded) { mLocalLog.log(" binding failed, retrying in " mLocalLog.log(" binding failed, retrying in " Loading @@ -400,15 +400,6 @@ public class ImsServiceController { } } } } /** * Starts the bind to the ImsService. Overridden by subclasses that need to access the service * in a different fashion. */ protected boolean startBindToService(Intent intent, ImsServiceConnection connection, int flags) { return mContext.bindService(intent, connection, flags); } /** /** * Calls {@link IImsServiceController#removeImsFeature} on all features that the * Calls {@link IImsServiceController#removeImsFeature} on all features that the * ImsService supports and then unbinds the service. * ImsService supports and then unbinds the service. Loading src/java/com/android/internal/telephony/ims/ImsServiceControllerCompat.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -171,7 +171,7 @@ public class ImsServiceControllerCompat extends ImsServiceController { return mServiceController != null; return mServiceController != null; } } protected MmTelInterfaceAdapter getInterface(int slotId, IImsFeatureStatusCallback c) private MmTelInterfaceAdapter getInterface(int slotId, IImsFeatureStatusCallback c) throws RemoteException { throws RemoteException { IImsMMTelFeature feature = mServiceController.createMMTelFeature(slotId, c); IImsMMTelFeature feature = mServiceController.createMMTelFeature(slotId, c); if (feature == null) { if (feature == null) { Loading Loading
src/java/com/android/internal/telephony/Phone.java +8 −74 Original line number Original line Diff line number Diff line Loading @@ -19,10 +19,8 @@ package com.android.internal.telephony; import android.annotation.Nullable; import android.annotation.Nullable; import android.annotation.UnsupportedAppUsage; import android.annotation.UnsupportedAppUsage; import android.app.BroadcastOptions; import android.app.BroadcastOptions; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Context; import android.content.Intent; import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; import android.content.SharedPreferences; import android.net.LinkProperties; import android.net.LinkProperties; import android.net.NetworkCapabilities; import android.net.NetworkCapabilities; Loading Loading @@ -116,33 +114,6 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { protected final int USSD_MAX_QUEUE = 10; protected final int USSD_MAX_QUEUE = 10; private BroadcastReceiver mImsIntentReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Rlog.d(LOG_TAG, "mImsIntentReceiver: action " + intent.getAction()); if (intent.hasExtra(ImsManager.EXTRA_PHONE_ID)) { int extraPhoneId = intent.getIntExtra(ImsManager.EXTRA_PHONE_ID, SubscriptionManager.INVALID_PHONE_INDEX); Rlog.d(LOG_TAG, "mImsIntentReceiver: extraPhoneId = " + extraPhoneId); if (extraPhoneId == SubscriptionManager.INVALID_PHONE_INDEX || extraPhoneId != getPhoneId()) { return; } } synchronized (Phone.lockForRadioTechnologyChange) { if (intent.getAction().equals(ImsManager.ACTION_IMS_SERVICE_UP)) { mImsServiceReady = true; updateImsPhone(); ImsManager.getInstance(mContext, mPhoneId).updateImsServiceConfig(false); } else if (intent.getAction().equals(ImsManager.ACTION_IMS_SERVICE_DOWN)) { mImsServiceReady = false; updateImsPhone(); } } } }; // Key used to read and write the saved network selection numeric value // Key used to read and write the saved network selection numeric value public static final String NETWORK_SELECTION_KEY = "network_selection_key"; public static final String NETWORK_SELECTION_KEY = "network_selection_key"; // Key used to read and write the saved network selection operator name // Key used to read and write the saved network selection operator name Loading Loading @@ -323,7 +294,6 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { @UnsupportedAppUsage @UnsupportedAppUsage protected int mPhoneId; protected int mPhoneId; private boolean mImsServiceReady = false; @UnsupportedAppUsage @UnsupportedAppUsage protected Phone mImsPhone = null; protected Phone mImsPhone = null; Loading Loading @@ -586,34 +556,20 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { } } /** /** * Start listening for IMS service UP/DOWN events. If using the new ImsResolver APIs, we should * Start setup of ImsPhone, which will start trying to connect to the ImsResolver. Will not be * always be setting up ImsPhones. * called if this device does not support FEATURE_IMS_TELEPHONY. */ */ public void startMonitoringImsService() { public void createImsPhone() { if (getPhoneType() == PhoneConstants.PHONE_TYPE_SIP) { if (getPhoneType() == PhoneConstants.PHONE_TYPE_SIP) { return; return; } } synchronized(Phone.lockForRadioTechnologyChange) { synchronized(Phone.lockForRadioTechnologyChange) { IntentFilter filter = new IntentFilter(); if (mImsPhone == null) { ImsManager imsManager = ImsManager.getInstance(mContext, getPhoneId()); mImsPhone = PhoneFactory.makeImsPhone(mNotifier, this); // Don't listen to deprecated intents using the new dynamic binding. CallManager.getInstance().registerPhone(mImsPhone); if (imsManager != null && !imsManager.isDynamicBinding()) { mImsPhone.registerForSilentRedial( filter.addAction(ImsManager.ACTION_IMS_SERVICE_UP); this, EVENT_INITIATE_SILENT_REDIAL, null); 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, // so start trying to bind. if (imsManager != null) { // If it is dynamic binding, kick off ImsPhone creation now instead of waiting for // the service to be available. if (imsManager.isDynamicBinding() || imsManager.isServiceAvailable()) { mImsServiceReady = true; updateImsPhone(); } } } } } } } Loading Loading @@ -3461,28 +3417,6 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { public void dispose() { public void dispose() { } } private void updateImsPhone() { Rlog.d(LOG_TAG, "updateImsPhone" + " mImsServiceReady=" + mImsServiceReady); if (mImsServiceReady && (mImsPhone == null)) { mImsPhone = PhoneFactory.makeImsPhone(mNotifier, this); CallManager.getInstance().registerPhone(mImsPhone); mImsPhone.registerForSilentRedial( this, EVENT_INITIATE_SILENT_REDIAL, null); } else if (!mImsServiceReady && (mImsPhone != null)) { CallManager.getInstance().unregisterPhone(mImsPhone); mImsPhone.unregisterForSilentRedial(this); mImsPhone.dispose(); // Potential GC issue if someone keeps a reference to ImsPhone. // However: this change will make sure that such a reference does // not access functions through NULL pointer. //mImsPhone.removeReferences(); mImsPhone = null; } } /** /** * Dials a number. * Dials a number. * * Loading
src/java/com/android/internal/telephony/PhoneFactory.java +3 −8 Original line number Original line Diff line number Diff line Loading @@ -211,24 +211,19 @@ public class PhoneFactory { // Only bring up IMS if the device supports having an IMS stack. // Only bring up IMS if the device supports having an IMS stack. if (context.getPackageManager().hasSystemFeature( if (context.getPackageManager().hasSystemFeature( PackageManager.FEATURE_TELEPHONY_IMS)) { 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. // Get the package name of the default IMS implementation. String defaultImsPackage = sContext.getResources().getString( String defaultImsPackage = sContext.getResources().getString( com.android.internal.R.string.config_ims_package); com.android.internal.R.string.config_ims_package); // Start ImsResolver and bind to ImsServices. // Start ImsResolver and bind to ImsServices. Rlog.i(LOG_TAG, "ImsResolver: defaultImsPackage: " + defaultImsPackage); Rlog.i(LOG_TAG, "ImsResolver: defaultImsPackage: " + defaultImsPackage); sImsResolver = new ImsResolver(sContext, defaultImsPackage, numPhones, sImsResolver = new ImsResolver(sContext, defaultImsPackage, numPhones); isDynamicBinding); sImsResolver.initialize(); sImsResolver.initialize(); // 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 // Default phone must be ready before ImsPhone is created because ImsService // might need it when it is being opened. This should initialize multiple // might need it when it is being opened. This should initialize multiple // ImsPhones for 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].createImsPhone(); } } } else { } else { Rlog.i(LOG_TAG, "IMS is not supported on this device, skipping ImsResolver."); Rlog.i(LOG_TAG, "IMS is not supported on this device, skipping ImsResolver."); Loading Loading @@ -284,7 +279,7 @@ public class PhoneFactory { sPhones[i] = createPhone(context, i); sPhones[i] = createPhone(context, i); if (context.getPackageManager().hasSystemFeature( if (context.getPackageManager().hasSystemFeature( PackageManager.FEATURE_TELEPHONY_IMS)) { PackageManager.FEATURE_TELEPHONY_IMS)) { sPhones[i].startMonitoringImsService(); sPhones[i].createImsPhone(); } } sTelephonyNetworkFactories[i] = new TelephonyNetworkFactory( sTelephonyNetworkFactories[i] = new TelephonyNetworkFactory( Looper.myLooper(), sPhones[i]); Looper.myLooper(), sPhones[i]); Loading
src/java/com/android/internal/telephony/ims/ImsResolver.java +15 −61 Original line number Original line Diff line number Diff line Loading @@ -359,21 +359,6 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal } } }; }; private ImsServiceControllerFactory mImsServiceControllerFactoryStaticBindingCompat = new ImsServiceControllerFactory() { @Override public String getServiceInterface() { // The static method of binding does not use service interfaces. return null; } @Override public ImsServiceController create(Context context, ComponentName componentName, ImsServiceController.ImsServiceControllerCallbacks callbacks) { return new ImsServiceControllerStaticCompat(context, componentName, callbacks); } }; private ImsDynamicQueryManagerFactory mDynamicQueryManagerFactory = private ImsDynamicQueryManagerFactory mDynamicQueryManagerFactory = ImsServiceFeatureQueryManager::new; ImsServiceFeatureQueryManager::new; Loading @@ -388,7 +373,6 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal // ImsServiceController callbacks. // ImsServiceController callbacks. private final Object mBoundServicesLock = new Object(); private final Object mBoundServicesLock = new Object(); private final int mNumSlots; private final int mNumSlots; private final boolean mIsDynamicBinding; // Package name of the default device service. // Package name of the default device service. private String mDeviceService; private String mDeviceService; // Persistent Logging // Persistent Logging Loading Loading @@ -512,22 +496,13 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal private Map<ComponentName, ImsServiceInfo> mInstalledServicesCache = new HashMap<>(); private Map<ComponentName, ImsServiceInfo> mInstalledServicesCache = new HashMap<>(); // not locked, only accessed on a handler thread. // not locked, only accessed on a handler thread. private Map<ComponentName, ImsServiceController> mActiveControllers = new HashMap<>(); private Map<ComponentName, ImsServiceController> mActiveControllers = new HashMap<>(); // Only used as the Component name for legacy ImsServices that did not use dynamic binding. private final ComponentName mStaticComponent; private ImsServiceFeatureQueryManager mFeatureQueryManager; private ImsServiceFeatureQueryManager mFeatureQueryManager; public ImsResolver(Context context, String defaultImsPackageName, int numSlots, public ImsResolver(Context context, String defaultImsPackageName, int numSlots) { boolean isDynamicBinding) { mContext = context; mContext = context; mReceiverContext = context.createContextAsUser(UserHandle.ALL, 0 /*flags*/); mReceiverContext = context.createContextAsUser(UserHandle.ALL, 0 /*flags*/); mDeviceService = defaultImsPackageName; mDeviceService = defaultImsPackageName; mNumSlots = numSlots; mNumSlots = numSlots; mIsDynamicBinding = isDynamicBinding; mStaticComponent = new ComponentName(mContext, ImsResolver.class); if (!mIsDynamicBinding) { Log.i(TAG, "ImsResolver initialized with static binding."); mDeviceService = mStaticComponent.getPackageName(); } mCarrierConfigManager = (CarrierConfigManager) mContext.getSystemService( mCarrierConfigManager = (CarrierConfigManager) mContext.getSystemService( Context.CARRIER_CONFIG_SERVICE); Context.CARRIER_CONFIG_SERVICE); mCarrierServices = new String[numSlots]; mCarrierServices = new String[numSlots]; Loading @@ -535,8 +510,6 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal mBoundImsServicesByFeature = Stream.generate(SparseArray<ImsServiceController>::new) mBoundImsServicesByFeature = Stream.generate(SparseArray<ImsServiceController>::new) .limit(mNumSlots).collect(Collectors.toList()); .limit(mNumSlots).collect(Collectors.toList()); // Only register for Package/CarrierConfig updates if dynamic binding. if(mIsDynamicBinding) { IntentFilter appChangedFilter = new IntentFilter(); IntentFilter appChangedFilter = new IntentFilter(); appChangedFilter.addAction(Intent.ACTION_PACKAGE_CHANGED); appChangedFilter.addAction(Intent.ACTION_PACKAGE_CHANGED); appChangedFilter.addAction(Intent.ACTION_PACKAGE_REMOVED); appChangedFilter.addAction(Intent.ACTION_PACKAGE_REMOVED); Loading @@ -548,7 +521,6 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal mReceiverContext.registerReceiver(mBootCompleted, new IntentFilter( mReceiverContext.registerReceiver(mBootCompleted, new IntentFilter( Intent.ACTION_BOOT_COMPLETED)); Intent.ACTION_BOOT_COMPLETED)); } } } @VisibleForTesting @VisibleForTesting public void setTelephonyManagerProxy(TelephonyManagerProxy proxy) { public void setTelephonyManagerProxy(TelephonyManagerProxy proxy) { Loading Loading @@ -1331,27 +1303,10 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal // get all packages that support ImsServices. // get all packages that support ImsServices. private List<ImsServiceInfo> getImsServiceInfo(String packageName) { private List<ImsServiceInfo> getImsServiceInfo(String packageName) { List<ImsServiceInfo> infos = new ArrayList<>(); List<ImsServiceInfo> infos = new ArrayList<>(); if (!mIsDynamicBinding) { // always return the same ImsService info. infos.addAll(getStaticImsService()); } else { // Search for Current ImsService implementations // Search for Current ImsService implementations infos.addAll(searchForImsServices(packageName, mImsServiceControllerFactory)); infos.addAll(searchForImsServices(packageName, mImsServiceControllerFactory)); // Search for compat ImsService Implementations // Search for compat ImsService Implementations infos.addAll(searchForImsServices(packageName, mImsServiceControllerFactoryCompat)); infos.addAll(searchForImsServices(packageName, mImsServiceControllerFactoryCompat)); } return infos; } private List<ImsServiceInfo> getStaticImsService() { List<ImsServiceInfo> infos = new ArrayList<>(); ImsServiceInfo info = new ImsServiceInfo(mNumSlots); info.name = mStaticComponent; info.controllerFactory = mImsServiceControllerFactoryStaticBindingCompat; info.addFeatureForAllSlots(ImsFeature.FEATURE_EMERGENCY_MMTEL); info.addFeatureForAllSlots(ImsFeature.FEATURE_MMTEL); infos.add(info); return infos; return infos; } } Loading Loading @@ -1428,7 +1383,6 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal IndentingPrintWriter pw = new IndentingPrintWriter(printWriter, " "); IndentingPrintWriter pw = new IndentingPrintWriter(printWriter, " "); pw.println("ImsResolver:"); pw.println("ImsResolver:"); pw.increaseIndent(); pw.increaseIndent(); pw.println("mIsDynamicBinding = " + mIsDynamicBinding); pw.println("mDeviceService = " + mDeviceService); pw.println("mDeviceService = " + mDeviceService); pw.println("mCarrierServices: "); pw.println("mCarrierServices: "); pw.increaseIndent(); pw.increaseIndent(); Loading
src/java/com/android/internal/telephony/ims/ImsServiceController.java +1 −10 Original line number Original line Diff line number Diff line Loading @@ -376,7 +376,7 @@ public class ImsServiceController { mLocalLog.log("binding " + imsFeatureSet); mLocalLog.log("binding " + imsFeatureSet); Log.i(LOG_TAG, "Binding ImsService:" + mComponentName); Log.i(LOG_TAG, "Binding ImsService:" + mComponentName); try { try { boolean bindSucceeded = startBindToService(imsServiceIntent, boolean bindSucceeded = mContext.bindService(imsServiceIntent, mImsServiceConnection, serviceFlags); mImsServiceConnection, serviceFlags); if (!bindSucceeded) { if (!bindSucceeded) { mLocalLog.log(" binding failed, retrying in " mLocalLog.log(" binding failed, retrying in " Loading @@ -400,15 +400,6 @@ public class ImsServiceController { } } } } /** * Starts the bind to the ImsService. Overridden by subclasses that need to access the service * in a different fashion. */ protected boolean startBindToService(Intent intent, ImsServiceConnection connection, int flags) { return mContext.bindService(intent, connection, flags); } /** /** * Calls {@link IImsServiceController#removeImsFeature} on all features that the * Calls {@link IImsServiceController#removeImsFeature} on all features that the * ImsService supports and then unbinds the service. * ImsService supports and then unbinds the service. Loading
src/java/com/android/internal/telephony/ims/ImsServiceControllerCompat.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -171,7 +171,7 @@ public class ImsServiceControllerCompat extends ImsServiceController { return mServiceController != null; return mServiceController != null; } } protected MmTelInterfaceAdapter getInterface(int slotId, IImsFeatureStatusCallback c) private MmTelInterfaceAdapter getInterface(int slotId, IImsFeatureStatusCallback c) throws RemoteException { throws RemoteException { IImsMMTelFeature feature = mServiceController.createMMTelFeature(slotId, c); IImsMMTelFeature feature = mServiceController.createMMTelFeature(slotId, c); if (feature == null) { if (feature == null) { Loading