summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/api/system-current.txt2
-rw-r--r--telephony/java/android/telephony/ims/SipDelegateManager.java35
-rw-r--r--telephony/java/android/telephony/ims/aidl/IImsRcsController.aidl2
-rw-r--r--telephony/java/android/telephony/ims/aidl/IImsRegistration.aidl1
-rw-r--r--telephony/java/android/telephony/ims/stub/ImsRegistrationImplBase.java8
5 files changed, 46 insertions, 2 deletions
diff --git a/core/api/system-current.txt b/core/api/system-current.txt
index 1701eb5f5023..559f44205600 100644
--- a/core/api/system-current.txt
+++ b/core/api/system-current.txt
@@ -12638,6 +12638,7 @@ package android.telephony.ims {
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void createSipDelegate(@NonNull android.telephony.ims.DelegateRequest, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.stub.DelegateConnectionStateCallback, @NonNull android.telephony.ims.stub.DelegateConnectionMessageCallback) throws android.telephony.ims.ImsException;
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void destroySipDelegate(@NonNull android.telephony.ims.SipDelegateConnection, int);
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isSupported() throws android.telephony.ims.ImsException;
+ method public void triggerFullNetworkRegistration(@NonNull android.telephony.ims.SipDelegateConnection, @IntRange(from=100, to=699) int, @Nullable String);
field public static final int DENIED_REASON_INVALID = 4; // 0x4
field public static final int DENIED_REASON_IN_USE_BY_ANOTHER_DELEGATE = 1; // 0x1
field public static final int DENIED_REASON_NOT_ALLOWED = 2; // 0x2
@@ -12886,6 +12887,7 @@ package android.telephony.ims.stub {
method public final void onRegistering(int);
method public final void onSubscriberAssociatedUriChanged(android.net.Uri[]);
method public final void onTechnologyChangeFailed(int, android.telephony.ims.ImsReasonInfo);
+ method public void triggerFullNetworkRegistration(@IntRange(from=100, to=699) int, @Nullable String);
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
diff --git a/telephony/java/android/telephony/ims/SipDelegateManager.java b/telephony/java/android/telephony/ims/SipDelegateManager.java
index 2ec88ff27f93..2e9eb94605a5 100644
--- a/telephony/java/android/telephony/ims/SipDelegateManager.java
+++ b/telephony/java/android/telephony/ims/SipDelegateManager.java
@@ -18,7 +18,9 @@ package android.telephony.ims;
import android.Manifest;
import android.annotation.IntDef;
+import android.annotation.IntRange;
import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.content.Context;
@@ -372,4 +374,37 @@ public class SipDelegateManager {
+ " into this method");
}
}
+
+ /**
+ * Trigger a full network registration as required by receiving a SIP message containing a
+ * permanent error from the network or never receiving a response to a SIP transaction request.
+ *
+ * @param connection The {@link SipDelegateConnection} that was being used when this error was
+ * received.
+ * @param sipCode The SIP code response associated with the SIP message request that
+ * triggered this condition.
+ * @param sipReason The SIP reason code associated with the SIP message request that triggered
+ * this condition. May be {@code null} if there was no reason String provided from the
+ * network.
+ */
+ public void triggerFullNetworkRegistration(@NonNull SipDelegateConnection connection,
+ @IntRange(from = 100, to = 699) int sipCode, @Nullable String sipReason) {
+ if (connection == null) {
+ throw new IllegalArgumentException("invalid connection.");
+ }
+ if (connection instanceof SipDelegateConnectionAidlWrapper) {
+ SipDelegateConnectionAidlWrapper w = (SipDelegateConnectionAidlWrapper) connection;
+ try {
+ IImsRcsController controller = mBinderCache.getBinder();
+ controller.triggerNetworkRegistration(mSubId, w.getSipDelegateBinder(), sipCode,
+ sipReason);
+ } catch (RemoteException e) {
+ // Connection to telephony died, but this will signal destruction of SipDelegate
+ // eventually anyway, so return.
+ }
+ } else {
+ throw new IllegalArgumentException("Unknown SipDelegateConnection implementation passed"
+ + " into this method");
+ }
+ }
}
diff --git a/telephony/java/android/telephony/ims/aidl/IImsRcsController.aidl b/telephony/java/android/telephony/ims/aidl/IImsRcsController.aidl
index c6d9a8629556..36349895c35b 100644
--- a/telephony/java/android/telephony/ims/aidl/IImsRcsController.aidl
+++ b/telephony/java/android/telephony/ims/aidl/IImsRcsController.aidl
@@ -67,6 +67,8 @@ interface IImsRcsController {
ISipDelegateConnectionStateCallback delegateState,
ISipDelegateMessageCallback delegateMessage);
void destroySipDelegate(int subId, ISipDelegate connection, int reason);
+ void triggerNetworkRegistration(int subId, ISipDelegate connection, int sipCode,
+ String sipReason);
// Internal commands that should not be made public
void registerRcsFeatureCallback(int slotId, in IImsServiceFeatureCallback callback);
diff --git a/telephony/java/android/telephony/ims/aidl/IImsRegistration.aidl b/telephony/java/android/telephony/ims/aidl/IImsRegistration.aidl
index 4ae0a75ad027..298a98274dd9 100644
--- a/telephony/java/android/telephony/ims/aidl/IImsRegistration.aidl
+++ b/telephony/java/android/telephony/ims/aidl/IImsRegistration.aidl
@@ -28,4 +28,5 @@ interface IImsRegistration {
int getRegistrationTechnology();
oneway void addRegistrationCallback(IImsRegistrationCallback c);
oneway void removeRegistrationCallback(IImsRegistrationCallback c);
+ oneway void triggerFullNetworkRegistration(int sipCode, String sipReason);
} \ No newline at end of file
diff --git a/telephony/java/android/telephony/ims/stub/ImsRegistrationImplBase.java b/telephony/java/android/telephony/ims/stub/ImsRegistrationImplBase.java
index 153d687dd84f..aee24ffccc9e 100644
--- a/telephony/java/android/telephony/ims/stub/ImsRegistrationImplBase.java
+++ b/telephony/java/android/telephony/ims/stub/ImsRegistrationImplBase.java
@@ -92,6 +92,11 @@ public class ImsRegistrationImplBase {
public void removeRegistrationCallback(IImsRegistrationCallback c) throws RemoteException {
ImsRegistrationImplBase.this.removeRegistrationCallback(c);
}
+
+ @Override
+ public void triggerFullNetworkRegistration(int sipCode, String sipReason) {
+ ImsRegistrationImplBase.this.triggerFullNetworkRegistration(sipCode, sipReason);
+ }
};
private final RemoteCallbackListExt<IImsRegistrationCallback> mCallbacks =
@@ -169,9 +174,8 @@ 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
*/
- public void triggerNetworkReregistration(@IntRange(from = 100, to = 699) int sipCode,
+ public void triggerFullNetworkRegistration(@IntRange(from = 100, to = 699) int sipCode,
@Nullable String sipReason) {
// Stub implementation, ImsService should implement this
}