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

Commit ea854aec authored by Christine Franks's avatar Christine Franks Committed by Android (Google) Code Review
Browse files

Merge "Change id type to string and extract control enum" into udc-dev

parents 1892bddf c3c03c3d
Loading
Loading
Loading
Loading
+15 −14
Original line number Original line Diff line number Diff line
@@ -25,7 +25,7 @@ message Telecom {
  // Next index: 6
  // Next index: 6
  message Call {
  message Call {
    // UUID representing this call
    // UUID representing this call
    int64 id = 1;
    string id = 1;


    message Origin {
    message Origin {
      // Caller's name and/or phone number; what a user would see displayed when receiving an
      // 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;
    Status status = 3;


    repeated Control controls = 4;
  }

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


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


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


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


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


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


    private abstract static class CallMetadataSyncConnectionCallback {
    private abstract static class CallMetadataSyncConnectionCallback {


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

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


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


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


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


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


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


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


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


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


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


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


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


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


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


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

        @Override
        public void onStateChanged(int state) {
            mCallback.sendStateChange(mAssociationId, mCall.getId(), state);
        }
        }


        private void sendCallAction(int action) {
        private void sendCallAction(int action) {
+8 −8
Original line number Original line Diff line number Diff line
@@ -33,14 +33,14 @@ import java.util.Set;
/** A read-only snapshot of an {@link ContextSyncMessage}. */
/** A read-only snapshot of an {@link ContextSyncMessage}. */
class CallMetadataSyncData {
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<>();
    final List<CallMetadataSyncData.Call> mRequests = new ArrayList<>();


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


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


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


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


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


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


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


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


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


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


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


    private CompanionDeviceManagerServiceInternal mCdmsi;
    private CompanionDeviceManagerServiceInternal mCdmsi;


@@ -71,7 +70,7 @@ public class CallMetadataSyncInCallService extends InCallService {
                            callMetadataSyncData.getRequests().iterator();
                            callMetadataSyncData.getRequests().iterator();
                    while (iterator.hasNext()) {
                    while (iterator.hasNext()) {
                        final CallMetadataSyncData.Call call = iterator.next();
                        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.
                            // The call is already assigned an id; treat as control invocations.
                            for (int control : call.getControls()) {
                            for (int control : call.getControls()) {
                                processCallControlAction(call.getId(), control);
                                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) {
                        int callControlAction) {
                    final CrossDeviceCall crossDeviceCall = getCallForId(crossDeviceCallId,
                    final CrossDeviceCall crossDeviceCall = getCallForId(crossDeviceCallId,
                            mCurrentCalls.values());
                            mCurrentCalls.values());
                    switch (callControlAction) {
                    switch (callControlAction) {
                        case android.companion.Telecom.Call.ACCEPT:
                        case android.companion.Telecom.ACCEPT:
                            if (crossDeviceCall != null) {
                            if (crossDeviceCall != null) {
                                crossDeviceCall.doAccept();
                                crossDeviceCall.doAccept();
                            }
                            }
                            break;
                            break;
                        case android.companion.Telecom.Call.REJECT:
                        case android.companion.Telecom.REJECT:
                            if (crossDeviceCall != null) {
                            if (crossDeviceCall != null) {
                                crossDeviceCall.doReject();
                                crossDeviceCall.doReject();
                            }
                            }
                            break;
                            break;
                        case android.companion.Telecom.Call.SILENCE:
                        case android.companion.Telecom.SILENCE:
                            doSilence();
                            doSilence();
                            break;
                            break;
                        case android.companion.Telecom.Call.MUTE:
                        case android.companion.Telecom.MUTE:
                            doMute();
                            doMute();
                            break;
                            break;
                        case android.companion.Telecom.Call.UNMUTE:
                        case android.companion.Telecom.UNMUTE:
                            doUnmute();
                            doUnmute();
                            break;
                            break;
                        case android.companion.Telecom.Call.END:
                        case android.companion.Telecom.END:
                            if (crossDeviceCall != null) {
                            if (crossDeviceCall != null) {
                                crossDeviceCall.doEnd();
                                crossDeviceCall.doEnd();
                            }
                            }
                            break;
                            break;
                        case android.companion.Telecom.Call.PUT_ON_HOLD:
                        case android.companion.Telecom.PUT_ON_HOLD:
                            if (crossDeviceCall != null) {
                            if (crossDeviceCall != null) {
                                crossDeviceCall.doPutOnHold();
                                crossDeviceCall.doPutOnHold();
                            }
                            }
                            break;
                            break;
                        case android.companion.Telecom.Call.TAKE_OFF_HOLD:
                        case android.companion.Telecom.TAKE_OFF_HOLD:
                            if (crossDeviceCall != null) {
                            if (crossDeviceCall != null) {
                                crossDeviceCall.doTakeOffHold();
                                crossDeviceCall.doTakeOffHold();
                            }
                            }
@@ -171,12 +170,12 @@ public class CallMetadataSyncInCallService extends InCallService {


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


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


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

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


    CrossDeviceCall(PackageManager packageManager, Call.Details callDetails,
    CrossDeviceCall(PackageManager packageManager, Call.Details callDetails,
            CallAudioState callAudioState) {
            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 =
        mCallingAppPackageName =
                callDetails.getAccountHandle().getComponentName().getPackageName();
                callDetails.getAccountHandle().getComponentName().getPackageName();
        mIsOtt = (callDetails.getCallCapabilities() & Call.Details.PROPERTY_SELF_MANAGED)
        mIsOtt = (callDetails.getCallCapabilities() & Call.Details.PROPERTY_SELF_MANAGED)
@@ -145,7 +142,7 @@ public class CrossDeviceCall {
        if (mStatus == android.companion.Telecom.Call.RINGING) {
        if (mStatus == android.companion.Telecom.Call.RINGING) {
            mStatus = android.companion.Telecom.Call.RINGING_SILENCED;
            mStatus = android.companion.Telecom.Call.RINGING_SILENCED;
        }
        }
        mControls.remove(android.companion.Telecom.Call.SILENCE);
        mControls.remove(android.companion.Telecom.SILENCE);
    }
    }


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


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


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


Loading