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

Commit 0c8c709b authored by Daniel Bright's avatar Daniel Bright Committed by Automerger Merge Worker
Browse files

Merge "Call on urls changed callback when callback added" am: 62e4a951

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1352923

Change-Id: Iccdba540dcb69751f1b6ff43b9c36e3b8617e911
parents d6c6e3ea 62e4a951
Loading
Loading
Loading
Loading
+38 −12
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.util.Log;

import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.util.RemoteCallbackListExt;
import com.android.internal.util.ArrayUtils;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -105,6 +106,11 @@ public class ImsRegistrationImplBase {
    // Locked on mLock, create unspecified disconnect cause.
    private ImsReasonInfo mLastDisconnectCause = new ImsReasonInfo();

    // We hold onto the uris each time they change so that we can send it to a callback when its
    // first added.
    private Uri[] mUris = new Uri[0];
    private boolean mUrisSet = false;

    /**
     * @hide
     */
@@ -208,19 +214,27 @@ public class ImsRegistrationImplBase {
    }

    /**
     * The this device's subscriber associated {@link Uri}s have changed, which are used to filter
     * out this device's {@link Uri}s during conference calling.
     * @param uris
     * Invoked when the {@link Uri}s associated to this device's subscriber have changed.
     * These {@link Uri}s' are filtered out during conference calls.
     *
     * The {@link Uri}s are not guaranteed to be different between subsequent calls.
     * @param uris changed uris
     */
    public final void onSubscriberAssociatedUriChanged(Uri[] uris) {
        mCallbacks.broadcastAction((c) -> {
        synchronized (mLock) {
            mUris = ArrayUtils.cloneOrNull(uris);
            mUrisSet = true;
        }
        mCallbacks.broadcastAction((c) -> onSubscriberAssociatedUriChanged(c, uris));
    }

    private void onSubscriberAssociatedUriChanged(IImsRegistrationCallback callback, Uri[] uris) {
        try {
                c.onSubscriberAssociatedUriChanged(uris);
            callback.onSubscriberAssociatedUriChanged(uris);
        } catch (RemoteException e) {
                Log.w(LOG_TAG, e + " " + "onSubscriberAssociatedUriChanged() - Skipping " +
                        "callback.");
            Log.w(LOG_TAG, e + " " + "onSubscriberAssociatedUriChanged() - Skipping "
                    + "callback.");
        }
        });
    }

    private void updateToState(@ImsRegistrationTech int connType, int newState) {
@@ -233,6 +247,10 @@ public class ImsRegistrationImplBase {

    private void updateToDisconnectedState(ImsReasonInfo info) {
        synchronized (mLock) {
            //We don't want to send this info over if we are disconnected
            mUrisSet = false;
            mUris = null;

            updateToState(REGISTRATION_TECH_NONE,
                    RegistrationManager.REGISTRATION_STATE_NOT_REGISTERED);
            if (info != null) {
@@ -260,12 +278,17 @@ public class ImsRegistrationImplBase {
     * @param c the newly registered callback that will be updated with the current registration
     *         state.
     */
    private void updateNewCallbackWithState(IImsRegistrationCallback c) throws RemoteException {
    private void updateNewCallbackWithState(IImsRegistrationCallback c)
            throws RemoteException {
        int state;
        ImsReasonInfo disconnectInfo;
        boolean urisSet;
        Uri[] uris;
        synchronized (mLock) {
            state = mRegistrationState;
            disconnectInfo = mLastDisconnectCause;
            urisSet = mUrisSet;
            uris = mUris;
        }
        switch (state) {
            case RegistrationManager.REGISTRATION_STATE_NOT_REGISTERED: {
@@ -285,5 +308,8 @@ public class ImsRegistrationImplBase {
                break;
            }
        }
        if (urisSet) {
            onSubscriberAssociatedUriChanged(c, uris);
        }
    }
}