Merge "Add SipDelegateConnection#closeDialog"

This commit is contained in:
Brad Ebinger
2020-12-10 19:37:04 +00:00
committed by Gerrit Code Review
6 changed files with 46 additions and 11 deletions

View File

@@ -11314,6 +11314,7 @@ package android.telephony.ims {
} }
public interface SipDelegateConnection { public interface SipDelegateConnection {
method public void closeDialog(@NonNull String);
method public void notifyMessageReceiveError(@NonNull String, int); method public void notifyMessageReceiveError(@NonNull String, int);
method public void notifyMessageReceived(@NonNull String); method public void notifyMessageReceived(@NonNull String);
method public void sendMessage(@NonNull android.telephony.ims.SipMessage, long); method public void sendMessage(@NonNull android.telephony.ims.SipMessage, long);

View File

@@ -62,7 +62,8 @@ public final class DelegateRegistrationState implements Parcelable {
/** /**
* This feature tag is being deregistered because the PDN that the IMS registration is on is * This feature tag is being deregistered because the PDN that the IMS registration is on is
*changing. *changing.
* All open SIP dialogs need to be closed before the PDN change can proceed. * All open SIP dialogs need to be closed before the PDN change can proceed using
* {@link SipDelegateConnection#closeDialog(String)}.
*/ */
public static final int DEREGISTERING_REASON_PDN_CHANGE = 3; public static final int DEREGISTERING_REASON_PDN_CHANGE = 3;
@@ -73,7 +74,8 @@ public final class DelegateRegistrationState implements Parcelable {
* a user triggered hange, such as data being enabled/disabled. * a user triggered hange, such as data being enabled/disabled.
* <p> * <p>
* All open SIP dialogs associated with the new deprovisioned feature tag need to be closed * All open SIP dialogs associated with the new deprovisioned feature tag need to be closed
* before the IMS registration modification can proceed. * using {@link SipDelegateConnection#closeDialog(String)} before the IMS registration
* modification can proceed.
*/ */
public static final int DEREGISTERING_REASON_PROVISIONING_CHANGE = 4; public static final int DEREGISTERING_REASON_PROVISIONING_CHANGE = 4;
@@ -81,8 +83,8 @@ public final class DelegateRegistrationState implements Parcelable {
* This feature tag is deregistering because the SipDelegate associated with this feature tag * This feature tag is deregistering because the SipDelegate associated with this feature tag
* needs to change its supported feature set. * needs to change its supported feature set.
* <p> * <p>
* All open SIP Dialogs associated with this feature tag must be closed before this operation * All open SIP Dialogs associated with this feature tag must be closed
* can proceed. * using {@link SipDelegateConnection#closeDialog(String)} before this operation can proceed.
*/ */
public static final int DEREGISTERING_REASON_FEATURE_TAGS_CHANGING = 5; public static final int DEREGISTERING_REASON_FEATURE_TAGS_CHANGING = 5;
@@ -90,8 +92,8 @@ public final class DelegateRegistrationState implements Parcelable {
* This feature tag is deregistering because the SipDelegate is in the process of being * This feature tag is deregistering because the SipDelegate is in the process of being
* destroyed. * destroyed.
* <p> * <p>
* All open SIP Dialogs associated with this feature tag must be closed before this operation * All open SIP Dialogs associated with this feature tag must be closed
* can proceed. * using {@link SipDelegateConnection#closeDialog(String)} before this operation can proceed.
*/ */
public static final int DEREGISTERING_REASON_DESTROY_PENDING = 6; public static final int DEREGISTERING_REASON_DESTROY_PENDING = 6;

View File

@@ -61,6 +61,22 @@ public interface SipDelegateConnection {
*/ */
void notifyMessageReceived(@NonNull String viaTransactionId); void notifyMessageReceived(@NonNull String viaTransactionId);
/**
* The SIP Dialog associated with the provided Call-ID is being closed and routing resources
* associated with the SIP dialog are free to be released.
* <p>
* Calling this method is also mandatory for situations where the framework IMS stack is waiting
* for pending SIP dialogs to be closed before it can perform a handover or apply a provisioning
* change. See {@link DelegateRegistrationState} for more information about
* the scenarios where this can occur.
* <p>
* This method will need to be called for each SIP dialog managed by this application when it is
* closed.
* @param callId The call-ID header value associated with the ongoing SIP Dialog that is
* closing.
*/
void closeDialog(@NonNull String callId);
/** /**
* Notify the SIP delegate that the SIP message has been received from * Notify the SIP delegate that the SIP message has been received from
* {@link DelegateMessageCallback#onMessageReceived(SipMessage)}, however there was an error * {@link DelegateMessageCallback#onMessageReceived(SipMessage)}, however there was an error

View File

@@ -26,7 +26,5 @@ oneway interface ISipDelegate {
void sendMessage(in SipMessage sipMessage, long configVersion); void sendMessage(in SipMessage sipMessage, long configVersion);
void notifyMessageReceived(in String viaTransactionId); void notifyMessageReceived(in String viaTransactionId);
void notifyMessageReceiveError(in String viaTransactionId, int reason); void notifyMessageReceiveError(in String viaTransactionId, int reason);
// only used by SipDelegate.
void closeDialog(in String callId); void closeDialog(in String callId);
} }

View File

@@ -199,6 +199,19 @@ public class SipDelegateConnectionAidlWrapper implements SipDelegateConnection,
} }
} }
@Override
public void closeDialog(String callId) {
try {
ISipDelegate conn = getSipDelegateBinder();
if (conn == null) {
return;
}
conn.closeDialog(callId);
} catch (RemoteException e) {
// Nothing to do here, app will eventually get remote death callback.
}
}
// Also called upon IImsRcsController death (telephony process dies). // Also called upon IImsRcsController death (telephony process dies).
@Override @Override
public void binderDied() { public void binderDied() {

View File

@@ -19,7 +19,9 @@ package android.telephony.ims.stub;
import android.annotation.NonNull; import android.annotation.NonNull;
import android.annotation.SystemApi; import android.annotation.SystemApi;
import android.telephony.ims.DelegateMessageCallback; import android.telephony.ims.DelegateMessageCallback;
import android.telephony.ims.DelegateRegistrationState;
import android.telephony.ims.ImsService; import android.telephony.ims.ImsService;
import android.telephony.ims.SipDelegateConnection;
import android.telephony.ims.SipDelegateImsConfiguration; import android.telephony.ims.SipDelegateImsConfiguration;
import android.telephony.ims.SipDelegateManager; import android.telephony.ims.SipDelegateManager;
import android.telephony.ims.SipMessage; import android.telephony.ims.SipMessage;
@@ -65,10 +67,13 @@ public interface SipDelegate {
* The framework is requesting that routing resources associated with the SIP dialog using the * The framework is requesting that routing resources associated with the SIP dialog using the
* provided Call-ID to be cleaned up. * provided Call-ID to be cleaned up.
* <p> * <p>
* Typically a SIP Dialog close event will be signalled by that dialog receiving a BYE or 200 OK * Typically, a SIP Dialog close event will be signalled by that dialog receiving a BYE or
* message, however, in some cases, the framework will request that the ImsService close the * 200 OK message, however, the IMS application will still call
* {@link SipDelegateConnection#closeDialog(String)} to signal to the framework that resources
* can be released. In some cases, the framework will request that the ImsService close the
* dialog due to the open dialog holding up an event such as applying a provisioning change or * dialog due to the open dialog holding up an event such as applying a provisioning change or
* handing over to another transport type. * handing over to another transport type. See {@link DelegateRegistrationState}.
*
* @param callId The call-ID header value associated with the ongoing SIP Dialog that the * @param callId The call-ID header value associated with the ongoing SIP Dialog that the
* framework is requesting be closed. * framework is requesting be closed.
*/ */