Reconnect when ImsService binder instance is null

When polling for the ImsService to be up in ImsPhoneCallTracker,
make sure to recreate the ImsService when checking if it is
available.

Test: Manual
Bug: 62518074
Merged-In: I5e28a943cd71f66bb664dd4d5fe8418dd8b2d71c
Change-Id: I0693a8f890a49c41763347acf83b483f74c6332a
diff --git a/src/java/com/android/ims/ImsManager.java b/src/java/com/android/ims/ImsManager.java
index d10691d..52d356e 100644
--- a/src/java/com/android/ims/ImsManager.java
+++ b/src/java/com/android/ims/ImsManager.java
@@ -227,7 +227,12 @@
     public static ImsManager getInstance(Context context, int phoneId) {
         synchronized (sImsManagerInstances) {
             if (sImsManagerInstances.containsKey(phoneId)) {
-                return sImsManagerInstances.get(phoneId);
+                ImsManager m = sImsManagerInstances.get(phoneId);
+                // May be null for some tests
+                if (m != null) {
+                    m.connectIfServiceIsAvailable();
+                }
+                return m;
             }
 
             ImsManager mgr = new ImsManager(context, phoneId);
@@ -1427,16 +1432,24 @@
     }
 
     /*
-     * Returns a flag indicating whether the IMS service is available.
+     * Returns a flag indicating whether the IMS service is available. If it is not available,
+     * it will try to connect before reporting failure.
      */
     public boolean isServiceAvailable() {
-        if (mImsServiceProxy == null) {
-            createImsService();
-        }
+        connectIfServiceIsAvailable();
         // mImsServiceProxy will always create an ImsServiceProxy.
         return mImsServiceProxy.isBinderAlive();
     }
 
+    /**
+     * If the service is available, try to reconnect.
+     */
+    public void connectIfServiceIsAvailable() {
+        if (mImsServiceProxy == null || !mImsServiceProxy.isBinderAlive()) {
+            createImsService();
+        }
+    }
+
     public void setImsConfigListener(ImsConfigListener listener) {
         mImsConfigListener = listener;
     }