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;
}