Merge "[conflict] Merge "Upgrade the version of IRadioNetwork to V2" am: 89417f14ef" into main-ims-dev
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 f6d5bc4..63f29f3 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
@@ -36,5 +36,5 @@
 interface IRadioImsIndication {
   oneway void onConnectionSetupFailure(in android.hardware.radio.RadioIndicationType type, in String token, in android.hardware.radio.ims.ConnectionFailureInfo info);
   oneway void notifyAnbr(in android.hardware.radio.RadioIndicationType type, in android.hardware.radio.ims.ImsStreamType mediaType, in android.hardware.radio.ims.ImsStreamDirection direction, int bitsPerSecond);
-  oneway void triggerImsDeregistration(in android.hardware.radio.RadioIndicationType type);
+  oneway void triggerImsDeregistration(in android.hardware.radio.RadioIndicationType type, in android.hardware.radio.ims.ImsDeregistrationReason reason);
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio.ims/current/android/hardware/radio/ims/ImsFailureReason.aidl b/radio/aidl/aidl_api/android.hardware.radio.ims/current/android/hardware/radio/ims/ImsDeregistrationReason.aidl
similarity index 93%
copy from radio/aidl/aidl_api/android.hardware.radio.ims/current/android/hardware/radio/ims/ImsFailureReason.aidl
copy to radio/aidl/aidl_api/android.hardware.radio.ims/current/android/hardware/radio/ims/ImsDeregistrationReason.aidl
index 918ae3a..330374e 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.ims/current/android/hardware/radio/ims/ImsFailureReason.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.ims/current/android/hardware/radio/ims/ImsDeregistrationReason.aidl
@@ -1,7 +1,7 @@
 /*
  * Copyright (C) 2022 The Android Open Source Project
  *
- * Licensed under the Apache License, Version 2.0 (the "License"),
+ * 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
  *
@@ -33,9 +33,8 @@
 
 package android.hardware.radio.ims;
 @Backing(type="int") @JavaDerive(toString=true) @VintfStability
-enum ImsFailureReason {
-  NONE = 0,
-  FATAL_ERROR = 1,
-  REPEATED_ERROR = 2,
-  TEMPORARY_ERROR = 3,
+enum ImsDeregistrationReason {
+  REASON_SIM_REMOVED = 1,
+  REASON_SIM_REFRESH = 2,
+  REASON_NETWORK_MODE_CHANGED = 3,
 }
diff --git a/radio/aidl/aidl_api/android.hardware.radio.ims/current/android/hardware/radio/ims/ImsRegistration.aidl b/radio/aidl/aidl_api/android.hardware.radio.ims/current/android/hardware/radio/ims/ImsRegistration.aidl
index 84ae2cb..1c4c12a 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.ims/current/android/hardware/radio/ims/ImsRegistration.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.ims/current/android/hardware/radio/ims/ImsRegistration.aidl
@@ -36,7 +36,7 @@
 parcelable ImsRegistration {
   android.hardware.radio.ims.ImsRegistrationState regState;
   android.hardware.radio.AccessNetwork accessNetworkType;
-  android.hardware.radio.ims.ImsFailureReason reason;
+  android.hardware.radio.ims.SuggestedAction suggestedAction;
   int capabilities;
   const int IMS_MMTEL_CAPABILITY_NONE = 0;
   const int IMS_MMTEL_CAPABILITY_VOICE = 1;
diff --git a/radio/aidl/aidl_api/android.hardware.radio.ims/current/android/hardware/radio/ims/ImsFailureReason.aidl b/radio/aidl/aidl_api/android.hardware.radio.ims/current/android/hardware/radio/ims/SuggestedAction.aidl
similarity index 95%
rename from radio/aidl/aidl_api/android.hardware.radio.ims/current/android/hardware/radio/ims/ImsFailureReason.aidl
rename to radio/aidl/aidl_api/android.hardware.radio.ims/current/android/hardware/radio/ims/SuggestedAction.aidl
index 918ae3a..da19774 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.ims/current/android/hardware/radio/ims/ImsFailureReason.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.ims/current/android/hardware/radio/ims/SuggestedAction.aidl
@@ -33,9 +33,8 @@
 
 package android.hardware.radio.ims;
 @Backing(type="int") @JavaDerive(toString=true) @VintfStability
-enum ImsFailureReason {
+enum SuggestedAction {
   NONE = 0,
-  FATAL_ERROR = 1,
-  REPEATED_ERROR = 2,
-  TEMPORARY_ERROR = 3,
+  TRIGGER_PLMN_BLOCK = 1,
+  TRIGGER_PLMN_BLOCK_WITH_TIMEOUT = 2,
 }
diff --git a/radio/aidl/android/hardware/radio/ims/IRadioImsIndication.aidl b/radio/aidl/android/hardware/radio/ims/IRadioImsIndication.aidl
index 7a8cc0e..ea286c4 100644
--- a/radio/aidl/android/hardware/radio/ims/IRadioImsIndication.aidl
+++ b/radio/aidl/android/hardware/radio/ims/IRadioImsIndication.aidl
@@ -18,6 +18,7 @@
 
 import android.hardware.radio.RadioIndicationType;
 import android.hardware.radio.ims.ConnectionFailureInfo;
+import android.hardware.radio.ims.ImsDeregistrationReason;
 import android.hardware.radio.ims.ImsStreamDirection;
 import android.hardware.radio.ims.ImsStreamType;
 
@@ -60,6 +61,7 @@
      * the network detach procedure.
      *
      * @param type Type of radio indication
+     * @param reason the reason why the deregistration is triggered
      */
-     void triggerImsDeregistration(in RadioIndicationType type);
+     void triggerImsDeregistration(in RadioIndicationType type, in ImsDeregistrationReason reason);
 }
