124 lines
6.2 KiB
Java
124 lines
6.2 KiB
Java
![]() |
/*
|
||
|
* 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;
|
||
|
|
||
|
import android.annotation.NonNull;
|
||
|
import android.annotation.Nullable;
|
||
|
import android.annotation.SuppressLint;
|
||
|
import android.annotation.SystemApi;
|
||
|
import android.telephony.ims.stub.SipDelegate;
|
||
|
import android.telephony.ims.stub.SipTransportImplBase;
|
||
|
|
||
|
import java.util.Set;
|
||
|
|
||
|
/**
|
||
|
* Callback interface to notify a remote application of the following:
|
||
|
* <ul>
|
||
|
* <li>the {@link SipDelegate} associated with this callback has been created or destroyed in
|
||
|
* response to a creation or destruction request from the framework</li>
|
||
|
* <li>the SIP IMS configuration associated with this {@link SipDelegate} has changed</li>
|
||
|
* <li>the IMS registration of the feature tags associated with this {@link SipDelegate} have
|
||
|
* changed.</li>
|
||
|
* </ul>
|
||
|
* @hide
|
||
|
*/
|
||
|
@SystemApi
|
||
|
public interface DelegateStateCallback {
|
||
|
|
||
|
/**
|
||
|
* This must be called by the ImsService after {@link SipTransportImplBase#createSipDelegate} is
|
||
|
* called by the framework to notify the framework and remote application that the
|
||
|
* {@link SipDelegate} has been successfully created.
|
||
|
* @param delegate The SipDelegate created to service the DelegateRequest.
|
||
|
* @param deniedTags A Set of {@link FeatureTagState}s, which contain the feature tags
|
||
|
* associated with this {@link SipDelegate} that have 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. This is considered a permanent denial due
|
||
|
* to this {@link SipDelegate} not supporting a feature or this ImsService already
|
||
|
* implementing this feature elsewhere. If all features of this {@link SipDelegate} are
|
||
|
* denied, this method should still be called.
|
||
|
*/
|
||
|
void onCreated(@NonNull SipDelegate delegate,
|
||
|
@SuppressLint("NullableCollection") // TODO(b/154763999): Mark deniedTags @Nonnull
|
||
|
@Nullable Set<FeatureTagState> deniedTags);
|
||
|
|
||
|
/**
|
||
|
* This must be called by the ImsService after the framework calls
|
||
|
* {@link SipTransportImplBase#destroySipDelegate} to notify the framework and remote
|
||
|
* application that the procedure to destroy the {@link SipDelegate} has been completed.
|
||
|
* @param reasonCode The reason for closing this delegate.
|
||
|
*/
|
||
|
void onDestroyed(@SipDelegateManager.SipDelegateDestroyReason int reasonCode);
|
||
|
|
||
|
/**
|
||
|
* Call to notify the remote application of a configuration change associated with this
|
||
|
* {@link SipDelegate}.
|
||
|
* <p>
|
||
|
* The remote application will not be able to proceed sending SIP messages until after this
|
||
|
* configuration is sent the first time, so this configuration should be sent as soon as the
|
||
|
* {@link SipDelegate} has access to these configuration parameters.
|
||
|
* <p>
|
||
|
* Incoming SIP messages should not be routed to the remote application until AFTER this
|
||
|
* configuration change is sent to ensure that the remote application can respond correctly.
|
||
|
* Similarly, if there is an event that triggers the IMS configuration to change, incoming SIP
|
||
|
* messages routing should be delayed until the {@link SipDelegate} sends the IMS configuration
|
||
|
* change event to reduce conditions where the remote application is using a stale IMS
|
||
|
* configuration.
|
||
|
* @removed This is being removed from API surface, Use
|
||
|
* {@link #onConfigurationChanged(SipDelegateConfiguration)} instead.
|
||
|
*/
|
||
|
@Deprecated
|
||
|
void onImsConfigurationChanged(@NonNull SipDelegateImsConfiguration config);
|
||
|
|
||
|
/**
|
||
|
* Call to notify the remote application of a configuration change associated with this
|
||
|
* {@link SipDelegate}.
|
||
|
* <p>
|
||
|
* The remote application will not be able to proceed sending SIP messages until after this
|
||
|
* configuration is sent the first time, so this configuration should be sent as soon as the
|
||
|
* {@link SipDelegate} has access to these configuration parameters.
|
||
|
* <p>
|
||
|
* Incoming SIP messages should not be routed to the remote application until AFTER this
|
||
|
* configuration change is sent to ensure that the remote application can respond correctly.
|
||
|
* Similarly, if there is an event that triggers the IMS configuration to change, incoming SIP
|
||
|
* messages routing should be delayed until the {@link SipDelegate} sends the IMS configuration
|
||
|
* change event to reduce conditions where the remote application is using a stale IMS
|
||
|
* configuration.
|
||
|
*/
|
||
|
void onConfigurationChanged(@NonNull SipDelegateConfiguration config);
|
||
|
|
||
|
/**
|
||
|
* Call to notify the remote application that the {@link SipDelegate} has modified the IMS
|
||
|
* registration state of the RCS feature tags that were requested as part of the initial
|
||
|
* {@link DelegateRequest}.
|
||
|
* <p>
|
||
|
* See {@link DelegateRegistrationState} for more information about how IMS Registration state
|
||
|
* should be communicated the associated SipDelegateConnection in cases such as
|
||
|
* IMS deregistration, handover, PDN change, provisioning changes, etc…
|
||
|
* <p>
|
||
|
* Note: Even after the status of the feature tags are updated here to deregistered, the
|
||
|
* SipDelegate must still be able to handle these messages and call
|
||
|
* {@link DelegateMessageCallback#onMessageSendFailure} to notify the RCS application that the
|
||
|
* message was not sent.
|
||
|
*
|
||
|
* @param registrationState The current network IMS registration state for all feature tags
|
||
|
* associated with this SipDelegate.
|
||
|
*/
|
||
|
void onFeatureTagRegistrationChanged(@NonNull DelegateRegistrationState registrationState);
|
||
|
}
|