Merge "[RCS UCE] Expose the IMS RCS feature APIs" am: a7f8e8fe6e am: d4a311a5b9
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1562892 MUST ONLY BE SUBMITTED BY AUTOMERGER Change-Id: Id772eaf136b0ed8dbca801771055b4485bb22c89
This commit is contained in:
@@ -41974,7 +41974,11 @@ package android.telephony.ims {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public class ImsRcsManager {
|
public class ImsRcsManager {
|
||||||
|
method @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void getRegistrationState(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
|
||||||
|
method @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void getRegistrationTransportType(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
|
||||||
method @NonNull public android.telephony.ims.RcsUceAdapter getUceAdapter();
|
method @NonNull public android.telephony.ims.RcsUceAdapter getUceAdapter();
|
||||||
|
method @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void registerImsRegistrationCallback(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.RegistrationManager.RegistrationCallback) throws android.telephony.ims.ImsException;
|
||||||
|
method @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void unregisterImsRegistrationCallback(@NonNull android.telephony.ims.RegistrationManager.RegistrationCallback);
|
||||||
field public static final String ACTION_SHOW_CAPABILITY_DISCOVERY_OPT_IN = "android.telephony.ims.action.SHOW_CAPABILITY_DISCOVERY_OPT_IN";
|
field public static final String ACTION_SHOW_CAPABILITY_DISCOVERY_OPT_IN = "android.telephony.ims.action.SHOW_CAPABILITY_DISCOVERY_OPT_IN";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11546,6 +11546,17 @@ package android.telephony.ims {
|
|||||||
ctor @Deprecated public ImsMmTelManager.RegistrationCallback();
|
ctor @Deprecated public ImsMmTelManager.RegistrationCallback();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class ImsRcsManager {
|
||||||
|
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void addOnAvailabilityChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.ImsRcsManager.OnAvailabilityChangedListener) throws android.telephony.ims.ImsException;
|
||||||
|
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isAvailable(int, int) throws android.telephony.ims.ImsException;
|
||||||
|
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isCapable(int, int) throws android.telephony.ims.ImsException;
|
||||||
|
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void removeOnAvailabilityChangedListener(@NonNull android.telephony.ims.ImsRcsManager.OnAvailabilityChangedListener);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static interface ImsRcsManager.OnAvailabilityChangedListener {
|
||||||
|
method public void onAvailabilityChanged(int);
|
||||||
|
}
|
||||||
|
|
||||||
public final class ImsReasonInfo implements android.os.Parcelable {
|
public final class ImsReasonInfo implements android.os.Parcelable {
|
||||||
field public static final String EXTRA_MSG_SERVICE_NOT_AUTHORIZED = "Forbidden. Not Authorized for Service";
|
field public static final String EXTRA_MSG_SERVICE_NOT_AUTHORIZED = "Forbidden. Not Authorized for Service";
|
||||||
}
|
}
|
||||||
@@ -12186,11 +12197,24 @@ package android.telephony.ims.feature {
|
|||||||
ctor public RcsFeature(@NonNull java.util.concurrent.Executor);
|
ctor public RcsFeature(@NonNull java.util.concurrent.Executor);
|
||||||
method public void changeEnabledCapabilities(@NonNull android.telephony.ims.feature.CapabilityChangeRequest, @NonNull android.telephony.ims.feature.ImsFeature.CapabilityCallbackProxy);
|
method public void changeEnabledCapabilities(@NonNull android.telephony.ims.feature.CapabilityChangeRequest, @NonNull android.telephony.ims.feature.ImsFeature.CapabilityCallbackProxy);
|
||||||
method @NonNull public android.telephony.ims.stub.RcsCapabilityExchangeImplBase createCapabilityExchangeImpl(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.stub.CapabilityExchangeEventListener);
|
method @NonNull public android.telephony.ims.stub.RcsCapabilityExchangeImplBase createCapabilityExchangeImpl(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.stub.CapabilityExchangeEventListener);
|
||||||
|
method public final void notifyCapabilitiesStatusChanged(@NonNull android.telephony.ims.feature.RcsFeature.RcsImsCapabilities);
|
||||||
method public void onFeatureReady();
|
method public void onFeatureReady();
|
||||||
method public void onFeatureRemoved();
|
method public void onFeatureRemoved();
|
||||||
|
method public boolean queryCapabilityConfiguration(int, int);
|
||||||
|
method @NonNull public final android.telephony.ims.feature.RcsFeature.RcsImsCapabilities queryCapabilityStatus();
|
||||||
method public void removeCapabilityExchangeImpl(@NonNull android.telephony.ims.stub.RcsCapabilityExchangeImplBase);
|
method public void removeCapabilityExchangeImpl(@NonNull android.telephony.ims.stub.RcsCapabilityExchangeImplBase);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class RcsFeature.RcsImsCapabilities extends android.telephony.ims.feature.ImsFeature.Capabilities {
|
||||||
|
ctor public RcsFeature.RcsImsCapabilities(int);
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
package android.telephony.ims.stub {
|
package android.telephony.ims.stub {
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import android.annotation.CallbackExecutor;
|
|||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.annotation.RequiresPermission;
|
import android.annotation.RequiresPermission;
|
||||||
import android.annotation.SdkConstant;
|
import android.annotation.SdkConstant;
|
||||||
|
import android.annotation.SystemApi;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.Binder;
|
import android.os.Binder;
|
||||||
@@ -39,6 +40,8 @@ import android.util.Log;
|
|||||||
|
|
||||||
import com.android.internal.telephony.IIntegerConsumer;
|
import com.android.internal.telephony.IIntegerConsumer;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
@@ -77,55 +80,13 @@ public class ImsRcsManager {
|
|||||||
"android.telephony.ims.action.SHOW_CAPABILITY_DISCOVERY_OPT_IN";
|
"android.telephony.ims.action.SHOW_CAPABILITY_DISCOVERY_OPT_IN";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Receives RCS Feature availability status updates from the ImsService.
|
* An application can use {@link #addOnAvailabilityChangedListener} to register a
|
||||||
*
|
* {@link OnAvailabilityChangedListener}, which will notify the user when the RCS feature
|
||||||
* @see #isAvailable(int)
|
* availability status updates from the ImsService.
|
||||||
* @see #registerRcsAvailabilityCallback(Executor, AvailabilityCallback)
|
|
||||||
* @see #unregisterRcsAvailabilityCallback(AvailabilityCallback)
|
|
||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
public static class AvailabilityCallback {
|
@SystemApi
|
||||||
|
public interface OnAvailabilityChangedListener {
|
||||||
private static class CapabilityBinder extends IImsCapabilityCallback.Stub {
|
|
||||||
|
|
||||||
private final AvailabilityCallback mLocalCallback;
|
|
||||||
private Executor mExecutor;
|
|
||||||
|
|
||||||
CapabilityBinder(AvailabilityCallback c) {
|
|
||||||
mLocalCallback = c;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCapabilitiesStatusChanged(int config) {
|
|
||||||
if (mLocalCallback == null) return;
|
|
||||||
|
|
||||||
long callingIdentity = Binder.clearCallingIdentity();
|
|
||||||
try {
|
|
||||||
mExecutor.execute(() -> mLocalCallback.onAvailabilityChanged(config));
|
|
||||||
} finally {
|
|
||||||
restoreCallingIdentity(callingIdentity);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onQueryCapabilityConfiguration(int capability, int radioTech,
|
|
||||||
boolean isEnabled) {
|
|
||||||
// This is not used for public interfaces.
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onChangeCapabilityConfigurationError(int capability, int radioTech,
|
|
||||||
@ImsFeature.ImsCapabilityError int reason) {
|
|
||||||
// This is not used for public interfaces
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setExecutor(Executor executor) {
|
|
||||||
mExecutor = executor;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private final CapabilityBinder mBinder = new CapabilityBinder(this);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The availability of the feature's capabilities has changed to either available or
|
* The availability of the feature's capabilities has changed to either available or
|
||||||
* unavailable.
|
* unavailable.
|
||||||
@@ -136,22 +97,68 @@ public class ImsRcsManager {
|
|||||||
*
|
*
|
||||||
* @param capabilities The new availability of the capabilities.
|
* @param capabilities The new availability of the capabilities.
|
||||||
*/
|
*/
|
||||||
public void onAvailabilityChanged(@RcsUceAdapter.RcsImsCapabilityFlag int capabilities) {
|
void onAvailabilityChanged(@RcsUceAdapter.RcsImsCapabilityFlag int capabilities);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Receive the availability status changed from the ImsService and pass the status change to
|
||||||
|
* the associated {@link OnAvailabilityChangedListener}
|
||||||
|
*/
|
||||||
|
private static class AvailabilityCallbackAdapter {
|
||||||
|
|
||||||
|
private static class CapabilityBinder extends IImsCapabilityCallback.Stub {
|
||||||
|
private final OnAvailabilityChangedListener mOnAvailabilityChangedListener;
|
||||||
|
private final Executor mExecutor;
|
||||||
|
|
||||||
|
CapabilityBinder(OnAvailabilityChangedListener listener, Executor executor) {
|
||||||
|
mExecutor = executor;
|
||||||
|
mOnAvailabilityChangedListener = listener;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCapabilitiesStatusChanged(int config) {
|
||||||
|
if (mOnAvailabilityChangedListener == null) return;
|
||||||
|
|
||||||
|
long callingIdentity = Binder.clearCallingIdentity();
|
||||||
|
try {
|
||||||
|
mExecutor.execute(() ->
|
||||||
|
mOnAvailabilityChangedListener.onAvailabilityChanged(config));
|
||||||
|
} finally {
|
||||||
|
restoreCallingIdentity(callingIdentity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onQueryCapabilityConfiguration(int capability, int radioTech,
|
||||||
|
boolean isEnabled) {
|
||||||
|
// This is not used.
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onChangeCapabilityConfigurationError(int capability, int radioTech,
|
||||||
|
@ImsFeature.ImsCapabilityError int reason) {
|
||||||
|
// This is not used.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private final CapabilityBinder mBinder;
|
||||||
|
|
||||||
|
AvailabilityCallbackAdapter(@NonNull Executor executor,
|
||||||
|
@NonNull OnAvailabilityChangedListener listener) {
|
||||||
|
mBinder = new CapabilityBinder(listener, executor);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**@hide*/
|
/**@hide*/
|
||||||
public final IImsCapabilityCallback getBinder() {
|
public final IImsCapabilityCallback getBinder() {
|
||||||
return mBinder;
|
return mBinder;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setExecutor(Executor executor) {
|
|
||||||
mBinder.setExecutor(executor);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private final int mSubId;
|
private final int mSubId;
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private final BinderCacheManager<IImsRcsController> mBinderCache;
|
private final BinderCacheManager<IImsRcsController> mBinderCache;
|
||||||
|
private final Map<OnAvailabilityChangedListener, AvailabilityCallbackAdapter>
|
||||||
|
mAvailabilityChangedCallbacks;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Use {@link ImsManager#getImsRcsManager(int)} to create an instance of this class.
|
* Use {@link ImsManager#getImsRcsManager(int)} to create an instance of this class.
|
||||||
@@ -162,6 +169,7 @@ public class ImsRcsManager {
|
|||||||
mSubId = subId;
|
mSubId = subId;
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mBinderCache = binderCache;
|
mBinderCache = binderCache;
|
||||||
|
mAvailabilityChangedCallbacks = new HashMap<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -174,10 +182,23 @@ public class ImsRcsManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @hide
|
* Registers a {@link RegistrationManager.RegistrationCallback} with the system. When the
|
||||||
|
* callback is registered, it will initiate the callback c to be called with the current
|
||||||
|
* registration state.
|
||||||
|
*
|
||||||
|
* Requires Permission: {@link android.Manifest.permission#READ_PRECISE_PHONE_STATE
|
||||||
|
* READ_PRECISE_PHONE_STATE} or that the calling app has carrier privileges
|
||||||
|
* (see {@link android.telephony.TelephonyManager#hasCarrierPrivileges}).
|
||||||
|
*
|
||||||
|
* @param executor The executor the callback events should be run on.
|
||||||
|
* @param c The {@link RegistrationManager.RegistrationCallback} to be added.
|
||||||
|
* @see #unregisterImsRegistrationCallback(RegistrationManager.RegistrationCallback)
|
||||||
|
* @throws ImsException if the subscription associated with this callback is valid, but
|
||||||
|
* 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.
|
||||||
*/
|
*/
|
||||||
// @Override add back to RegistrationManager interface once public.
|
@RequiresPermission(Manifest.permission.READ_PRECISE_PHONE_STATE)
|
||||||
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
|
|
||||||
public void registerImsRegistrationCallback(
|
public void registerImsRegistrationCallback(
|
||||||
@NonNull @CallbackExecutor Executor executor,
|
@NonNull @CallbackExecutor Executor executor,
|
||||||
@NonNull RegistrationManager.RegistrationCallback c)
|
@NonNull RegistrationManager.RegistrationCallback c)
|
||||||
@@ -191,7 +212,7 @@ public class ImsRcsManager {
|
|||||||
|
|
||||||
IImsRcsController imsRcsController = getIImsRcsController();
|
IImsRcsController imsRcsController = getIImsRcsController();
|
||||||
if (imsRcsController == null) {
|
if (imsRcsController == null) {
|
||||||
Log.e(TAG, "Register registration callback: IImsRcsController is null");
|
Log.w(TAG, "Register registration callback: IImsRcsController is null");
|
||||||
throw new ImsException("Cannot find remote IMS service",
|
throw new ImsException("Cannot find remote IMS service",
|
||||||
ImsException.CODE_ERROR_SERVICE_UNAVAILABLE);
|
ImsException.CODE_ERROR_SERVICE_UNAVAILABLE);
|
||||||
}
|
}
|
||||||
@@ -207,10 +228,21 @@ public class ImsRcsManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @hide
|
* Removes an existing {@link RegistrationManager.RegistrationCallback}.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* Requires Permission: {@link android.Manifest.permission#READ_PRECISE_PHONE_STATE
|
||||||
|
* READ_PRECISE_PHONE_STATE} or that the calling app has carrier privileges
|
||||||
|
* (see {@link android.telephony.TelephonyManager#hasCarrierPrivileges}).
|
||||||
|
*
|
||||||
|
* @param c The {@link RegistrationManager.RegistrationCallback} to be removed.
|
||||||
|
* @see android.telephony.SubscriptionManager.OnSubscriptionsChangedListener
|
||||||
|
* @see #registerImsRegistrationCallback(Executor, RegistrationCallback)
|
||||||
*/
|
*/
|
||||||
// @Override add back to RegistrationManager interface once public.
|
@RequiresPermission(Manifest.permission.READ_PRECISE_PHONE_STATE)
|
||||||
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
|
|
||||||
public void unregisterImsRegistrationCallback(
|
public void unregisterImsRegistrationCallback(
|
||||||
@NonNull RegistrationManager.RegistrationCallback c) {
|
@NonNull RegistrationManager.RegistrationCallback c) {
|
||||||
if (c == null) {
|
if (c == null) {
|
||||||
@@ -219,7 +251,7 @@ public class ImsRcsManager {
|
|||||||
|
|
||||||
IImsRcsController imsRcsController = getIImsRcsController();
|
IImsRcsController imsRcsController = getIImsRcsController();
|
||||||
if (imsRcsController == null) {
|
if (imsRcsController == null) {
|
||||||
Log.e(TAG, "Unregister registration callback: IImsRcsController is null");
|
Log.w(TAG, "Unregister registration callback: IImsRcsController is null");
|
||||||
throw new IllegalStateException("Cannot find remote IMS service");
|
throw new IllegalStateException("Cannot find remote IMS service");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -231,10 +263,21 @@ public class ImsRcsManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @hide
|
* Gets the registration state of the IMS service.
|
||||||
|
*
|
||||||
|
* Requires Permission: {@link android.Manifest.permission#READ_PRECISE_PHONE_STATE
|
||||||
|
* READ_PRECISE_PHONE_STATE} or that the calling app has carrier privileges
|
||||||
|
* (see {@link android.telephony.TelephonyManager#hasCarrierPrivileges}).
|
||||||
|
*
|
||||||
|
* @param executor The {@link Executor} that will be used to call the IMS registration state
|
||||||
|
* callback.
|
||||||
|
* @param stateCallback A callback called on the supplied {@link Executor} that will contain the
|
||||||
|
* registration state of the IMS service, which will be one of the
|
||||||
|
* following: {@link RegistrationManager#REGISTRATION_STATE_NOT_REGISTERED},
|
||||||
|
* {@link RegistrationManager#REGISTRATION_STATE_REGISTERING}, or
|
||||||
|
* {@link RegistrationManager#REGISTRATION_STATE_REGISTERED}.
|
||||||
*/
|
*/
|
||||||
// @Override add back to RegistrationManager interface once public.
|
@RequiresPermission(Manifest.permission.READ_PRECISE_PHONE_STATE)
|
||||||
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
|
|
||||||
public void getRegistrationState(@NonNull @CallbackExecutor Executor executor,
|
public void getRegistrationState(@NonNull @CallbackExecutor Executor executor,
|
||||||
@NonNull @RegistrationManager.ImsRegistrationState Consumer<Integer> stateCallback) {
|
@NonNull @RegistrationManager.ImsRegistrationState Consumer<Integer> stateCallback) {
|
||||||
if (stateCallback == null) {
|
if (stateCallback == null) {
|
||||||
@@ -246,7 +289,7 @@ public class ImsRcsManager {
|
|||||||
|
|
||||||
IImsRcsController imsRcsController = getIImsRcsController();
|
IImsRcsController imsRcsController = getIImsRcsController();
|
||||||
if (imsRcsController == null) {
|
if (imsRcsController == null) {
|
||||||
Log.e(TAG, "Get registration state error: IImsRcsController is null");
|
Log.w(TAG, "Get registration state error: IImsRcsController is null");
|
||||||
throw new IllegalStateException("Cannot find remote IMS service");
|
throw new IllegalStateException("Cannot find remote IMS service");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -263,9 +306,20 @@ public class ImsRcsManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @hide
|
* Gets the Transport Type associated with the current IMS registration.
|
||||||
|
*
|
||||||
|
* Requires Permission: {@link android.Manifest.permission#READ_PRECISE_PHONE_STATE
|
||||||
|
* READ_PRECISE_PHONE_STATE} or that the calling app has carrier privileges
|
||||||
|
* (see {@link android.telephony.TelephonyManager#hasCarrierPrivileges}).
|
||||||
|
*
|
||||||
|
* @param executor The {@link Executor} that will be used to call the transportTypeCallback.
|
||||||
|
* @param transportTypeCallback The transport type associated with the current IMS registration,
|
||||||
|
* which will be one of following:
|
||||||
|
* {@see AccessNetworkConstants#TRANSPORT_TYPE_WWAN},
|
||||||
|
* {@see AccessNetworkConstants#TRANSPORT_TYPE_WLAN}, or
|
||||||
|
* {@see AccessNetworkConstants#TRANSPORT_TYPE_INVALID}.
|
||||||
*/
|
*/
|
||||||
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
|
@RequiresPermission(Manifest.permission.READ_PRECISE_PHONE_STATE)
|
||||||
public void getRegistrationTransportType(@NonNull @CallbackExecutor Executor executor,
|
public void getRegistrationTransportType(@NonNull @CallbackExecutor Executor executor,
|
||||||
@NonNull @AccessNetworkConstants.TransportType
|
@NonNull @AccessNetworkConstants.TransportType
|
||||||
Consumer<Integer> transportTypeCallback) {
|
Consumer<Integer> transportTypeCallback) {
|
||||||
@@ -278,7 +332,7 @@ public class ImsRcsManager {
|
|||||||
|
|
||||||
IImsRcsController imsRcsController = getIImsRcsController();
|
IImsRcsController imsRcsController = getIImsRcsController();
|
||||||
if (imsRcsController == null) {
|
if (imsRcsController == null) {
|
||||||
Log.e(TAG, "Get registration transport type error: IImsRcsController is null");
|
Log.w(TAG, "Get registration transport type error: IImsRcsController is null");
|
||||||
throw new IllegalStateException("Cannot find remote IMS service");
|
throw new IllegalStateException("Cannot find remote IMS service");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -296,31 +350,33 @@ public class ImsRcsManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Registers an {@link AvailabilityCallback} with the system, which will provide RCS
|
* Add an {@link OnAvailabilityChangedListener} with the system, which will provide RCS
|
||||||
* availability updates for the subscription specified.
|
* availability updates for the subscription specified.
|
||||||
*
|
*
|
||||||
* Use {@link SubscriptionManager.OnSubscriptionsChangedListener} to listen to
|
* Use {@link SubscriptionManager.OnSubscriptionsChangedListener} to listen to
|
||||||
* subscription changed events and call
|
* subscription changed events and call
|
||||||
* {@link #unregisterRcsAvailabilityCallback(AvailabilityCallback)} to clean up after a
|
* {@link #removeOnAvailabilityChangedListener(OnAvailabilityChangedListener)} to clean up
|
||||||
* subscription is removed.
|
* after a subscription is removed.
|
||||||
* <p>
|
* <p>
|
||||||
* When the callback is registered, it will initiate the callback c to be called with the
|
* When the listener is registered, it will initiate the callback listener to be called with
|
||||||
* current capabilities.
|
* the current capabilities.
|
||||||
*
|
*
|
||||||
* @param executor The executor the callback events should be run on.
|
* @param executor The executor the callback events should be run on.
|
||||||
* @param c The RCS {@link AvailabilityCallback} to be registered.
|
* @param listener The RCS {@link OnAvailabilityChangedListener} to be registered.
|
||||||
* @see #unregisterRcsAvailabilityCallback(AvailabilityCallback)
|
* @see #removeOnAvailabilityChangedListener(OnAvailabilityChangedListener)
|
||||||
* @throws ImsException if the subscription associated with this instance of
|
* @throws ImsException if the subscription associated with this instance of
|
||||||
* {@link ImsRcsManager} is valid, but the ImsService associated with the subscription is not
|
* {@link ImsRcsManager} is valid, but the ImsService associated with the subscription is not
|
||||||
* available. This can happen if the ImsService has crashed, for example, or if the subscription
|
* available. This can happen if the ImsService has crashed, for example, or if the subscription
|
||||||
* becomes inactive. See {@link ImsException#getCode()} for more information on the error codes.
|
* becomes inactive. See {@link ImsException#getCode()} for more information on the error codes.
|
||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
|
@SystemApi
|
||||||
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
|
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
|
||||||
public void registerRcsAvailabilityCallback(@NonNull @CallbackExecutor Executor executor,
|
public void addOnAvailabilityChangedListener(@NonNull @CallbackExecutor Executor executor,
|
||||||
@NonNull AvailabilityCallback c) throws ImsException {
|
@NonNull OnAvailabilityChangedListener listener) throws ImsException {
|
||||||
if (c == null) {
|
if (listener == null) {
|
||||||
throw new IllegalArgumentException("Must include a non-null AvailabilityCallback.");
|
throw new IllegalArgumentException("Must include a non-null"
|
||||||
|
+ "OnAvailabilityChangedListener.");
|
||||||
}
|
}
|
||||||
if (executor == null) {
|
if (executor == null) {
|
||||||
throw new IllegalArgumentException("Must include a non-null Executor.");
|
throw new IllegalArgumentException("Must include a non-null Executor.");
|
||||||
@@ -328,56 +384,61 @@ public class ImsRcsManager {
|
|||||||
|
|
||||||
IImsRcsController imsRcsController = getIImsRcsController();
|
IImsRcsController imsRcsController = getIImsRcsController();
|
||||||
if (imsRcsController == null) {
|
if (imsRcsController == null) {
|
||||||
Log.e(TAG, "Register availability callback: IImsRcsController is null");
|
Log.w(TAG, "Add availability changed listener: IImsRcsController is null");
|
||||||
throw new ImsException("Cannot find remote IMS service",
|
throw new ImsException("Cannot find remote IMS service",
|
||||||
ImsException.CODE_ERROR_SERVICE_UNAVAILABLE);
|
ImsException.CODE_ERROR_SERVICE_UNAVAILABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
c.setExecutor(executor);
|
AvailabilityCallbackAdapter adapter =
|
||||||
|
addAvailabilityChangedListenerToCollection(executor, listener);
|
||||||
try {
|
try {
|
||||||
imsRcsController.registerRcsAvailabilityCallback(mSubId, c.getBinder());
|
imsRcsController.registerRcsAvailabilityCallback(mSubId, adapter.getBinder());
|
||||||
|
|
||||||
} catch (ServiceSpecificException e) {
|
} catch (ServiceSpecificException e) {
|
||||||
throw new ImsException(e.toString(), e.errorCode);
|
throw new ImsException(e.toString(), e.errorCode);
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
Log.e(TAG, "Error calling IImsRcsController#registerRcsAvailabilityCallback", e);
|
Log.w(TAG, "Error calling IImsRcsController#registerRcsAvailabilityCallback", e);
|
||||||
throw new ImsException("Remote IMS Service is not available",
|
throw new ImsException("Remote IMS Service is not available",
|
||||||
ImsException.CODE_ERROR_SERVICE_UNAVAILABLE);
|
ImsException.CODE_ERROR_SERVICE_UNAVAILABLE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes an existing RCS {@link AvailabilityCallback}.
|
* Removes an existing RCS {@link OnAvailabilityChangedListener}.
|
||||||
* <p>
|
* <p>
|
||||||
* When the subscription associated with this callback is removed (SIM removed, ESIM swap,
|
* When the subscription associated with this callback is removed (SIM removed, ESIM swap,
|
||||||
* etc...), this callback will automatically be unregistered. If this method is called for an
|
* etc...), this callback will automatically be unregistered. If this method is called for an
|
||||||
* inactive subscription, it will result in a no-op.
|
* inactive subscription, it will result in a no-op.
|
||||||
* @param c The RCS {@link AvailabilityCallback} to be removed.
|
* @param listener The RCS {@link OnAvailabilityChangedListener} to be removed.
|
||||||
* @see #registerRcsAvailabilityCallback(Executor, AvailabilityCallback)
|
* @see #addOnAvailabilityChangedListener(Executor, OnAvailabilityChangedListener)
|
||||||
* @throws ImsException if the IMS service is not available when calling this method.
|
* @throws ImsException if the IMS service is not available when calling this method.
|
||||||
* See {@link ImsException#getCode()} for more information on the error codes.
|
* See {@link ImsException#getCode()} for more information on the error codes.
|
||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
|
@SystemApi
|
||||||
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
|
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
|
||||||
public void unregisterRcsAvailabilityCallback(@NonNull AvailabilityCallback c)
|
public void removeOnAvailabilityChangedListener(
|
||||||
throws ImsException {
|
@NonNull OnAvailabilityChangedListener listener) {
|
||||||
if (c == null) {
|
if (listener == null) {
|
||||||
throw new IllegalArgumentException("Must include a non-null AvailabilityCallback.");
|
throw new IllegalArgumentException("Must include a non-null"
|
||||||
|
+ "OnAvailabilityChangedListener.");
|
||||||
}
|
}
|
||||||
|
|
||||||
IImsRcsController imsRcsController = getIImsRcsController();
|
IImsRcsController imsRcsController = getIImsRcsController();
|
||||||
if (imsRcsController == null) {
|
if (imsRcsController == null) {
|
||||||
Log.e(TAG, "Unregister availability callback: IImsRcsController is null");
|
Log.w(TAG, "Remove availability changed listener: IImsRcsController is null");
|
||||||
throw new ImsException("Cannot find remote IMS service",
|
return;
|
||||||
ImsException.CODE_ERROR_SERVICE_UNAVAILABLE);
|
}
|
||||||
|
|
||||||
|
AvailabilityCallbackAdapter callback =
|
||||||
|
removeAvailabilityChangedListenerFromCollection(listener);
|
||||||
|
if (callback == null) {
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
imsRcsController.unregisterRcsAvailabilityCallback(mSubId, c.getBinder());
|
imsRcsController.unregisterRcsAvailabilityCallback(mSubId, callback.getBinder());
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
Log.e(TAG, "Error calling IImsRcsController#unregisterRcsAvailabilityCallback", e);
|
Log.w(TAG, "Error calling IImsRcsController#unregisterRcsAvailabilityCallback", e);
|
||||||
throw new ImsException("Remote IMS Service is not available",
|
|
||||||
ImsException.CODE_ERROR_SERVICE_UNAVAILABLE);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -388,25 +449,24 @@ public class ImsRcsManager {
|
|||||||
* RCS capabilities provided over-the-top by applications.
|
* RCS capabilities provided over-the-top by applications.
|
||||||
*
|
*
|
||||||
* @param capability The RCS capability to query.
|
* @param capability The RCS capability to query.
|
||||||
* @param radioTech The radio tech that this capability failed for, defined as
|
* @param radioTech The radio technology type that we are querying.
|
||||||
* {@link ImsRegistrationImplBase#REGISTRATION_TECH_LTE} or
|
|
||||||
* {@link ImsRegistrationImplBase#REGISTRATION_TECH_IWLAN}.
|
|
||||||
* @return true if the RCS capability is capable for this subscription, false otherwise. This
|
* @return true if the RCS capability is capable for this subscription, false otherwise. This
|
||||||
* does not necessarily mean that we are registered for IMS and the capability is available, but
|
* does not necessarily mean that we are registered for IMS and the capability is available, but
|
||||||
* rather the subscription is capable of this service over IMS.
|
* rather the subscription is capable of this service over IMS.
|
||||||
* @see #isAvailable(int)
|
* @see #isAvailable(int, int)
|
||||||
* @see android.telephony.CarrierConfigManager#KEY_USE_RCS_PRESENCE_BOOL
|
* @see android.telephony.CarrierConfigManager#KEY_USE_RCS_PRESENCE_BOOL
|
||||||
* @see android.telephony.CarrierConfigManager.Ims#KEY_ENABLE_PRESENCE_CAPABILITY_EXCHANGE_BOOL
|
* @see android.telephony.CarrierConfigManager.Ims#KEY_ENABLE_PRESENCE_CAPABILITY_EXCHANGE_BOOL
|
||||||
* @throws ImsException if the IMS service is not available when calling this method.
|
* @throws ImsException if the IMS service is not available when calling this method.
|
||||||
* See {@link ImsException#getCode()} for more information on the error codes.
|
* See {@link ImsException#getCode()} for more information on the error codes.
|
||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
|
@SystemApi
|
||||||
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
|
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
|
||||||
public boolean isCapable(@RcsUceAdapter.RcsImsCapabilityFlag int capability,
|
public boolean isCapable(@RcsUceAdapter.RcsImsCapabilityFlag int capability,
|
||||||
@ImsRegistrationImplBase.ImsRegistrationTech int radioTech) throws ImsException {
|
@ImsRegistrationImplBase.ImsRegistrationTech int radioTech) throws ImsException {
|
||||||
IImsRcsController imsRcsController = getIImsRcsController();
|
IImsRcsController imsRcsController = getIImsRcsController();
|
||||||
if (imsRcsController == null) {
|
if (imsRcsController == null) {
|
||||||
Log.e(TAG, "isCapable: IImsRcsController is null");
|
Log.w(TAG, "isCapable: IImsRcsController is null");
|
||||||
throw new ImsException("Cannot find remote IMS service",
|
throw new ImsException("Cannot find remote IMS service",
|
||||||
ImsException.CODE_ERROR_SERVICE_UNAVAILABLE);
|
ImsException.CODE_ERROR_SERVICE_UNAVAILABLE);
|
||||||
}
|
}
|
||||||
@@ -414,7 +474,7 @@ public class ImsRcsManager {
|
|||||||
try {
|
try {
|
||||||
return imsRcsController.isCapable(mSubId, capability, radioTech);
|
return imsRcsController.isCapable(mSubId, capability, radioTech);
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
Log.e(TAG, "Error calling IImsRcsController#isCapable", e);
|
Log.w(TAG, "Error calling IImsRcsController#isCapable", e);
|
||||||
throw new ImsException("Remote IMS Service is not available",
|
throw new ImsException("Remote IMS Service is not available",
|
||||||
ImsException.CODE_ERROR_SERVICE_UNAVAILABLE);
|
ImsException.CODE_ERROR_SERVICE_UNAVAILABLE);
|
||||||
}
|
}
|
||||||
@@ -427,6 +487,7 @@ public class ImsRcsManager {
|
|||||||
* RCS capabilities provided by over-the-top by applications.
|
* RCS capabilities provided by over-the-top by applications.
|
||||||
*
|
*
|
||||||
* @param capability the RCS capability to query.
|
* @param capability the RCS capability to query.
|
||||||
|
* @param radioTech The radio technology type that we are querying.
|
||||||
* @return true if the RCS capability is currently available for the associated subscription,
|
* @return true if the RCS capability is currently available for the associated subscription,
|
||||||
* false otherwise. If the capability is available, IMS is registered and the service is
|
* false otherwise. If the capability is available, IMS is registered and the service is
|
||||||
* currently available over IMS.
|
* currently available over IMS.
|
||||||
@@ -435,25 +496,57 @@ public class ImsRcsManager {
|
|||||||
* See {@link ImsException#getCode()} for more information on the error codes.
|
* See {@link ImsException#getCode()} for more information on the error codes.
|
||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
|
@SystemApi
|
||||||
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
|
@RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
|
||||||
public boolean isAvailable(@RcsUceAdapter.RcsImsCapabilityFlag int capability)
|
public boolean isAvailable(@RcsUceAdapter.RcsImsCapabilityFlag int capability,
|
||||||
|
@ImsRegistrationImplBase.ImsRegistrationTech int radioTech)
|
||||||
throws ImsException {
|
throws ImsException {
|
||||||
IImsRcsController imsRcsController = getIImsRcsController();
|
IImsRcsController imsRcsController = getIImsRcsController();
|
||||||
if (imsRcsController == null) {
|
if (imsRcsController == null) {
|
||||||
Log.e(TAG, "isAvailable: IImsRcsController is null");
|
Log.w(TAG, "isAvailable: IImsRcsController is null");
|
||||||
throw new ImsException("Cannot find remote IMS service",
|
throw new ImsException("Cannot find remote IMS service",
|
||||||
ImsException.CODE_ERROR_SERVICE_UNAVAILABLE);
|
ImsException.CODE_ERROR_SERVICE_UNAVAILABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return imsRcsController.isAvailable(mSubId, capability);
|
return imsRcsController.isAvailable(mSubId, capability, radioTech);
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
Log.e(TAG, "Error calling IImsRcsController#isAvailable", e);
|
Log.w(TAG, "Error calling IImsRcsController#isAvailable", e);
|
||||||
throw new ImsException("Remote IMS Service is not available",
|
throw new ImsException("Remote IMS Service is not available",
|
||||||
ImsException.CODE_ERROR_SERVICE_UNAVAILABLE);
|
ImsException.CODE_ERROR_SERVICE_UNAVAILABLE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add the {@link OnAvailabilityChangedListener} to collection for tracking.
|
||||||
|
* @param executor The executor that will be used when the publish state is changed and the
|
||||||
|
* {@link OnAvailabilityChangedListener} is called.
|
||||||
|
* @param listener The {@link OnAvailabilityChangedListener} to call the publish state changed.
|
||||||
|
* @return The {@link AvailabilityCallbackAdapter} to wrapper the
|
||||||
|
* {@link OnAvailabilityChangedListener}
|
||||||
|
*/
|
||||||
|
private AvailabilityCallbackAdapter addAvailabilityChangedListenerToCollection(
|
||||||
|
@NonNull Executor executor, @NonNull OnAvailabilityChangedListener listener) {
|
||||||
|
AvailabilityCallbackAdapter adapter = new AvailabilityCallbackAdapter(executor, listener);
|
||||||
|
synchronized (mAvailabilityChangedCallbacks) {
|
||||||
|
mAvailabilityChangedCallbacks.put(listener, adapter);
|
||||||
|
}
|
||||||
|
return adapter;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the existing {@link OnAvailabilityChangedListener} from the collection.
|
||||||
|
* @param listener The {@link OnAvailabilityChangedListener} to remove from the collection.
|
||||||
|
* @return The wrapper class {@link AvailabilityCallbackAdapter} associated with the
|
||||||
|
* {@link OnAvailabilityChangedListener}.
|
||||||
|
*/
|
||||||
|
private AvailabilityCallbackAdapter removeAvailabilityChangedListenerFromCollection(
|
||||||
|
@NonNull OnAvailabilityChangedListener listener) {
|
||||||
|
synchronized (mAvailabilityChangedCallbacks) {
|
||||||
|
return mAvailabilityChangedCallbacks.remove(listener);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private IImsRcsController getIImsRcsController() {
|
private IImsRcsController getIImsRcsController() {
|
||||||
IBinder binder = TelephonyFrameworkInitializer
|
IBinder binder = TelephonyFrameworkInitializer
|
||||||
.getTelephonyServiceManager()
|
.getTelephonyServiceManager()
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ interface IImsRcsController {
|
|||||||
void registerRcsAvailabilityCallback(int subId, IImsCapabilityCallback c);
|
void registerRcsAvailabilityCallback(int subId, IImsCapabilityCallback c);
|
||||||
void unregisterRcsAvailabilityCallback(int subId, IImsCapabilityCallback c);
|
void unregisterRcsAvailabilityCallback(int subId, IImsCapabilityCallback c);
|
||||||
boolean isCapable(int subId, int capability, int radioTech);
|
boolean isCapable(int subId, int capability, int radioTech);
|
||||||
boolean isAvailable(int subId, int capability);
|
boolean isAvailable(int subId, int capability, int radioTech);
|
||||||
|
|
||||||
// ImsUceAdapter specific
|
// ImsUceAdapter specific
|
||||||
void requestCapabilities(int subId, String callingPackage, String callingFeatureId,
|
void requestCapabilities(int subId, String callingPackage, String callingFeatureId,
|
||||||
|
|||||||
@@ -36,12 +36,9 @@ import java.util.Set;
|
|||||||
public final class CapabilityChangeRequest implements Parcelable {
|
public final class CapabilityChangeRequest implements Parcelable {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Contains a feature capability, defined as
|
* Contains a MMTEL feature capability {@link MmTelFeature.MmTelCapabilities} and RCS feature
|
||||||
* {@link MmTelFeature.MmTelCapabilities#CAPABILITY_TYPE_VOICE},
|
* capability {@link RcsFeature.RcsImsCapabilities}, along with an associated technology,
|
||||||
* {@link MmTelFeature.MmTelCapabilities#CAPABILITY_TYPE_VIDEO},
|
* defined as
|
||||||
* {@link MmTelFeature.MmTelCapabilities#CAPABILITY_TYPE_UT}, or
|
|
||||||
* {@link MmTelFeature.MmTelCapabilities#CAPABILITY_TYPE_SMS},
|
|
||||||
* along with an associated technology, defined as
|
|
||||||
* {@link ImsRegistrationImplBase#REGISTRATION_TECH_LTE} or
|
* {@link ImsRegistrationImplBase#REGISTRATION_TECH_LTE} or
|
||||||
* {@link ImsRegistrationImplBase#REGISTRATION_TECH_IWLAN}
|
* {@link ImsRegistrationImplBase#REGISTRATION_TECH_IWLAN}
|
||||||
*/
|
*/
|
||||||
@@ -49,7 +46,7 @@ public final class CapabilityChangeRequest implements Parcelable {
|
|||||||
private final int mCapability;
|
private final int mCapability;
|
||||||
private final int radioTech;
|
private final int radioTech;
|
||||||
|
|
||||||
public CapabilityPair(@MmTelFeature.MmTelCapabilities.MmTelCapability int capability,
|
public CapabilityPair(int capability,
|
||||||
@ImsRegistrationImplBase.ImsRegistrationTech int radioTech) {
|
@ImsRegistrationImplBase.ImsRegistrationTech int radioTech) {
|
||||||
this.mCapability = capability;
|
this.mCapability = capability;
|
||||||
this.radioTech = radioTech;
|
this.radioTech = radioTech;
|
||||||
@@ -80,13 +77,10 @@ public final class CapabilityChangeRequest implements Parcelable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return The stored capability, defined as
|
* @return The stored capability, defined as {@link MmTelFeature.MmTelCapabilities} and
|
||||||
* {@link MmTelFeature.MmTelCapabilities#CAPABILITY_TYPE_VOICE},
|
* {@link RcsFeature.RcsImsCapabilities}
|
||||||
* {@link MmTelFeature.MmTelCapabilities#CAPABILITY_TYPE_VIDEO},
|
|
||||||
* {@link MmTelFeature.MmTelCapabilities#CAPABILITY_TYPE_UT}, or
|
|
||||||
* {@link MmTelFeature.MmTelCapabilities#CAPABILITY_TYPE_SMS}
|
|
||||||
*/
|
*/
|
||||||
public @MmTelFeature.MmTelCapabilities.MmTelCapability int getCapability() {
|
public int getCapability() {
|
||||||
return mCapability;
|
return mCapability;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -123,12 +117,11 @@ public final class CapabilityChangeRequest implements Parcelable {
|
|||||||
* Add one or many capabilities to the request to be enabled.
|
* Add one or many capabilities to the request to be enabled.
|
||||||
*
|
*
|
||||||
* @param capabilities A bitfield of capabilities to enable, valid values are defined in
|
* @param capabilities A bitfield of capabilities to enable, valid values are defined in
|
||||||
* {@link MmTelFeature.MmTelCapabilities.MmTelCapability}.
|
* {@link MmTelFeature.MmTelCapabilities} and {@link RcsFeature.RcsImsCapabilities}.
|
||||||
* @param radioTech the radio tech that these capabilities should be enabled for, valid
|
* @param radioTech the radio tech that these capabilities should be enabled for, valid
|
||||||
* values are in {@link ImsRegistrationImplBase.ImsRegistrationTech}.
|
* values are in {@link ImsRegistrationImplBase.ImsRegistrationTech}.
|
||||||
*/
|
*/
|
||||||
public void addCapabilitiesToEnableForTech(
|
public void addCapabilitiesToEnableForTech(int capabilities,
|
||||||
@MmTelFeature.MmTelCapabilities.MmTelCapability int capabilities,
|
|
||||||
@ImsRegistrationImplBase.ImsRegistrationTech int radioTech) {
|
@ImsRegistrationImplBase.ImsRegistrationTech int radioTech) {
|
||||||
addAllCapabilities(mCapabilitiesToEnable, capabilities, radioTech);
|
addAllCapabilities(mCapabilitiesToEnable, capabilities, radioTech);
|
||||||
}
|
}
|
||||||
@@ -136,12 +129,11 @@ public final class CapabilityChangeRequest implements Parcelable {
|
|||||||
/**
|
/**
|
||||||
* Add one or many capabilities to the request to be disabled.
|
* Add one or many capabilities to the request to be disabled.
|
||||||
* @param capabilities A bitfield of capabilities to diable, valid values are defined in
|
* @param capabilities A bitfield of capabilities to diable, valid values are defined in
|
||||||
* {@link MmTelFeature.MmTelCapabilities.MmTelCapability}.
|
* {@link MmTelFeature.MmTelCapabilities} and {@link RcsFeature.RcsImsCapabilities}.
|
||||||
* @param radioTech the radio tech that these capabilities should be disabled for, valid
|
* @param radioTech the radio tech that these capabilities should be disabled for, valid
|
||||||
* values are in {@link ImsRegistrationImplBase.ImsRegistrationTech}.
|
* values are in {@link ImsRegistrationImplBase.ImsRegistrationTech}.
|
||||||
*/
|
*/
|
||||||
public void addCapabilitiesToDisableForTech(
|
public void addCapabilitiesToDisableForTech(int capabilities,
|
||||||
@MmTelFeature.MmTelCapabilities.MmTelCapability int capabilities,
|
|
||||||
@ImsRegistrationImplBase.ImsRegistrationTech int radioTech) {
|
@ImsRegistrationImplBase.ImsRegistrationTech int radioTech) {
|
||||||
addAllCapabilities(mCapabilitiesToDisable, capabilities, radioTech);
|
addAllCapabilities(mCapabilitiesToDisable, capabilities, radioTech);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -194,7 +194,6 @@ public class RcsFeature extends ImsFeature {
|
|||||||
* of the capability and notify the capability status as true using
|
* of the capability and notify the capability status as true using
|
||||||
* {@link #notifyCapabilitiesStatusChanged(RcsImsCapabilities)}. This will signal to the
|
* {@link #notifyCapabilitiesStatusChanged(RcsImsCapabilities)}. This will signal to the
|
||||||
* framework that the capability is available for usage.
|
* framework that the capability is available for usage.
|
||||||
* @hide
|
|
||||||
*/
|
*/
|
||||||
public static class RcsImsCapabilities extends Capabilities {
|
public static class RcsImsCapabilities extends Capabilities {
|
||||||
/** @hide*/
|
/** @hide*/
|
||||||
@@ -226,12 +225,21 @@ public class RcsFeature extends ImsFeature {
|
|||||||
*/
|
*/
|
||||||
public static final int CAPABILITY_TYPE_PRESENCE_UCE = 1 << 1;
|
public static final int CAPABILITY_TYPE_PRESENCE_UCE = 1 << 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.
|
||||||
|
*/
|
||||||
public RcsImsCapabilities(@RcsUceAdapter.RcsImsCapabilityFlag int capabilities) {
|
public RcsImsCapabilities(@RcsUceAdapter.RcsImsCapabilityFlag int capabilities) {
|
||||||
super(capabilities);
|
super(capabilities);
|
||||||
}
|
}
|
||||||
|
|
||||||
private RcsImsCapabilities(Capabilities c) {
|
/**
|
||||||
super(c.getMask());
|
* Create a new {@link RcsImsCapabilities} instance with the provided capabilities.
|
||||||
|
* @param capabilities The capabilities instance that are supported for RCS
|
||||||
|
*/
|
||||||
|
private RcsImsCapabilities(Capabilities capabilities) {
|
||||||
|
super(capabilities.getMask());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -307,7 +315,7 @@ public class RcsFeature extends ImsFeature {
|
|||||||
* set, the {@link RcsFeature} has brought up the capability and is ready for framework
|
* set, the {@link RcsFeature} has brought up the capability and is ready for framework
|
||||||
* requests. To change the status of the capabilities
|
* requests. To change the status of the capabilities
|
||||||
* {@link #notifyCapabilitiesStatusChanged(RcsImsCapabilities)} should be called.
|
* {@link #notifyCapabilitiesStatusChanged(RcsImsCapabilities)} should be called.
|
||||||
* @hide
|
* @return A copy of the current RcsFeature capability status.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public @NonNull final RcsImsCapabilities queryCapabilityStatus() {
|
public @NonNull final RcsImsCapabilities queryCapabilityStatus() {
|
||||||
@@ -318,13 +326,13 @@ public class RcsFeature extends ImsFeature {
|
|||||||
* Notify the framework that the capabilities status has changed. If a capability is enabled,
|
* Notify the framework that the capabilities status has changed. If a capability is enabled,
|
||||||
* this signals to the framework that the capability has been initialized and is ready.
|
* this signals to the framework that the capability has been initialized and is ready.
|
||||||
* Call {@link #queryCapabilityStatus()} to return the current capability status.
|
* Call {@link #queryCapabilityStatus()} to return the current capability status.
|
||||||
* @hide
|
* @param capabilities The current capability status of the RcsFeature.
|
||||||
*/
|
*/
|
||||||
public final void notifyCapabilitiesStatusChanged(@NonNull RcsImsCapabilities c) {
|
public final void notifyCapabilitiesStatusChanged(@NonNull RcsImsCapabilities capabilities) {
|
||||||
if (c == null) {
|
if (capabilities == null) {
|
||||||
throw new IllegalArgumentException("RcsImsCapabilities must be non-null!");
|
throw new IllegalArgumentException("RcsImsCapabilities must be non-null!");
|
||||||
}
|
}
|
||||||
super.notifyCapabilitiesStatusChanged(c);
|
super.notifyCapabilitiesStatusChanged(capabilities);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -333,7 +341,9 @@ public class RcsFeature extends ImsFeature {
|
|||||||
* {@link #changeEnabledCapabilities(CapabilityChangeRequest, CapabilityCallbackProxy)} to
|
* {@link #changeEnabledCapabilities(CapabilityChangeRequest, CapabilityCallbackProxy)} to
|
||||||
* enable or disable capability A, this method should return the correct configuration for
|
* enable or disable capability A, this method should return the correct configuration for
|
||||||
* capability A afterwards (until it has changed).
|
* capability A afterwards (until it has changed).
|
||||||
* @hide
|
* @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.
|
||||||
*/
|
*/
|
||||||
public boolean queryCapabilityConfiguration(
|
public boolean queryCapabilityConfiguration(
|
||||||
@RcsUceAdapter.RcsImsCapabilityFlag int capability,
|
@RcsUceAdapter.RcsImsCapabilityFlag int capability,
|
||||||
@@ -355,11 +365,12 @@ public class RcsFeature extends ImsFeature {
|
|||||||
* If for some reason one or more of these capabilities can not be enabled/disabled,
|
* If for some reason one or more of these capabilities can not be enabled/disabled,
|
||||||
* {@link CapabilityCallbackProxy#onChangeCapabilityConfigurationError(int, int, int)} should
|
* {@link CapabilityCallbackProxy#onChangeCapabilityConfigurationError(int, int, int)} should
|
||||||
* be called for each capability change that resulted in an error.
|
* be called for each capability change that resulted in an error.
|
||||||
* @hide
|
* @param request The request to change the capability.
|
||||||
|
* @param callback To notify the framework that the result of the capability changes.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void changeEnabledCapabilities(@NonNull CapabilityChangeRequest request,
|
public void changeEnabledCapabilities(@NonNull CapabilityChangeRequest request,
|
||||||
@NonNull CapabilityCallbackProxy c) {
|
@NonNull CapabilityCallbackProxy callback) {
|
||||||
// Base Implementation - Override to provide functionality
|
// Base Implementation - Override to provide functionality
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user