Merge changes from topics "imsservice subid notifications", "provisioning improvement", "provisioning_improvement_2"
* changes: Fix CTS failure caused by ag/16284012 Add Provisioning bundle for indicating if MMTEL/RCS provisioning is required Add public API to ProvisioningManager for IMS/RCS provisioning by updatable provisioning app ImsService Subscription Notifications
This commit is contained in:
commit
ff46fea55c
@ -39771,11 +39771,11 @@ package android.telephony {
|
||||
field public static final String KEY_CARRIER_SUPPORTS_TETHERING_BOOL = "carrier_supports_tethering_bool";
|
||||
field public static final String KEY_CARRIER_USE_IMS_FIRST_FOR_EMERGENCY_BOOL = "carrier_use_ims_first_for_emergency_bool";
|
||||
field public static final String KEY_CARRIER_USSD_METHOD_INT = "carrier_ussd_method_int";
|
||||
field public static final String KEY_CARRIER_UT_PROVISIONING_REQUIRED_BOOL = "carrier_ut_provisioning_required_bool";
|
||||
field @Deprecated public static final String KEY_CARRIER_UT_PROVISIONING_REQUIRED_BOOL = "carrier_ut_provisioning_required_bool";
|
||||
field public static final String KEY_CARRIER_VOLTE_AVAILABLE_BOOL = "carrier_volte_available_bool";
|
||||
field public static final String KEY_CARRIER_VOLTE_OVERRIDE_WFC_PROVISIONING_BOOL = "carrier_volte_override_wfc_provisioning_bool";
|
||||
field public static final String KEY_CARRIER_VOLTE_PROVISIONED_BOOL = "carrier_volte_provisioned_bool";
|
||||
field public static final String KEY_CARRIER_VOLTE_PROVISIONING_REQUIRED_BOOL = "carrier_volte_provisioning_required_bool";
|
||||
field @Deprecated public static final String KEY_CARRIER_VOLTE_PROVISIONED_BOOL = "carrier_volte_provisioned_bool";
|
||||
field @Deprecated public static final String KEY_CARRIER_VOLTE_PROVISIONING_REQUIRED_BOOL = "carrier_volte_provisioning_required_bool";
|
||||
field public static final String KEY_CARRIER_VOLTE_TTY_SUPPORTED_BOOL = "carrier_volte_tty_supported_bool";
|
||||
field public static final String KEY_CARRIER_VT_AVAILABLE_BOOL = "carrier_vt_available_bool";
|
||||
field @Deprecated public static final String KEY_CARRIER_VVM_PACKAGE_NAME_STRING = "carrier_vvm_package_name_string";
|
||||
@ -40004,14 +40004,23 @@ package android.telephony {
|
||||
}
|
||||
|
||||
public static final class CarrierConfigManager.Ims {
|
||||
field public static final String KEY_CAPABILITY_CALL_COMPOSER_INT_ARRAY = "ims.key_capability_type_call_composer_int_array";
|
||||
field public static final String KEY_CAPABILITY_TYPE_OPTIONS_UCE_INT_ARRAY = "ims.key_capability_type_options_uce_int_array";
|
||||
field public static final String KEY_CAPABILITY_TYPE_PRESENCE_UCE_INT_ARRAY = "ims.key_capability_type_presence_uce_int_array";
|
||||
field public static final String KEY_CAPABILITY_TYPE_SMS_INT_ARRAY = "ims.key_capability_type_sms_int_array";
|
||||
field public static final String KEY_CAPABILITY_TYPE_UT_INT_ARRAY = "ims.key_capability_type_ut_int_array";
|
||||
field public static final String KEY_CAPABILITY_TYPE_VIDEO_INT_ARRAY = "ims.key_capability_type_video_int_array";
|
||||
field public static final String KEY_CAPABILITY_TYPE_VOICE_INT_ARRAY = "ims.key_capability_type_voice_int_array";
|
||||
field public static final String KEY_ENABLE_PRESENCE_CAPABILITY_EXCHANGE_BOOL = "ims.enable_presence_capability_exchange_bool";
|
||||
field public static final String KEY_ENABLE_PRESENCE_GROUP_SUBSCRIBE_BOOL = "ims.enable_presence_group_subscribe_bool";
|
||||
field public static final String KEY_ENABLE_PRESENCE_PUBLISH_BOOL = "ims.enable_presence_publish_bool";
|
||||
field public static final String KEY_IMS_SINGLE_REGISTRATION_REQUIRED_BOOL = "ims.ims_single_registration_required_bool";
|
||||
field public static final String KEY_MMTEL_REQUIRES_PROVISIONING_BUNDLE = "ims.mmtel_requires_provisioning_bundle";
|
||||
field public static final String KEY_NON_RCS_CAPABILITIES_CACHE_EXPIRATION_SEC_INT = "ims.non_rcs_capabilities_cache_expiration_sec_int";
|
||||
field public static final String KEY_PREFIX = "ims.";
|
||||
field public static final String KEY_RCS_BULK_CAPABILITY_EXCHANGE_BOOL = "ims.rcs_bulk_capability_exchange_bool";
|
||||
field public static final String KEY_RCS_FEATURE_TAG_ALLOWED_STRING_ARRAY = "ims.rcs_feature_tag_allowed_string_array";
|
||||
field public static final String KEY_RCS_REQUIRES_PROVISIONING_BUNDLE = "ims.rcs_requires_provisioning_bundle";
|
||||
field public static final String KEY_WIFI_OFF_DEFERRING_TIME_MILLIS_INT = "ims.wifi_off_deferring_time_millis_int";
|
||||
}
|
||||
|
||||
@ -42451,6 +42460,7 @@ package android.telephony.ims {
|
||||
public class ImsManager {
|
||||
method @NonNull public android.telephony.ims.ImsMmTelManager getImsMmTelManager(int);
|
||||
method @NonNull public android.telephony.ims.ImsRcsManager getImsRcsManager(int);
|
||||
method @NonNull public android.telephony.ims.ProvisioningManager getProvisioningManager(int);
|
||||
field public static final String ACTION_WFC_IMS_REGISTRATION_ERROR = "android.telephony.ims.action.WFC_IMS_REGISTRATION_ERROR";
|
||||
field public static final String EXTRA_WFC_REGISTRATION_FAILURE_MESSAGE = "android.telephony.ims.extra.WFC_REGISTRATION_FAILURE_MESSAGE";
|
||||
field public static final String EXTRA_WFC_REGISTRATION_FAILURE_TITLE = "android.telephony.ims.extra.WFC_REGISTRATION_FAILURE_TITLE";
|
||||
@ -42701,6 +42711,23 @@ package android.telephony.ims {
|
||||
field public static final int REASON_UNKNOWN_TEMPORARY_ERROR = 1; // 0x1
|
||||
}
|
||||
|
||||
public class ProvisioningManager {
|
||||
method @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) @WorkerThread public boolean getProvisioningStatusForCapability(int, int);
|
||||
method @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) @WorkerThread public boolean getRcsProvisioningStatusForCapability(int, int);
|
||||
method @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public boolean isProvisioningRequiredForCapability(int, int);
|
||||
method @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public boolean isRcsProvisioningRequiredForCapability(int, int);
|
||||
method @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void registerFeatureProvisioningChangedCallback(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.ProvisioningManager.FeatureProvisioningCallback) throws android.telephony.ims.ImsException;
|
||||
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @WorkerThread public void setProvisioningStatusForCapability(int, int, boolean);
|
||||
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @WorkerThread public void setRcsProvisioningStatusForCapability(int, int, boolean);
|
||||
method public void unregisterFeatureProvisioningChangedCallback(@NonNull android.telephony.ims.ProvisioningManager.FeatureProvisioningCallback);
|
||||
}
|
||||
|
||||
public static class ProvisioningManager.FeatureProvisioningCallback {
|
||||
ctor public ProvisioningManager.FeatureProvisioningCallback();
|
||||
method public void onFeatureProvisioningChanged(int, int, boolean);
|
||||
method public void onRcsFeatureProvisioningChanged(int, int, boolean);
|
||||
}
|
||||
|
||||
public class RcsUceAdapter {
|
||||
method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public boolean isUceSettingEnabled() throws android.telephony.ims.ImsException;
|
||||
}
|
||||
@ -42741,6 +42768,27 @@ package android.telephony.ims.feature {
|
||||
field public static final int CAPABILITY_TYPE_VOICE = 1; // 0x1
|
||||
}
|
||||
|
||||
public class RcsFeature {
|
||||
}
|
||||
|
||||
public static class RcsFeature.RcsImsCapabilities {
|
||||
field public static final int CAPABILITY_TYPE_NONE = 0; // 0x0
|
||||
field public static final int CAPABILITY_TYPE_OPTIONS_UCE = 1; // 0x1
|
||||
field public static final int CAPABILITY_TYPE_PRESENCE_UCE = 2; // 0x2
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
package android.telephony.ims.stub {
|
||||
|
||||
public class ImsRegistrationImplBase {
|
||||
field public static final int REGISTRATION_TECH_CROSS_SIM = 2; // 0x2
|
||||
field public static final int REGISTRATION_TECH_IWLAN = 1; // 0x1
|
||||
field public static final int REGISTRATION_TECH_LTE = 0; // 0x0
|
||||
field public static final int REGISTRATION_TECH_NONE = -1; // 0xffffffff
|
||||
field public static final int REGISTRATION_TECH_NR = 3; // 0x3
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
package android.telephony.mbms {
|
||||
|
@ -12896,14 +12896,21 @@ package android.telephony.ims {
|
||||
|
||||
public class ImsService extends android.app.Service {
|
||||
ctor public ImsService();
|
||||
method public android.telephony.ims.feature.MmTelFeature createMmTelFeature(int);
|
||||
method public android.telephony.ims.feature.RcsFeature createRcsFeature(int);
|
||||
method public void disableIms(int);
|
||||
method public void enableIms(int);
|
||||
method public android.telephony.ims.stub.ImsConfigImplBase getConfig(int);
|
||||
method @Nullable public android.telephony.ims.feature.MmTelFeature createEmergencyOnlyMmTelFeature(int);
|
||||
method @Deprecated public android.telephony.ims.feature.MmTelFeature createMmTelFeature(int);
|
||||
method @Nullable public android.telephony.ims.feature.MmTelFeature createMmTelFeatureForSubscription(int, int);
|
||||
method @Deprecated public android.telephony.ims.feature.RcsFeature createRcsFeature(int);
|
||||
method @Nullable public android.telephony.ims.feature.RcsFeature createRcsFeatureForSubscription(int, int);
|
||||
method @Deprecated public void disableIms(int);
|
||||
method public void disableImsForSubscription(int, int);
|
||||
method @Deprecated public void enableIms(int);
|
||||
method public void enableImsForSubscription(int, int);
|
||||
method @Deprecated public android.telephony.ims.stub.ImsConfigImplBase getConfig(int);
|
||||
method @NonNull public android.telephony.ims.stub.ImsConfigImplBase getConfigForSubscription(int, int);
|
||||
method @NonNull public java.util.concurrent.Executor getExecutor();
|
||||
method public long getImsServiceCapabilities();
|
||||
method public android.telephony.ims.stub.ImsRegistrationImplBase getRegistration(int);
|
||||
method @Deprecated public android.telephony.ims.stub.ImsRegistrationImplBase getRegistration(int);
|
||||
method @NonNull public android.telephony.ims.stub.ImsRegistrationImplBase getRegistrationForSubscription(int, int);
|
||||
method @Nullable public android.telephony.ims.stub.SipTransportImplBase getSipTransport(int);
|
||||
method public final void onUpdateSupportedImsFeatures(android.telephony.ims.stub.ImsFeatureConfiguration) throws android.os.RemoteException;
|
||||
method public android.telephony.ims.stub.ImsFeatureConfiguration querySupportedImsFeatures();
|
||||
@ -13127,18 +13134,16 @@ package android.telephony.ims {
|
||||
public class ProvisioningManager {
|
||||
method @NonNull public static android.telephony.ims.ProvisioningManager createForSubscriptionId(int);
|
||||
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @WorkerThread public int getProvisioningIntValue(int);
|
||||
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @WorkerThread public boolean getProvisioningStatusForCapability(int, int);
|
||||
method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @WorkerThread public String getProvisioningStringValue(int);
|
||||
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @WorkerThread public boolean getRcsProvisioningStatusForCapability(int);
|
||||
method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @WorkerThread public boolean getRcsProvisioningStatusForCapability(int);
|
||||
method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.PERFORM_IMS_SINGLE_REGISTRATION}) public boolean isRcsVolteSingleRegistrationCapable() throws android.telephony.ims.ImsException;
|
||||
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void notifyRcsAutoConfigurationReceived(@NonNull byte[], boolean);
|
||||
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void registerProvisioningChangedCallback(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.ProvisioningManager.Callback) throws android.telephony.ims.ImsException;
|
||||
method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.PERFORM_IMS_SINGLE_REGISTRATION}) public void registerRcsProvisioningCallback(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.ProvisioningManager.RcsProvisioningCallback) throws android.telephony.ims.ImsException;
|
||||
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @WorkerThread public int setProvisioningIntValue(int, int);
|
||||
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @WorkerThread public void setProvisioningStatusForCapability(int, int, boolean);
|
||||
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @WorkerThread public int setProvisioningStringValue(int, @NonNull String);
|
||||
method @RequiresPermission(android.Manifest.permission.PERFORM_IMS_SINGLE_REGISTRATION) public void setRcsClientConfiguration(@NonNull android.telephony.ims.RcsClientConfiguration) throws android.telephony.ims.ImsException;
|
||||
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @WorkerThread public void setRcsProvisioningStatusForCapability(int, boolean);
|
||||
method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @WorkerThread public void setRcsProvisioningStatusForCapability(int, boolean);
|
||||
method @RequiresPermission(android.Manifest.permission.PERFORM_IMS_SINGLE_REGISTRATION) public void triggerRcsReconfiguration();
|
||||
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void unregisterProvisioningChangedCallback(@NonNull android.telephony.ims.ProvisioningManager.Callback);
|
||||
method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.PERFORM_IMS_SINGLE_REGISTRATION}) public void unregisterRcsProvisioningCallback(@NonNull android.telephony.ims.ProvisioningManager.RcsProvisioningCallback);
|
||||
@ -13573,9 +13578,6 @@ package android.telephony.ims.feature {
|
||||
method public void addCapabilities(int);
|
||||
method public boolean isCapable(int);
|
||||
method public void removeCapabilities(int);
|
||||
field public static final int CAPABILITY_TYPE_NONE = 0; // 0x0
|
||||
field public static final int CAPABILITY_TYPE_OPTIONS_UCE = 1; // 0x1
|
||||
field public static final int CAPABILITY_TYPE_PRESENCE_UCE = 2; // 0x2
|
||||
}
|
||||
|
||||
}
|
||||
@ -13725,11 +13727,6 @@ package android.telephony.ims.stub {
|
||||
method public void triggerFullNetworkRegistration(@IntRange(from=100, to=699) int, @Nullable String);
|
||||
method public void triggerSipDelegateDeregistration();
|
||||
method public void updateSipDelegateRegistration();
|
||||
field public static final int REGISTRATION_TECH_CROSS_SIM = 2; // 0x2
|
||||
field public static final int REGISTRATION_TECH_IWLAN = 1; // 0x1
|
||||
field public static final int REGISTRATION_TECH_LTE = 0; // 0x0
|
||||
field public static final int REGISTRATION_TECH_NONE = -1; // 0xffffffff
|
||||
field public static final int REGISTRATION_TECH_NR = 3; // 0x3
|
||||
}
|
||||
|
||||
public class ImsSmsImplBase {
|
||||
|
@ -168,7 +168,10 @@ public class CarrierConfigManager {
|
||||
/**
|
||||
* This flag specifies whether VoLTE availability is based on provisioning. By default this is
|
||||
* false.
|
||||
* Used for UCE to determine if EAB provisioning checks should be based on provisioning.
|
||||
* @deprecated Use {@link Ims#KEY_MMTEL_REQUIRES_PROVISIONING_BUNDLE} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
public static final String
|
||||
KEY_CARRIER_VOLTE_PROVISIONED_BOOL = "carrier_volte_provisioned_bool";
|
||||
|
||||
@ -864,7 +867,12 @@ public class CarrierConfigManager {
|
||||
/**
|
||||
* Flag specifying whether provisioning is required for VoLTE, Video Telephony, and WiFi
|
||||
* Calling.
|
||||
|
||||
* Combines VoLTE, VT, VoWiFI calling provisioning into one parameter.
|
||||
* @deprecated Use {@link Ims#KEY_MMTEL_REQUIRES_PROVISIONING_BUNDLE} instead for
|
||||
* finer-grained control.
|
||||
*/
|
||||
@Deprecated
|
||||
public static final String KEY_CARRIER_VOLTE_PROVISIONING_REQUIRED_BOOL
|
||||
= "carrier_volte_provisioning_required_bool";
|
||||
|
||||
@ -878,7 +886,11 @@ public class CarrierConfigManager {
|
||||
* and enable the UT over IMS capability for the subscription when the subscription is loaded.
|
||||
*
|
||||
* The default value for this key is {@code false}.
|
||||
*
|
||||
* @deprecated Use {@link Ims#KEY_MMTEL_REQUIRES_PROVISIONING_BUNDLE} instead for
|
||||
* determining if UT requires provisioning.
|
||||
*/
|
||||
@Deprecated
|
||||
public static final String KEY_CARRIER_UT_PROVISIONING_REQUIRED_BOOL =
|
||||
"carrier_ut_provisioning_required_bool";
|
||||
|
||||
@ -4637,6 +4649,95 @@ public class CarrierConfigManager {
|
||||
public static final String KEY_RCS_REQUEST_RETRY_INTERVAL_MILLIS_LONG =
|
||||
KEY_PREFIX + "rcs_request_retry_interval_millis_long";
|
||||
|
||||
/**
|
||||
* A bundle which specifies the MMTEL capability and registration technology
|
||||
* that requires provisioning. If a tuple is not present, the
|
||||
* framework will not require that the tuple requires provisioning before
|
||||
* enabling the capability.
|
||||
* <p> Possible keys in this bundle are
|
||||
* <ul>
|
||||
* <li>{@link #KEY_CAPABILITY_TYPE_VOICE_INT_ARRAY}</li>
|
||||
* <li>{@link #KEY_CAPABILITY_TYPE_VIDEO_INT_ARRAY}</li>
|
||||
* <li>{@link #KEY_CAPABILITY_TYPE_UT_INT_ARRAY}</li>
|
||||
* <li>{@link #KEY_CAPABILITY_TYPE_SMS_INT_ARRAY}</li>
|
||||
* <li>{@link #KEY_CAPABILITY_CALL_COMPOSER_INT_ARRAY}</li>
|
||||
* </ul>
|
||||
* <p> The values are defined in
|
||||
* {@link android.telephony.ims.stub.ImsRegistrationImplBase.ImsRegistrationTech}
|
||||
*/
|
||||
public static final String KEY_MMTEL_REQUIRES_PROVISIONING_BUNDLE =
|
||||
KEY_PREFIX + "mmtel_requires_provisioning_bundle";
|
||||
|
||||
/**
|
||||
* This MmTelFeature supports Voice calling (IR.92)
|
||||
* @see MmTelFeature.MmTelCapabilities#CAPABILITY_TYPE_VOICE
|
||||
*/
|
||||
public static final String KEY_CAPABILITY_TYPE_VOICE_INT_ARRAY =
|
||||
KEY_PREFIX + "key_capability_type_voice_int_array";
|
||||
|
||||
/**
|
||||
* This MmTelFeature supports Video (IR.94)
|
||||
* @see MmTelFeature.MmTelCapabilities#CAPABILITY_TYPE_VIDEO
|
||||
*/
|
||||
public static final String KEY_CAPABILITY_TYPE_VIDEO_INT_ARRAY =
|
||||
KEY_PREFIX + "key_capability_type_video_int_array";
|
||||
|
||||
/**
|
||||
* This MmTelFeature supports XCAP over Ut for supplementary services. (IR.92)
|
||||
* @see MmTelFeature.MmTelCapabilities#CAPABILITY_TYPE_UT
|
||||
*/
|
||||
public static final String KEY_CAPABILITY_TYPE_UT_INT_ARRAY =
|
||||
KEY_PREFIX + "key_capability_type_ut_int_array";
|
||||
|
||||
/**
|
||||
* This MmTelFeature supports SMS (IR.92)
|
||||
* @see MmTelFeature.MmTelCapabilities#CAPABILITY_TYPE_SMS
|
||||
*/
|
||||
public static final String KEY_CAPABILITY_TYPE_SMS_INT_ARRAY =
|
||||
KEY_PREFIX + "key_capability_type_sms_int_array";
|
||||
|
||||
/**
|
||||
* This MmTelFeature supports Call Composer (section 2.4 of RCC.20)
|
||||
* @see MmTelFeature.MmTelCapabilities#CAPABILITY_TYPE_CALL_COMPOSER
|
||||
*/
|
||||
public static final String KEY_CAPABILITY_CALL_COMPOSER_INT_ARRAY =
|
||||
KEY_PREFIX + "key_capability_type_call_composer_int_array";
|
||||
|
||||
/**
|
||||
* A bundle which specifies the RCS capability and registration technology
|
||||
* that requires provisioning. If a tuple is not present, the
|
||||
* framework will not require that the tuple requires provisioning before
|
||||
* enabling the capability.
|
||||
* <p> Possible keys in this bundle are
|
||||
* <ul>
|
||||
* <li>{@link #KEY_CAPABILITY_TYPE_OPTIONS_UCE_INT_ARRAY}</li>
|
||||
* <li>{@link #KEY_CAPABILITY_TYPE_PRESENCE_UCE_INT_ARRAY}</li>
|
||||
* </ul>
|
||||
* <p> The values are defined in
|
||||
* {@link android.telephony.ims.stub.ImsRegistrationImplBase.ImsRegistrationTech}
|
||||
*/
|
||||
public static final String KEY_RCS_REQUIRES_PROVISIONING_BUNDLE =
|
||||
KEY_PREFIX + "rcs_requires_provisioning_bundle";
|
||||
|
||||
/**
|
||||
* This carrier supports User Capability Exchange using SIP OPTIONS as defined by the
|
||||
* framework. If set, the RcsFeature should support capability exchange using SIP OPTIONS.
|
||||
* If not set, this RcsFeature should not service capability requests.
|
||||
* @see RcsFeature.RcsImsCapabilities#CAPABILITY_TYPE_OPTIONS_UCE
|
||||
*/
|
||||
public static final String KEY_CAPABILITY_TYPE_OPTIONS_UCE_INT_ARRAY =
|
||||
KEY_PREFIX + "key_capability_type_options_uce_int_array";
|
||||
|
||||
/**
|
||||
* This carrier supports User Capability Exchange using a presence server as defined by the
|
||||
* framework. If set, the RcsFeature should support capability exchange using a presence
|
||||
* server. If not set, this RcsFeature should not publish capabilities or service capability
|
||||
* requests using presence.
|
||||
* @see RcsFeature.RcsImsCapabilities#CAPABILITY_TYPE_PRESENCE_UCE
|
||||
*/
|
||||
public static final String KEY_CAPABILITY_TYPE_PRESENCE_UCE_INT_ARRAY =
|
||||
KEY_PREFIX + "key_capability_type_presence_uce_int_array";
|
||||
|
||||
private Ims() {}
|
||||
|
||||
private static PersistableBundle getDefaults() {
|
||||
@ -4673,6 +4774,20 @@ public class CarrierConfigManager {
|
||||
"+g.gsma.rcs.botversion=\"#=1,#=2\"",
|
||||
"+g.gsma.rcs.cpimext"});
|
||||
|
||||
/**
|
||||
* @see #KEY_MMTEL_REQUIRES_PROVISIONING_BUNDLE
|
||||
*/
|
||||
PersistableBundle mmtel_requires_provisioning_int_array = new PersistableBundle();
|
||||
defaults.putPersistableBundle(
|
||||
KEY_MMTEL_REQUIRES_PROVISIONING_BUNDLE, mmtel_requires_provisioning_int_array);
|
||||
|
||||
/**
|
||||
* @see #KEY_RCS_REQUIRES_PROVISIONING_BUNDLE
|
||||
*/
|
||||
PersistableBundle rcs_requires_provisioning_int_array = new PersistableBundle();
|
||||
defaults.putPersistableBundle(
|
||||
KEY_RCS_REQUIRES_PROVISIONING_BUNDLE, rcs_requires_provisioning_int_array);
|
||||
|
||||
return defaults;
|
||||
}
|
||||
}
|
||||
|
@ -160,6 +160,26 @@ public class ImsManager {
|
||||
return new SipDelegateManager(mContext, subscriptionId, sRcsCache, sTelephonyCache);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Create an instance of {@link ProvisioningManager} for the subscription id specified.
|
||||
* <p>
|
||||
* Provides a ProvisioningManager instance to carrier apps to update carrier provisioning
|
||||
* information, as well as provides a callback so that apps can listen for changes
|
||||
* in MMTEL/RCS provisioning
|
||||
* @param subscriptionId The ID of the subscription that this ProvisioningManager will use.
|
||||
* @throws IllegalArgumentException if the subscription is invalid.
|
||||
* @return a ProvisioningManager instance with the specific subscription ID.
|
||||
*/
|
||||
@NonNull
|
||||
public ProvisioningManager getProvisioningManager(int subscriptionId) {
|
||||
if (!SubscriptionManager.isValidSubscriptionId(subscriptionId)) {
|
||||
throw new IllegalArgumentException("Invalid subscription ID: " + subscriptionId);
|
||||
}
|
||||
|
||||
return new ProvisioningManager(subscriptionId);
|
||||
}
|
||||
|
||||
private static IImsRcsController getIImsRcsControllerInterface() {
|
||||
return IImsRcsController.Stub.asInterface(
|
||||
TelephonyFrameworkInitializer
|
||||
|
@ -42,6 +42,7 @@ import android.telephony.ims.stub.ImsRegistrationImplBase;
|
||||
import android.telephony.ims.stub.SipTransportImplBase;
|
||||
import android.util.Log;
|
||||
import android.util.SparseArray;
|
||||
import android.util.SparseBooleanArray;
|
||||
|
||||
import com.android.ims.internal.IImsFeatureStatusCallback;
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
@ -180,6 +181,12 @@ public class ImsService extends Service {
|
||||
// call ImsFeature#onFeatureRemoved.
|
||||
private final SparseArray<SparseArray<ImsFeature>> mFeaturesBySlot = new SparseArray<>();
|
||||
|
||||
// A map of slot id -> boolean array, where each entry in the boolean array corresponds to an
|
||||
// ImsFeature that was created for a slot id and not a sub id for backwards compatibility
|
||||
// purposes.
|
||||
private final SparseArray<SparseBooleanArray> mCreateImsFeatureWithSlotIdFlagMap =
|
||||
new SparseArray<>();
|
||||
|
||||
private IImsServiceControllerListener mListener;
|
||||
private Executor mExecutor;
|
||||
|
||||
@ -222,15 +229,36 @@ public class ImsService extends Service {
|
||||
}
|
||||
|
||||
@Override
|
||||
public IImsMmTelFeature createMmTelFeature(int slotId) {
|
||||
return executeMethodAsyncForResult(() -> createMmTelFeatureInternal(slotId),
|
||||
"createMmTelFeature");
|
||||
public IImsMmTelFeature createMmTelFeature(int slotId, int subId) {
|
||||
MmTelFeature f = (MmTelFeature) getImsFeature(slotId, ImsFeature.FEATURE_MMTEL);
|
||||
if (f == null) {
|
||||
return executeMethodAsyncForResult(() -> createMmTelFeatureInternal(slotId, subId),
|
||||
"createMmTelFeature");
|
||||
} else {
|
||||
return f.getBinder();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public IImsRcsFeature createRcsFeature(int slotId) {
|
||||
return executeMethodAsyncForResult(() -> createRcsFeatureInternal(slotId),
|
||||
"createRcsFeature");
|
||||
public IImsMmTelFeature createEmergencyOnlyMmTelFeature(int slotId) {
|
||||
MmTelFeature f = (MmTelFeature) getImsFeature(slotId, ImsFeature.FEATURE_MMTEL);
|
||||
if (f == null) {
|
||||
return executeMethodAsyncForResult(() -> createEmergencyOnlyMmTelFeatureInternal(
|
||||
slotId), "createEmergencyOnlyMmTelFeature");
|
||||
} else {
|
||||
return f.getBinder();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public IImsRcsFeature createRcsFeature(int slotId, int subId) {
|
||||
RcsFeature f = (RcsFeature) getImsFeature(slotId, ImsFeature.FEATURE_RCS);
|
||||
if (f == null) {
|
||||
return executeMethodAsyncForResult(() ->
|
||||
createRcsFeatureInternal(slotId, subId), "createRcsFeature");
|
||||
} else {
|
||||
return f.getBinder();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -248,9 +276,14 @@ public class ImsService extends Service {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeImsFeature(int slotId, int featureType) {
|
||||
public void removeImsFeature(int slotId, int featureType, boolean changeSubId) {
|
||||
if (changeSubId && isImsFeatureCreatedForSlot(slotId, featureType)) {
|
||||
Log.w(LOG_TAG, "Do not remove Ims feature for compatibility");
|
||||
return;
|
||||
}
|
||||
executeMethodAsync(() -> ImsService.this.removeImsFeature(slotId, featureType),
|
||||
"removeImsFeature");
|
||||
setImsFeatureCreatedForSlot(slotId, featureType, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -279,9 +312,10 @@ public class ImsService extends Service {
|
||||
}
|
||||
|
||||
@Override
|
||||
public IImsConfig getConfig(int slotId) {
|
||||
public IImsConfig getConfig(int slotId, int subId) {
|
||||
return executeMethodAsyncForResult(() -> {
|
||||
ImsConfigImplBase c = ImsService.this.getConfig(slotId);
|
||||
ImsConfigImplBase c =
|
||||
ImsService.this.getConfigForSubscription(slotId, subId);
|
||||
if (c != null) {
|
||||
c.setDefaultExecutor(mExecutor);
|
||||
return c.getIImsConfig();
|
||||
@ -292,9 +326,10 @@ public class ImsService extends Service {
|
||||
}
|
||||
|
||||
@Override
|
||||
public IImsRegistration getRegistration(int slotId) {
|
||||
public IImsRegistration getRegistration(int slotId, int subId) {
|
||||
return executeMethodAsyncForResult(() -> {
|
||||
ImsRegistrationImplBase r = ImsService.this.getRegistration(slotId);
|
||||
ImsRegistrationImplBase r =
|
||||
ImsService.this.getRegistrationForSubscription(slotId, subId);
|
||||
if (r != null) {
|
||||
r.setDefaultExecutor(mExecutor);
|
||||
return r.getBinder();
|
||||
@ -318,13 +353,15 @@ public class ImsService extends Service {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enableIms(int slotId) {
|
||||
executeMethodAsync(() -> ImsService.this.enableIms(slotId), "enableIms");
|
||||
public void enableIms(int slotId, int subId) {
|
||||
executeMethodAsync(() ->
|
||||
ImsService.this.enableImsForSubscription(slotId, subId), "enableIms");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disableIms(int slotId) {
|
||||
executeMethodAsync(() -> ImsService.this.disableIms(slotId), "disableIms");
|
||||
public void disableIms(int slotId, int subId) {
|
||||
executeMethodAsync(() ->
|
||||
ImsService.this.disableImsForSubscription(slotId, subId), "disableIms");
|
||||
}
|
||||
|
||||
// Call the methods with a clean calling identity on the executor and wait indefinitely for
|
||||
@ -364,16 +401,8 @@ public class ImsService extends Service {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
@VisibleForTesting
|
||||
public SparseArray<ImsFeature> getFeatures(int slotId) {
|
||||
return mFeaturesBySlot.get(slotId);
|
||||
}
|
||||
|
||||
private IImsMmTelFeature createMmTelFeatureInternal(int slotId) {
|
||||
MmTelFeature f = createMmTelFeature(slotId);
|
||||
private IImsMmTelFeature createMmTelFeatureInternal(int slotId, int subscriptionId) {
|
||||
MmTelFeature f = createMmTelFeatureForSubscription(slotId, subscriptionId);
|
||||
if (f != null) {
|
||||
setupFeature(f, slotId, ImsFeature.FEATURE_MMTEL);
|
||||
f.setDefaultExecutor(mExecutor);
|
||||
@ -384,8 +413,20 @@ public class ImsService extends Service {
|
||||
}
|
||||
}
|
||||
|
||||
private IImsRcsFeature createRcsFeatureInternal(int slotId) {
|
||||
RcsFeature f = createRcsFeature(slotId);
|
||||
private IImsMmTelFeature createEmergencyOnlyMmTelFeatureInternal(int slotId) {
|
||||
MmTelFeature f = createEmergencyOnlyMmTelFeature(slotId);
|
||||
if (f != null) {
|
||||
setupFeature(f, slotId, ImsFeature.FEATURE_MMTEL);
|
||||
f.setDefaultExecutor(mExecutor);
|
||||
return f.getBinder();
|
||||
} else {
|
||||
Log.e(LOG_TAG, "createEmergencyOnlyMmTelFeatureInternal: null feature returned.");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private IImsRcsFeature createRcsFeatureInternal(int slotId, int subI) {
|
||||
RcsFeature f = createRcsFeatureForSubscription(slotId, subI);
|
||||
if (f != null) {
|
||||
f.setDefaultExecutor(mExecutor);
|
||||
setupFeature(f, slotId, ImsFeature.FEATURE_RCS);
|
||||
@ -466,6 +507,49 @@ public class ImsService extends Service {
|
||||
f.onFeatureRemoved();
|
||||
features.remove(featureType);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
@VisibleForTesting
|
||||
public ImsFeature getImsFeature(int slotId, int featureType) {
|
||||
synchronized (mFeaturesBySlot) {
|
||||
// Get SparseArray for Features, by querying slot Id
|
||||
SparseArray<ImsFeature> features = mFeaturesBySlot.get(slotId);
|
||||
if (features == null) {
|
||||
return null;
|
||||
}
|
||||
return features.get(featureType);
|
||||
}
|
||||
}
|
||||
|
||||
private void setImsFeatureCreatedForSlot(int slotId,
|
||||
@ImsFeature.FeatureType int featureType, boolean createdForSlot) {
|
||||
synchronized (mCreateImsFeatureWithSlotIdFlagMap) {
|
||||
getImsFeatureCreatedForSlot(slotId).put(featureType, createdForSlot);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
@VisibleForTesting
|
||||
public boolean isImsFeatureCreatedForSlot(int slotId,
|
||||
@ImsFeature.FeatureType int featureType) {
|
||||
synchronized (mCreateImsFeatureWithSlotIdFlagMap) {
|
||||
return getImsFeatureCreatedForSlot(slotId).get(featureType);
|
||||
}
|
||||
}
|
||||
|
||||
private SparseBooleanArray getImsFeatureCreatedForSlot(int slotId) {
|
||||
SparseBooleanArray createFlag = mCreateImsFeatureWithSlotIdFlagMap.get(slotId);
|
||||
if (createFlag == null) {
|
||||
createFlag = new SparseBooleanArray();
|
||||
mCreateImsFeatureWithSlotIdFlagMap.put(slotId, createFlag);
|
||||
}
|
||||
return createFlag;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -523,28 +607,96 @@ public class ImsService extends Service {
|
||||
public void readyForFeatureCreation() {
|
||||
}
|
||||
|
||||
/**
|
||||
* The framework has enabled IMS for the subscription specified, the ImsService should register
|
||||
* for IMS and perform all appropriate initialization to bring up all ImsFeatures.
|
||||
*
|
||||
* @param slotId The slot ID that IMS will be enabled for.
|
||||
* @param subscriptionId The subscription ID that IMS will be enabled for.
|
||||
*/
|
||||
public void enableImsForSubscription(int slotId, int subscriptionId) {
|
||||
enableIms(slotId);
|
||||
}
|
||||
|
||||
/**
|
||||
* The framework has disabled IMS for the subscription specified. The ImsService must deregister
|
||||
* for IMS and set capability status to false for all ImsFeatures.
|
||||
* @param slotId The slot ID that IMS will be disabled for.
|
||||
* @param subscriptionId The subscription ID that IMS will be disabled for.
|
||||
*/
|
||||
public void disableImsForSubscription(int slotId, int subscriptionId) {
|
||||
disableIms(slotId);
|
||||
}
|
||||
|
||||
/**
|
||||
* The framework has enabled IMS for the slot specified, the ImsService should register for IMS
|
||||
* and perform all appropriate initialization to bring up all ImsFeatures.
|
||||
* @deprecated Use {@link #enableImsForSubscription} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
public void enableIms(int slotId) {
|
||||
}
|
||||
|
||||
/**
|
||||
* The framework has disabled IMS for the slot specified. The ImsService must deregister for IMS
|
||||
* and set capability status to false for all ImsFeatures.
|
||||
* @deprecated Use {@link #disableImsForSubscription} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
public void disableIms(int slotId) {
|
||||
}
|
||||
|
||||
/**
|
||||
* When called, the framework is requesting that a new {@link MmTelFeature} is created for the
|
||||
* specified subscription.
|
||||
*
|
||||
* @param subscriptionId The subscription ID that the MMTEL Feature is being created for.
|
||||
* @return The newly created {@link MmTelFeature} associated with the subscription or null if
|
||||
* the feature is not supported.
|
||||
*/
|
||||
public @Nullable MmTelFeature createMmTelFeatureForSubscription(int slotId,
|
||||
int subscriptionId) {
|
||||
setImsFeatureCreatedForSlot(slotId, ImsFeature.FEATURE_MMTEL, true);
|
||||
return createMmTelFeature(slotId);
|
||||
}
|
||||
|
||||
/**
|
||||
* When called, the framework is requesting that a new {@link RcsFeature} is created for the
|
||||
* specified subscription.
|
||||
*
|
||||
* @param subscriptionId The subscription ID that the RCS Feature is being created for.
|
||||
* @return The newly created {@link RcsFeature} associated with the subscription or null if the
|
||||
* feature is not supported.
|
||||
*/
|
||||
public @Nullable RcsFeature createRcsFeatureForSubscription(int slotId, int subscriptionId) {
|
||||
setImsFeatureCreatedForSlot(slotId, ImsFeature.FEATURE_RCS, true);
|
||||
return createRcsFeature(slotId);
|
||||
}
|
||||
|
||||
/**
|
||||
* When called, the framework is requesting that a new emergency-only {@link MmTelFeature} is
|
||||
* created for the specified slot. For emergency calls, there is no known Subscription Id.
|
||||
*
|
||||
* @param slotId The slot ID that the MMTEL Feature is being created for.
|
||||
* @return An MmTelFeature instance to be used for the slot ID when there is not
|
||||
* subscription inserted. Only requested when there is no subscription active on
|
||||
* the specified slot.
|
||||
*/
|
||||
public @Nullable MmTelFeature createEmergencyOnlyMmTelFeature(int slotId) {
|
||||
setImsFeatureCreatedForSlot(slotId, ImsFeature.FEATURE_MMTEL, true);
|
||||
return createMmTelFeature(slotId);
|
||||
}
|
||||
|
||||
/**
|
||||
* When called, the framework is requesting that a new {@link MmTelFeature} is created for the
|
||||
* specified slot.
|
||||
* @deprecated Use {@link #createMmTelFeatureForSubscription} instead
|
||||
*
|
||||
* @param slotId The slot ID that the MMTEL Feature is being created for.
|
||||
* @return The newly created {@link MmTelFeature} associated with the slot or null if the
|
||||
* feature is not supported.
|
||||
*/
|
||||
@Deprecated
|
||||
public MmTelFeature createMmTelFeature(int slotId) {
|
||||
return null;
|
||||
}
|
||||
@ -552,32 +704,62 @@ public class ImsService extends Service {
|
||||
/**
|
||||
* When called, the framework is requesting that a new {@link RcsFeature} is created for the
|
||||
* specified slot.
|
||||
* @deprecated Use {@link #createRcsFeatureForSubscription} instead
|
||||
*
|
||||
* @param slotId The slot ID that the RCS Feature is being created for.
|
||||
* @return The newly created {@link RcsFeature} associated with the slot or null if the feature
|
||||
* is not supported.
|
||||
*/
|
||||
@Deprecated
|
||||
public RcsFeature createRcsFeature(int slotId) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the {@link ImsConfigImplBase} implementation associated with the provided
|
||||
* subscription. This will be used by the platform to get/set specific IMS related
|
||||
* configurations.
|
||||
*
|
||||
* @param subscriptionId The subscription ID that the IMS configuration is associated with.
|
||||
* @return ImsConfig implementation that is associated with the specified subscription.
|
||||
*/
|
||||
public @NonNull ImsConfigImplBase getConfigForSubscription(int slotId, int subscriptionId) {
|
||||
return getConfig(slotId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the {@link ImsRegistrationImplBase} implementation associated with the provided
|
||||
* subscription.
|
||||
*
|
||||
* @param subscriptionId The subscription ID that is associated with the IMS Registration.
|
||||
* @return the ImsRegistration implementation associated with the subscription.
|
||||
*/
|
||||
public @NonNull ImsRegistrationImplBase getRegistrationForSubscription(int slotId,
|
||||
int subscriptionId) {
|
||||
return getRegistration(slotId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the {@link ImsConfigImplBase} implementation associated with the provided slot. This
|
||||
* will be used by the platform to get/set specific IMS related configurations.
|
||||
* @deprecated use {@link #getConfigForSubscription} instead.
|
||||
*
|
||||
* @param slotId The slot that the IMS configuration is associated with.
|
||||
* @return ImsConfig implementation that is associated with the specified slot.
|
||||
*/
|
||||
@Deprecated
|
||||
public ImsConfigImplBase getConfig(int slotId) {
|
||||
return new ImsConfigImplBase();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the {@link ImsRegistrationImplBase} implementation associated with the provided slot.
|
||||
* @deprecated use {@link #getRegistrationForSubscription} instead.
|
||||
*
|
||||
* @param slotId The slot that is associated with the IMS Registration.
|
||||
* @return the ImsRegistration implementation associated with the slot.
|
||||
*/
|
||||
@Deprecated
|
||||
public ImsRegistrationImplBase getRegistration(int slotId) {
|
||||
return new ImsRegistrationImplBase();
|
||||
}
|
||||
|
@ -33,6 +33,7 @@ import android.telephony.CarrierConfigManager;
|
||||
import android.telephony.SubscriptionManager;
|
||||
import android.telephony.TelephonyFrameworkInitializer;
|
||||
import android.telephony.TelephonyManager;
|
||||
import android.telephony.ims.aidl.IFeatureProvisioningCallback;
|
||||
import android.telephony.ims.aidl.IImsConfigCallback;
|
||||
import android.telephony.ims.aidl.IRcsConfigCallback;
|
||||
import android.telephony.ims.feature.MmTelFeature;
|
||||
@ -53,17 +54,11 @@ import java.util.concurrent.Executor;
|
||||
* IMS provisioning keys are defined per carrier or OEM using OMA-DM or other provisioning
|
||||
* applications and may vary. It is up to the carrier and OEM applications to ensure that the
|
||||
* correct provisioning keys are being used when integrating with a vendor's ImsService.
|
||||
*
|
||||
* Note: For compatibility purposes, the integer values [0 - 99] used in
|
||||
* {@link #setProvisioningIntValue(int, int)} have been reserved for existing provisioning keys
|
||||
* previously defined in the Android framework. Please do not redefine new provisioning keys in this
|
||||
* range or it may generate collisions with existing keys. Some common constants have also been
|
||||
* defined in this class to make integrating with other system apps easier.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public class ProvisioningManager {
|
||||
|
||||
private static final String TAG = "ProvisioningManager";
|
||||
|
||||
/**@hide*/
|
||||
@StringDef(prefix = "STRING_QUERY_RESULT_ERROR_", value = {
|
||||
STRING_QUERY_RESULT_ERROR_GENERIC,
|
||||
@ -74,14 +69,18 @@ public class ProvisioningManager {
|
||||
|
||||
/**
|
||||
* The query from {@link #getProvisioningStringValue(int)} has resulted in an unspecified error.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public static final String STRING_QUERY_RESULT_ERROR_GENERIC =
|
||||
"STRING_QUERY_RESULT_ERROR_GENERIC";
|
||||
|
||||
/**
|
||||
* The query from {@link #getProvisioningStringValue(int)} has resulted in an error because the
|
||||
* ImsService implementation was not ready for provisioning queries.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public static final String STRING_QUERY_RESULT_ERROR_NOT_READY =
|
||||
"STRING_QUERY_RESULT_ERROR_NOT_READY";
|
||||
|
||||
@ -93,12 +92,16 @@ public class ProvisioningManager {
|
||||
|
||||
/**
|
||||
* The integer result of provisioning for the queried key is disabled.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public static final int PROVISIONING_VALUE_DISABLED = 0;
|
||||
|
||||
/**
|
||||
* The integer result of provisioning for the queried key is enabled.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public static final int PROVISIONING_VALUE_ENABLED = 1;
|
||||
|
||||
|
||||
@ -443,27 +446,31 @@ public class ProvisioningManager {
|
||||
|
||||
/**
|
||||
* Override the user-defined WiFi Roaming enabled setting for this subscription, defined in
|
||||
* {@link SubscriptionManager#WFC_ROAMING_ENABLED_CONTENT_URI}, for the purposes of provisioning
|
||||
* the subscription for WiFi Calling.
|
||||
* {@link android.telephony.SubscriptionManager#WFC_ROAMING_ENABLED_CONTENT_URI},
|
||||
* for the purposes of provisioning the subscription for WiFi Calling.
|
||||
*
|
||||
* @see #getProvisioningIntValue(int)
|
||||
* @see #setProvisioningIntValue(int, int)
|
||||
* @see #getProvisioningIntValue(int)
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public static final int KEY_VOICE_OVER_WIFI_ROAMING_ENABLED_OVERRIDE = 26;
|
||||
|
||||
/**
|
||||
* Override the user-defined WiFi mode for this subscription, defined in
|
||||
* {@link SubscriptionManager#WFC_MODE_CONTENT_URI}, for the purposes of provisioning
|
||||
* this subscription for WiFi Calling.
|
||||
* {@link android.telephony.SubscriptionManager#WFC_MODE_CONTENT_URI},
|
||||
* for the purposes of provisioning this subscription for WiFi Calling.
|
||||
*
|
||||
* Valid values for this key are:
|
||||
* {@link ImsMmTelManager#WIFI_MODE_WIFI_ONLY},
|
||||
* {@link ImsMmTelManager#WIFI_MODE_CELLULAR_PREFERRED}, or
|
||||
* {@link ImsMmTelManager#WIFI_MODE_WIFI_PREFERRED}.
|
||||
*
|
||||
* @see #getProvisioningIntValue(int)
|
||||
* @see #setProvisioningIntValue(int, int)
|
||||
* @see #getProvisioningIntValue(int)
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public static final int KEY_VOICE_OVER_WIFI_MODE_OVERRIDE = 27;
|
||||
|
||||
/**
|
||||
@ -862,7 +869,9 @@ public class ProvisioningManager {
|
||||
* <p>Value is in String format.
|
||||
* @see #setProvisioningStringValue(int, String)
|
||||
* @see #getProvisioningStringValue(int)
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public static final int KEY_VOICE_OVER_WIFI_ENTITLEMENT_ID = 67;
|
||||
|
||||
/**
|
||||
@ -884,7 +893,9 @@ public class ProvisioningManager {
|
||||
|
||||
/**
|
||||
* Callback for IMS provisioning changes.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public static class Callback {
|
||||
|
||||
private static class CallbackBinder extends IImsConfigCallback.Stub {
|
||||
@ -954,11 +965,105 @@ public class ProvisioningManager {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Callback for IMS provisioning feature changes.
|
||||
*/
|
||||
public static class FeatureProvisioningCallback {
|
||||
|
||||
private static class CallbackBinder extends IFeatureProvisioningCallback.Stub {
|
||||
|
||||
private final FeatureProvisioningCallback mFeatureProvisioningCallback;
|
||||
private Executor mExecutor;
|
||||
|
||||
private CallbackBinder(FeatureProvisioningCallback featureProvisioningCallback) {
|
||||
mFeatureProvisioningCallback = featureProvisioningCallback;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void onFeatureProvisioningChanged(
|
||||
int capability, int tech, boolean isProvisioned) {
|
||||
final long callingIdentity = Binder.clearCallingIdentity();
|
||||
try {
|
||||
mExecutor.execute(() ->
|
||||
mFeatureProvisioningCallback.onFeatureProvisioningChanged(
|
||||
capability, tech, isProvisioned));
|
||||
} finally {
|
||||
restoreCallingIdentity(callingIdentity);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void onRcsFeatureProvisioningChanged(
|
||||
int capability, int tech, boolean isProvisioned) {
|
||||
final long callingIdentity = Binder.clearCallingIdentity();
|
||||
try {
|
||||
mExecutor.execute(() ->
|
||||
mFeatureProvisioningCallback.onRcsFeatureProvisioningChanged(
|
||||
capability, tech, isProvisioned));
|
||||
} finally {
|
||||
restoreCallingIdentity(callingIdentity);
|
||||
}
|
||||
}
|
||||
|
||||
private void setExecutor(Executor executor) {
|
||||
mExecutor = executor;
|
||||
}
|
||||
}
|
||||
|
||||
private final CallbackBinder mBinder = new CallbackBinder(this);
|
||||
|
||||
/**
|
||||
* The IMS MMTEL provisioning has changed for a specific capability and IMS
|
||||
* registration technology.
|
||||
* @param capability The MMTEL capability that provisioning has changed for.
|
||||
* @param tech The IMS registration technology associated with the MMTEL capability that
|
||||
* provisioning has changed for.
|
||||
* @param isProvisioned {@code true} if the capability is provisioned for the technology
|
||||
* specified, or {@code false} if the capability is not provisioned for the technology
|
||||
* specified.
|
||||
*/
|
||||
public void onFeatureProvisioningChanged(
|
||||
@MmTelFeature.MmTelCapabilities.MmTelCapability int capability,
|
||||
@ImsRegistrationImplBase.ImsRegistrationTech int tech,
|
||||
boolean isProvisioned) {
|
||||
// Base Implementation
|
||||
}
|
||||
|
||||
/**
|
||||
* The IMS RCS provisioning has changed for a specific capability and IMS
|
||||
* registration technology.
|
||||
* @param capability The RCS capability that provisioning has changed for.
|
||||
* @param tech The IMS registration technology associated with the RCS capability that
|
||||
* provisioning has changed for.
|
||||
* @param isProvisioned {@code true} if the capability is provisioned for the technology
|
||||
* specified, or {@code false} if the capability is not provisioned for the technology
|
||||
* specified.
|
||||
*/
|
||||
public void onRcsFeatureProvisioningChanged(
|
||||
@RcsFeature.RcsImsCapabilities.RcsImsCapabilityFlag int capability,
|
||||
@ImsRegistrationImplBase.ImsRegistrationTech int tech,
|
||||
boolean isProvisioned) {
|
||||
// Base Implementation
|
||||
}
|
||||
|
||||
/**@hide*/
|
||||
public final IFeatureProvisioningCallback getBinder() {
|
||||
return mBinder;
|
||||
}
|
||||
|
||||
/**@hide*/
|
||||
public void setExecutor(Executor executor) {
|
||||
mBinder.setExecutor(executor);
|
||||
}
|
||||
}
|
||||
|
||||
private int mSubId;
|
||||
|
||||
/**
|
||||
* The callback for RCS provisioning changes.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public static class RcsProvisioningCallback {
|
||||
private static class CallbackBinder extends IRcsConfigCallback.Stub {
|
||||
|
||||
@ -1096,7 +1201,9 @@ public class ProvisioningManager {
|
||||
* @param subId The ID of the subscription that this ProvisioningManager will use.
|
||||
* @see android.telephony.SubscriptionManager#getActiveSubscriptionInfoList()
|
||||
* @throws IllegalArgumentException if the subscription is invalid.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public static @NonNull ProvisioningManager createForSubscriptionId(int subId) {
|
||||
if (!SubscriptionManager.isValidSubscriptionId(subId)) {
|
||||
throw new IllegalArgumentException("Invalid subscription ID");
|
||||
@ -1105,7 +1212,9 @@ public class ProvisioningManager {
|
||||
return new ProvisioningManager(subId);
|
||||
}
|
||||
|
||||
private ProvisioningManager(int subId) {
|
||||
/**@hide*/
|
||||
//@SystemApi
|
||||
public ProvisioningManager(int subId) {
|
||||
mSubId = subId;
|
||||
}
|
||||
|
||||
@ -1114,6 +1223,12 @@ public class ProvisioningManager {
|
||||
*
|
||||
* When the subscription associated with this callback is removed (SIM removed, ESIM swap,
|
||||
* etc...), this callback will automatically be removed.
|
||||
*
|
||||
* <p> Requires Permission:
|
||||
* <ul>
|
||||
* <li>{@link android.Manifest.permission#READ_PRIVILEGED_PHONE_STATE},</li>
|
||||
* </ul>
|
||||
*
|
||||
* @param executor The {@link Executor} to call the callback methods on
|
||||
* @param callback The provisioning callbackto be registered.
|
||||
* @see #unregisterProvisioningChangedCallback(Callback)
|
||||
@ -1124,7 +1239,9 @@ public class ProvisioningManager {
|
||||
* the {@link ImsService} associated with the subscription is not available. This can happen if
|
||||
* the service crashed, for example. See {@link ImsException#getCode()} for a more detailed
|
||||
* reason.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
|
||||
public void registerProvisioningChangedCallback(@NonNull @CallbackExecutor Executor executor,
|
||||
@NonNull Callback callback) throws ImsException {
|
||||
@ -1142,12 +1259,20 @@ public class ProvisioningManager {
|
||||
* Unregister an existing {@link Callback}. When the subscription associated with this
|
||||
* callback is removed (SIM removed, ESIM swap, etc...), this callback will automatically be
|
||||
* removed. If this method is called for an inactive subscription, it will result in a no-op.
|
||||
*
|
||||
* <p> Requires Permission:
|
||||
* <ul>
|
||||
* <li>{@link android.Manifest.permission#READ_PRIVILEGED_PHONE_STATE},</li>
|
||||
* </ul>
|
||||
*
|
||||
* @param callback The existing {@link Callback} to be removed.
|
||||
* @see #registerProvisioningChangedCallback(Executor, Callback)
|
||||
*
|
||||
* @throws IllegalArgumentException if the subscription associated with this callback is
|
||||
* invalid.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
|
||||
public void unregisterProvisioningChangedCallback(@NonNull Callback callback) {
|
||||
try {
|
||||
@ -1157,6 +1282,62 @@ public class ProvisioningManager {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Register a new {@link FeatureProvisioningCallback}, which is used to listen for
|
||||
* IMS feature provisioning updates.
|
||||
* <p>
|
||||
* When the subscription associated with this callback is removed (SIM removed,
|
||||
* ESIM swap,etc...), this callback will automatically be removed.
|
||||
*
|
||||
* <p> Requires Permission:
|
||||
* <ul>
|
||||
* <li> android.Manifest.permission#READ_PRIVILEGED_PHONE_STATE,</li>
|
||||
* <li>{@link android.Manifest.permission#READ_PRECISE_PHONE_STATE},</li>
|
||||
* <li>or that the caller has carrier privileges (see
|
||||
* {@link TelephonyManager#hasCarrierPrivileges()}).</li>
|
||||
* </ul>
|
||||
*
|
||||
* @param executor The executor that the callback methods will be called on.
|
||||
* @param callback The callback instance being registered.
|
||||
* @throws ImsException if the subscription associated with this callback is
|
||||
* valid, but the {@link ImsService the service crashed, for example. See
|
||||
* {@link ImsException#getCode()} for a more detailed reason.
|
||||
*/
|
||||
@RequiresPermission(Manifest.permission.READ_PRECISE_PHONE_STATE)
|
||||
public void registerFeatureProvisioningChangedCallback(
|
||||
@NonNull @CallbackExecutor Executor executor,
|
||||
@NonNull FeatureProvisioningCallback callback) throws ImsException {
|
||||
callback.setExecutor(executor);
|
||||
try {
|
||||
getITelephony().registerFeatureProvisioningChangedCallback(mSubId,
|
||||
callback.getBinder());
|
||||
} catch (ServiceSpecificException e) {
|
||||
throw new ImsException(e.getMessage(), e.errorCode);
|
||||
} catch (RemoteException | IllegalStateException e) {
|
||||
throw new ImsException(e.getMessage(), ImsException.CODE_ERROR_SERVICE_UNAVAILABLE);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Unregisters a previously registered {@link FeatureProvisioningCallback}
|
||||
* instance. When the subscription associated with this
|
||||
* callback is removed (SIM removed, ESIM swap, etc...), this callback will
|
||||
* automatically be removed. If this method is called for an inactive
|
||||
* subscription, it will result in a no-op.
|
||||
*
|
||||
* @param callback The existing {@link FeatureProvisioningCallback} to be removed.
|
||||
* @see #registerFeatureProvisioningChangedCallback(Executor, FeatureProvisioningCallback)
|
||||
*/
|
||||
public void unregisterFeatureProvisioningChangedCallback(
|
||||
@NonNull FeatureProvisioningCallback callback) {
|
||||
try {
|
||||
getITelephony().unregisterFeatureProvisioningChangedCallback(mSubId,
|
||||
callback.getBinder());
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowAsRuntimeException();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Query for the integer value associated with the provided key.
|
||||
*
|
||||
@ -1166,7 +1347,9 @@ public class ProvisioningManager {
|
||||
* @return an integer value for the provided key, or
|
||||
* {@link ImsConfigImplBase#CONFIG_RESULT_UNKNOWN} if the key doesn't exist.
|
||||
* @throws IllegalArgumentException if the key provided was invalid.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
@WorkerThread
|
||||
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
|
||||
public int getProvisioningIntValue(int key) {
|
||||
@ -1186,7 +1369,9 @@ public class ProvisioningManager {
|
||||
* @return a String value for the provided key, {@code null} if the key doesn't exist, or
|
||||
* {@link StringResultError} if there was an error getting the value for the provided key.
|
||||
* @throws IllegalArgumentException if the key provided was invalid.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
@WorkerThread
|
||||
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
|
||||
public @Nullable @StringResultError String getProvisioningStringValue(int key) {
|
||||
@ -1207,7 +1392,15 @@ public class ProvisioningManager {
|
||||
* @param key An integer that represents the provisioning key, which is defined by the OEM.
|
||||
* @param value a integer value for the provided key.
|
||||
* @return the result of setting the configuration value.
|
||||
* @hide
|
||||
*
|
||||
* Note: For compatibility purposes, the integer values [0 - 99] used in
|
||||
* {@link #setProvisioningIntValue(int, int)} have been reserved for existing provisioning keys
|
||||
* previously defined in the Android framework. Please do not redefine new provisioning keys
|
||||
* in this range or it may generate collisions with existing keys. Some common constants have
|
||||
* also been defined in this class to make integrating with other system apps easier.
|
||||
*/
|
||||
@SystemApi
|
||||
@WorkerThread
|
||||
@RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)
|
||||
public @ImsConfigImplBase.SetConfigResult int setProvisioningIntValue(int key, int value) {
|
||||
@ -1227,7 +1420,9 @@ public class ProvisioningManager {
|
||||
* should be appropriately namespaced to avoid collision.
|
||||
* @param value a String value for the provided key.
|
||||
* @return the result of setting the configuration value.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
@WorkerThread
|
||||
@RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)
|
||||
public @ImsConfigImplBase.SetConfigResult int setProvisioningStringValue(int key,
|
||||
@ -1247,8 +1442,14 @@ public class ProvisioningManager {
|
||||
* does not support the capability/technology combination specified, this operation will be a
|
||||
* no-op.
|
||||
*
|
||||
* @see CarrierConfigManager#KEY_CARRIER_UT_PROVISIONING_REQUIRED_BOOL
|
||||
* @see CarrierConfigManager#KEY_CARRIER_VOLTE_PROVISIONING_REQUIRED_BOOL
|
||||
* <p>Requires Permission:
|
||||
* <ul>
|
||||
* <li>{@link android.Manifest.permission#MODIFY_PHONE_STATE},</li>
|
||||
* <li>or that the calling app has carrier privileges (see</li>
|
||||
* <li>{@link TelephonyManager#hasCarrierPrivileges}).</li>
|
||||
* </ul>
|
||||
*
|
||||
* @see CarrierConfigManager.Ims#KEY_MMTEL_REQUIRES_PROVISIONING_BUNDLE
|
||||
* @param isProvisioned true if the device is provisioned for UT over IMS, false otherwise.
|
||||
*/
|
||||
@WorkerThread
|
||||
@ -1256,9 +1457,10 @@ public class ProvisioningManager {
|
||||
public void setProvisioningStatusForCapability(
|
||||
@MmTelFeature.MmTelCapabilities.MmTelCapability int capability,
|
||||
@ImsRegistrationImplBase.ImsRegistrationTech int tech, boolean isProvisioned) {
|
||||
|
||||
try {
|
||||
getITelephony().setImsProvisioningStatusForCapability(mSubId, capability, tech,
|
||||
isProvisioned);
|
||||
isProvisioned);
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowAsRuntimeException();
|
||||
}
|
||||
@ -1272,14 +1474,21 @@ public class ProvisioningManager {
|
||||
* {@link ImsRegistrationImplBase.ImsRegistrationTech} combination specified, this method will
|
||||
* always return {@code true}.
|
||||
*
|
||||
* @see CarrierConfigManager#KEY_CARRIER_UT_PROVISIONING_REQUIRED_BOOL
|
||||
* @see CarrierConfigManager#KEY_CARRIER_VOLTE_PROVISIONING_REQUIRED_BOOL
|
||||
* <p> Requires Permission:
|
||||
* <ul>
|
||||
* <li>android.Manifest.permission#READ_PRIVILEGED_PHONE_STATE,</li>
|
||||
* <li>{@link android.Manifest.permission#READ_PRECISE_PHONE_STATE},</li>
|
||||
* <li>or that the caller has carrier privileges (see
|
||||
* {@link TelephonyManager#hasCarrierPrivileges()}).</li>
|
||||
* </ul>
|
||||
*
|
||||
* @see CarrierConfigManager.Ims#KEY_MMTEL_REQUIRES_PROVISIONING_BUNDLE
|
||||
* @return true if the device is provisioned for the capability or does not require
|
||||
* provisioning, false if the capability does require provisioning and has not been
|
||||
* provisioned yet.
|
||||
*/
|
||||
@WorkerThread
|
||||
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
|
||||
@RequiresPermission(Manifest.permission.READ_PRECISE_PHONE_STATE)
|
||||
public boolean getProvisioningStatusForCapability(
|
||||
@MmTelFeature.MmTelCapabilities.MmTelCapability int capability,
|
||||
@ImsRegistrationImplBase.ImsRegistrationTech int tech) {
|
||||
@ -1297,17 +1506,93 @@ public class ProvisioningManager {
|
||||
* {@link RcsFeature.RcsImsCapabilities.RcsImsCapabilityFlag} this method will always return
|
||||
* {@code true}.
|
||||
*
|
||||
* @see CarrierConfigManager#KEY_CARRIER_RCS_PROVISIONING_REQUIRED_BOOL
|
||||
* @see CarrierConfigManager.Ims#KEY_CARRIER_RCS_PROVISIONING_REQUIRED_BOOL
|
||||
* @return true if the device is provisioned for the capability or does not require
|
||||
* provisioning, false if the capability does require provisioning and has not been
|
||||
* provisioned yet.
|
||||
* @deprecated Use {@link #getRcsProvisioningStatusForCapability(int, int)} instead,
|
||||
* as this only retrieves provisioning information for
|
||||
* {@link ImsRegistrationImplBase#REGISTRATION_TECH_LTE}
|
||||
* @hide
|
||||
*/
|
||||
@Deprecated
|
||||
@SystemApi
|
||||
@WorkerThread
|
||||
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
|
||||
public boolean getRcsProvisioningStatusForCapability(
|
||||
@RcsFeature.RcsImsCapabilities.RcsImsCapabilityFlag int capability) {
|
||||
try {
|
||||
return getITelephony().getRcsProvisioningStatusForCapability(mSubId, capability);
|
||||
return getITelephony().getRcsProvisioningStatusForCapability(mSubId, capability,
|
||||
ImsRegistrationImplBase.REGISTRATION_TECH_LTE);
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowAsRuntimeException();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the provisioning status for the IMS RCS capability specified.
|
||||
*
|
||||
* If provisioning is not required for the queried
|
||||
* {@link RcsFeature.RcsImsCapabilities.RcsImsCapabilityFlag} this method
|
||||
* will always return {@code true}.
|
||||
*
|
||||
* <p> Requires Permission:
|
||||
* <ul>
|
||||
* <li>{@link android.Manifest.permission#READ_PRECISE_PHONE_STATE},</li>
|
||||
* <li>or that the caller has carrier privileges (see
|
||||
* {@link TelephonyManager#hasCarrierPrivileges()}).</li>
|
||||
* </ul>
|
||||
*
|
||||
* @see CarrierConfigManager.Ims#KEY_RCS_REQUIRES_PROVISIONING_BUNDLE
|
||||
* @return true if the device is provisioned for the capability or does not require
|
||||
* provisioning, false if the capability does require provisioning and has not been
|
||||
* provisioned yet.
|
||||
*/
|
||||
@WorkerThread
|
||||
@RequiresPermission(Manifest.permission.READ_PRECISE_PHONE_STATE)
|
||||
public boolean getRcsProvisioningStatusForCapability(
|
||||
@RcsFeature.RcsImsCapabilities.RcsImsCapabilityFlag int capability,
|
||||
@ImsRegistrationImplBase.ImsRegistrationTech int tech) {
|
||||
try {
|
||||
return getITelephony().getRcsProvisioningStatusForCapability(mSubId, capability, tech);
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowAsRuntimeException();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the provisioning status for the IMS RCS capability using the specified subscription.
|
||||
*
|
||||
* <p> Requires Permission:
|
||||
* <ul>
|
||||
* <li>{@link android.Manifest.permission#MODIFY_PHONE_STATE}</li>
|
||||
* <li>or that the caller has carrier privileges (see
|
||||
* {@link TelephonyManager#hasCarrierPrivileges()}).</li>
|
||||
* </ul>
|
||||
|
||||
* Provisioning may or may not be required, depending on the carrier configuration. If
|
||||
* provisioning is not required for the carrier associated with this subscription or the device
|
||||
* does not support the capability/technology combination specified, this operation will be a
|
||||
* no-op.
|
||||
*
|
||||
* @see CarrierConfigManager#KEY_CARRIER_RCS_PROVISIONING_REQUIRED_BOOL
|
||||
* @param isProvisioned true if the device is provisioned for the RCS capability specified,
|
||||
* false otherwise.
|
||||
* @deprecated Use {@link #setRcsProvisioningStatusForCapability(int, int, boolean)} instead,
|
||||
* as this method only sets provisioning information for
|
||||
* {@link ImsRegistrationImplBase#REGISTRATION_TECH_LTE}
|
||||
* @hide
|
||||
*/
|
||||
@Deprecated
|
||||
@SystemApi
|
||||
@WorkerThread
|
||||
@RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)
|
||||
public void setRcsProvisioningStatusForCapability(
|
||||
@RcsFeature.RcsImsCapabilities.RcsImsCapabilityFlag int capability,
|
||||
boolean isProvisioned) {
|
||||
try {
|
||||
getITelephony().setRcsProvisioningStatusForCapability(mSubId, capability,
|
||||
ImsRegistrationImplBase.REGISTRATION_TECH_LTE, isProvisioned);
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowAsRuntimeException();
|
||||
}
|
||||
@ -1321,7 +1606,14 @@ public class ProvisioningManager {
|
||||
* does not support the capability/technology combination specified, this operation will be a
|
||||
* no-op.
|
||||
*
|
||||
* @see CarrierConfigManager#KEY_CARRIER_RCS_PROVISIONING_REQUIRED_BOOL
|
||||
* <p> Requires Permission:
|
||||
* <ul>
|
||||
* <li>{@link android.Manifest.permission#MODIFY_PHONE_STATE},</li>
|
||||
* <li>or that the caller has carrier privileges (see
|
||||
* {@link TelephonyManager#hasCarrierPrivileges()}).</li>
|
||||
* </ul>
|
||||
*
|
||||
* @see CarrierConfigManager.Ims#KEY_RCS_REQUIRES_PROVISIONING_BUNDLE
|
||||
* @param isProvisioned true if the device is provisioned for the RCS capability specified,
|
||||
* false otherwise.
|
||||
*/
|
||||
@ -1329,31 +1621,92 @@ public class ProvisioningManager {
|
||||
@RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)
|
||||
public void setRcsProvisioningStatusForCapability(
|
||||
@RcsFeature.RcsImsCapabilities.RcsImsCapabilityFlag int capability,
|
||||
boolean isProvisioned) {
|
||||
@ImsRegistrationImplBase.ImsRegistrationTech int tech, boolean isProvisioned) {
|
||||
try {
|
||||
getITelephony().setRcsProvisioningStatusForCapability(mSubId, capability,
|
||||
isProvisioned);
|
||||
tech, isProvisioned);
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowAsRuntimeException();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates whether provisioning for the MMTEL capability and IMS registration technology
|
||||
* specified is required or not
|
||||
*
|
||||
* <p> Requires Permission:
|
||||
* <ul>
|
||||
* <li> android.Manifest.permission#READ_PRIVILEGED_PHONE_STATE,</li>
|
||||
* <li>{@link android.Manifest.permission#READ_PRECISE_PHONE_STATE},</li>
|
||||
* <li> or that the caller has carrier privileges (see
|
||||
* {@link TelephonyManager#hasCarrierPrivileges()}).</li>
|
||||
* </ul>
|
||||
*
|
||||
* @return true if provisioning is required for the MMTEL capability and IMS
|
||||
* registration technology specified, false if it is not required.
|
||||
*/
|
||||
@RequiresPermission(Manifest.permission.READ_PRECISE_PHONE_STATE)
|
||||
public boolean isProvisioningRequiredForCapability(
|
||||
@MmTelFeature.MmTelCapabilities.MmTelCapability int capability,
|
||||
@ImsRegistrationImplBase.ImsRegistrationTech int tech) {
|
||||
try {
|
||||
return getITelephony().isProvisioningRequiredForCapability(mSubId, capability, tech);
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowAsRuntimeException();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Indicates whether provisioning for the RCS capability and IMS registration technology
|
||||
* specified is required or not
|
||||
*
|
||||
* <p> Requires Permission:
|
||||
* <ul>
|
||||
* <li> android.Manifest.permission#READ_PRIVILEGED_PHONE_STATE,</li>
|
||||
* <li>{@link android.Manifest.permission#READ_PRECISE_PHONE_STATE},</li>
|
||||
* <li> or that the caller has carrier privileges (see
|
||||
* {@link TelephonyManager#hasCarrierPrivileges()}).</li>
|
||||
* </ul>
|
||||
*
|
||||
* @return true if provisioning is required for the RCS capability and IMS
|
||||
* registration technology specified, false if it is not required.
|
||||
*/
|
||||
@RequiresPermission(Manifest.permission.READ_PRECISE_PHONE_STATE)
|
||||
public boolean isRcsProvisioningRequiredForCapability(
|
||||
@RcsFeature.RcsImsCapabilities.RcsImsCapabilityFlag int capability,
|
||||
@ImsRegistrationImplBase.ImsRegistrationTech int tech) {
|
||||
try {
|
||||
return getITelephony().isRcsProvisioningRequiredForCapability(mSubId, capability, tech);
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowAsRuntimeException();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Notify the framework that an RCS autoconfiguration XML file has been received for
|
||||
* provisioning.
|
||||
* <p>
|
||||
* Requires Permission: Manifest.permission.MODIFY_PHONE_STATE or that the calling app has
|
||||
* carrier privileges (see {@link TelephonyManager#hasCarrierPrivileges}).
|
||||
*
|
||||
* <p>Requires Permission:
|
||||
* <ul>
|
||||
* <li>{@link Manifest.permission#MODIFY_PHONE_STATE},</li>
|
||||
* <li>or that the calling app has carrier privileges (see
|
||||
* {@link TelephonyManager#hasCarrierPrivileges()}).</li>
|
||||
* </ul>
|
||||
*
|
||||
* @param config The XML file to be read. ASCII/UTF8 encoded text if not compressed.
|
||||
* @param isCompressed The XML file is compressed in gzip format and must be decompressed
|
||||
* before being read.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
@RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)
|
||||
public void notifyRcsAutoConfigurationReceived(@NonNull byte[] config, boolean isCompressed) {
|
||||
if (config == null) {
|
||||
throw new IllegalArgumentException("Must include a non-null config XML file.");
|
||||
}
|
||||
|
||||
try {
|
||||
getITelephony().notifyRcsAutoConfigurationReceived(mSubId, config, isCompressed);
|
||||
} catch (RemoteException e) {
|
||||
@ -1372,7 +1725,9 @@ public class ProvisioningManager {
|
||||
* <p>Contains {@link #EXTRA_SUBSCRIPTION_ID} to specify the subscription index for which
|
||||
* the intent is valid. and {@link #EXTRA_STATUS} to specify RCS VoLTE single registration
|
||||
* status.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
@RequiresPermission(Manifest.permission.PERFORM_IMS_SINGLE_REGISTRATION)
|
||||
@SdkConstant(SdkConstant.SdkConstantType.BROADCAST_INTENT_ACTION)
|
||||
public static final String ACTION_RCS_SINGLE_REGISTRATION_CAPABILITY_UPDATE =
|
||||
@ -1380,7 +1735,9 @@ public class ProvisioningManager {
|
||||
|
||||
/**
|
||||
* Integer extra to specify subscription index.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public static final String EXTRA_SUBSCRIPTION_ID =
|
||||
"android.telephony.ims.extra.SUBSCRIPTION_ID";
|
||||
|
||||
@ -1390,22 +1747,30 @@ public class ProvisioningManager {
|
||||
* <p>The value can be {@link #STATUS_CAPABLE}, {@link #STATUS_DEVICE_NOT_CAPABLE},
|
||||
* {@link #STATUS_CARRIER_NOT_CAPABLE}, or bitwise OR of
|
||||
* {@link #STATUS_DEVICE_NOT_CAPABLE} and {@link #STATUS_CARRIER_NOT_CAPABLE}.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public static final String EXTRA_STATUS = "android.telephony.ims.extra.STATUS";
|
||||
|
||||
/**
|
||||
* RCS VoLTE single registration is supported by the device and carrier.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public static final int STATUS_CAPABLE = 0;
|
||||
|
||||
/**
|
||||
* RCS VoLTE single registration is not supported by the device.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public static final int STATUS_DEVICE_NOT_CAPABLE = 0x01;
|
||||
|
||||
/**
|
||||
* RCS VoLTE single registration is not supported by the carrier
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public static final int STATUS_CARRIER_NOT_CAPABLE = 0x01 << 1;
|
||||
|
||||
/**
|
||||
@ -1415,11 +1780,14 @@ public class ProvisioningManager {
|
||||
* provisioning is done using autoconfiguration, then these parameters shall be
|
||||
* sent in the HTTP get request to fetch the RCS provisioning. RCS client
|
||||
* configuration must be provided by the application before registering for the
|
||||
* provisioning status events {@link #registerRcsProvisioningCallback()}
|
||||
* provisioning status events
|
||||
* {@link #registerRcsProvisioningCallback(Executor, RcsProvisioningCallback)}
|
||||
* When the IMS/RCS service receives the RCS client configuration, it will detect
|
||||
* the change in the configuration, and trigger the auto-configuration as needed.
|
||||
* @param rcc RCS client configuration {@link RcsClientConfiguration}
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
@RequiresPermission(Manifest.permission.PERFORM_IMS_SINGLE_REGISTRATION)
|
||||
public void setRcsClientConfiguration(
|
||||
@NonNull RcsClientConfiguration rcc) throws ImsException {
|
||||
@ -1440,18 +1808,21 @@ public class ProvisioningManager {
|
||||
* <ul>
|
||||
* <li>{@link android.Manifest.permission#READ_PRIVILEGED_PHONE_STATE},</li>
|
||||
* <li>{@link android.Manifest.permission#PERFORM_IMS_SINGLE_REGISTRATION},</li>
|
||||
* <li>or that the caller has carrier privileges (see
|
||||
* <li>or that the calling app has carrier privileges (see
|
||||
* {@link TelephonyManager#hasCarrierPrivileges()}).</li>
|
||||
* </ul>
|
||||
*
|
||||
* @return true if IMS single registration is capable at this time, or false otherwise
|
||||
* @throws ImsException If the remote ImsService is not available for
|
||||
* any reason or the subscription associated with this instance is no
|
||||
* longer active. See {@link ImsException#getCode()} for more
|
||||
* information.
|
||||
* @throws ImsException If the remote ImsService is not available for any reason or
|
||||
* the subscription associated with this instance is no longer active.
|
||||
* See {@link ImsException#getCode()} for more information.
|
||||
* @see PackageManager#FEATURE_TELEPHONY_IMS_SINGLE_REGISTRATION for whether or not this
|
||||
* device supports IMS single registration.
|
||||
* @hide
|
||||
*/
|
||||
@RequiresPermission(anyOf = {Manifest.permission.READ_PRIVILEGED_PHONE_STATE,
|
||||
@SystemApi
|
||||
@RequiresPermission(anyOf = {
|
||||
Manifest.permission.READ_PRIVILEGED_PHONE_STATE,
|
||||
Manifest.permission.PERFORM_IMS_SINGLE_REGISTRATION})
|
||||
public boolean isRcsVolteSingleRegistrationCapable() throws ImsException {
|
||||
try {
|
||||
@ -1478,8 +1849,6 @@ public class ProvisioningManager {
|
||||
* <ul>
|
||||
* <li>{@link android.Manifest.permission#READ_PRIVILEGED_PHONE_STATE},</li>
|
||||
* <li>{@link android.Manifest.permission#PERFORM_IMS_SINGLE_REGISTRATION},</li>
|
||||
* <li>or that the caller has carrier privileges (see
|
||||
* {@link TelephonyManager#hasCarrierPrivileges()}).</li>
|
||||
* </ul>
|
||||
*
|
||||
* @param executor The {@link Executor} to call the callback methods on
|
||||
@ -1497,8 +1866,11 @@ public class ProvisioningManager {
|
||||
* params (See {@link #setRcsClientConfiguration}) and re register the
|
||||
* callback.
|
||||
* See {@link ImsException#getCode()} for a more detailed reason.
|
||||
* @hide
|
||||
*/
|
||||
@RequiresPermission(anyOf = {Manifest.permission.READ_PRIVILEGED_PHONE_STATE,
|
||||
@SystemApi
|
||||
@RequiresPermission(anyOf = {
|
||||
Manifest.permission.READ_PRIVILEGED_PHONE_STATE,
|
||||
Manifest.permission.PERFORM_IMS_SINGLE_REGISTRATION})
|
||||
public void registerRcsProvisioningCallback(
|
||||
@NonNull @CallbackExecutor Executor executor,
|
||||
@ -1525,8 +1897,6 @@ public class ProvisioningManager {
|
||||
* <ul>
|
||||
* <li>{@link android.Manifest.permission#READ_PRIVILEGED_PHONE_STATE},</li>
|
||||
* <li>{@link android.Manifest.permission#PERFORM_IMS_SINGLE_REGISTRATION},</li>
|
||||
* <li>or that the caller has carrier privileges (see
|
||||
* {@link TelephonyManager#hasCarrierPrivileges()}).</li>
|
||||
* </ul>
|
||||
*
|
||||
* @param callback The existing {@link RcsProvisioningCallback} to be
|
||||
@ -1534,8 +1904,11 @@ public class ProvisioningManager {
|
||||
* @see #registerRcsProvisioningCallback(Executor, RcsProvisioningCallback)
|
||||
* @throws IllegalArgumentException if the subscription associated with
|
||||
* this callback is invalid.
|
||||
* @hide
|
||||
*/
|
||||
@RequiresPermission(anyOf = {Manifest.permission.READ_PRIVILEGED_PHONE_STATE,
|
||||
@SystemApi
|
||||
@RequiresPermission(anyOf = {
|
||||
Manifest.permission.READ_PRIVILEGED_PHONE_STATE,
|
||||
Manifest.permission.PERFORM_IMS_SINGLE_REGISTRATION})
|
||||
public void unregisterRcsProvisioningCallback(
|
||||
@NonNull RcsProvisioningCallback callback) {
|
||||
@ -1556,9 +1929,10 @@ public class ProvisioningManager {
|
||||
* {@link RcsProvisioningCallback} may expect to receive
|
||||
* {@link RcsProvisioningCallback#onConfigurationReset}, then
|
||||
* {@link RcsProvisioningCallback#onConfigurationChanged} when the new
|
||||
* RCS configuration is received and notified by
|
||||
* {@link #notifyRcsAutoConfigurationReceived}
|
||||
* RCS configuration is received and notified by {@link #notifyRcsAutoConfigurationReceived}
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
@RequiresPermission(Manifest.permission.PERFORM_IMS_SINGLE_REGISTRATION)
|
||||
public void triggerRcsReconfiguration() {
|
||||
try {
|
||||
|
@ -0,0 +1,28 @@
|
||||
/*
|
||||
* Copyright (c) 2022 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
package android.telephony.ims.aidl;
|
||||
|
||||
/**
|
||||
* Provides callback interface for FeatureProvisioning when a value has changed.
|
||||
*
|
||||
* {@hide}
|
||||
*/
|
||||
oneway interface IFeatureProvisioningCallback {
|
||||
void onFeatureProvisioningChanged(int capability, int tech, boolean isProvisioned);
|
||||
void onRcsFeatureProvisioningChanged(int capability, int tech, boolean isProvisioned);
|
||||
}
|
@ -32,18 +32,19 @@ import com.android.ims.internal.IImsFeatureStatusCallback;
|
||||
*/
|
||||
interface IImsServiceController {
|
||||
void setListener(IImsServiceControllerListener l);
|
||||
IImsMmTelFeature createMmTelFeature(int slotId);
|
||||
IImsRcsFeature createRcsFeature(int slotId);
|
||||
IImsMmTelFeature createMmTelFeature(int slotId, int subId);
|
||||
IImsMmTelFeature createEmergencyOnlyMmTelFeature(int slotId);
|
||||
IImsRcsFeature createRcsFeature(int slotId, int subId);
|
||||
ImsFeatureConfiguration querySupportedImsFeatures();
|
||||
long getImsServiceCapabilities();
|
||||
void addFeatureStatusCallback(int slotId, int featureType, in IImsFeatureStatusCallback c);
|
||||
void removeFeatureStatusCallback(int slotId, int featureType, in IImsFeatureStatusCallback c);
|
||||
// Synchronous call to ensure the ImsService is ready before continuing with feature creation.
|
||||
void notifyImsServiceReadyForFeatureCreation();
|
||||
void removeImsFeature(int slotId, int featureType);
|
||||
IImsConfig getConfig(int slotId);
|
||||
IImsRegistration getRegistration(int slotId);
|
||||
void removeImsFeature(int slotId, int featureType, boolean changeSubId);
|
||||
IImsConfig getConfig(int slotId, int subId);
|
||||
IImsRegistration getRegistration(int slotId, int subId);
|
||||
ISipTransport getSipTransport(int slotId);
|
||||
oneway void enableIms(int slotId);
|
||||
oneway void disableIms(int slotId);
|
||||
oneway void enableIms(int slotId, int subId);
|
||||
oneway void disableIms(int slotId, int subId);
|
||||
}
|
||||
|
@ -393,6 +393,13 @@ public class MmTelFeature extends ImsFeature {
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface MmTelCapability {}
|
||||
|
||||
/**
|
||||
* Undefined capability type for initialization
|
||||
* This is used to check the upper range of MmTel capability
|
||||
* {@hide}
|
||||
*/
|
||||
public static final int CAPABILITY_TYPE_NONE = 0;
|
||||
|
||||
/**
|
||||
* This MmTelFeature supports Voice calling (IR.92)
|
||||
*/
|
||||
@ -418,6 +425,12 @@ public class MmTelFeature extends ImsFeature {
|
||||
*/
|
||||
public static final int CAPABILITY_TYPE_CALL_COMPOSER = 1 << 4;
|
||||
|
||||
/**
|
||||
* This is used to check the upper range of MmTel capability
|
||||
* {@hide}
|
||||
*/
|
||||
public static final int CAPABILITY_TYPE_MAX = CAPABILITY_TYPE_CALL_COMPOSER + 1;
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
|
@ -59,9 +59,7 @@ import java.util.function.Supplier;
|
||||
/**
|
||||
* Base implementation of the RcsFeature APIs. Any ImsService wishing to support RCS should extend
|
||||
* this class and provide implementations of the RcsFeature methods that they support.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public class RcsFeature extends ImsFeature {
|
||||
|
||||
private static final String LOG_TAG = "RcsFeature";
|
||||
@ -186,14 +184,14 @@ public class RcsFeature extends ImsFeature {
|
||||
* Contains the capabilities defined and supported by a {@link RcsFeature} in the
|
||||
* form of a bitmask. The capabilities that are used in the RcsFeature are
|
||||
* defined as:
|
||||
* {@link RcsUceAdatper.RcsImsCapabilityFlag#CAPABILITY_TYPE_OPTIONS_UCE}
|
||||
* {@link RceUceAdapter.RcsImsCapabilityFlag#CAPABILITY_TYPE_PRESENCE_UCE}
|
||||
* {RcsUceAdapter.RcsImsCapabilityFlag#CAPABILITY_TYPE_OPTIONS_UCE}
|
||||
* {RcsUceAdapter.RcsImsCapabilityFlag#CAPABILITY_TYPE_PRESENCE_UCE}
|
||||
*
|
||||
* The enabled capabilities of this RcsFeature will be set by the framework
|
||||
* using {@link #changeEnabledCapabilities(CapabilityChangeRequest, CapabilityCallbackProxy)}.
|
||||
* using {#changeEnabledCapabilities(CapabilityChangeRequest, CapabilityCallbackProxy)}.
|
||||
* After the capabilities have been set, the RcsFeature may then perform the necessary bring up
|
||||
* of the capability and notify the capability status as true using
|
||||
* {@link #notifyCapabilitiesStatusChanged(RcsImsCapabilities)}. This will signal to the
|
||||
* {#notifyCapabilitiesStatusChanged(RcsImsCapabilities)}. This will signal to the
|
||||
* framework that the capability is available for usage.
|
||||
*/
|
||||
public static class RcsImsCapabilities extends Capabilities {
|
||||
@ -226,11 +224,19 @@ public class RcsFeature extends ImsFeature {
|
||||
*/
|
||||
public static final int CAPABILITY_TYPE_PRESENCE_UCE = 1 << 1;
|
||||
|
||||
/**
|
||||
* This is used to check the upper range of RCS capability
|
||||
* {@hide}
|
||||
*/
|
||||
public static final int CAPABILITY_TYPE_MAX = CAPABILITY_TYPE_PRESENCE_UCE + 1;
|
||||
|
||||
/**
|
||||
* Create a new {@link RcsImsCapabilities} instance with the provided capabilities.
|
||||
* @param capabilities The capabilities that are supported for RCS in the form of a
|
||||
* bitfield.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public RcsImsCapabilities(@RcsUceAdapter.RcsImsCapabilityFlag int capabilities) {
|
||||
super(capabilities);
|
||||
}
|
||||
@ -243,17 +249,29 @@ public class RcsFeature extends ImsFeature {
|
||||
super(capabilities.getMask());
|
||||
}
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
@Override
|
||||
@SystemApi
|
||||
public void addCapabilities(@RcsUceAdapter.RcsImsCapabilityFlag int capabilities) {
|
||||
super.addCapabilities(capabilities);
|
||||
}
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
@Override
|
||||
@SystemApi
|
||||
public void removeCapabilities(@RcsUceAdapter.RcsImsCapabilityFlag int capabilities) {
|
||||
super.removeCapabilities(capabilities);
|
||||
}
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
@Override
|
||||
@SystemApi
|
||||
public boolean isCapable(@RcsUceAdapter.RcsImsCapabilityFlag int capabilities) {
|
||||
return super.isCapable(capabilities);
|
||||
}
|
||||
@ -270,7 +288,9 @@ public class RcsFeature extends ImsFeature {
|
||||
* Method stubs called from the framework will be called asynchronously. To specify the
|
||||
* {@link Executor} that the methods stubs will be called, use
|
||||
* {@link RcsFeature#RcsFeature(Executor)} instead.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public RcsFeature() {
|
||||
super();
|
||||
// Run on the Binder threads that call them.
|
||||
@ -282,7 +302,9 @@ public class RcsFeature extends ImsFeature {
|
||||
* framework.
|
||||
* @param executor The executor for the framework to use when executing the methods overridden
|
||||
* by the implementation of RcsFeature.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public RcsFeature(@NonNull Executor executor) {
|
||||
super();
|
||||
if (executor == null) {
|
||||
@ -301,7 +323,7 @@ public class RcsFeature extends ImsFeature {
|
||||
* @hide
|
||||
*/
|
||||
@Override
|
||||
public void initialize(Context context, int slotId) {
|
||||
public void initialize(@NonNull Context context, @NonNull int slotId) {
|
||||
super.initialize(context, slotId);
|
||||
// Notify that the RcsFeature is ready.
|
||||
mExecutor.execute(() -> onFeatureReady());
|
||||
@ -313,8 +335,10 @@ public class RcsFeature extends ImsFeature {
|
||||
* requests. To change the status of the capabilities
|
||||
* {@link #notifyCapabilitiesStatusChanged(RcsImsCapabilities)} should be called.
|
||||
* @return A copy of the current RcsFeature capability status.
|
||||
* @hide
|
||||
*/
|
||||
@Override
|
||||
@SystemApi
|
||||
public @NonNull final RcsImsCapabilities queryCapabilityStatus() {
|
||||
return new RcsImsCapabilities(super.queryCapabilityStatus());
|
||||
}
|
||||
@ -324,7 +348,9 @@ public class RcsFeature extends ImsFeature {
|
||||
* this signals to the framework that the capability has been initialized and is ready.
|
||||
* Call {@link #queryCapabilityStatus()} to return the current capability status.
|
||||
* @param capabilities The current capability status of the RcsFeature.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public final void notifyCapabilitiesStatusChanged(@NonNull RcsImsCapabilities capabilities) {
|
||||
if (capabilities == null) {
|
||||
throw new IllegalArgumentException("RcsImsCapabilities must be non-null!");
|
||||
@ -341,7 +367,9 @@ public class RcsFeature extends ImsFeature {
|
||||
* @param capability The capability that we are querying the configuration for.
|
||||
* @param radioTech The radio technology type that we are querying.
|
||||
* @return true if the capability is enabled, false otherwise.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public boolean queryCapabilityConfiguration(
|
||||
@RcsUceAdapter.RcsImsCapabilityFlag int capability,
|
||||
@ImsRegistrationImplBase.ImsRegistrationTech int radioTech) {
|
||||
@ -364,8 +392,10 @@ public class RcsFeature extends ImsFeature {
|
||||
* be called for each capability change that resulted in an error.
|
||||
* @param request The request to change the capability.
|
||||
* @param callback To notify the framework that the result of the capability changes.
|
||||
* @hide
|
||||
*/
|
||||
@Override
|
||||
@SystemApi
|
||||
public void changeEnabledCapabilities(@NonNull CapabilityChangeRequest request,
|
||||
@NonNull CapabilityCallbackProxy callback) {
|
||||
// Base Implementation - Override to provide functionality
|
||||
@ -385,7 +415,9 @@ public class RcsFeature extends ImsFeature {
|
||||
* event to the framework.
|
||||
* @return An instance of {@link RcsCapabilityExchangeImplBase} that implements capability
|
||||
* exchange if it is supported by the device.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public @NonNull RcsCapabilityExchangeImplBase createCapabilityExchangeImpl(
|
||||
@NonNull CapabilityExchangeEventListener listener) {
|
||||
// Base Implementation, override to implement functionality
|
||||
@ -395,20 +427,28 @@ public class RcsFeature extends ImsFeature {
|
||||
/**
|
||||
* Remove the given CapabilityExchangeImplBase instance.
|
||||
* @param capExchangeImpl The {@link RcsCapabilityExchangeImplBase} instance to be destroyed.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public void destroyCapabilityExchangeImpl(
|
||||
@NonNull RcsCapabilityExchangeImplBase capExchangeImpl) {
|
||||
// Override to implement the process of destroying RcsCapabilityExchangeImplBase instance.
|
||||
}
|
||||
|
||||
/**{@inheritDoc}*/
|
||||
/**{@inheritDoc}
|
||||
* @hide
|
||||
*/
|
||||
@Override
|
||||
@SystemApi
|
||||
public void onFeatureRemoved() {
|
||||
|
||||
}
|
||||
|
||||
/**{@inheritDoc}*/
|
||||
/**{@inheritDoc}
|
||||
* @hide
|
||||
*/
|
||||
@Override
|
||||
@SystemApi
|
||||
public void onFeatureReady() {
|
||||
|
||||
}
|
||||
|
@ -34,7 +34,6 @@ import com.android.internal.telephony.util.RemoteCallbackListExt;
|
||||
import com.android.internal.telephony.util.TelephonyUtils;
|
||||
import com.android.internal.util.ArrayUtils;
|
||||
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.util.concurrent.CancellationException;
|
||||
@ -51,9 +50,7 @@ import java.util.function.Supplier;
|
||||
* <p>
|
||||
* Note: There is no guarantee on the thread that the calls from the framework will be called on. It
|
||||
* is the implementors responsibility to handle moving the calls to a working thread if required.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public class ImsRegistrationImplBase {
|
||||
|
||||
private static final String LOG_TAG = "ImsRegistrationImplBase";
|
||||
@ -94,6 +91,12 @@ public class ImsRegistrationImplBase {
|
||||
*/
|
||||
public static final int REGISTRATION_TECH_NR = 3;
|
||||
|
||||
/**
|
||||
* This is used to check the upper range of registration tech
|
||||
* {@hide}
|
||||
*/
|
||||
public static final int REGISTRATION_TECH_MAX = REGISTRATION_TECH_NR + 1;
|
||||
|
||||
// Registration states, used to notify new ImsRegistrationImplBase#Callbacks of the current
|
||||
// state.
|
||||
// The unknown state is set as the initialization state. This is so that we do not call back
|
||||
@ -109,7 +112,9 @@ public class ImsRegistrationImplBase {
|
||||
* Method stubs called from the framework will be called asynchronously. To specify the
|
||||
* {@link Executor} that the methods stubs will be called, use
|
||||
* {@link ImsRegistrationImplBase#ImsRegistrationImplBase(Executor)} instead.
|
||||
* @hide This API is not part of the Android public SDK API
|
||||
*/
|
||||
@SystemApi
|
||||
public ImsRegistrationImplBase() {
|
||||
super();
|
||||
}
|
||||
@ -119,7 +124,9 @@ public class ImsRegistrationImplBase {
|
||||
* framework.
|
||||
* @param executor The executor for the framework to use when executing the methods overridden
|
||||
* by the implementation of ImsRegistration.
|
||||
* @hide This API is not part of the Android public SDK API
|
||||
*/
|
||||
@SystemApi
|
||||
public ImsRegistrationImplBase(@NonNull Executor executor) {
|
||||
super();
|
||||
mExecutor = executor;
|
||||
@ -250,7 +257,9 @@ public class ImsRegistrationImplBase {
|
||||
* If the SIP delegate feature tag configuration has changed, then this method will be
|
||||
* called in order to let the ImsService know that it can pick up these changes in the IMS
|
||||
* registration.
|
||||
* @hide This API is not part of the Android public SDK API
|
||||
*/
|
||||
@SystemApi
|
||||
public void updateSipDelegateRegistration() {
|
||||
// Stub implementation, ImsService should implement this
|
||||
}
|
||||
@ -266,7 +275,9 @@ public class ImsRegistrationImplBase {
|
||||
* <p>
|
||||
* This should not affect the registration of features managed by the ImsService itself, such as
|
||||
* feature tags related to MMTEL registration.
|
||||
* @hide This API is not part of the Android public SDK API
|
||||
*/
|
||||
@SystemApi
|
||||
public void triggerSipDelegateDeregistration() {
|
||||
// Stub implementation, ImsService should implement this
|
||||
}
|
||||
@ -284,7 +295,9 @@ public class ImsRegistrationImplBase {
|
||||
* be carrier specific.
|
||||
* @param sipReason The reason associated with the SIP error code. {@code null} if there was no
|
||||
* reason associated with the error.
|
||||
* @hide This API is not part of the Android public SDK API
|
||||
*/
|
||||
@SystemApi
|
||||
public void triggerFullNetworkRegistration(@IntRange(from = 100, to = 699) int sipCode,
|
||||
@Nullable String sipReason) {
|
||||
// Stub implementation, ImsService should implement this
|
||||
@ -295,7 +308,9 @@ public class ImsRegistrationImplBase {
|
||||
* Notify the framework that the device is connected to the IMS network.
|
||||
*
|
||||
* @param imsRadioTech the radio access technology.
|
||||
* @hide This API is not part of the Android public SDK API
|
||||
*/
|
||||
@SystemApi
|
||||
public final void onRegistered(@ImsRegistrationTech int imsRadioTech) {
|
||||
onRegistered(new ImsRegistrationAttributes.Builder(imsRadioTech).build());
|
||||
}
|
||||
@ -304,7 +319,9 @@ public class ImsRegistrationImplBase {
|
||||
* Notify the framework that the device is connected to the IMS network.
|
||||
*
|
||||
* @param attributes The attributes associated with the IMS registration.
|
||||
* @hide This API is not part of the Android public SDK API
|
||||
*/
|
||||
@SystemApi
|
||||
public final void onRegistered(@NonNull ImsRegistrationAttributes attributes) {
|
||||
updateToState(attributes, RegistrationManager.REGISTRATION_STATE_REGISTERED);
|
||||
mCallbacks.broadcastAction((c) -> {
|
||||
@ -320,7 +337,9 @@ public class ImsRegistrationImplBase {
|
||||
* Notify the framework that the device is trying to connect the IMS network.
|
||||
*
|
||||
* @param imsRadioTech the radio access technology.
|
||||
* @hide This API is not part of the Android public SDK API
|
||||
*/
|
||||
@SystemApi
|
||||
public final void onRegistering(@ImsRegistrationTech int imsRadioTech) {
|
||||
onRegistering(new ImsRegistrationAttributes.Builder(imsRadioTech).build());
|
||||
}
|
||||
@ -329,7 +348,9 @@ public class ImsRegistrationImplBase {
|
||||
* Notify the framework that the device is trying to connect the IMS network.
|
||||
*
|
||||
* @param attributes The attributes associated with the IMS registration.
|
||||
* @hide This API is not part of the Android public SDK API
|
||||
*/
|
||||
@SystemApi
|
||||
public final void onRegistering(@NonNull ImsRegistrationAttributes attributes) {
|
||||
updateToState(attributes, RegistrationManager.REGISTRATION_STATE_REGISTERING);
|
||||
mCallbacks.broadcastAction((c) -> {
|
||||
@ -356,7 +377,9 @@ public class ImsRegistrationImplBase {
|
||||
* result.
|
||||
*
|
||||
* @param info the {@link ImsReasonInfo} associated with why registration was disconnected.
|
||||
* @hide This API is not part of the Android public SDK API
|
||||
*/
|
||||
@SystemApi
|
||||
public final void onDeregistered(ImsReasonInfo info) {
|
||||
updateToDisconnectedState(info);
|
||||
// ImsReasonInfo should never be null.
|
||||
@ -377,7 +400,9 @@ public class ImsRegistrationImplBase {
|
||||
* {@link #REGISTRATION_TECH_LTE}, {@link #REGISTRATION_TECH_IWLAN} and
|
||||
* {@link #REGISTRATION_TECH_CROSS_SIM}.
|
||||
* @param info The {@link ImsReasonInfo} for the failure to change technology.
|
||||
* @hide This API is not part of the Android public SDK API
|
||||
*/
|
||||
@SystemApi
|
||||
public final void onTechnologyChangeFailed(@ImsRegistrationTech int imsRadioTech,
|
||||
ImsReasonInfo info) {
|
||||
final ImsReasonInfo reasonInfo = (info != null) ? info : new ImsReasonInfo();
|
||||
@ -396,7 +421,9 @@ public class ImsRegistrationImplBase {
|
||||
*
|
||||
* The {@link Uri}s are not guaranteed to be different between subsequent calls.
|
||||
* @param uris changed uris
|
||||
* @hide This API is not part of the Android public SDK API
|
||||
*/
|
||||
@SystemApi
|
||||
public final void onSubscriberAssociatedUriChanged(Uri[] uris) {
|
||||
synchronized (mLock) {
|
||||
mUris = ArrayUtils.cloneOrNull(uris);
|
||||
|
@ -23,11 +23,11 @@ import com.android.ims.ImsFeatureContainer;
|
||||
* {@hide}
|
||||
*/
|
||||
oneway interface IImsServiceFeatureCallback {
|
||||
void imsFeatureCreated(in ImsFeatureContainer feature);
|
||||
void imsFeatureCreated(in ImsFeatureContainer feature, int subId);
|
||||
// Reason defined in FeatureConnector.UnavailableReason
|
||||
void imsFeatureRemoved(int reason);
|
||||
// Status defined in ImsFeature.ImsState.
|
||||
void imsStatusChanged(int status);
|
||||
void imsStatusChanged(int status, int subId);
|
||||
//Capabilities defined in ImsService.ImsServiceCapability
|
||||
void updateCapabilities(long capabilities);
|
||||
}
|
@ -55,6 +55,7 @@ import android.telephony.VisualVoicemailSmsFilterSettings;
|
||||
import android.telephony.emergency.EmergencyNumber;
|
||||
import android.telephony.ims.RcsClientConfiguration;
|
||||
import android.telephony.ims.RcsContactUceCapability;
|
||||
import android.telephony.ims.aidl.IFeatureProvisioningCallback;
|
||||
import android.telephony.ims.aidl.IImsCapabilityCallback;
|
||||
import android.telephony.ims.aidl.IImsConfig;
|
||||
import android.telephony.ims.aidl.IImsConfigCallback;
|
||||
@ -2026,6 +2027,18 @@ interface ITelephony {
|
||||
*/
|
||||
void unregisterImsProvisioningChangedCallback(int subId, IImsConfigCallback callback);
|
||||
|
||||
/**
|
||||
* Register an IMS provisioning change callback with Telephony.
|
||||
*/
|
||||
void registerFeatureProvisioningChangedCallback(int subId,
|
||||
IFeatureProvisioningCallback callback);
|
||||
|
||||
/**
|
||||
* unregister an existing IMS provisioning change callback.
|
||||
*/
|
||||
void unregisterFeatureProvisioningChangedCallback(int subId,
|
||||
IFeatureProvisioningCallback callback);
|
||||
|
||||
/**
|
||||
* Set the provisioning status for the IMS MmTel capability using the specified subscription.
|
||||
*/
|
||||
@ -2040,19 +2053,12 @@ interface ITelephony {
|
||||
/**
|
||||
* Get the provisioning status for the IMS Rcs capability specified.
|
||||
*/
|
||||
boolean getRcsProvisioningStatusForCapability(int subId, int capability);
|
||||
boolean getRcsProvisioningStatusForCapability(int subId, int capability, int tech);
|
||||
|
||||
/**
|
||||
* Set the provisioning status for the IMS Rcs capability using the specified subscription.
|
||||
*/
|
||||
void setRcsProvisioningStatusForCapability(int subId, int capability,
|
||||
boolean isProvisioned);
|
||||
|
||||
/** Is the capability and tech flagged as provisioned in the cache */
|
||||
boolean isMmTelCapabilityProvisionedInCache(int subId, int capability, int tech);
|
||||
|
||||
/** Set the provisioning for the capability and tech in the cache */
|
||||
void cacheMmTelCapabilityProvisioning(int subId, int capability, int tech,
|
||||
void setRcsProvisioningStatusForCapability(int subId, int capability, int tech,
|
||||
boolean isProvisioned);
|
||||
|
||||
/**
|
||||
@ -2555,4 +2561,18 @@ interface ITelephony {
|
||||
* @return the service name of the modem service which bind to.
|
||||
*/
|
||||
String getModemService();
|
||||
|
||||
/**
|
||||
* Is Provisioning required for capability
|
||||
* @return true if provisioning is required for the MMTEL capability and IMS
|
||||
* registration technology specified, false if it is not required.
|
||||
*/
|
||||
boolean isProvisioningRequiredForCapability(int subId, int capability, int tech);
|
||||
|
||||
/**
|
||||
* Is RCS Provisioning required for capability
|
||||
* @return true if provisioning is required for the RCS capability and IMS
|
||||
* registration technology specified, false if it is not required.
|
||||
*/
|
||||
boolean isRcsProvisioningRequiredForCapability(int subId, int capability, int tech);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user