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

Commit 2aafe6d0 authored by James.cf Lin's avatar James.cf Lin Committed by Automerger Merge Worker
Browse files

[RCS UCE] Remove the unused listener RcsFeatureListener am: 2b37f4d0

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

Change-Id: I5a4323a112b3835c9e132ff3a9b1ced62f5f6150
parents 218484a7 2b37f4d0
Loading
Loading
Loading
Loading
+6 −23
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@ import android.content.Context;
import android.net.Uri;
import android.os.IBinder;
import android.os.RemoteException;
import android.telephony.ims.RcsContactUceCapability;
import android.telephony.ims.aidl.ICapabilityExchangeEventListener;
import android.telephony.ims.aidl.IImsCapabilityCallback;
import android.telephony.ims.aidl.IImsConfig;
@@ -29,7 +28,6 @@ import android.telephony.ims.aidl.IImsRcsFeature;
import android.telephony.ims.aidl.IImsRegistration;
import android.telephony.ims.aidl.IImsRegistrationCallback;
import android.telephony.ims.aidl.IPublishResponseCallback;
import android.telephony.ims.aidl.IRcsFeatureListener;
import android.telephony.ims.aidl.ISipTransport;
import android.telephony.ims.aidl.ISubscribeResponseCallback;
import android.telephony.ims.feature.CapabilityChangeRequest;
@@ -128,7 +126,7 @@ public class RcsFeatureConnection extends FeatureConnection {
    }

    public void close() {
        removeRcsFeatureListener();
        removeCapabilityExchangeEventListener();
        mAvailabilityCallbackManager.close();
        mRegistrationCallbackManager.close();
    }
