From fababe1aca80852c4e816d8cc1d20321d14b9a87 Mon Sep 17 00:00:00 2001 From: Brad Ebinger Date: Mon, 5 Mar 2018 16:39:02 -0800 Subject: Dynamic Query for ImsService 1) Fixes ImsManager.Connector bug where we would reset retry count, even if there was an ImsException. 2) ImsManager#isServiceAvailable now uses ImsResolver state to figure out if an ImsService is possibly going to bind/ unbind. Test: Telephony test ImsService, telephony unit tests Bug: 72642524 Change-Id: Iac4de9091c3374970be450930424a22d9158de13 --- src/java/com/android/ims/ImsManager.java | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/java/com/android/ims/ImsManager.java b/src/java/com/android/ims/ImsManager.java index 24d92475..a5d4e485 100644 --- a/src/java/com/android/ims/ImsManager.java +++ b/src/java/com/android/ims/ImsManager.java @@ -340,10 +340,19 @@ public class ImsManager { 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() { @@ -1418,10 +1427,18 @@ public class ImsManager { } /* - * 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(); -- cgit v1.2.3