diff options
Diffstat (limited to 'src/main/java/de')
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); |