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

This commit is contained in:
Christine Franks
2023-05-02 19:06:32 +00:00
committed by Android (Google) Code Review
10 changed files with 113 additions and 125 deletions

View File

@@ -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;

View File

@@ -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) {

View File

@@ -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;
} }

View File

@@ -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;
} }
} }

View File

@@ -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;
} }

View File

@@ -270,7 +270,7 @@ public class CrossDeviceSyncController {
while (pis.nextField() != ProtoInputStream.NO_MORE_FIELDS) { while (pis.nextField() != ProtoInputStream.NO_MORE_FIELDS) {
switch (pis.getFieldNumber()) { switch (pis.getFieldNumber()) {
case (int) Telecom.Call.ID: case (int) Telecom.Call.ID:
call.setId(pis.readLong(Telecom.Call.ID)); call.setId(pis.readString(Telecom.Call.ID));
break; break;
case (int) Telecom.Call.ORIGIN: case (int) Telecom.Call.ORIGIN:
final long originToken = pis.start(Telecom.Call.ORIGIN); final long originToken = pis.start(Telecom.Call.ORIGIN);
@@ -336,7 +336,7 @@ public class CrossDeviceSyncController {
} }
/** Create a call control message. */ /** Create a call control message. */
public static byte[] createCallControlMessage(long callId, int control) { public static byte[] createCallControlMessage(String callId, int control) {
final ProtoOutputStream pos = new ProtoOutputStream(); final ProtoOutputStream pos = new ProtoOutputStream();
pos.write(ContextSyncMessage.VERSION, CURRENT_VERSION); pos.write(ContextSyncMessage.VERSION, CURRENT_VERSION);
final long telecomToken = pos.start(ContextSyncMessage.TELECOM); final long telecomToken = pos.start(ContextSyncMessage.TELECOM);

View File

@@ -30,7 +30,7 @@ public class CallMetadataSyncDataTest {
@Test @Test
public void call_writeToParcel_fromParcel_reconstructsSuccessfully() { public void call_writeToParcel_fromParcel_reconstructsSuccessfully() {
final CallMetadataSyncData.Call call = new CallMetadataSyncData.Call(); final CallMetadataSyncData.Call call = new CallMetadataSyncData.Call();
final long id = 5; final String id = "5";
final String callerId = "callerId"; final String callerId = "callerId";
final byte[] appIcon = "appIcon".getBytes(); final byte[] appIcon = "appIcon".getBytes();
final String appName = "appName"; final String appName = "appName";

View File

@@ -47,24 +47,24 @@ public class CallMetadataSyncInCallServiceTest {
@Test @Test
public void getCallForId_invalid() { public void getCallForId_invalid() {
when(mMockCrossDeviceCall.getId()).thenReturn(-1L); when(mMockCrossDeviceCall.getId()).thenReturn(null);
final CrossDeviceCall call = mSyncInCallService.getCallForId(-1L, final CrossDeviceCall call = mSyncInCallService.getCallForId(null,
List.of(mMockCrossDeviceCall)); List.of(mMockCrossDeviceCall));
assertWithMessage("Unexpectedly found a match for call id").that(call).isNull(); assertWithMessage("Unexpectedly found a match for call id").that(call).isNull();
} }
@Test @Test
public void getCallForId_noMatch() { public void getCallForId_noMatch() {
when(mMockCrossDeviceCall.getId()).thenReturn(5L); when(mMockCrossDeviceCall.getId()).thenReturn("123abc");
final CrossDeviceCall call = mSyncInCallService.getCallForId(1L, final CrossDeviceCall call = mSyncInCallService.getCallForId("abc123",
List.of(mMockCrossDeviceCall)); List.of(mMockCrossDeviceCall));
assertWithMessage("Unexpectedly found a match for call id").that(call).isNull(); assertWithMessage("Unexpectedly found a match for call id").that(call).isNull();
} }
@Test @Test
public void getCallForId_hasMatch() { public void getCallForId_hasMatch() {
when(mMockCrossDeviceCall.getId()).thenReturn(5L); when(mMockCrossDeviceCall.getId()).thenReturn("123abc");
final CrossDeviceCall call = mSyncInCallService.getCallForId(5L, final CrossDeviceCall call = mSyncInCallService.getCallForId("123abc",
List.of(mMockCrossDeviceCall)); List.of(mMockCrossDeviceCall));
assertWithMessage("Unexpectedly did not find a match for call id").that(call).isNotNull(); assertWithMessage("Unexpectedly did not find a match for call id").that(call).isNotNull();
} }

View File

@@ -62,9 +62,9 @@ public class CrossDeviceCallTest {
assertWithMessage("Wrong status").that(crossDeviceCall.getStatus()) assertWithMessage("Wrong status").that(crossDeviceCall.getStatus())
.isEqualTo(android.companion.Telecom.Call.RINGING); .isEqualTo(android.companion.Telecom.Call.RINGING);
assertWithMessage("Wrong controls").that(crossDeviceCall.getControls()) assertWithMessage("Wrong controls").that(crossDeviceCall.getControls())
.isEqualTo(Set.of(android.companion.Telecom.Call.ACCEPT, .isEqualTo(Set.of(android.companion.Telecom.ACCEPT,
android.companion.Telecom.Call.REJECT, android.companion.Telecom.REJECT,
android.companion.Telecom.Call.SILENCE)); android.companion.Telecom.SILENCE));
} }
@Test @Test
@@ -77,9 +77,9 @@ public class CrossDeviceCallTest {
assertWithMessage("Wrong status").that(crossDeviceCall.getStatus()) assertWithMessage("Wrong status").that(crossDeviceCall.getStatus())
.isEqualTo(android.companion.Telecom.Call.ONGOING); .isEqualTo(android.companion.Telecom.Call.ONGOING);
assertWithMessage("Wrong controls").that(crossDeviceCall.getControls()) assertWithMessage("Wrong controls").that(crossDeviceCall.getControls())
.isEqualTo(Set.of(android.companion.Telecom.Call.END, .isEqualTo(Set.of(android.companion.Telecom.END,
android.companion.Telecom.Call.MUTE, android.companion.Telecom.MUTE,
android.companion.Telecom.Call.PUT_ON_HOLD)); android.companion.Telecom.PUT_ON_HOLD));
} }
@Test @Test
@@ -92,8 +92,8 @@ public class CrossDeviceCallTest {
assertWithMessage("Wrong status").that(crossDeviceCall.getStatus()) assertWithMessage("Wrong status").that(crossDeviceCall.getStatus())
.isEqualTo(android.companion.Telecom.Call.ON_HOLD); .isEqualTo(android.companion.Telecom.Call.ON_HOLD);
assertWithMessage("Wrong controls").that(crossDeviceCall.getControls()) assertWithMessage("Wrong controls").that(crossDeviceCall.getControls())
.isEqualTo(Set.of(android.companion.Telecom.Call.END, .isEqualTo(Set.of(android.companion.Telecom.END,
android.companion.Telecom.Call.TAKE_OFF_HOLD)); android.companion.Telecom.TAKE_OFF_HOLD));
} }
@Test @Test
@@ -106,8 +106,8 @@ public class CrossDeviceCallTest {
assertWithMessage("Wrong status").that(crossDeviceCall.getStatus()) assertWithMessage("Wrong status").that(crossDeviceCall.getStatus())
.isEqualTo(android.companion.Telecom.Call.ONGOING); .isEqualTo(android.companion.Telecom.Call.ONGOING);
assertWithMessage("Wrong controls").that(crossDeviceCall.getControls()) assertWithMessage("Wrong controls").that(crossDeviceCall.getControls())
.isEqualTo(Set.of(android.companion.Telecom.Call.END, .isEqualTo(Set.of(android.companion.Telecom.END,
android.companion.Telecom.Call.MUTE)); android.companion.Telecom.MUTE));
} }
@Test @Test
@@ -120,8 +120,8 @@ public class CrossDeviceCallTest {
assertWithMessage("Wrong status").that(crossDeviceCall.getStatus()) assertWithMessage("Wrong status").that(crossDeviceCall.getStatus())
.isEqualTo(android.companion.Telecom.Call.ONGOING); .isEqualTo(android.companion.Telecom.Call.ONGOING);
assertWithMessage("Wrong controls").that(crossDeviceCall.getControls()) assertWithMessage("Wrong controls").that(crossDeviceCall.getControls())
.isEqualTo(Set.of(android.companion.Telecom.Call.END, .isEqualTo(Set.of(android.companion.Telecom.END,
android.companion.Telecom.Call.PUT_ON_HOLD)); android.companion.Telecom.PUT_ON_HOLD));
} }
@Test @Test
@@ -134,17 +134,17 @@ public class CrossDeviceCallTest {
assertWithMessage("Wrong status for ringing state").that(crossDeviceCall.getStatus()) assertWithMessage("Wrong status for ringing state").that(crossDeviceCall.getStatus())
.isEqualTo(android.companion.Telecom.Call.RINGING); .isEqualTo(android.companion.Telecom.Call.RINGING);
assertWithMessage("Wrong controls for ringing state").that(crossDeviceCall.getControls()) assertWithMessage("Wrong controls for ringing state").that(crossDeviceCall.getControls())
.isEqualTo(Set.of(android.companion.Telecom.Call.ACCEPT, .isEqualTo(Set.of(android.companion.Telecom.ACCEPT,
android.companion.Telecom.Call.REJECT, android.companion.Telecom.REJECT,
android.companion.Telecom.Call.SILENCE)); android.companion.Telecom.SILENCE));
crossDeviceCall.updateCallDetails(createCallDetails(Call.STATE_ACTIVE, crossDeviceCall.updateCallDetails(createCallDetails(Call.STATE_ACTIVE,
Call.Details.CAPABILITY_HOLD | Call.Details.CAPABILITY_MUTE)); Call.Details.CAPABILITY_HOLD | Call.Details.CAPABILITY_MUTE));
assertWithMessage("Wrong status for active state").that(crossDeviceCall.getStatus()) assertWithMessage("Wrong status for active state").that(crossDeviceCall.getStatus())
.isEqualTo(android.companion.Telecom.Call.ONGOING); .isEqualTo(android.companion.Telecom.Call.ONGOING);
assertWithMessage("Wrong controls for active state").that(crossDeviceCall.getControls()) assertWithMessage("Wrong controls for active state").that(crossDeviceCall.getControls())
.isEqualTo(Set.of(android.companion.Telecom.Call.END, .isEqualTo(Set.of(android.companion.Telecom.END,
android.companion.Telecom.Call.MUTE, android.companion.Telecom.MUTE,
android.companion.Telecom.Call.PUT_ON_HOLD)); android.companion.Telecom.PUT_ON_HOLD));
} }
@Test @Test
@@ -158,8 +158,8 @@ public class CrossDeviceCallTest {
assertWithMessage("Wrong status").that(crossDeviceCall.getStatus()) assertWithMessage("Wrong status").that(crossDeviceCall.getStatus())
.isEqualTo(android.companion.Telecom.Call.RINGING_SILENCED); .isEqualTo(android.companion.Telecom.Call.RINGING_SILENCED);
assertWithMessage("Wrong controls").that(crossDeviceCall.getControls()) assertWithMessage("Wrong controls").that(crossDeviceCall.getControls())
.isEqualTo(Set.of(android.companion.Telecom.Call.ACCEPT, .isEqualTo(Set.of(android.companion.Telecom.ACCEPT,
android.companion.Telecom.Call.REJECT)); android.companion.Telecom.REJECT));
} }
@Test @Test
@@ -173,9 +173,9 @@ public class CrossDeviceCallTest {
assertWithMessage("Wrong status").that(crossDeviceCall.getStatus()) assertWithMessage("Wrong status").that(crossDeviceCall.getStatus())
.isEqualTo(android.companion.Telecom.Call.ONGOING); .isEqualTo(android.companion.Telecom.Call.ONGOING);
assertWithMessage("Wrong controls").that(crossDeviceCall.getControls()) assertWithMessage("Wrong controls").that(crossDeviceCall.getControls())
.isEqualTo(Set.of(android.companion.Telecom.Call.END, .isEqualTo(Set.of(android.companion.Telecom.END,
android.companion.Telecom.Call.MUTE, android.companion.Telecom.MUTE,
android.companion.Telecom.Call.PUT_ON_HOLD)); android.companion.Telecom.PUT_ON_HOLD));
} }
@Test @Test

View File

@@ -81,7 +81,7 @@ public class CrossDeviceSyncControllerTest {
@Test @Test
public void processTelecomDataFromSync_createCallUpdateMessage_hasCalls() { public void processTelecomDataFromSync_createCallUpdateMessage_hasCalls() {
when(mMockCrossDeviceCall.getId()).thenReturn(5L); when(mMockCrossDeviceCall.getId()).thenReturn("123abc");
final String callerId = "Firstname Lastname"; final String callerId = "Firstname Lastname";
when(mMockCrossDeviceCall.getReadableCallerId(anyBoolean())).thenReturn(callerId); when(mMockCrossDeviceCall.getReadableCallerId(anyBoolean())).thenReturn(callerId);
final String appName = "AppName"; final String appName = "AppName";
@@ -90,9 +90,9 @@ public class CrossDeviceSyncControllerTest {
when(mMockCrossDeviceCall.getCallingAppIcon()).thenReturn(appIcon.getBytes()); when(mMockCrossDeviceCall.getCallingAppIcon()).thenReturn(appIcon.getBytes());
when(mMockCrossDeviceCall.getStatus()).thenReturn(android.companion.Telecom.Call.RINGING); when(mMockCrossDeviceCall.getStatus()).thenReturn(android.companion.Telecom.Call.RINGING);
final Set<Integer> controls = Set.of( final Set<Integer> controls = Set.of(
android.companion.Telecom.Call.ACCEPT, android.companion.Telecom.ACCEPT,
android.companion.Telecom.Call.REJECT, android.companion.Telecom.REJECT,
android.companion.Telecom.Call.SILENCE); android.companion.Telecom.SILENCE);
when(mMockCrossDeviceCall.getControls()).thenReturn(controls); when(mMockCrossDeviceCall.getControls()).thenReturn(controls);
final byte[] data = mCrossDeviceSyncController.createCallUpdateMessage( final byte[] data = mCrossDeviceSyncController.createCallUpdateMessage(
new HashSet<>(List.of(mMockCrossDeviceCall)), new HashSet<>(List.of(mMockCrossDeviceCall)),
@@ -103,35 +103,33 @@ public class CrossDeviceSyncControllerTest {
callMetadataSyncData.getCalls()).hasSize(1); callMetadataSyncData.getCalls()).hasSize(1);
final CallMetadataSyncData.Call call = final CallMetadataSyncData.Call call =
callMetadataSyncData.getCalls().stream().findAny().orElseThrow(); callMetadataSyncData.getCalls().stream().findAny().orElseThrow();
assertWithMessage("Wrong id").that(call.getId()).isEqualTo(5L); assertWithMessage("Wrong id").that(call.getId()).isEqualTo("123abc");
assertWithMessage("Wrong app icon").that(new String(call.getAppIcon())).isEqualTo(appIcon); assertWithMessage("Wrong app icon").that(new String(call.getAppIcon())).isEqualTo(appIcon);
assertWithMessage("Wrong app name").that(call.getAppName()).isEqualTo(appName); assertWithMessage("Wrong app name").that(call.getAppName()).isEqualTo(appName);
assertWithMessage("Wrong caller id").that(call.getCallerId()).isEqualTo(callerId); assertWithMessage("Wrong caller id").that(call.getCallerId()).isEqualTo(callerId);
assertWithMessage("Wrong status").that(call.getStatus()) assertWithMessage("Wrong status").that(call.getStatus())
.isEqualTo(android.companion.Telecom.Call.RINGING); .isEqualTo(android.companion.Telecom.Call.RINGING);
assertWithMessage("Wrong controls").that(call.getControls()).isEqualTo(controls); assertWithMessage("Wrong controls").that(call.getControls()).isEqualTo(controls);
assertWithMessage("Unexpectedly has requests").that(
callMetadataSyncData.getRequests()).isEmpty();
} }
@Test @Test
public void processTelecomDataFromMessage_createCallControlMessage_hasCallControlRequest() { public void processTelecomDataFromMessage_createCallControlMessage_hasCallControlRequest() {
final byte[] data = CrossDeviceSyncController.createCallControlMessage( final byte[] data = CrossDeviceSyncController.createCallControlMessage(
/* callId= */ 5L, /* status= */ android.companion.Telecom.Call.ACCEPT); /* callId= */ "123abc", /* status= */ android.companion.Telecom.ACCEPT);
final CallMetadataSyncData callMetadataSyncData = final CallMetadataSyncData callMetadataSyncData =
mCrossDeviceSyncController.processTelecomDataFromSync(data); mCrossDeviceSyncController.processTelecomDataFromSync(data);
assertWithMessage("Wrong number of requests").that( assertWithMessage("Wrong number of requests").that(
callMetadataSyncData.getRequests()).hasSize(1); callMetadataSyncData.getRequests()).hasSize(1);
final CallMetadataSyncData.Call call = final CallMetadataSyncData.Call call =
callMetadataSyncData.getRequests().stream().findAny().orElseThrow(); callMetadataSyncData.getRequests().stream().findAny().orElseThrow();
assertWithMessage("Wrong id").that(call.getId()).isEqualTo(5L); assertWithMessage("Wrong id").that(call.getId()).isEqualTo("123abc");
assertWithMessage("Wrong app icon").that(call.getAppIcon()).isNull(); assertWithMessage("Wrong app icon").that(call.getAppIcon()).isNull();
assertWithMessage("Wrong app name").that(call.getAppName()).isNull(); assertWithMessage("Wrong app name").that(call.getAppName()).isNull();
assertWithMessage("Wrong caller id").that(call.getCallerId()).isNull(); assertWithMessage("Wrong caller id").that(call.getCallerId()).isNull();
assertWithMessage("Wrong status").that(call.getStatus()) assertWithMessage("Wrong status").that(call.getStatus())
.isEqualTo(android.companion.Telecom.Call.UNKNOWN_STATUS); .isEqualTo(android.companion.Telecom.Call.UNKNOWN_STATUS);
assertWithMessage("Wrong controls").that(call.getControls()) assertWithMessage("Wrong controls").that(call.getControls())
.isEqualTo(Set.of(android.companion.Telecom.Call.ACCEPT)); .isEqualTo(Set.of(android.companion.Telecom.ACCEPT));
assertWithMessage("Unexpectedly has active calls").that( assertWithMessage("Unexpectedly has active calls").that(
callMetadataSyncData.getCalls()).isEmpty(); callMetadataSyncData.getCalls()).isEmpty();
} }