show warning snackbar before joining anon-non-private room. fixes #3306

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/entities/MucOptions.java            |  3 
src/main/java/eu/siacs/conversations/services/XmppConnectionService.java |  7 
src/main/java/eu/siacs/conversations/ui/ConversationFragment.java        | 13 
src/main/res/values/strings.xml                                          |  1 
4 files changed, 23 insertions(+), 1 deletion(-)

Detailed changes

src/main/java/eu/siacs/conversations/services/XmppConnectionService.java 🔗

@@ -2298,6 +2298,13 @@ public class XmppConnectionService extends Service {
 				private void join(Conversation conversation) {
 					Account account = conversation.getAccount();
 					final MucOptions mucOptions = conversation.getMucOptions();
+
+					if (mucOptions.nonanonymous() && !mucOptions.membersOnly() && !conversation.getBooleanAttribute("accept_non_anonymous", false)) {
+					    mucOptions.setError(MucOptions.Error.NON_ANONYMOUS);
+					    updateConversationUi();
+					    return;
+                    }
+
 					final Jid joinJid = mucOptions.getSelf().getFullJid();
 					Log.d(Config.LOGTAG, account.getJid().asBareJid().toString() + ": joining conversation " + joinJid.toString());
 					PresencePacket packet = mPresenceGenerator.selfPresence(account, Presence.Status.ONLINE, mucOptions.nonanonymous() || onConferenceJoined != null);

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

@@ -187,6 +187,16 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
             activity.xmppConnectionService.joinMuc(conversation);
         }
     };
+
+    private OnClickListener acceptJoin = new OnClickListener() {
+        @Override
+        public void onClick(View v) {
+            conversation.setAttribute("accept_non_anonymous",true);
+            activity.xmppConnectionService.updateConversation(conversation);
+            activity.xmppConnectionService.joinMuc(conversation);
+        }
+    };
+
     private OnClickListener enterPassword = new OnClickListener() {
 
         @Override
@@ -2119,6 +2129,9 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
                 case DESTROYED:
                     showSnackbar(R.string.conference_destroyed, R.string.leave, leaveMuc);
                     break;
+                case NON_ANONYMOUS:
+                    showSnackbar(R.string.group_chat_will_make_your_jabber_id_public, R.string.join, acceptJoin);
+                    break;
                 default:
                     hideSnackbar();
                     break;

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

@@ -803,4 +803,5 @@
     <string name="install_orbot">Install Orbot</string>
     <string name="start_orbot">Start Orbot</string>
     <string name="no_market_app_installed">No market app installed.</string>
+    <string name="group_chat_will_make_your_jabber_id_public">This group chat will make your Jabber ID public</string>
 </resources>