aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/de/pixart/messenger
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/de/pixart/messenger')
-rw-r--r--src/main/java/de/pixart/messenger/services/XmppConnectionService.java12
-rw-r--r--src/main/java/de/pixart/messenger/ui/ContactDetailsActivity.java2
-rw-r--r--src/main/java/de/pixart/messenger/ui/ConversationFragment.java41
3 files changed, 30 insertions, 25 deletions
diff --git a/src/main/java/de/pixart/messenger/services/XmppConnectionService.java b/src/main/java/de/pixart/messenger/services/XmppConnectionService.java
index 9d0071af2..9fcb83aa5 100644
--- a/src/main/java/de/pixart/messenger/services/XmppConnectionService.java
+++ b/src/main/java/de/pixart/messenger/services/XmppConnectionService.java
@@ -2092,11 +2092,7 @@ public class XmppConnectionService extends Service {
} else {
conversation.endOtrIfNeeded();
if (conversation.getContact().getOption(Contact.Options.PENDING_SUBSCRIPTION_REQUEST)) {
- Log.d(Config.LOGTAG, "Canceling presence request from " + conversation.getJid().toString());
- sendPresencePacket(
- conversation.getAccount(),
- mPresenceGenerator.stopPresenceUpdatesTo(conversation.getContact())
- );
+ stopPresenceUpdatesTo(conversation.getContact());
}
}
updateConversation(conversation);
@@ -2105,6 +2101,12 @@ public class XmppConnectionService extends Service {
}
}
+ public void stopPresenceUpdatesTo(Contact contact) {
+ Log.d(Config.LOGTAG, "Canceling presence request from " + contact.getJid().toString());
+ sendPresencePacket(contact.getAccount(), mPresenceGenerator.stopPresenceUpdatesTo(contact));
+ contact.resetOption(Contact.Options.PENDING_SUBSCRIPTION_REQUEST);
+ }
+
public void createAccount(final Account account) {
account.initAccountServices(this);
databaseBackend.createAccount(account);
diff --git a/src/main/java/de/pixart/messenger/ui/ContactDetailsActivity.java b/src/main/java/de/pixart/messenger/ui/ContactDetailsActivity.java
index 619c2b3f2..9db7ce7c9 100644
--- a/src/main/java/de/pixart/messenger/ui/ContactDetailsActivity.java
+++ b/src/main/java/de/pixart/messenger/ui/ContactDetailsActivity.java
@@ -86,7 +86,7 @@ public class ContactDetailsActivity extends OmemoActivity implements OnAccountUp
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
if (contact.getOption(Contact.Options.PENDING_SUBSCRIPTION_REQUEST)) {
- xmppConnectionService.sendPresencePacket(contact.getAccount(), xmppConnectionService.getPresenceGenerator().sendPresenceUpdatesTo(contact));
+ xmppConnectionService.stopPresenceUpdatesTo(contact);
} else {
contact.setOption(Contact.Options.PREEMPTIVE_GRANT);
}
diff --git a/src/main/java/de/pixart/messenger/ui/ConversationFragment.java b/src/main/java/de/pixart/messenger/ui/ConversationFragment.java
index 69aa51918..cebc0f189 100644
--- a/src/main/java/de/pixart/messenger/ui/ConversationFragment.java
+++ b/src/main/java/de/pixart/messenger/ui/ConversationFragment.java
@@ -2332,25 +2332,28 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
private boolean showBlockSubmenu(View view) {
final Jid jid = conversation.getJid();
- if (jid.getLocal() == null) {
- BlockContactDialog.show(activity, conversation);
- } else {
- PopupMenu popupMenu = new PopupMenu(getActivity(), view);
- popupMenu.inflate(R.menu.block);
- popupMenu.setOnMenuItemClickListener(menuItem -> {
- Blockable blockable;
- switch (menuItem.getItemId()) {
- case R.id.block_domain:
- blockable = conversation.getAccount().getRoster().getContact(Jid.ofDomain(jid.getDomain()));
- break;
- default:
- blockable = conversation;
- }
- BlockContactDialog.show(activity, blockable);
- return true;
- });
- popupMenu.show();
- }
+ final boolean showReject = !conversation.isWithStranger() && conversation.getContact().getOption(Contact.Options.PENDING_SUBSCRIPTION_REQUEST);
+ PopupMenu popupMenu = new PopupMenu(getActivity(), view);
+ popupMenu.inflate(R.menu.block);
+ popupMenu.getMenu().findItem(R.id.block_contact).setVisible(jid.getLocal() != null);
+ popupMenu.getMenu().findItem(R.id.reject).setVisible(showReject);
+ popupMenu.setOnMenuItemClickListener(menuItem -> {
+ Blockable blockable;
+ switch (menuItem.getItemId()) {
+ case R.id.reject:
+ activity.xmppConnectionService.stopPresenceUpdatesTo(conversation.getContact());
+ updateSnackBar(conversation);
+ return true;
+ case R.id.block_domain:
+ blockable = conversation.getAccount().getRoster().getContact(Jid.ofDomain(jid.getDomain()));
+ break;
+ default:
+ blockable = conversation;
+ }
+ BlockContactDialog.show(activity, blockable);
+ return true;
+ });
+ popupMenu.show();
return true;
}