aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChristian Schneppe <christian.schneppe@pix-art.de>2019-11-16 18:04:58 +0100
committerChristian Schneppe <christian.schneppe@pix-art.de>2019-11-16 18:04:58 +0100
commit7ea00aa98c048ac8a2d58b38b789326dd7a32035 (patch)
tree9064528716948b709ac5024356f75e5d782e56b6 /src
parent14081b1f8556035fabd1df5d475e93112b937c3a (diff)
add possibility to block muc user from muc
Diffstat (limited to '')
-rw-r--r--src/main/java/de/pixart/messenger/services/XmppConnectionService.java20
-rw-r--r--src/main/java/de/pixart/messenger/ui/BlockContactDialog.java7
-rw-r--r--src/main/java/de/pixart/messenger/ui/util/MucDetailsContextMenuHelper.java19
-rw-r--r--src/main/res/layout/dialog_block_contact.xml3
-rw-r--r--src/main/res/menu/muc_details_context.xml7
5 files changed, 48 insertions, 8 deletions
diff --git a/src/main/java/de/pixart/messenger/services/XmppConnectionService.java b/src/main/java/de/pixart/messenger/services/XmppConnectionService.java
index a65c8ef1b..347406c60 100644
--- a/src/main/java/de/pixart/messenger/services/XmppConnectionService.java
+++ b/src/main/java/de/pixart/messenger/services/XmppConnectionService.java
@@ -4109,6 +4109,22 @@ public class XmppConnectionService extends Service {
mDatabaseWriterExecutor.execute(() -> databaseBackend.updateConversation(conversation));
}
+ private void reconnectAccount(final Account account) {
+ account.setOption(Account.OPTION_DISABLED, true);
+ if (!updateAccount(account)) {
+ Log.d(Config.LOGTAG, getString(R.string.unable_to_update_account));
+ }
+ account.setOption(Account.OPTION_DISABLED, false);
+ final XmppConnection connection = account.getXmppConnection();
+ if (connection != null) {
+ connection.resetEverything();
+ }
+ if (!updateAccount(account)) {
+ Log.d(Config.LOGTAG, getString(R.string.unable_to_update_account));
+ }
+ }
+
+
private void reconnectAccount(final Account account, final boolean force, final boolean interactive) {
synchronized (account) {
XmppConnection connection = account.getXmppConnection();
@@ -4278,6 +4294,7 @@ public class XmppConnectionService extends Service {
public boolean hideYouAreNotParticipating() {
return getBooleanPreference(SettingsActivity.HIDE_YOU_ARE_NOT_PARTICIPATING, R.bool.hide_you_are_not_participating);
}
+
public boolean broadcastLastActivity() {
return getBooleanPreference(SettingsActivity.BROADCAST_LAST_ACTIVITY, R.bool.last_activity);
}
@@ -4789,6 +4806,9 @@ public class XmppConnectionService extends Service {
if (packet.getType() == IqPacket.TYPE.RESULT) {
account.getBlocklist().remove(jid);
updateBlocklistUi(OnUpdateBlocklist.Status.UNBLOCKED);
+ if (blockable.getJid().isFullJid()) {
+ reconnectAccount(account);
+ }
}
}
});
diff --git a/src/main/java/de/pixart/messenger/ui/BlockContactDialog.java b/src/main/java/de/pixart/messenger/ui/BlockContactDialog.java
index 80b6f26cc..011480992 100644
--- a/src/main/java/de/pixart/messenger/ui/BlockContactDialog.java
+++ b/src/main/java/de/pixart/messenger/ui/BlockContactDialog.java
@@ -1,11 +1,12 @@
package de.pixart.messenger.ui;
-import androidx.databinding.DataBindingUtil;
-import androidx.annotation.StringRes;
-import androidx.appcompat.app.AlertDialog;
import android.view.View;
import android.widget.Toast;
+import androidx.annotation.StringRes;
+import androidx.appcompat.app.AlertDialog;
+import androidx.databinding.DataBindingUtil;
+
import de.pixart.messenger.R;
import de.pixart.messenger.databinding.DialogBlockContactBinding;
import de.pixart.messenger.entities.Blockable;
diff --git a/src/main/java/de/pixart/messenger/ui/util/MucDetailsContextMenuHelper.java b/src/main/java/de/pixart/messenger/ui/util/MucDetailsContextMenuHelper.java
index a58f683d3..a38286a96 100644
--- a/src/main/java/de/pixart/messenger/ui/util/MucDetailsContextMenuHelper.java
+++ b/src/main/java/de/pixart/messenger/ui/util/MucDetailsContextMenuHelper.java
@@ -24,6 +24,7 @@ import de.pixart.messenger.entities.Contact;
import de.pixart.messenger.entities.Conversation;
import de.pixart.messenger.entities.MucOptions;
import de.pixart.messenger.entities.MucOptions.User;
+import de.pixart.messenger.entities.RawBlockable;
import de.pixart.messenger.services.XmppConnectionService;
import de.pixart.messenger.ui.ConferenceDetailsActivity;
import de.pixart.messenger.ui.ConversationFragment;
@@ -76,6 +77,7 @@ public final class MucDetailsContextMenuHelper {
title.setVisible(false);
}
MenuItem sendPrivateMessage = menu.findItem(R.id.send_private_message);
+ MenuItem blockUnblockMUCUser = menu.findItem(R.id.context_muc_contact_block_unblock);
if (user != null && user.getRealJid() != null) {
MenuItem showContactDetails = menu.findItem(R.id.action_contact_details);
MenuItem startConversation = menu.findItem(R.id.start_conversation);
@@ -152,9 +154,11 @@ public final class MucDetailsContextMenuHelper {
managePermissions.setVisible(managePermissionsVisible);
sendPrivateMessage.setVisible(true);
sendPrivateMessage.setEnabled(mucOptions.allowPm());
+ blockUnblockMUCUser.setVisible(true);
} else {
sendPrivateMessage.setVisible(true);
sendPrivateMessage.setEnabled(user != null && mucOptions.allowPm() && user.getRole().ranks(MucOptions.Role.VISITOR));
+ blockUnblockMUCUser.setVisible(user != null);
}
}
@@ -218,6 +222,15 @@ public final class MucDetailsContextMenuHelper {
activity.xmppConnectionService.invite(conversation, jid);
}
return true;
+ case R.id.context_muc_contact_block_unblock:
+ try {
+ activity.xmppConnectionService.sendBlockRequest(new RawBlockable(account, user.getFullJid()), false);
+ activity.xmppConnectionService.leaveMuc(conversation);
+ activity.xmppConnectionService.joinMuc(conversation);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return true;
case R.id.highlight_in_muc:
activity.highlightInMuc(conversation, user.getName());
return true;
@@ -226,7 +239,8 @@ public final class MucDetailsContextMenuHelper {
}
}
- private static void kickFromRoom(final User user, XmppActivity activity, XmppConnectionService.OnAffiliationChanged onAffiliationChanged) {
+ private static void kickFromRoom(final User user, XmppActivity
+ activity, XmppConnectionService.OnAffiliationChanged onAffiliationChanged) {
final Conversation conversation = user.getConversation();
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setTitle(R.string.kick_from_conference);
@@ -252,7 +266,8 @@ public final class MucDetailsContextMenuHelper {
builder.create().show();
}
- private static void banFromRoom(final User user, XmppActivity activity, XmppConnectionService.OnAffiliationChanged onAffiliationChanged) {
+ private static void banFromRoom(final User user, XmppActivity
+ activity, XmppConnectionService.OnAffiliationChanged onAffiliationChanged) {
final Conversation conversation = user.getConversation();
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setTitle(R.string.ban_from_conference);
diff --git a/src/main/res/layout/dialog_block_contact.xml b/src/main/res/layout/dialog_block_contact.xml
index 7973d7003..54cb1d0cd 100644
--- a/src/main/res/layout/dialog_block_contact.xml
+++ b/src/main/res/layout/dialog_block_contact.xml
@@ -24,8 +24,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
- android:text="@string/report_jid_as_spammer"
- android:textColor="@color/black87" />
+ android:text="@string/report_jid_as_spammer" />
</LinearLayout>
</layout> \ No newline at end of file
diff --git a/src/main/res/menu/muc_details_context.xml b/src/main/res/menu/muc_details_context.xml
index 71b9d4bfb..076dc3652 100644
--- a/src/main/res/menu/muc_details_context.xml
+++ b/src/main/res/menu/muc_details_context.xml
@@ -3,8 +3,8 @@
<item
android:id="@+id/title"
android:checkable="false"
- android:orderInCategory="1"
android:enabled="false"
+ android:orderInCategory="1"
android:visible="false" />
<item
android:id="@+id/highlight_in_muc"
@@ -37,6 +37,11 @@
android:title="@string/send_private_message"
android:visible="false" />
<item
+ android:id="@+id/context_muc_contact_block_unblock"
+ android:orderInCategory="100"
+ android:title="@string/action_block_participant"
+ android:visible="false" />
+ <item
android:id="@+id/manage_permissions"
android:orderInCategory="100"
android:title="@string/manage_permission"