Merge "Dynamic Query for ImsService" into pi-dev
diff --git a/src/java/com/android/ims/ImsManager.java b/src/java/com/android/ims/ImsManager.java
index 3a971cf..2a35fd3 100644
--- a/src/java/com/android/ims/ImsManager.java
+++ b/src/java/com/android/ims/ImsManager.java
@@ -339,10 +339,19 @@
         private void notifyReady() throws ImsException {
             ImsManager manager;
             synchronized (mLock) {
-                mRetryCount = 0;
                 manager = mImsManager;
             }
-            mListener.connectionReady(manager);
+            try {
+                mListener.connectionReady(manager);
+            }
+            catch (ImsException e) {
+                Log.w(TAG, "Connector: notifyReady exception: " + e.getMessage());
+                throw e;
+            }
+            // Only reset retry count if connectionReady does not generate an ImsException/
+            synchronized (mLock) {
+                mRetryCount = 0;
+            }
         }
 
         private void notifyNotReady() {
@@ -1421,10 +1430,18 @@
     }
 
     /*
-     * Returns a flag indicating whether the IMS service is available. If it is not available,
-     * it will try to connect before reporting failure.
+     * Returns a flag indicating whether the IMS service is available. If it is not available or
+     * busy, it will try to connect before reporting failure.
      */
     public boolean isServiceAvailable() {
+        // If we are busy resolving dynamic IMS bindings, we are not available yet.
+        TelephonyManager tm = (TelephonyManager)
+                mContext.getSystemService(Context.TELEPHONY_SERVICE);
+        if (tm.isResolvingImsBinding()) {
+            Log.d(TAG, "isServiceAvailable: resolving IMS binding, returning false");
+            return false;
+        }
+
         connectIfServiceIsAvailable();
         // mImsServiceProxy will always create an ImsServiceProxy.
         return mMmTelFeatureConnection.isBinderAlive();