@@ -139,16 +137,17 @@ public class RcsFeatureConnection extends FeatureConnection {
        super.onRemovedOrDied();
    }

    public void setRcsFeatureListener(IRcsFeatureListener listener) throws RemoteException {
    public void setCapabilityExchangeEventListener(ICapabilityExchangeEventListener listener)
            throws RemoteException {
        synchronized (mLock) {
            checkServiceIsReady();
            getServiceInterface(mBinder).setListener(listener);
            getServiceInterface(mBinder).setCapabilityExchangeEventListener(listener);
        }
    }

    public void removeRcsFeatureListener() {
    public void removeCapabilityExchangeEventListener() {
        try {
            setRcsFeatureListener(null);
            setCapabilityExchangeEventListener(null);
        } catch (RemoteException e) {
            // If we are not still connected, there is no need to fail removing.
        }
@@ -217,22 +216,6 @@ public class RcsFeatureConnection extends FeatureConnection {
        }
    }

    public void requestPublication(RcsContactUceCapability capabilities, int taskId)
            throws RemoteException {
        synchronized (mLock) {
            checkServiceIsReady();
            getServiceInterface(mBinder).updateCapabilities(capabilities, taskId);
        }
    }

    public void setCapabilityExchangeEventListener(ICapabilityExchangeEventListener listener)
            throws RemoteException{
        synchronized (mLock) {
            checkServiceIsReady();
            getServiceInterface(mBinder).setCapabilityExchangeEventListener(listener);
        }
    }

    public void requestPublication(String pidfXml, IPublishResponseCallback responseCallback)
            throws RemoteException {
        synchronized (mLock) {
+47 −96
Original line number Diff line number Diff line
@@ -28,15 +28,15 @@ import android.telephony.SubscriptionManager;
import android.telephony.TelephonyFrameworkInitializer;
import android.telephony.ims.ImsException;
import android.telephony.ims.ImsService;
import android.telephony.ims.RcsContactUceCapability;
import android.telephony.ims.RcsUceAdapter.StackPublishTriggerType;
import android.telephony.ims.RegistrationManager;
import android.telephony.ims.aidl.ICapabilityExchangeEventListener;
import android.telephony.ims.aidl.IImsCapabilityCallback;
import android.telephony.ims.aidl.IImsRcsController;
import android.telephony.ims.aidl.IImsRcsFeature;
import android.telephony.ims.aidl.IImsRegistrationCallback;
import android.telephony.ims.aidl.IOptionsRequestCallback;
import android.telephony.ims.aidl.IPublishResponseCallback;
import android.telephony.ims.aidl.IRcsFeatureListener;
import android.telephony.ims.aidl.ISipTransport;
import android.telephony.ims.aidl.ISubscribeResponseCallback;
import android.telephony.ims.feature.CapabilityChangeRequest;
@@ -44,14 +44,10 @@ import android.telephony.ims.feature.ImsFeature;
import android.telephony.ims.feature.RcsFeature;
import android.telephony.ims.feature.RcsFeature.RcsImsCapabilities;
import android.telephony.ims.stub.ImsRegistrationImplBase;
import android.telephony.ims.stub.RcsCapabilityExchange;
import android.telephony.ims.stub.RcsPresenceExchangeImplBase;
import android.telephony.ims.stub.RcsSipOptionsImplBase;
import android.util.Log;

import com.android.ims.internal.IImsServiceFeatureCallback;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.ITelephony;
import com.android.telephony.Rlog;

import java.util.ArrayList;
@@ -77,91 +73,55 @@ public class RcsFeatureManager implements FeatureUpdates {
    private static final int CAPABILITY_PRESENCE = RcsImsCapabilities.CAPABILITY_TYPE_PRESENCE_UCE;

    /**
     * Callbacks from the RcsFeature, which have an empty default implementation and can be
     * overridden for each Feature.
     * The capability exchange event callbacks from the RcsFeature.
     */
    public static class RcsFeatureCallbacks {
        /** See {@link RcsCapabilityExchange#onCommandUpdate(int, int)} */
        @VisibleForTesting
        public void onCommandUpdate(int commandCode, int operationToken) {}

        /** See {@link RcsPresenceExchangeImplBase#onNetworkResponse(int, String, int)} */
        public void onNetworkResponse(int code, String reason, int operationToken) {}

        /** See {@link RcsPresenceExchangeImplBase#onCapabilityRequestResponse(List, int)} */
        public void onCapabilityRequestResponsePresence(List<RcsContactUceCapability> infos,
                int operationToken) {}

        /** See {@link RcsPresenceExchangeImplBase#onNotifyUpdateCapabilites(int)} */
        public void onNotifyUpdateCapabilities(int publishTriggerType) {}

        /** See {@link RcsPresenceExchangeImplBase#onUnpublish()} */
        public void onUnpublish() {}

    public interface CapabilityExchangeEventCallback {
        /**
         * See {@link RcsSipOptionsImplBase#onCapabilityRequestResponse(int,String,
         * RcsContactUceCapability, int)}
         * Triggered by RcsFeature to publish the device's capabilities to the network.
         */
        public void onCapabilityRequestResponseOptions(int code, String reason,
                RcsContactUceCapability info, int operationToken) {}
        void onRequestPublishCapabilities(@StackPublishTriggerType int publishTriggerType);

        /**
         * See {@link RcsSipOptionsImplBase#onRemoteCapabilityRequest(Uri, RcsContactUceCapability,
         * int)}
         * Notify that the devices is unpublished.
         */
        public void onRemoteCapabilityRequest(Uri contactUri, RcsContactUceCapability remoteInfo,
                int operationToken) {}
    }
        void onUnpublish();

    private final IRcsFeatureListener mRcsFeatureCallbackAdapter = new IRcsFeatureListener.Stub() {
        @Override
        public void onCommandUpdate(int commandCode, int operationToken) {
            mRcsFeatureCallbacks.forEach(listener-> listener.onCommandUpdate(commandCode,
                    operationToken));
        }

        @Override
        public void onNetworkResponse(int code, String reason, int operationToken) {
            mRcsFeatureCallbacks.forEach(listener-> listener.onNetworkResponse(code, reason,
                    operationToken));
        }

        @Override
        public void onCapabilityRequestResponsePresence(List<RcsContactUceCapability> infos,
                int operationToken) {
            mRcsFeatureCallbacks.forEach(listener-> listener.onCapabilityRequestResponsePresence(
                    infos, operationToken));
        /**
         * Receive a capabilities request from the remote client.
         */
        void onRemoteCapabilityRequest(Uri contactUri,
                List<String> remoteCapabilities, IOptionsRequestCallback cb);
    }

    /*
     * Setup the listener to listen to the requests and updates from ImsService.
     */
    private ICapabilityExchangeEventListener mCapabilityEventListener =
            new ICapabilityExchangeEventListener.Stub() {
                @Override
        public void onNotifyUpdateCapabilities(int publishTriggerType) {
            mRcsFeatureCallbacks.forEach(listener-> listener.onNotifyUpdateCapabilities(
                    publishTriggerType));
                public void onRequestPublishCapabilities(@StackPublishTriggerType int type) {
                    mCapabilityEventCallback.forEach(
                            callback -> callback.onRequestPublishCapabilities(type));
                }

                @Override
                public void onUnpublish() {
            mRcsFeatureCallbacks.forEach(listener-> listener.onUnpublish());
        }

        @Override
        public void onCapabilityRequestResponseOptions(int code, String reason,
                RcsContactUceCapability info, int operationToken) {
            mRcsFeatureCallbacks.forEach(listener -> listener.onCapabilityRequestResponseOptions(
                    code, reason, info, operationToken));
                    mCapabilityEventCallback.forEach(callback -> callback.onUnpublish());
                }

                @Override
        public void onRemoteCapabilityRequest(Uri contactUri, RcsContactUceCapability remoteInfo,
                int operationToken) {
            mRcsFeatureCallbacks.forEach(listener -> listener.onRemoteCapabilityRequest(
                    contactUri, remoteInfo, operationToken));
                public void onRemoteCapabilityRequest(Uri contactUri,
                        List<String> remoteCapabilities, IOptionsRequestCallback cb) {
                    mCapabilityEventCallback.forEach(
                            callback -> callback.onRemoteCapabilityRequest(
                                    contactUri, remoteCapabilities, cb));
                }
            };

    private final int mSlotId;
    private final Context mContext;
    private final Set<RcsFeatureCallbacks> mRcsFeatureCallbacks = new CopyOnWriteArraySet<>();
    private final Set<CapabilityExchangeEventCallback> mCapabilityEventCallback
            = new CopyOnWriteArraySet<>();
    private final BinderCacheManager<IImsRcsController> mBinderCache
            = new BinderCacheManager<>(RcsFeatureManager::getIImsRcsControllerInterface);

@@ -205,7 +165,7 @@ public class RcsFeatureManager implements FeatureUpdates {
     */
    public void openConnection() throws android.telephony.ims.ImsException {
        try {
            mRcsFeatureConnection.setRcsFeatureListener(mRcsFeatureCallbackAdapter);
            mRcsFeatureConnection.setCapabilityExchangeEventListener(mCapabilityEventListener);
        } catch (RemoteException e){
            throw new android.telephony.ims.ImsException("Service is not available.",
                    android.telephony.ims.ImsException.CODE_ERROR_SERVICE_UNAVAILABLE);
@@ -218,27 +178,27 @@ public class RcsFeatureManager implements FeatureUpdates {
     */
    public void releaseConnection() {
        try {
            mRcsFeatureConnection.setRcsFeatureListener(null);
            mRcsFeatureConnection.setCapabilityExchangeEventListener(null);
        } catch (RemoteException e){
            // Connection may not be available at this point.
        }
        mRcsFeatureConnection.close();
        mRcsFeatureCallbacks.clear();
        mCapabilityEventCallback.clear();
    }

    /**
     * Adds a callback for {@link RcsFeatureCallbacks}.
     * Adds a callback for {@link CapabilityExchangeEventCallback}.
     * Note: These callbacks will be sent on the binder thread used to notify the callback.
     */
    public void addFeatureListenerCallback(RcsFeatureCallbacks listener) {
        mRcsFeatureCallbacks.add(listener);
    public void addCapabilityEventCallback(CapabilityExchangeEventCallback listener) {
        mCapabilityEventCallback.add(listener);
    }

    /**
     * Removes an existing {@link RcsFeatureCallbacks}.
     * Removes an existing {@link CapabilityExchangeEventCallback}.
     */
    public void removeFeatureListenerCallback(RcsFeatureCallbacks listener) {
        mRcsFeatureCallbacks.remove(listener);
    public void removeCapabilityEventCallback(CapabilityExchangeEventCallback listener) {
        mCapabilityEventCallback.remove(listener);
    }

    /**
@@ -366,6 +326,7 @@ public class RcsFeatureManager implements FeatureUpdates {
        }
        return mRcsFeatureConnection.getSipTransport();
    }

    /**
     * Query for the specific capability.
     */
@@ -447,16 +408,6 @@ public class RcsFeatureManager implements FeatureUpdates {
                ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN);
    }

    public void requestPublication(RcsContactUceCapability capabilities, int taskId)
            throws RemoteException {
        mRcsFeatureConnection.requestPublication(capabilities, taskId);
    }

    public void setCapabilityExchangeEventListener(ICapabilityExchangeEventListener listener)
            throws RemoteException {
        mRcsFeatureConnection.setCapabilityExchangeEventListener(listener);
    }

    public void requestPublication(String pidfXml, IPublishResponseCallback responseCallback)
            throws RemoteException {
        mRcsFeatureConnection.requestPublication(pidfXml, responseCallback);
+17 −8
Original line number Diff line number Diff line
@@ -203,6 +203,7 @@ public class UceController {
    private volatile boolean mIsDestroyedFlag;
    private Looper mLooper;

    private RcsFeatureManager mRcsFeatureManager;
    private EabController mEabController;
    private PublishController mPublishController;
    private SubscribeController mSubscribeController;
@@ -270,12 +271,9 @@ public class UceController {
        mPublishController.onRcsConnected(manager);
        mSubscribeController.onRcsConnected(manager);
        mOptionsController.onRcsConnected(manager);

        try {
            manager.setCapabilityExchangeEventListener(mCapabilityEventListener);
        } catch (RemoteException e) {
            logw("Set capability event listener error: " + e.getMessage());
        }
        // Listen to the capability exchange event which is triggered by the ImsService
        mRcsFeatureManager = manager;
        mRcsFeatureManager.addCapabilityEventCallback(mCapabilityEventListener);
    }

    /**
@@ -284,6 +282,11 @@ public class UceController {
    public void onRcsDisconnected() {
        logi("onRcsDisconnected");
        mIsRcsConnected = false;
        // Remove the listener because RCS is disconnected.
        if (mRcsFeatureManager != null) {
            mRcsFeatureManager.removeCapabilityEventCallback(mCapabilityEventListener);
            mRcsFeatureManager = null;
        }
        // Notify each controllers that RCS is disconnected.
        mEabController.onRcsDisconnected();
        mPublishController.onRcsDisconnected();
@@ -297,6 +300,12 @@ public class UceController {
    public void onDestroy() {
        logi("onDestroy");
        mIsDestroyedFlag = true;
        // Remove the listener because the UceController instance is destroyed.
        if (mRcsFeatureManager != null) {
            mRcsFeatureManager.removeCapabilityEventCallback(mCapabilityEventListener);
            mRcsFeatureManager = null;
        }
        // Destroy all the controllers
        mRequestManager.onDestroy();
        mEabController.onDestroy();
        mPublishController.onDestroy();
@@ -380,8 +389,8 @@ public class UceController {
    /*
     * Setup the listener to listen to the requests and updates from ImsService.
     */
    private ICapabilityExchangeEventListener mCapabilityEventListener =
            new ICapabilityExchangeEventListener.Stub() {
    private RcsFeatureManager.CapabilityExchangeEventCallback mCapabilityEventListener =
            new RcsFeatureManager.CapabilityExchangeEventCallback() {
                @Override
                public void onRequestPublishCapabilities(
                        @StackPublishTriggerType int publishTriggerType) {
+2 −1
Original line number Diff line number Diff line
@@ -101,7 +101,7 @@ public class UceControllerTest extends ImsTestBase {
        verify(mPublishController).onRcsConnected(mFeatureManager);
        verify(mSubscribeController).onRcsConnected(mFeatureManager);
        verify(mOptionsController).onRcsConnected(mFeatureManager);
        verify(mFeatureManager).setCapabilityExchangeEventListener(any());
        verify(mFeatureManager).addCapabilityEventCallback(any());
    }

    @Test
@@ -112,6 +112,7 @@ public class UceControllerTest extends ImsTestBase {

        uceController.onRcsDisconnected();

        verify(mFeatureManager).removeCapabilityEventCallback(any());
        verify(mEabController).onRcsDisconnected();
        verify(mPublishController).onRcsDisconnected();
        verify(mSubscribeController).onRcsDisconnected();