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

Commit c3c03c3d authored by Christine Franks's avatar Christine Franks
Browse files

Change id type to string and extract control enum

Bug: 265466098
Test: atest FrameworksServicesTests:com.android.server.companion.datatransfer.contextsync

Change-Id: Iec671f6ea79c0dd61a85452ce492f7ca0c8f2cdd
parent fda666fe
Loading
Loading
Loading
Loading
+15 −14
Original line number Diff line number Diff line
@@ -25,7 +25,7 @@ message Telecom {
  // Next index: 6
  message Call {
    // UUID representing this call
    int64 id = 1;
    string id = 1;

    message Origin {
      // Caller's name and/or phone number; what a user would see displayed when receiving an
@@ -48,6 +48,9 @@ message Telecom {
    }
    Status status = 3;

    repeated Control controls = 4;
  }

  enum Control {
    UNKNOWN_CONTROL = 0;
    ACCEPT = 1;
@@ -61,8 +64,6 @@ message Telecom {
    REJECT_AND_BLOCK = 9;
    IGNORE = 10;
  }
    repeated Control controls = 4;
  }

  // The list of active calls.
  repeated Call calls = 1;
+21 −28
Original line number Diff line number Diff line
@@ -128,9 +128,9 @@ public class CallMetadataSyncConnectionService extends ConnectionService {

    private static final class CallMetadataSyncConnectionIdentifier {
        private final int mAssociationId;
        private final long mCallId;
        private final String mCallId;

        CallMetadataSyncConnectionIdentifier(int associationId, long callId) {
        CallMetadataSyncConnectionIdentifier(int associationId, String callId) {
            mAssociationId = associationId;
            mCallId = callId;
        }
@@ -139,7 +139,7 @@ public class CallMetadataSyncConnectionService extends ConnectionService {
            return mAssociationId;
        }

        public long getCallId() {
        public String getCallId() {
            return mCallId;
        }

@@ -161,9 +161,7 @@ public class CallMetadataSyncConnectionService extends ConnectionService {

    private abstract static class CallMetadataSyncConnectionCallback {

        abstract void sendCallAction(int associationId, long callId, int action);

        abstract void sendStateChange(int associationId, long callId, int newState);
        abstract void sendCallAction(int associationId, String callId, int action);
    }

    private static class CallMetadataSyncConnection extends Connection {
@@ -184,7 +182,7 @@ public class CallMetadataSyncConnectionService extends ConnectionService {
            mCallback = callback;
        }

        public long getCallId() {
        public String getCallId() {
            return mCall.getId();
        }

@@ -205,22 +203,22 @@ public class CallMetadataSyncConnectionService extends ConnectionService {
            }

            final Bundle extras = new Bundle();
            extras.putLong(CrossDeviceCall.EXTRA_CALL_ID, mCall.getId());
            extras.putString(CrossDeviceCall.EXTRA_CALL_ID, mCall.getId());
            putExtras(extras);

            int capabilities = getConnectionCapabilities();
            if (mCall.hasControl(android.companion.Telecom.Call.PUT_ON_HOLD)) {
            if (mCall.hasControl(android.companion.Telecom.PUT_ON_HOLD)) {
                capabilities |= CAPABILITY_HOLD;
            } else {
                capabilities &= ~CAPABILITY_HOLD;
            }
            if (mCall.hasControl(android.companion.Telecom.Call.MUTE)) {
            if (mCall.hasControl(android.companion.Telecom.MUTE)) {
                capabilities |= CAPABILITY_MUTE;
            } else {
                capabilities &= ~CAPABILITY_MUTE;
            }
            mAudioManager.setMicrophoneMute(
                    mCall.hasControl(android.companion.Telecom.Call.UNMUTE));
                    mCall.hasControl(android.companion.Telecom.UNMUTE));
            if (capabilities != getConnectionCapabilities()) {
                setConnectionCapabilities(capabilities);
            }
@@ -248,8 +246,8 @@ public class CallMetadataSyncConnectionService extends ConnectionService {

            int capabilities = getConnectionCapabilities();
            final boolean hasHoldControl = mCall.hasControl(
                    android.companion.Telecom.Call.PUT_ON_HOLD)
                    || mCall.hasControl(android.companion.Telecom.Call.TAKE_OFF_HOLD);
                    android.companion.Telecom.PUT_ON_HOLD)
                    || mCall.hasControl(android.companion.Telecom.TAKE_OFF_HOLD);
            if (hasHoldControl != ((getConnectionCapabilities() & CAPABILITY_HOLD)
                    == CAPABILITY_HOLD)) {
                if (hasHoldControl) {
@@ -258,7 +256,7 @@ public class CallMetadataSyncConnectionService extends ConnectionService {
                    capabilities &= ~CAPABILITY_HOLD;
                }
            }
            final boolean hasMuteControl = mCall.hasControl(android.companion.Telecom.Call.MUTE);
            final boolean hasMuteControl = mCall.hasControl(android.companion.Telecom.MUTE);
            if (hasMuteControl != ((getConnectionCapabilities() & CAPABILITY_MUTE)
                    == CAPABILITY_MUTE)) {
                if (hasMuteControl) {
@@ -268,7 +266,7 @@ public class CallMetadataSyncConnectionService extends ConnectionService {
                }
            }
            mAudioManager.setMicrophoneMute(
                    mCall.hasControl(android.companion.Telecom.Call.UNMUTE));
                    mCall.hasControl(android.companion.Telecom.UNMUTE));
            if (capabilities != getConnectionCapabilities()) {
                setConnectionCapabilities(capabilities);
            }
@@ -276,12 +274,12 @@ public class CallMetadataSyncConnectionService extends ConnectionService {

        @Override
        public void onAnswer(int videoState) {
            sendCallAction(android.companion.Telecom.Call.ACCEPT);
            sendCallAction(android.companion.Telecom.ACCEPT);
        }

        @Override
        public void onReject() {
            sendCallAction(android.companion.Telecom.Call.REJECT);
            sendCallAction(android.companion.Telecom.REJECT);
        }

        @Override
@@ -296,33 +294,28 @@ public class CallMetadataSyncConnectionService extends ConnectionService {

        @Override
        public void onSilence() {
            sendCallAction(android.companion.Telecom.Call.SILENCE);
            sendCallAction(android.companion.Telecom.SILENCE);
        }

        @Override
        public void onHold() {
            sendCallAction(android.companion.Telecom.Call.PUT_ON_HOLD);
            sendCallAction(android.companion.Telecom.PUT_ON_HOLD);
        }

        @Override
        public void onUnhold() {
            sendCallAction(android.companion.Telecom.Call.TAKE_OFF_HOLD);
            sendCallAction(android.companion.Telecom.TAKE_OFF_HOLD);
        }

        @Override
        public void onMuteStateChanged(boolean isMuted) {
            sendCallAction(isMuted ? android.companion.Telecom.Call.MUTE
                    : android.companion.Telecom.Call.UNMUTE);
            sendCallAction(isMuted ? android.companion.Telecom.MUTE
                    : android.companion.Telecom.UNMUTE);
        }

        @Override
        public void onDisconnect() {
            sendCallAction(android.companion.Telecom.Call.END);
        }

        @Override
        public void onStateChanged(int state) {
            mCallback.sendStateChange(mAssociationId, mCall.getId(), state);
            sendCallAction(android.companion.Telecom.END);
        }

        private void sendCallAction(int action) {
+8 −8
Original line number Diff line number Diff line
@@ -33,14 +33,14 @@ import java.util.Set;
/** A read-only snapshot of an {@link ContextSyncMessage}. */
class CallMetadataSyncData {

    final Map<Long, CallMetadataSyncData.Call> mCalls = new HashMap<>();
    final Map<String, CallMetadataSyncData.Call> mCalls = new HashMap<>();
    final List<CallMetadataSyncData.Call> mRequests = new ArrayList<>();

    public void addCall(CallMetadataSyncData.Call call) {
        mCalls.put(call.getId(), call);
    }

    public boolean hasCall(long id) {
    public boolean hasCall(String id) {
        return mCalls.containsKey(id);
    }

@@ -57,7 +57,7 @@ class CallMetadataSyncData {
    }

    public static class Call implements Parcelable {
        private long mId;
        private String mId;
        private String mCallerId;
        private byte[] mAppIcon;
        private String mAppName;
@@ -67,7 +67,7 @@ class CallMetadataSyncData {

        public static Call fromParcel(Parcel parcel) {
            final Call call = new Call();
            call.setId(parcel.readLong());
            call.setId(parcel.readString());
            call.setCallerId(parcel.readString());
            call.setAppIcon(parcel.readBlob());
            call.setAppName(parcel.readString());
@@ -82,7 +82,7 @@ class CallMetadataSyncData {

        @Override
        public void writeToParcel(Parcel parcel, int parcelableFlags) {
            parcel.writeLong(mId);
            parcel.writeString(mId);
            parcel.writeString(mCallerId);
            parcel.writeBlob(mAppIcon);
            parcel.writeString(mAppName);
@@ -94,7 +94,7 @@ class CallMetadataSyncData {
            }
        }

        void setId(long id) {
        void setId(String id) {
            mId = id;
        }

@@ -122,7 +122,7 @@ class CallMetadataSyncData {
            mControls.add(control);
        }

        long getId() {
        String getId() {
            return mId;
        }

@@ -157,7 +157,7 @@ class CallMetadataSyncData {
        @Override
        public boolean equals(Object other) {
            if (other instanceof CallMetadataSyncData.Call) {
                return ((Call) other).getId() == getId();
                return mId != null && mId.equals(((Call) other).getId());
            }
            return false;
        }
+13 −14
Original line number Diff line number Diff line
@@ -41,7 +41,6 @@ import java.util.stream.Collectors;
public class CallMetadataSyncInCallService extends InCallService {

    private static final String TAG = "CallMetadataIcs";
    private static final long NOT_VALID = -1L;

    private CompanionDeviceManagerServiceInternal mCdmsi;

@@ -71,7 +70,7 @@ public class CallMetadataSyncInCallService extends InCallService {
                            callMetadataSyncData.getRequests().iterator();
                    while (iterator.hasNext()) {
                        final CallMetadataSyncData.Call call = iterator.next();
                        if (call.getId() != 0) {
                        if (call.getId() != null) {
                            // The call is already assigned an id; treat as control invocations.
                            for (int control : call.getControls()) {
                                processCallControlAction(call.getId(), control);
@@ -81,41 +80,41 @@ public class CallMetadataSyncInCallService extends InCallService {
                    }
                }

                private void processCallControlAction(long crossDeviceCallId,
                private void processCallControlAction(String crossDeviceCallId,
                        int callControlAction) {
                    final CrossDeviceCall crossDeviceCall = getCallForId(crossDeviceCallId,
                            mCurrentCalls.values());
                    switch (callControlAction) {
                        case android.companion.Telecom.Call.ACCEPT:
                        case android.companion.Telecom.ACCEPT:
                            if (crossDeviceCall != null) {
                                crossDeviceCall.doAccept();
                            }
                            break;
                        case android.companion.Telecom.Call.REJECT:
                        case android.companion.Telecom.REJECT:
                            if (crossDeviceCall != null) {
                                crossDeviceCall.doReject();
                            }
                            break;
                        case android.companion.Telecom.Call.SILENCE:
                        case android.companion.Telecom.SILENCE:
                            doSilence();
                            break;
                        case android.companion.Telecom.Call.MUTE:
                        case android.companion.Telecom.MUTE:
                            doMute();
                            break;
                        case android.companion.Telecom.Call.UNMUTE:
                        case android.companion.Telecom.UNMUTE:
                            doUnmute();
                            break;
                        case android.companion.Telecom.Call.END:
                        case android.companion.Telecom.END:
                            if (crossDeviceCall != null) {
                                crossDeviceCall.doEnd();
                            }
                            break;
                        case android.companion.Telecom.Call.PUT_ON_HOLD:
                        case android.companion.Telecom.PUT_ON_HOLD:
                            if (crossDeviceCall != null) {
                                crossDeviceCall.doPutOnHold();
                            }
                            break;
                        case android.companion.Telecom.Call.TAKE_OFF_HOLD:
                        case android.companion.Telecom.TAKE_OFF_HOLD:
                            if (crossDeviceCall != null) {
                                crossDeviceCall.doTakeOffHold();
                            }
@@ -171,12 +170,12 @@ public class CallMetadataSyncInCallService extends InCallService {

    @Nullable
    @VisibleForTesting
    CrossDeviceCall getCallForId(long crossDeviceCallId, Collection<CrossDeviceCall> calls) {
        if (crossDeviceCallId == NOT_VALID) {
    CrossDeviceCall getCallForId(String crossDeviceCallId, Collection<CrossDeviceCall> calls) {
        if (crossDeviceCallId == null) {
            return null;
        }
        for (CrossDeviceCall crossDeviceCall : calls) {
            if (crossDeviceCall.getId() == crossDeviceCallId) {
            if (crossDeviceCallId.equals(crossDeviceCall.getId())) {
                return crossDeviceCall;
            }
        }
+16 −19
Original line number Diff line number Diff line
@@ -23,7 +23,6 @@ import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.telecom.Call;
import android.telecom.CallAudioState;
import android.telecom.VideoProfile;
@@ -34,7 +33,7 @@ import com.android.internal.annotations.VisibleForTesting;
import java.io.ByteArrayOutputStream;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.atomic.AtomicLong;
import java.util.UUID;

/** Data holder for a telecom call and additional metadata. */
public class CrossDeviceCall {
@@ -45,9 +44,7 @@ public class CrossDeviceCall {
            "com.android.companion.datatransfer.contextsync.extra.CALL_ID";
    private static final int APP_ICON_BITMAP_DIMENSION = 256;

    private static final AtomicLong sNextId = new AtomicLong(1);

    private final long mId;
    private final String mId;
    private Call mCall;
    @VisibleForTesting boolean mIsEnterprise;
    @VisibleForTesting boolean mIsOtt;
@@ -64,14 +61,14 @@ public class CrossDeviceCall {
            CallAudioState callAudioState) {
        this(packageManager, call.getDetails(), callAudioState);
        mCall = call;
        final Bundle extras = new Bundle();
        extras.putLong(EXTRA_CALL_ID, mId);
        call.putExtras(extras);
        call.putExtra(EXTRA_CALL_ID, mId);
    }

    CrossDeviceCall(PackageManager packageManager, Call.Details callDetails,
            CallAudioState callAudioState) {
        mId = sNextId.getAndIncrement();
        final String predefinedId = callDetails.getIntentExtras() != null
                ? callDetails.getIntentExtras().getString(EXTRA_CALL_ID) : null;
        mId = predefinedId != null ? predefinedId : UUID.randomUUID().toString();
        mCallingAppPackageName =
                callDetails.getAccountHandle().getComponentName().getPackageName();
        mIsOtt = (callDetails.getCallCapabilities() & Call.Details.PROPERTY_SELF_MANAGED)
@@ -145,7 +142,7 @@ public class CrossDeviceCall {
        if (mStatus == android.companion.Telecom.Call.RINGING) {
            mStatus = android.companion.Telecom.Call.RINGING_SILENCED;
        }
        mControls.remove(android.companion.Telecom.Call.SILENCE);
        mControls.remove(android.companion.Telecom.SILENCE);
    }

    @VisibleForTesting
@@ -156,26 +153,26 @@ public class CrossDeviceCall {
        mControls.clear();
        if (mStatus == android.companion.Telecom.Call.RINGING
                || mStatus == android.companion.Telecom.Call.RINGING_SILENCED) {
            mControls.add(android.companion.Telecom.Call.ACCEPT);
            mControls.add(android.companion.Telecom.Call.REJECT);
            mControls.add(android.companion.Telecom.ACCEPT);
            mControls.add(android.companion.Telecom.REJECT);
            if (mStatus == android.companion.Telecom.Call.RINGING) {
                mControls.add(android.companion.Telecom.Call.SILENCE);
                mControls.add(android.companion.Telecom.SILENCE);
            }
        }
        if (mStatus == android.companion.Telecom.Call.ONGOING
                || mStatus == android.companion.Telecom.Call.ON_HOLD) {
            mControls.add(android.companion.Telecom.Call.END);
            mControls.add(android.companion.Telecom.END);
            if (callDetails.can(Call.Details.CAPABILITY_HOLD)) {
                mControls.add(
                        mStatus == android.companion.Telecom.Call.ON_HOLD
                                ? android.companion.Telecom.Call.TAKE_OFF_HOLD
                                : android.companion.Telecom.Call.PUT_ON_HOLD);
                                ? android.companion.Telecom.TAKE_OFF_HOLD
                                : android.companion.Telecom.PUT_ON_HOLD);
            }
        }
        if (mStatus == android.companion.Telecom.Call.ONGOING && callDetails.can(
                Call.Details.CAPABILITY_MUTE)) {
            mControls.add(mIsMuted ? android.companion.Telecom.Call.UNMUTE
                    : android.companion.Telecom.Call.MUTE);
            mControls.add(mIsMuted ? android.companion.Telecom.UNMUTE
                    : android.companion.Telecom.MUTE);
        }
    }

@@ -212,7 +209,7 @@ public class CrossDeviceCall {
        }
    }

    public long getId() {
    public String getId() {
        return mId;
    }

Loading