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

Commit fe256cfd authored by Brad Ebinger's avatar Brad Ebinger Committed by Automerger Merge Worker
Browse files

Merge changes from topic "redo_ims_poll" am: 80478ea7 am: 4a71cada am: 345ad693

Original change: https://android-review.googlesource.com/c/platform/frameworks/opt/net/ims/+/1449456

Change-Id: I54a2ee1e560c02a08bb5bc1d11fa92c2013e1617
parents f5084201 345ad693
Loading
Loading
Loading
Loading
+34 −50
Original line number Diff line number Diff line
@@ -135,32 +135,37 @@ public class FeatureConnector<U extends FeatureUpdates> {
                    log("imsFeatureRemoved: ignore");
                    return;
                }
                mManager.invalidate();
                mDisconnectedReason = reason;
                // Ensure that we set ready state back to false so that we do not miss setting ready
                // later if the initial state when recreated is READY.
                mLastReadyState = false;
            }
            // Allow the listener to do cleanup while the connection still potentially valid (unless
            // the process crashed).
            mExecutor.execute(() -> mListener.connectionUnavailable(reason));
            mManager.invalidate();
        }

        @Override
        public void imsStatusChanged(int status) {
            log("imsStatusChanged: status=" + ImsFeature.STATE_LOG_MAP.get(status));
            final U manager;
            final boolean isReady;
            synchronized (mLock) {
                if (mDisconnectedReason != null) {
                    log("imsStatusChanged: ignore");
                    return;
                }
                mManager.updateFeatureState(status);
                final U manager = mManager;
                final boolean isReady = mReadyFilter.contains(status);
                manager = mManager;
                isReady = mReadyFilter.contains(status);
                boolean didReadyChange = isReady ^ mLastReadyState;
                mLastReadyState = isReady;
                if (!didReadyChange) {
                    log("imsStatusChanged: ready didn't change, ignore");
                    return;
                }
            }
            mExecutor.execute(() -> {
                try {
                    if (isReady) {
@@ -178,7 +183,6 @@ public class FeatureConnector<U extends FeatureUpdates> {
                }
            });
        }
        }

        @Override
        public void updateCapabilities(long caps) {
@@ -208,8 +212,6 @@ public class FeatureConnector<U extends FeatureUpdates> {
    private U mManager;
    // Start in disconnected state;
    private Integer mDisconnectedReason = UNAVAILABLE_REASON_DISCONNECTED;
    // Record state to cut down on logging
    private boolean mIsOneShot = false;
    // Stop redundant connectionAvailable if the ready filter contains multiple states.
    // Also, do not send the first unavailable until after we have moved to available once.
    private boolean mLastReadyState = false;
@@ -245,29 +247,11 @@ public class FeatureConnector<U extends FeatureUpdates> {
            return;
        }
        synchronized (mLock) {
            mIsOneShot = false;
            if (mManager == null) {
                mManager = mFactory.createManager(mContext, mPhoneId);
            }
            mManager.registerFeatureCallback(mPhoneId, mCallback, false /*oneShot*/);
        }
    }

    public void connectForOneShot() {
        if (DBG) log("connectForOneShot");
        if (!isSupported()) {
            mExecutor.execute(() -> mListener.connectionUnavailable(
                    UNAVAILABLE_REASON_IMS_UNSUPPORTED));
            logw("connectForOneShot: not supported.");
            return;
        }
        synchronized (mLock) {
            mIsOneShot = true;
            if (mManager == null) {
                mManager = mFactory.createManager(mContext, mPhoneId);
            }
            mManager.registerFeatureCallback(mPhoneId, mCallback, true /*oneShot*/);
        }
        mManager.registerFeatureCallback(mPhoneId, mCallback);
    }

    // Check if this ImsFeature is supported or not.
@@ -281,13 +265,17 @@ public class FeatureConnector<U extends FeatureUpdates> {
     */
    public void disconnect() {
        if (DBG) log("disconnect");
        final U manager;
        synchronized (mLock) {
            mManager.unregisterFeatureCallback(mCallback);
            manager = mManager;
        }
        if (manager == null) return;

        manager.unregisterFeatureCallback(mCallback);
        try {
            mCallback.imsFeatureRemoved(UNAVAILABLE_REASON_DISCONNECTED);
        } catch (RemoteException ignore) {} // local call
    }
    }

    // Should be called on executor
    private void notifyReady(U manager) throws ImsException {
@@ -307,15 +295,11 @@ public class FeatureConnector<U extends FeatureUpdates> {
        mListener.connectionUnavailable(UNAVAILABLE_REASON_NOT_READY);
    }

    private final void log(String message) {
        // cut down on log spam
        synchronized (mLock) {
            if (mIsOneShot) return;
        }
    private void log(String message) {
        Rlog.d(TAG, "[" + mLogPrefix + ", " + mPhoneId + "] " + message);
    }

    private final void logw(String message) {
    private void logw(String message) {
        Rlog.w(TAG, "[" + mLogPrefix + ", " + mPhoneId + "] " + message);
    }
}
+2 −4
Original line number Diff line number Diff line
@@ -30,15 +30,13 @@ import com.android.ims.internal.IImsServiceFeatureCallback;
 */
public interface FeatureUpdates {
    /**
     * Register a calback for the slot specified so that the FeatureConnector can notify its
     * Register a callback for the slot specified so that the FeatureConnector can notify its
     * listener of changes.
     * @param slotId The slot the callback is registered for.
     * @param cb The callback that the FeatureConnector will use to update its state and notify
     *           its callback of changes.
     * @param oneShot True if this callback should only be registered for one update (feature is
     *                available or not), false if this listener should be persistent.
     */
    void registerFeatureCallback(int slotId, IImsServiceFeatureCallback cb, boolean oneShot);
    void registerFeatureCallback(int slotId, IImsServiceFeatureCallback cb);

    /**
     * Unregister a previously registered callback due to the FeatureConnector disconnecting.
Loading