diff --git a/radio/aidl/android/hardware/radio/ims/ImsDeregistrationReason.aidl b/radio/aidl/android/hardware/radio/ims/ImsDeregistrationReason.aidl
new file mode 100644
index 0000000..83c0321
--- /dev/null
+++ b/radio/aidl/android/hardware/radio/ims/ImsDeregistrationReason.aidl
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2022 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.hardware.radio.ims;
+
+@VintfStability
+@JavaDerive(toString=true)
+@Backing(type="int")
+enum ImsDeregistrationReason {
+    /**
+     * Radio shall send this reason to IMS stack to perform graceful de-registration
+     * due to SIM card is removed.
+     */
+    REASON_SIM_REMOVED = 1,
+    /**
+     * Radio shall send this reason to IMS stack to perform graceful de-registration
+     * due to SIM refresh that needs a NAS detach and re-attach.
+     */
+    REASON_SIM_REFRESH = 2,
+    /**
+     * Radio shall send this reason to IMS stack to perform graceful de-registration
+     * due to allowed network types bitmask changed that results in NAS detach.
+     */
+    REASON_NETWORK_MODE_CHANGED = 3,
+}
diff --git a/radio/aidl/android/hardware/radio/ims/ImsRegistration.aidl b/radio/aidl/android/hardware/radio/ims/ImsRegistration.aidl
index b727af0..662f9e9 100644
--- a/radio/aidl/android/hardware/radio/ims/ImsRegistration.aidl
+++ b/radio/aidl/android/hardware/radio/ims/ImsRegistration.aidl
@@ -17,8 +17,8 @@
 package android.hardware.radio.ims;
 
 import android.hardware.radio.AccessNetwork;
-import android.hardware.radio.ims.ImsFailureReason;
 import android.hardware.radio.ims.ImsRegistrationState;
+import android.hardware.radio.ims.SuggestedAction;
 
 @VintfStability
 @JavaDerive(toString=true)
@@ -42,8 +42,8 @@
      */
     AccessNetwork accessNetworkType;
 
-    /** Indicates a failure reason for IMS registration. */
-    ImsFailureReason reason;
+    /** Indicates the expected action for the radio to do. */
+    SuggestedAction suggestedAction;
 
     /**
      * Values are bitwise ORs of IMS_MMTEL_CAPABILITY_* constants and IMS_RCS_CAPABILITIES.
diff --git a/radio/aidl/android/hardware/radio/ims/ImsFailureReason.aidl b/radio/aidl/android/hardware/radio/ims/SuggestedAction.aidl
similarity index 82%
rename from radio/aidl/android/hardware/radio/ims/ImsFailureReason.aidl
rename to radio/aidl/android/hardware/radio/ims/SuggestedAction.aidl
index 21da582..a17b8a4 100644
--- a/radio/aidl/android/hardware/radio/ims/ImsFailureReason.aidl
+++ b/radio/aidl/android/hardware/radio/ims/SuggestedAction.aidl
@@ -19,26 +19,19 @@
 @VintfStability
 @JavaDerive(toString=true)
 @Backing(type="int")
-enum ImsFailureReason {
+enum SuggestedAction {
     /** Default value */
-    NONE,
-
+    NONE = 0,
     /**
      * Indicates that the IMS registration is failed with fatal error such as 403 or 404
      * on all P-CSCF addresses. The radio shall block the current PLMN or disable
      * the RAT as per the carrier requirements.
      */
-    FATAL_ERROR,
-
+    TRIGGER_PLMN_BLOCK = 1 << 0,
     /**
      * Indicates that the IMS registration on current PLMN failed multiple times.
-     * The radio shall block the current PLMN or disable the RAT as per the
-     * carrier requirements.
+     * The radio shall block the current PLMN or disable the RAT during EPS or 5GS mobility
+     * management timer value as per the carrier requirements.
      */
-    REPEATED_ERROR,
-
-    /**
-     * Indicates that IMS registration has failed temporarily. A retry will be done shortly.
-     */
-    TEMPORARY_ERROR,
+    TRIGGER_PLMN_BLOCK_WITH_TIMEOUT = 1 << 1,
 }
diff --git a/radio/aidl/vts/radio_ims_indication.cpp b/radio/aidl/vts/radio_ims_indication.cpp
index 0637813..8e98d85 100644
--- a/radio/aidl/vts/radio_ims_indication.cpp
+++ b/radio/aidl/vts/radio_ims_indication.cpp
@@ -28,6 +28,7 @@
     return ndk::ScopedAStatus::ok();
 }
 
-ndk::ScopedAStatus RadioImsIndication::triggerImsDeregistration(RadioIndicationType /*type*/) {
+ndk::ScopedAStatus RadioImsIndication::triggerImsDeregistration(RadioIndicationType /*type*/,
+        ImsDeregistrationReason /*reason*/) {
     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 bf5684d..98fd3cb 100644
--- a/radio/aidl/vts/radio_ims_utils.h
+++ b/radio/aidl/vts/radio_ims_utils.h
@@ -68,7 +68,8 @@
     virtual ndk::ScopedAStatus notifyAnbr(RadioIndicationType type, ImsStreamType mediaType,
             ImsStreamDirection direction, int bitsPerSecond) override;
 
-    virtual ndk::ScopedAStatus triggerImsDeregistration(RadioIndicationType type) override;
+    virtual ndk::ScopedAStatus triggerImsDeregistration(RadioIndicationType type,
+            ImsDeregistrationReason reason) override;
 };
 
 // The main test class for Radio AIDL Ims.