Add triggerImsDeregistration to IRadioImsIndication

Bug: 216387835
Test: build & flash
Change-Id: I1ef313c993816ee86233cdc5f17380ed157c38ee
diff --git a/radio/aidl/aidl_api/android.hardware.radio.ims/current/android/hardware/radio/ims/IRadioImsIndication.aidl b/radio/aidl/aidl_api/android.hardware.radio.ims/current/android/hardware/radio/ims/IRadioImsIndication.aidl
index 06f7fa0..252da50 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.ims/current/android/hardware/radio/ims/IRadioImsIndication.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.ims/current/android/hardware/radio/ims/IRadioImsIndication.aidl
@@ -37,4 +37,5 @@
   oneway void onConnectionSetupFailure(in android.hardware.radio.RadioIndicationType type, int token, in android.hardware.radio.ims.ConnectionFailureInfo info);
   oneway void onAccessAllowed(in android.hardware.radio.RadioIndicationType type, int token);
   oneway void notifyAnbr(in android.hardware.radio.RadioIndicationType type, int qosSessionId, android.hardware.radio.ims.ImsStreamDirection direction, int bitsPerSecond);
+  oneway void triggerImsDeregistration(in android.hardware.radio.RadioIndicationType type);
 }
diff --git a/radio/aidl/android/hardware/radio/ims/IRadioImsIndication.aidl b/radio/aidl/android/hardware/radio/ims/IRadioImsIndication.aidl
index 317158c..ae35f21 100644
--- a/radio/aidl/android/hardware/radio/ims/IRadioImsIndication.aidl
+++ b/radio/aidl/android/hardware/radio/ims/IRadioImsIndication.aidl
@@ -57,4 +57,16 @@
      */
      void notifyAnbr(in RadioIndicationType type, int qosSessionId, ImsStreamDirection direction,
             int bitsPerSecond);
+
+    /**
+     * Fired by radio when a graceful IMS deregistration needs to be performed by telephony
+     * prior to radio performing network detach. Example scenarios are SIM refresh or user
+     * mode preference change which would cause network detach. The radio waits for the
+     * IMS deregistration, which will be notified by telephony via
+     * {@link IRadioIms#updateImsRegistrationInfo()}, or a certain timeout interval to start
+     * the network detach procedure.
+     *
+     * @param type Type of radio indication
+     */
+     void triggerImsDeregistration(in RadioIndicationType type);
 }
diff --git a/radio/aidl/vts/radio_ims_indication.cpp b/radio/aidl/vts/radio_ims_indication.cpp
index f9c872f..6f6d4f2 100644
--- a/radio/aidl/vts/radio_ims_indication.cpp
+++ b/radio/aidl/vts/radio_ims_indication.cpp
@@ -31,4 +31,8 @@
 ndk::ScopedAStatus RadioImsIndication::notifyAnbr(RadioIndicationType /*type*/,
         int /*qosSessionId*/, ImsStreamDirection /*direction*/, int /*bitsPerSecond*/) {
     return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus RadioImsIndication::triggerImsDeregistration(RadioIndicationType /*type*/) {
+    return ndk::ScopedAStatus::ok();
 }
\ No newline at end of file
diff --git a/radio/aidl/vts/radio_ims_utils.h b/radio/aidl/vts/radio_ims_utils.h
index 61e4254..541077f 100644
--- a/radio/aidl/vts/radio_ims_utils.h
+++ b/radio/aidl/vts/radio_ims_utils.h
@@ -67,6 +67,8 @@
 
     virtual ndk::ScopedAStatus notifyAnbr(RadioIndicationType type, int qosSessionId,
             ImsStreamDirection direction, int bitsPerSecond) override;
+
+    virtual ndk::ScopedAStatus triggerImsDeregistration(RadioIndicationType type) override;
 };
 
 // The main test class for Radio AIDL Ims.