fixes #2336 : added an option to directly add a jid to block list from blocklist activity

vikiCoder created

Change summary

src/main/java/eu/siacs/conversations/ui/BlocklistActivity.java   | 43 ++
src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java |  3 
src/main/res/menu/choose_contact.xml                             |  7 
src/main/res/values/strings.xml                                  |  1 
4 files changed, 52 insertions(+), 2 deletions(-)

Detailed changes

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

@@ -2,17 +2,23 @@ package eu.siacs.conversations.ui;
 
 import android.os.Bundle;
 import android.text.Editable;
+import android.view.Menu;
+import android.view.MenuItem;
 import android.view.View;
 import android.widget.AdapterView;
 
+import java.util.ArrayList;
 import java.util.Collections;
+import java.util.List;
 
+import eu.siacs.conversations.R;
 import eu.siacs.conversations.entities.Account;
 import eu.siacs.conversations.entities.Contact;
 import eu.siacs.conversations.xmpp.OnUpdateBlocklist;
 import eu.siacs.conversations.xmpp.jid.Jid;
 
 public class BlocklistActivity extends AbstractSearchableListItemActivity implements OnUpdateBlocklist {
+	private List<String> mKnownHosts = new ArrayList<String>();
 
 	private Account account = null;
 
@@ -41,6 +47,7 @@ public class BlocklistActivity extends AbstractSearchableListItemActivity implem
 			}
 		}
 		filterContacts();
+		this.mKnownHosts = xmppConnectionService.getKnownHosts();
 	}
 
 	@Override
@@ -58,6 +65,42 @@ public class BlocklistActivity extends AbstractSearchableListItemActivity implem
 		getListItemAdapter().notifyDataSetChanged();
 	}
 
+	@Override
+	public boolean onCreateOptionsMenu(final Menu menu) {
+		super.onCreateOptionsMenu(menu);
+		menu.findItem(R.id.action_add_contact).setVisible(true);
+		return true;
+	}
+
+	@Override
+	public boolean onOptionsItemSelected(MenuItem item) {
+		switch (item.getItemId()) {
+			case R.id.action_add_contact:
+				showEnterJidDialog();
+				return true;
+		}
+		return super.onOptionsItemSelected(item);
+	}
+
+	protected void showEnterJidDialog() {
+		EnterJidDialog dialog = new EnterJidDialog(
+				this, mKnownHosts, null,
+				getString(R.string.block_jabber_id), getString(R.string.block),
+				null, account.getJid().toBareJid().toString(), true
+		);
+
+		dialog.setOnEnterJidDialogPositiveListener(new EnterJidDialog.OnEnterJidDialogPositiveListener() {
+			@Override
+			public boolean onEnterJidDialogPositive(Jid accountJid, Jid contactJid) throws EnterJidDialog.JidError {
+				Contact contact = account.getRoster().getContact(contactJid);
+                xmppConnectionService.sendBlockRequest(contact, false);
+				return true;
+			}
+		});
+
+		dialog.show();
+	}
+
 	protected void refreshUiReal() {
 		final Editable editable = getSearchEditText().getText();
 		if (editable != null) {

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

@@ -571,9 +571,8 @@ public class EditAccountActivity extends OmemoActivity implements OnAccountUpdat
 		if (mAccount != null && mAccount.isOnlineAndConnected()) {
 			if (!mAccount.getXmppConnection().getFeatures().blocking()) {
 				showBlocklist.setVisible(false);
-			} else {
-				showBlocklist.setEnabled(mAccount.getBlocklist().size() > 0);
 			}
+
 			if (!mAccount.getXmppConnection().getFeatures().register()) {
 				changePassword.setVisible(false);
 			}

src/main/res/menu/choose_contact.xml 🔗

@@ -14,4 +14,11 @@
         android:showAsAction="always"
         android:title="@string/create_contact"
         android:visible="false"/>
+
+    <item
+        android:id="@+id/action_add_contact"
+        android:icon="?attr/icon_add_person"
+        android:showAsAction="always"
+        android:title="@string/block_jabber_id"
+        android:visible="false"/>
 </menu>

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

@@ -177,6 +177,7 @@
 	<string name="mgmt_account_delete_confirm_text">If you delete your account your entire conversation history will be lost</string>
 	<string name="attach_record_voice">Record voice</string>
 	<string name="account_settings_jabber_id">Jabber ID</string>
+	<string name="block_jabber_id">Block Jabber ID</string>
 	<string name="account_settings_password">Password</string>
 	<string name="account_settings_example_jabber_id">username@example.com</string>
 	<string name="account_settings_confirm_password">Confirm password</string>