Merge tag 'AU_LINUX_ANDROID_LA.BF64.1.2.1_RB2.05.00.02.081.002' into HEAD

AU_LINUX_ANDROID_LA.BF64.1.2.1_RB2.05.00.02.081.002 based on quic/aosp/LA.BF64.1.2.1_rb2

* tag 'AU_LINUX_ANDROID_LA.BF64.1.2.1_RB2.05.00.02.081.002':
  Revert "IMS-VT: Change call data usage parameters"
  IMS L-MR1 Compilation Fixes
  Add a global override for VoLTE calls (which leaves user setting in place)
  Turning off extended IMS logging (STOPSHIP item).
  MSIM IMS: convert to phone ID based selection.
  Telecom API updates (6/6)
  TTY over IMS: Notify the user that TTY mode changed in the far device
  Adding toString methods to IMS classes to aid logging.
  Separate VoLTE and VT configuration API.
  Change subId to int from long
  Separated VoLTE and VT configurations.
  IMS: This patch includes: 1. change setProvisionedValue/setProvisionedStringValue to return operation result. 2 . add additional IMS config.
  IMS:change enhanced 4g setting to store in setting db.
  Revert "Fixed compilation error"
  Revert "compilation fix net ims"
  Fixed compilation error
  compilation fix net ims

Conflicts:
	src/java/com/android/ims/ImsCall.java

Change-Id: Ic399d525928f32a877ebbe72a5f3013bd4834cd1
diff --git a/src/java/com/android/ims/ImsCall.java b/src/java/com/android/ims/ImsCall.java
old mode 100644
new mode 100755
index 0340d9e..0a98d8e
--- a/src/java/com/android/ims/ImsCall.java
+++ b/src/java/com/android/ims/ImsCall.java
@@ -385,6 +385,29 @@
             ImsSuppServiceNotification suppServiceInfo) {
         }
 
+        /**
+         * Called when handover occurs from one access technology to another.
+         *
+         * @param session IMS session object
+         * @param srcAccessTech original access technology
+         * @param targetAccessTech new access technology
+         * @param reasonInfo
+         */
+        public void onCallHandover(ImsCall imsCall, int srcAccessTech, int targetAccessTech,
+            ImsReasonInfo reasonInfo) {
+        }
+
+        /**
+         * Called when handover from one access technology to another fails.
+         *
+         * @param session IMS session object
+         * @param srcAccessTech original access technology
+         * @param targetAccessTech new access technology
+         * @param reasonInfo
+         */
+        public void onCallHandoverFailed(ImsCall imsCall, int srcAccessTech, int targetAccessTech,
+            ImsReasonInfo reasonInfo) {
+        }
     }
 
 
@@ -1743,7 +1766,7 @@
             //}
             // Attempt to find the participant in the call group if it exists.
             ImsCall referrer = null;
-            if (mCallGroup != null) {
+            if (mCallGroup != null && endpoint != null && !endpoint.isEmpty()) {
                 referrer = (ImsCall) mCallGroup.getReferrer(endpoint);
             }
 
@@ -1752,6 +1775,10 @@
             // can be passed up to the {@code TelephonyConferenceController}.
             if (referrer == null) {
                 Uri handle = Uri.parse(user);
+                if (endpoint == null) {
+                    endpoint = "";
+                }
+
                 Uri endpointUri = Uri.parse(endpoint);
                 int connectionState = ImsConferenceState.getConnectionStateForStatus(status);
 
@@ -2866,6 +2893,55 @@
             }
         }
 
+        public void callSessionHandover(ImsCallSession session, int srcAccessTech,
+            int targetAccessTech, ImsReasonInfo reasonInfo) {
+            if (DBG) {
+                log("callSessionHandover :: session=" + session + ", srcAccessTech=" +
+                    srcAccessTech + ", targetAccessTech=" + targetAccessTech + ", reasonInfo=" +
+                    reasonInfo);
+            }
+
+            ImsCall.Listener listener;
+
+            synchronized(ImsCall.this) {
+                listener = mListener;
+            }
+
+            if (listener != null) {
+                try {
+                    listener.onCallHandover(ImsCall.this, srcAccessTech, targetAccessTech,
+                        reasonInfo);
+                } catch (Throwable t) {
+                    loge("callSessionHandover :: ", t);
+                }
+            }
+        }
+
+        @Override
+        public void callSessionHandoverFailed(ImsCallSession session, int srcAccessTech,
+            int targetAccessTech, ImsReasonInfo reasonInfo) {
+            if (DBG) {
+                log("callSessionHandoverFailed :: session=" + session + ", srcAccessTech=" +
+                    srcAccessTech + ", targetAccessTech=" + targetAccessTech + ", reasonInfo=" +
+                    reasonInfo);
+            }
+
+            ImsCall.Listener listener;
+
+            synchronized(ImsCall.this) {
+                listener = mListener;
+            }
+
+            if (listener != null) {
+                try {
+                    listener.onCallHandoverFailed(ImsCall.this, srcAccessTech, targetAccessTech,
+                        reasonInfo);
+                } catch (Throwable t) {
+                    loge("callSessionHandoverFailed :: ", t);
+                }
+            }
+        }
+
         @Override
         public void callSessionTtyModeReceived(ImsCallSession session, int mode) {
             if (DBG) {
diff --git a/src/java/com/android/ims/ImsConnectionStateListener.java b/src/java/com/android/ims/ImsConnectionStateListener.java
index 60884a4..1afec8e 100644
--- a/src/java/com/android/ims/ImsConnectionStateListener.java
+++ b/src/java/com/android/ims/ImsConnectionStateListener.java
@@ -32,9 +32,16 @@
     }
 
     /**
+     * Called when the device is trying to connect to the IMS network.
+     */
+    public void onImsProgressing() {
+        // no-op
+    }
+
+    /**
      * Called when the device is disconnected from the IMS network.
      */
-    public void onImsDisconnected() {
+    public void onImsDisconnected(ImsReasonInfo imsReasonInfo) {
         // no-op
     }
 
diff --git a/src/java/com/android/ims/ImsManager.java b/src/java/com/android/ims/ImsManager.java
index cfe9b72..5aaf68f 100644
--- a/src/java/com/android/ims/ImsManager.java
+++ b/src/java/com/android/ims/ImsManager.java
@@ -885,13 +885,24 @@
         }
 
         @Override
-        public void registrationDisconnected() {
+        public void registrationProgressing() {
             if (DBG) {
-                log("registrationDisconnected ::");
+                log("registrationProgressing ::");
             }
 
             if (mListener != null) {
-                mListener.onImsDisconnected();
+                mListener.onImsProgressing();
+            }
+        }
+
+        @Override
+        public void registrationDisconnected(ImsReasonInfo imsReasonInfo) {
+            if (DBG) {
+                log("registrationDisconnected :: imsReasonInfo" + imsReasonInfo);
+            }
+
+            if (mListener != null) {
+                mListener.onImsDisconnected(imsReasonInfo);
             }
         }
 
diff --git a/src/java/com/android/ims/internal/ImsCallSession.java b/src/java/com/android/ims/internal/ImsCallSession.java
index 13ec630..6075d70 100644
--- a/src/java/com/android/ims/internal/ImsCallSession.java
+++ b/src/java/com/android/ims/internal/ImsCallSession.java
@@ -1196,6 +1196,9 @@
             }
         }
 
+        /**
+         * Notifies of handover failure info for this call
+         */
         @Override
         public void callSessionHandoverFailed(IImsCallSession session,
                                        int srcAccessTech, int targetAccessTech,