diff --git a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java index ed4f091f8..b7a7b59d9 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java +++ b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java @@ -296,6 +296,10 @@ public class CallActivity extends CallBaseActivity { private Handler screenParticipantDisplayItemManagersHandler = new Handler(Looper.getMainLooper()); + private Map callParticipantEventDisplayers = new HashMap<>(); + + private Handler callParticipantEventDisplayersHandler = new Handler(Looper.getMainLooper()); + private CallParticipantList.Observer callParticipantListObserver = new CallParticipantList.Observer() { @Override public void onCallParticipantsChanged(Collection joined, Collection 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