show warning toast if PM is disabled in MUC

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/entities/MucOptions.java          |  5 
src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java |  6 
src/main/java/eu/siacs/conversations/ui/ConversationFragment.java      | 40 
src/main/res/values/strings.xml                                        |  1 
4 files changed, 28 insertions(+), 24 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/entities/MucOptions.java 🔗

@@ -397,6 +397,11 @@ public class MucOptions {
 		return self.getRole().ranks(Role.MODERATOR) || (field != null && "1".equals(field.getValue()));
 	}
 
+	public boolean allowPm() {
+		Field field = this.form.getFieldByName("muc#roomconfig_allowpm");
+		return field == null || "1".equals(field.getValue());
+	}
+
 	public boolean participating() {
 		return !online()
 				|| self.getRole().ranks(Role.PARTICIPANT)

src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java 🔗

@@ -462,7 +462,11 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
 				}
 				return true;
 			case R.id.send_private_message:
-				privateMsgInMuc(mConversation,mSelectedUser.getName());
+				if (mConversation.getMucOptions().allowPm()) {
+					privateMsgInMuc(mConversation,mSelectedUser.getName());
+				} else {
+					Toast.makeText(this, R.string.private_messages_are_disabled, Toast.LENGTH_SHORT).show();
+				}
 				return true;
 			case R.id.invite:
 				xmppConnectionService.directInvite(mConversation, jid);

src/main/java/eu/siacs/conversations/ui/ConversationFragment.java 🔗

@@ -609,34 +609,28 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
 				}
 			}
 		});
-		messageListAdapter
-				.setOnContactPictureLongClicked(new OnContactPictureLongClicked() {
-
-					@Override
-					public void onContactPictureLongClicked(Message message) {
-						if (message.getStatus() <= Message.STATUS_RECEIVED) {
-							if (message.getConversation().getMode() == Conversation.MODE_MULTI) {
-								Jid user = message.getCounterpart();
-								if (user != null && !user.isBareJid()) {
-									if (message.getConversation().getMucOptions().isUserInRoom(user)) {
-										privateMessageWith(user);
-									} else {
-										Toast.makeText(activity, activity.getString(R.string.user_has_left_conference, user.getResourcepart()), Toast.LENGTH_SHORT).show();
-									}
-								}
-							}
+		messageListAdapter.setOnContactPictureLongClicked(message -> {
+			if (message.getStatus() <= Message.STATUS_RECEIVED) {
+				if (message.getConversation().getMode() == Conversation.MODE_MULTI) {
+					final MucOptions mucOptions = conversation.getMucOptions();
+					if (!mucOptions.allowPm()) {
+						Toast.makeText(activity, R.string.private_messages_are_disabled, Toast.LENGTH_SHORT).show();
+						return;
+					}
+					Jid user = message.getCounterpart();
+					if (user != null && !user.isBareJid()) {
+						if (mucOptions.isUserInRoom(user)) {
+							privateMessageWith(user);
 						} else {
-							activity.showQrCode();
+							Toast.makeText(activity, activity.getString(R.string.user_has_left_conference, user.getResourcepart()), Toast.LENGTH_SHORT).show();
 						}
 					}
-				});
-		messageListAdapter.setOnQuoteListener(new MessageAdapter.OnQuoteListener() {
-
-			@Override
-			public void onQuote(String text) {
-				quoteText(text);
+				}
+			} else {
+				activity.showQrCode();
 			}
 		});
+		messageListAdapter.setOnQuoteListener(text -> quoteText(text));
 		messagesView.setAdapter(messageListAdapter);
 
 		registerForContextMenu(messagesView);

src/main/res/values/strings.xml 🔗

@@ -729,4 +729,5 @@
 	<string name="copy_to_clipboard">Copy to clipboard</string>
 	<string name="message_copied_to_clipboard">Message copied to clipboard</string>
 	<string name="message">Message</string>
+	<string name="private_messages_are_disabled">Private messages are disabled</string>
 </resources>