| /* |
| * Copyright (C) 2020 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.stub; |
| |
| import android.annotation.NonNull; |
| import android.annotation.SystemApi; |
| import android.telephony.ims.DelegateRegistrationState; |
| import android.telephony.ims.DelegateRequest; |
| import android.telephony.ims.FeatureTagState; |
| import android.telephony.ims.SipDelegateConfiguration; |
| import android.telephony.ims.SipDelegateConnection; |
| import android.telephony.ims.SipDelegateImsConfiguration; |
| import android.telephony.ims.SipDelegateManager; |
| |
| import java.util.Set; |
| |
| /** |
| * The callback associated with a {@link SipDelegateConnection} that manages the state of the |
| * SipDelegateConnection. |
| * <p> |
| * After {@link SipDelegateManager#createSipDelegate} is used to request a new |
| * {@link SipDelegateConnection} be created, {@link #onCreated} will be called with the |
| * {@link SipDelegateConnection} instance that must be used to communicate with the remote |
| * {@link SipDelegate}. |
| * <p> |
| * After, {@link #onFeatureTagStatusChanged} will always be called at least once with the current |
| * status of the feature tags that have been requested. The application may receive multiple |
| * {@link #onFeatureTagStatusChanged} callbacks over the lifetime of the associated |
| * {@link SipDelegateConnection}, which will signal changes to how SIP messages associated with |
| * those feature tags will be handled. |
| * <p> |
| * In order to start sending SIP messages, the SIP configuration parameters will need to be |
| * received, so the messaging application should make no assumptions about these parameters and wait |
| * until {@link #onConfigurationChanged(SipDelegateConfiguration)} has been called. This is |
| * guaranteed to happen after the first {@link #onFeatureTagStatusChanged} if there is at least one |
| * feature tag that has been successfully associated with the {@link SipDelegateConnection}. If all |
| * feature tags were denied, no IMS configuration will be sent. |
| * <p> |
| * The {@link SipDelegateConnection} will stay associated with this RCS application until either the |
| * RCS application calls {@link SipDelegateManager#destroySipDelegate} or telephony destroys the |
| * {@link SipDelegateConnection}. In both cases, {@link #onDestroyed(int)} will be called. |
| * Telephony destroying the {@link SipDelegateConnection} instance is rare and will only happen in |
| * rare cases, such as if telephony itself or IMS service dies unexpectedly. See |
| * {@link SipDelegateManager.SipDelegateDestroyReason} reasons for more information on all of the |
| * cases that will trigger the {@link SipDelegateConnection} to be destroyed. |
| * |
| * @hide |
| */ |
| @SystemApi |
| public interface DelegateConnectionStateCallback { |
| |
| /** |
| * A {@link SipDelegateConnection} has been successfully created for the |
| * {@link DelegateRequest} used when calling {@link SipDelegateManager#createSipDelegate}. |
| */ |
| void onCreated(@NonNull SipDelegateConnection c); |
| |
| /** |
| * The status of the RCS feature tags that were requested as part of the initial |
| * {@link DelegateRequest}. |
| * <p> |
| * There are four states that each RCS feature tag can be in: registered, deregistering, |
| * deregistered, and denied. |
| * <p> |
| * When a feature tag is considered registered, SIP messages associated with that feature tag |
| * may be sent and received freely. |
| * <p> |
| * When a feature tag is deregistering, the network IMS registration still contains the feature |
| * tag, however the IMS service and associated {@link SipDelegate} is in the progress of |
| * modifying the IMS registration to remove this feature tag and requires the application to |
| * perform an action before the IMS registration can change. The specific action required for |
| * the SipDelegate to continue modifying the IMS registration can be found in the definition of |
| * each {@link DelegateRegistrationState.DeregisteringReason}. |
| * <p> |
| * When a feature tag is in the deregistered state, new out-of-dialog SIP messages for that |
| * feature tag will be rejected, however due to network race conditions, the RCS application |
| * should still be able to handle new out-of-dialog SIP requests from the network. This may not |
| * be possible, however, if the IMS registration itself was lost. See the |
| * {@link DelegateRegistrationState.DeregisteredReason} reasons for more information on how SIP |
| * messages are handled in each of these cases. |
| * <p> |
| * If a feature tag is denied, no incoming messages will be routed to the associated |
| * {@link DelegateConnectionMessageCallback} and all outgoing SIP messages related to this |
| * feature tag will be rejected. See {@link SipDelegateManager.DeniedReason} |
| * reasons for more information about the conditions when this will happen. |
| * <p> |
| * The set of feature tags contained in the registered, deregistering, deregistered, and denied |
| * lists will always equal the set of feature tags requested in the initial |
| * {@link DelegateRequest}. |
| * <p> |
| * Transitions of feature tags from registered, deregistering, and deregistered and vice-versa |
| * may happen quite often, however transitions to/from denied are rare and only occur if the |
| * user has changed the role of your application to add/remove support for one or more requested |
| * feature tags or carrier provisioning has enabled or disabled single registration entirely. |
| * Please see {@link SipDelegateManager.DeniedReason} reasons for an explanation of each of |
| * these cases as well as what may cause them to change. |
| * |
| * @param registrationState The new IMS registration state of each of the feature tags |
| * associated with the {@link SipDelegate}. |
| * @param deniedFeatureTags A list of {@link FeatureTagState} objects, each containing a feature |
| * tag associated with this {@link SipDelegateConnection} that has no access to |
| * send/receive SIP messages as well as a reason for why the feature tag is denied. For more |
| * information on the reason why the feature tag was denied access, see the |
| * {@link SipDelegateManager.DeniedReason} reasons. |
| */ |
| void onFeatureTagStatusChanged(@NonNull DelegateRegistrationState registrationState, |
| @NonNull Set<FeatureTagState> deniedFeatureTags); |
| |
| |
| /** |
| * IMS configuration of the underlying IMS stack used by this IMS application for construction |
| * of the SIP messages that will be sent over the carrier's network. |
| * <p> |
| * There should never be assumptions made about the configuration of the underling IMS stack and |
| * the IMS application should wait for this indication before sending out any outgoing SIP |
| * messages. |
| * <p> |
| * Configuration may change due to IMS registration changes as well as |
| * other optional events on the carrier network. If IMS stack is already registered at the time |
| * of callback registration, then this method shall be invoked with the current configuration. |
| * Otherwise, there may be a delay in this method being called if initial IMS registration has |
| * not compleed yet. |
| * |
| * @param registeredSipConfig The configuration of the IMS stack registered on the IMS network. |
| * @removed Will not be in final API, use |
| * {@link #onConfigurationChanged(SipDelegateConfiguration)} instead}. |
| */ |
| @Deprecated |
| default void onImsConfigurationChanged( |
| @NonNull SipDelegateImsConfiguration registeredSipConfig) { |
| onConfigurationChanged(registeredSipConfig.toNewConfig()); |
| } |
| |
| /** |
| * IMS configuration of the underlying IMS stack used by this IMS application for construction |
| * of the SIP messages that will be sent over the carrier's network. |
| * <p> |
| * There should never be assumptions made about the configuration of the underling IMS stack and |
| * the IMS application should wait for this indication before sending out any outgoing SIP |
| * messages. |
| * <p> |
| * Configuration may change due to IMS registration changes as well as |
| * other optional events on the carrier network. If IMS stack is already registered at the time |
| * of callback registration, then this method shall be invoked with the current configuration. |
| * Otherwise, there may be a delay in this method being called if initial IMS registration has |
| * not compleed yet. |
| * |
| * @param registeredSipConfig The configuration of the IMS stack registered on the IMS network. |
| */ |
| void onConfigurationChanged(@NonNull SipDelegateConfiguration registeredSipConfig); |
| |
| /** |
| * The previously created {@link SipDelegateConnection} instance delivered via |
| * {@link #onCreated(SipDelegateConnection)} has been destroyed. This interface should no longer |
| * be used for any SIP message handling. |
| * |
| * @param reason The reason for the failure. |
| */ |
| void onDestroyed(@SipDelegateManager.SipDelegateDestroyReason int reason); |
| } |