Change summary
src/main/java/eu/siacs/conversations/generator/MessageGenerator.java | 13
src/main/java/eu/siacs/conversations/services/XmppConnectionService.java | 5
src/main/java/eu/siacs/conversations/ui/ConversationFragment.java | 4
src/main/res/layout/fragment_conversation.xml | 13
4 files changed, 35 insertions(+)
Detailed changes
@@ -18,6 +18,7 @@ import eu.siacs.conversations.xml.Element;
import eu.siacs.conversations.xml.Namespace;
import eu.siacs.conversations.xmpp.Jid;
import eu.siacs.conversations.xmpp.chatstate.ChatState;
+import eu.siacs.conversations.xmpp.forms.Data;
import eu.siacs.conversations.xmpp.jingle.JingleConnectionManager;
import eu.siacs.conversations.xmpp.jingle.JingleRtpConnection;
import eu.siacs.conversations.xmpp.jingle.Media;
@@ -191,6 +192,18 @@ public class MessageGenerator extends AbstractGenerator {
return packet;
}
+ public MessagePacket requestVoice(Jid jid) {
+ MessagePacket packet = new MessagePacket();
+ packet.setType(MessagePacket.TYPE_NORMAL);
+ packet.setTo(jid.asBareJid());
+ Data form = new Data();
+ form.setFormType("http://jabber.org/protocol/muc#request");
+ form.put("muc#role", "participant");
+ form.submit();
+ packet.addChild(form);
+ return packet;
+ }
+
public MessagePacket directInvite(final Conversation conversation, final Jid contact) {
MessagePacket packet = new MessagePacket();
packet.setType(MessagePacket.TYPE_NORMAL);
@@ -3667,6 +3667,11 @@ public class XmppConnectionService extends Service {
this.sendMessagePacket(conference.getAccount(), packet);
}
+ public void requestVoice(final Account account, final Jid jid) {
+ MessagePacket packet = this.getMessageGenerator().requestVoice(jid);
+ this.sendMessagePacket(account, packet);
+ }
+
public void changeAffiliationInConference(final Conversation conference, Jid user, final MucOptions.Affiliation affiliation, final OnAffiliationChanged callback) {
final Jid jid = user.asBareJid();
final IqPacket request = this.mIqGenerator.changeAffiliation(conference, jid, affiliation.toString());
@@ -1304,6 +1304,9 @@ public class ConversationFragment extends XmppFragment
conversation.setUserSelectedThread(false);
setupReply(null);
});
+ binding.requestVoice.setOnClickListener((v) -> {
+ activity.xmppConnectionService.requestVoice(conversation.getAccount(), conversation.getJid());
+ });
binding.scrollToBottomButton.setOnClickListener(this.mScrollButtonListener);
binding.messagesView.setOnScrollListener(mOnScrollListener);
@@ -3384,6 +3387,7 @@ public class ConversationFragment extends XmppFragment
this.binding.textinput.setFocusableInTouchMode(canWrite);
this.binding.textSendButton.setEnabled(canWrite);
this.binding.textSendButton.setVisibility(canWrite ? View.VISIBLE : View.GONE);
+ this.binding.requestVoice.setVisibility(canWrite ? View.GONE : View.VISIBLE);
this.binding.textinput.setCursorVisible(canWrite);
this.binding.textinput.setEnabled(canWrite);
}
@@ -187,6 +187,19 @@
android:background="?attr/color_background_primary"
android:contentDescription="@string/send_message"
android:src="?attr/ic_send_text_offline" />
+
+ <Button
+ android:id="@+id/request_voice"
+ style="@style/Widget.Conversations.Button.Borderless"
+ android:visibility="gone"
+ android:layout_width="wrap_content"
+ android:layout_height="48dp"
+ android:layout_marginRight="8dp"
+ android:layout_alignParentEnd="true"
+ android:layout_alignParentRight="true"
+ android:layout_centerVertical="true"
+ android:background="?attr/color_background_primary"
+ android:text="Request to Speak" />
</RelativeLayout>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/scroll_to_bottom_button"