Distinguish between primary and secondary devices in participants list.

This commit is contained in:
Alex Hart
2021-01-13 11:37:29 -04:00
committed by Greyson Parrelli
parent 2d20ceea01
commit 0ccc7e3c06
10 changed files with 132 additions and 104 deletions

View File

@@ -1,8 +1,11 @@
package org.thoughtcrime.securesms.events;
import android.content.Context;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.components.webrtc.BroadcastVideoSink;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.ringrtc.CameraState;
@@ -12,7 +15,7 @@ import java.util.Objects;
public final class CallParticipant {
public static final CallParticipant EMPTY = createRemote(new CallParticipantId(Recipient.UNKNOWN), Recipient.UNKNOWN, null, new BroadcastVideoSink(null), false, false, 0, true, 0);
public static final CallParticipant EMPTY = createRemote(new CallParticipantId(Recipient.UNKNOWN), Recipient.UNKNOWN, null, new BroadcastVideoSink(null), false, false, 0, true, 0, DeviceOrdinal.PRIMARY);
private final @NonNull CallParticipantId callParticipantId;
private final @NonNull CameraState cameraState;
@@ -24,6 +27,7 @@ public final class CallParticipant {
private final long lastSpoke;
private final boolean mediaKeysReceived;
private final long addedToCallTime;
private final @NonNull DeviceOrdinal deviceOrdinal;
public static @NonNull CallParticipant createLocal(@NonNull CameraState cameraState,
@NonNull BroadcastVideoSink renderer,
@@ -38,7 +42,8 @@ public final class CallParticipant {
microphoneEnabled,
0,
true,
0);
0,
DeviceOrdinal.PRIMARY);
}
public static @NonNull CallParticipant createRemote(@NonNull CallParticipantId callParticipantId,
@@ -49,9 +54,10 @@ public final class CallParticipant {
boolean videoEnabled,
long lastSpoke,
boolean mediaKeysReceived,
long addedToCallTime)
long addedToCallTime,
@NonNull DeviceOrdinal deviceOrdinal)
{
return new CallParticipant(callParticipantId, recipient, identityKey, renderer, CameraState.UNKNOWN, videoEnabled, audioEnabled, lastSpoke, mediaKeysReceived, addedToCallTime);
return new CallParticipant(callParticipantId, recipient, identityKey, renderer, CameraState.UNKNOWN, videoEnabled, audioEnabled, lastSpoke, mediaKeysReceived, addedToCallTime, deviceOrdinal);
}
private CallParticipant(@NonNull CallParticipantId callParticipantId,
@@ -63,7 +69,8 @@ public final class CallParticipant {
boolean microphoneEnabled,
long lastSpoke,
boolean mediaKeysReceived,
long addedToCallTime)
long addedToCallTime,
@NonNull DeviceOrdinal deviceOrdinal)
{
this.callParticipantId = callParticipantId;
this.recipient = recipient;
@@ -75,14 +82,15 @@ public final class CallParticipant {
this.lastSpoke = lastSpoke;
this.mediaKeysReceived = mediaKeysReceived;
this.addedToCallTime = addedToCallTime;
this.deviceOrdinal = deviceOrdinal;
}
public @NonNull CallParticipant withIdentityKey(@NonNull IdentityKey identityKey) {
return new CallParticipant(callParticipantId, recipient, identityKey, videoSink, cameraState, videoEnabled, microphoneEnabled, lastSpoke, mediaKeysReceived, addedToCallTime);
return new CallParticipant(callParticipantId, recipient, identityKey, videoSink, cameraState, videoEnabled, microphoneEnabled, lastSpoke, mediaKeysReceived, addedToCallTime, deviceOrdinal);
}
public @NonNull CallParticipant withVideoEnabled(boolean videoEnabled) {
return new CallParticipant(callParticipantId, recipient, identityKey, videoSink, cameraState, videoEnabled, microphoneEnabled, lastSpoke, mediaKeysReceived, addedToCallTime);
return new CallParticipant(callParticipantId, recipient, identityKey, videoSink, cameraState, videoEnabled, microphoneEnabled, lastSpoke, mediaKeysReceived, addedToCallTime, deviceOrdinal);
}
public @NonNull CallParticipantId getCallParticipantId() {
@@ -93,6 +101,18 @@ public final class CallParticipant {
return recipient;
}
public @NonNull String getRecipientDisplayName(@NonNull Context context) {
if (recipient.isSelf() && isPrimary()) {
return context.getString(R.string.CallParticipant__you);
} else if (recipient.isSelf()) {
return context.getString(R.string.CallParticipant__you_on_another_device);
} else if (isPrimary()) {
return recipient.getDisplayName(context);
} else {
return context.getString(R.string.CallParticipant__s_on_another_device, recipient.getDisplayName(context));
}
}
public @Nullable IdentityKey getIdentityKey() {
return identityKey;
}
@@ -136,6 +156,10 @@ public final class CallParticipant {
return addedToCallTime;
}
public boolean isPrimary() {
return deviceOrdinal == DeviceOrdinal.PRIMARY;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
@@ -172,4 +196,9 @@ public final class CallParticipant {
", addedToCallTime=" + addedToCallTime +
'}';
}
public enum DeviceOrdinal {
PRIMARY,
SECONDARY
}
}