aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/de
diff options
context:
space:
mode:
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
3 files changed, 41 insertions, 5 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);