Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0aed76da authored by Brad Ebinger's avatar Brad Ebinger
Browse files

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

Merged-In: I6d68b98126b2b682b4f2c54947acdd90e7bc51b0
Change-Id: Iac4de9091c3374970be450930424a22d9158de13
parent 27b7c1d5
Loading
Loading
Loading
Loading
+21 −4
Original line number Diff line number Diff line
@@ -339,11 +339,20 @@ public class ImsManager {
        private void notifyReady() throws ImsException {
            ImsManager manager;
            synchronized (mLock) {
                mRetryCount = 0;
                manager = mImsManager;
            }
            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() {
            mListener.connectionUnavailable();
@@ -1421,10 +1430,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();