diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 3d06a4e9e375f..3d258e05190dc 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -2294,6 +2294,13 @@ false + + + + + true + true diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index a1db71229348a..60390f96cea37 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -252,6 +252,8 @@ + + diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index 9a2bc0af5fdf7..663d57f2c3dac 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -16,6 +16,7 @@ package android.telephony; +import android.annotation.IntDef; import android.annotation.Nullable; import android.annotation.SystemApi; import android.annotation.SdkConstant; @@ -39,8 +40,11 @@ import android.service.carrier.CarrierIdentifier; import android.telecom.PhoneAccount; import android.telecom.PhoneAccountHandle; import android.telephony.TelephonyHistogram; +import android.telephony.ims.feature.ImsFeature; import android.util.Log; +import com.android.ims.internal.IImsServiceController; +import com.android.ims.internal.IImsServiceFeatureListener; import com.android.internal.telecom.ITelecomService; import com.android.internal.telephony.CellNetworkScanResult; import com.android.internal.telephony.IPhoneSubInfo; @@ -53,6 +57,8 @@ import com.android.internal.telephony.TelephonyProperties; import java.io.FileInputStream; import java.io.IOException; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -4042,6 +4048,37 @@ public class TelephonyManager { } } + /** @hide */ + @IntDef({ImsFeature.EMERGENCY_MMTEL, ImsFeature.MMTEL, ImsFeature.RCS}) + @Retention(RetentionPolicy.SOURCE) + public @interface Feature {} + + /** + * Returns the {@link IImsServiceController} that corresponds to the given slot Id and IMS + * feature or {@link null} if the service is not available. If an ImsServiceController is + * available, the {@link IImsServiceFeatureListener} callback is registered as a listener for + * feature updates. + * @param slotId The SIM slot that we are requesting the {@link IImsServiceController} for. + * @param feature The IMS Feature we are requesting, corresponding to {@link ImsFeature}. + * @param callback Listener that will send updates to ImsManager when there are updates to + * ImsServiceController. + * @return {@link IImsServiceController} interface for the feature specified or {@link null} if + * it is unavailable. + * @hide + */ + public IImsServiceController getImsServiceControllerAndListen(int slotId, @Feature int feature, + IImsServiceFeatureListener callback) { + try { + ITelephony telephony = getITelephony(); + if (telephony != null) { + return telephony.getImsServiceControllerAndListen(slotId, feature, callback); + } + } catch (RemoteException e) { + Rlog.e(TAG, "getImsServiceControllerAndListen, RemoteException: " + e.getMessage()); + } + return null; + } + /** * Set IMS registration state * diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl index a8eaf3627013c..d406cb07fc459 100644 --- a/telephony/java/com/android/internal/telephony/ITelephony.aidl +++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl @@ -31,6 +31,8 @@ import android.telephony.RadioAccessFamily; import android.telephony.ServiceState; import android.telephony.TelephonyHistogram; import android.telephony.VisualVoicemailSmsFilterSettings; +import com.android.ims.internal.IImsServiceController; +import com.android.ims.internal.IImsServiceFeatureListener; import com.android.internal.telephony.CellNetworkScanResult; import com.android.internal.telephony.OperatorInfo; @@ -714,6 +716,14 @@ interface ITelephony { */ int getTetherApnRequired(); + /** + * Get ImsServiceController binder from ImsResolver that corresponds to the subId and feature + * requested as well as registering the ImsServiceController for callbacks using the + * IImsServiceFeatureListener interface. + */ + IImsServiceController getImsServiceControllerAndListen(int slotId, int feature, + IImsServiceFeatureListener callback); + /** * Set the network selection mode to automatic. *