mirror of
https://github.com/nextcloud/talk-android
synced 2025-07-17 09:45:02 +01:00
Handle raised hands from the call participants rather than the signaling
Although listening from the signaling was working fine and this unfortunately adds a lot of extra code it is conceptually "more correct", as the UI should not directly deal with the signaling if there is a higher abstraction available. Nevertheless, this should ease adding other similar changes, like reactions. Note that although there were already listeners for CallParticipantModel.Observer in the CallActivity they were not reused, as they handle totally unrelated things. Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
This commit is contained in:
parent
92d655080d
commit
efab4cb664
@ -296,6 +296,10 @@ public class CallActivity extends CallBaseActivity {
|
||||
|
||||
private Handler screenParticipantDisplayItemManagersHandler = new Handler(Looper.getMainLooper());
|
||||
|
||||
private Map<String, CallParticipantEventDisplayer> callParticipantEventDisplayers = new HashMap<>();
|
||||
|
||||
private Handler callParticipantEventDisplayersHandler = new Handler(Looper.getMainLooper());
|
||||
|
||||
private CallParticipantList.Observer callParticipantListObserver = new CallParticipantList.Observer() {
|
||||
@Override
|
||||
public void onCallParticipantsChanged(Collection<Participant> joined, Collection<Participant> updated,
|
||||
@ -2248,6 +2252,11 @@ public class CallActivity extends CallBaseActivity {
|
||||
screenParticipantDisplayItemManagers.put(sessionId, screenParticipantDisplayItemManager);
|
||||
callParticipantModel.addObserver(screenParticipantDisplayItemManager, screenParticipantDisplayItemManagersHandler);
|
||||
|
||||
CallParticipantEventDisplayer callParticipantEventDisplayer =
|
||||
new CallParticipantEventDisplayer(callParticipantModel);
|
||||
callParticipantEventDisplayers.put(sessionId, callParticipantEventDisplayer);
|
||||
callParticipantModel.addObserver(callParticipantEventDisplayer, callParticipantEventDisplayersHandler);
|
||||
|
||||
runOnUiThread(() -> {
|
||||
addParticipantDisplayItem(callParticipantModel, "video");
|
||||
});
|
||||
@ -2288,6 +2297,10 @@ public class CallActivity extends CallBaseActivity {
|
||||
screenParticipantDisplayItemManagers.remove(sessionId);
|
||||
callParticipant.getCallParticipantModel().removeObserver(screenParticipantDisplayItemManager);
|
||||
|
||||
CallParticipantEventDisplayer callParticipantEventDisplayer =
|
||||
callParticipantEventDisplayers.remove(sessionId);
|
||||
callParticipant.getCallParticipantModel().removeObserver(callParticipantEventDisplayer);
|
||||
|
||||
callParticipant.destroy();
|
||||
|
||||
SignalingMessageReceiver.CallParticipantMessageListener listener = callParticipantMessageListeners.remove(sessionId);
|
||||
@ -2793,16 +2806,6 @@ public class CallActivity extends CallBaseActivity {
|
||||
|
||||
@Override
|
||||
public void onRaiseHand(boolean state, long timestamp) {
|
||||
if (state) {
|
||||
CallParticipant participant = callParticipants.get(sessionId);
|
||||
if (participant != null) {
|
||||
String nick = participant.getCallParticipantModel().getNick();
|
||||
runOnUiThread(() -> Toast.makeText(
|
||||
context,
|
||||
String.format(context.getResources().getString(R.string.nc_call_raised_hand), nick),
|
||||
Toast.LENGTH_LONG).show());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -2867,6 +2870,40 @@ public class CallActivity extends CallBaseActivity {
|
||||
}
|
||||
}
|
||||
|
||||
private class CallParticipantEventDisplayer implements CallParticipantModel.Observer {
|
||||
|
||||
private final CallParticipantModel callParticipantModel;
|
||||
|
||||
private boolean raisedHand;
|
||||
|
||||
private CallParticipantEventDisplayer(CallParticipantModel callParticipantModel) {
|
||||
this.callParticipantModel = callParticipantModel;
|
||||
this.raisedHand = callParticipantModel.getRaisedHand() != null ?
|
||||
callParticipantModel.getRaisedHand().getState() : false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChange() {
|
||||
if (callParticipantModel.getRaisedHand() == null || !callParticipantModel.getRaisedHand().getState()) {
|
||||
raisedHand = false;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (raisedHand) {
|
||||
return;
|
||||
}
|
||||
raisedHand = true;
|
||||
|
||||
String nick = callParticipantModel.getNick();
|
||||
Toast.makeText(context, String.format(context.getResources().getString(R.string.nc_call_raised_hand), nick), Toast.LENGTH_LONG).show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReaction(String reaction) {
|
||||
}
|
||||
}
|
||||
|
||||
private class InternalSignalingMessageSender implements SignalingMessageSender {
|
||||
|
||||
@Override
|
||||
|
Loading…
Reference in New Issue
Block a user