use fab in choose contact activity. scan qr not yet working

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/ui/AbstractSearchableListItemActivity.java |  13 
src/main/java/eu/siacs/conversations/ui/BlocklistActivity.java                  |  44 
src/main/java/eu/siacs/conversations/ui/ChooseContactActivity.java              | 144 
src/main/res/layout/activity_choose_contact.xml                                 |  30 
src/main/res/menu/choose_contact.xml                                            |  14 
5 files changed, 106 insertions(+), 139 deletions(-)

Detailed changes

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

@@ -1,6 +1,7 @@
 package eu.siacs.conversations.ui;
 
 import android.content.Context;
+import android.databinding.DataBindingUtil;
 import android.os.Bundle;
 import android.text.Editable;
 import android.text.TextWatcher;
@@ -16,11 +17,12 @@ import java.util.ArrayList;
 import java.util.List;
 
 import eu.siacs.conversations.R;
+import eu.siacs.conversations.databinding.ActivityChooseContactBinding;
 import eu.siacs.conversations.entities.ListItem;
 import eu.siacs.conversations.ui.adapter.ListItemAdapter;
 
 public abstract class AbstractSearchableListItemActivity extends XmppActivity {
-	private ListView mListView;
+	protected ActivityChooseContactBinding binding;
 	private final List<ListItem> listItems = new ArrayList<>();
 	private ArrayAdapter<ListItem> mListItemsAdapter;
 
@@ -74,7 +76,7 @@ public abstract class AbstractSearchableListItemActivity extends XmppActivity {
 	};
 
 	public ListView getListView() {
-		return mListView;
+		return binding.chooseContactList;
 	}
 
 	public List<ListItem> getListItems() {
@@ -92,11 +94,10 @@ public abstract class AbstractSearchableListItemActivity extends XmppActivity {
 	@Override
 	public void onCreate(final Bundle savedInstanceState) {
 		super.onCreate(savedInstanceState);
-		setContentView(R.layout.activity_choose_contact);
-		mListView = (ListView) findViewById(R.id.choose_contact_list);
-		mListView.setFastScrollEnabled(true);
+		this.binding = DataBindingUtil.setContentView(this,R.layout.activity_choose_contact);
+		this.binding.chooseContactList.setFastScrollEnabled(true);
 		mListItemsAdapter = new ListItemAdapter(this, listItems);
-		mListView.setAdapter(mListItemsAdapter);
+		this.binding.chooseContactList.setAdapter(mListItemsAdapter);
 	}
 
 	@Override

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

@@ -26,17 +26,11 @@ public class BlocklistActivity extends AbstractSearchableListItemActivity implem
 	@Override
 	public void onCreate(final Bundle savedInstanceState) {
 		super.onCreate(savedInstanceState);
-		getListView().setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
-
-			@Override
-			public boolean onItemLongClick(final AdapterView<?> parent,
-					final View view,
-					final int position,
-					final long id) {
-				BlockContactDialog.show(BlocklistActivity.this, (Contact) getListItems().get(position));
-				return true;
-			}
+		getListView().setOnItemLongClickListener((parent, view, position, id) -> {
+			BlockContactDialog.show(BlocklistActivity.this, (Contact) getListItems().get(position));
+			return true;
 		});
+		this.binding.fab.setOnClickListener((v)->showEnterJidDialog());
 	}
 
 	@Override
@@ -66,23 +60,6 @@ public class BlocklistActivity extends AbstractSearchableListItemActivity implem
 		getListItemAdapter().notifyDataSetChanged();
 	}
 
-	@Override
-	public boolean onCreateOptionsMenu(final Menu menu) {
-		super.onCreateOptionsMenu(menu);
-		menu.findItem(R.id.action_block_jid).setVisible(true);
-		return true;
-	}
-
-	@Override
-	public boolean onOptionsItemSelected(MenuItem item) {
-		switch (item.getItemId()) {
-			case R.id.action_block_jid:
-				showEnterJidDialog();
-				return true;
-		}
-		return super.onOptionsItemSelected(item);
-	}
-
 	protected void showEnterJidDialog() {
 		EnterJidDialog dialog = new EnterJidDialog(
 				this, mKnownHosts, null,
@@ -90,15 +67,12 @@ public class BlocklistActivity extends AbstractSearchableListItemActivity implem
 				null, account.getJid().asBareJid().toString(), true
 		);
 
-		dialog.setOnEnterJidDialogPositiveListener(new EnterJidDialog.OnEnterJidDialogPositiveListener() {
-			@Override
-			public boolean onEnterJidDialogPositive(Jid accountJid, Jid contactJid) throws EnterJidDialog.JidError {
-				Contact contact = account.getRoster().getContact(contactJid);
-                if (xmppConnectionService.sendBlockRequest(contact, false)) {
-					Toast.makeText(BlocklistActivity.this,R.string.corresponding_conversations_closed,Toast.LENGTH_SHORT).show();
-				}
-				return true;
+		dialog.setOnEnterJidDialogPositiveListener((accountJid, contactJid) -> {
+			Contact contact = account.getRoster().getContact(contactJid);
+			if (xmppConnectionService.sendBlockRequest(contact, false)) {
+				Toast.makeText(BlocklistActivity.this, R.string.corresponding_conversations_closed, Toast.LENGTH_SHORT).show();
 			}
+			return true;
 		});
 
 		dialog.show();

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

@@ -13,7 +13,6 @@ import android.view.MenuItem;
 import android.view.View;
 import android.view.inputmethod.InputMethodManager;
 import android.widget.AbsListView.MultiChoiceModeListener;
-import android.widget.AdapterView;
 import android.widget.ListView;
 
 import java.util.ArrayList;
@@ -32,12 +31,32 @@ import eu.siacs.conversations.entities.MucOptions;
 import rocks.xmpp.addr.Jid;
 
 public class ChooseContactActivity extends AbstractSearchableListItemActivity {
+	public static final String EXTRA_TITLE_RES_ID = "extra_title_res_id";
 	private List<String> mActivatedAccounts = new ArrayList<>();
 	private List<String> mKnownHosts;
-
 	private Set<Contact> selected;
 	private Set<String> filterContacts;
-	public static final String EXTRA_TITLE_RES_ID = "extra_title_res_id";
+
+	public static Intent create(Activity activity, Conversation conversation) {
+		final Intent intent = new Intent(activity, ChooseContactActivity.class);
+		List<String> contacts = new ArrayList<>();
+		if (conversation.getMode() == Conversation.MODE_MULTI) {
+			for (MucOptions.User user : conversation.getMucOptions().getUsers(false)) {
+				Jid jid = user.getRealJid();
+				if (jid != null) {
+					contacts.add(jid.asBareJid().toString());
+				}
+			}
+		} else {
+			contacts.add(conversation.getJid().asBareJid().toString());
+		}
+		intent.putExtra("filter_contacts", contacts.toArray(new String[contacts.size()]));
+		intent.putExtra("conversation", conversation.getUuid());
+		intent.putExtra("multiple", true);
+		intent.putExtra("show_enter_jid", true);
+		intent.putExtra(EXTRA_ACCOUNT, conversation.getAccount().getJid().asBareJid().toString());
+		return intent;
+	}
 
 	@Override
 	public void onCreate(final Bundle savedInstanceState) {
@@ -53,15 +72,14 @@ public class ChooseContactActivity extends AbstractSearchableListItemActivity {
 			getListView().setMultiChoiceModeListener(new MultiChoiceModeListener() {
 
 				@Override
-				public  boolean onPrepareActionMode(ActionMode mode, Menu menu) {
+				public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
 					return false;
 				}
 
 				@Override
 				public boolean onCreateActionMode(ActionMode mode, Menu menu) {
 					final InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
-					imm.hideSoftInputFromWindow(getSearchEditText().getWindowToken(),
-							InputMethodManager.HIDE_IMPLICIT_ONLY);
+					imm.hideSoftInputFromWindow(getSearchEditText().getWindowToken(), InputMethodManager.HIDE_IMPLICIT_ONLY);
 					MenuInflater inflater = getMenuInflater();
 					inflater.inflate(R.menu.select_multiple, menu);
 					selected = new HashSet<>();
@@ -74,7 +92,7 @@ public class ChooseContactActivity extends AbstractSearchableListItemActivity {
 
 				@Override
 				public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
-					switch(item.getItemId()) {
+					switch (item.getItemId()) {
 						case R.id.selection_submit:
 							final Intent request = getIntent();
 							final Intent data = new Intent();
@@ -83,7 +101,7 @@ public class ChooseContactActivity extends AbstractSearchableListItemActivity {
 							String[] selection = getSelectedContactJids();
 							data.putExtra("contacts", selection);
 							data.putExtra("multiple", true);
-							data.putExtra(EXTRA_ACCOUNT,request.getStringExtra(EXTRA_ACCOUNT));
+							data.putExtra(EXTRA_ACCOUNT, request.getStringExtra(EXTRA_ACCOUNT));
 							data.putExtra("subject", request.getStringExtra("subject"));
 							setResult(RESULT_OK, data);
 							finish();
@@ -109,32 +127,31 @@ public class ChooseContactActivity extends AbstractSearchableListItemActivity {
 			});
 		}
 
-		getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() {
-
-			@Override
-			public void onItemClick(final AdapterView<?> parent, final View view,
-					final int position, final long id) {
-				final InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
-				imm.hideSoftInputFromWindow(getSearchEditText().getWindowToken(),
-						InputMethodManager.HIDE_IMPLICIT_ONLY);
-				final Intent request = getIntent();
-				final Intent data = new Intent();
-				final ListItem mListItem = getListItems().get(position);
-				data.putExtra("contact", mListItem.getJid().toString());
-				String account = request.getStringExtra(EXTRA_ACCOUNT);
-				if (account == null && mListItem instanceof Contact) {
-					account = ((Contact) mListItem).getAccount().getJid().asBareJid().toString();
-				}
-				data.putExtra(EXTRA_ACCOUNT, account);
-				data.putExtra("conversation",
-						request.getStringExtra("conversation"));
-				data.putExtra("multiple", false);
-				data.putExtra("subject", request.getStringExtra("subject"));
-				setResult(RESULT_OK, data);
-				finish();
+		getListView().setOnItemClickListener((parent, view, position, id) -> {
+			final InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
+			imm.hideSoftInputFromWindow(getSearchEditText().getWindowToken(), InputMethodManager.HIDE_IMPLICIT_ONLY);
+			final Intent request = getIntent();
+			final Intent data = new Intent();
+			final ListItem mListItem = getListItems().get(position);
+			data.putExtra("contact", mListItem.getJid().toString());
+			String account = request.getStringExtra(EXTRA_ACCOUNT);
+			if (account == null && mListItem instanceof Contact) {
+				account = ((Contact) mListItem).getAccount().getJid().asBareJid().toString();
 			}
+			data.putExtra(EXTRA_ACCOUNT, account);
+			data.putExtra("conversation", request.getStringExtra("conversation"));
+			data.putExtra("multiple", false);
+			data.putExtra("subject", request.getStringExtra("subject"));
+			setResult(RESULT_OK, data);
+			finish();
 		});
-
+		final Intent i = getIntent();
+		boolean showEnterJid = i != null && i.getBooleanExtra("show_enter_jid", false);
+		if (showEnterJid) {
+			this.binding.fab.setOnClickListener((v) -> showEnterJidDialog());
+		} else {
+			this.binding.fab.setVisibility(View.GONE);
+		}
 	}
 
 	@Override
@@ -142,7 +159,7 @@ public class ChooseContactActivity extends AbstractSearchableListItemActivity {
 		super.onStart();
 		Intent intent = getIntent();
 		@StringRes
-		int res = intent != null ? intent.getIntExtra(EXTRA_TITLE_RES_ID,R.string.title_activity_choose_contact) : R.string.title_activity_choose_contact;
+		int res = intent != null ? intent.getIntExtra(EXTRA_TITLE_RES_ID, R.string.title_activity_choose_contact) : R.string.title_activity_choose_contact;
 		ActionBar bar = getSupportActionBar();
 		if (bar != null) {
 			try {
@@ -158,7 +175,7 @@ public class ChooseContactActivity extends AbstractSearchableListItemActivity {
 		super.onCreateOptionsMenu(menu);
 		final Intent i = getIntent();
 		boolean showEnterJid = i != null && i.getBooleanExtra("show_enter_jid", false);
-		menu.findItem(R.id.action_create_contact).setVisible(showEnterJid);
+		menu.findItem(R.id.action_scan_qr_code).setVisible(showEnterJid);
 		return true;
 	}
 
@@ -191,7 +208,6 @@ public class ChooseContactActivity extends AbstractSearchableListItemActivity {
 		return result.toArray(new String[result.size()]);
 	}
 
-
 	public void refreshUiReal() {
 		//nothing to do. This Activity doesn't implement any listeners
 	}
@@ -199,8 +215,8 @@ public class ChooseContactActivity extends AbstractSearchableListItemActivity {
 	@Override
 	public boolean onOptionsItemSelected(MenuItem item) {
 		switch (item.getItemId()) {
-			case R.id.action_create_contact:
-				showEnterJidDialog();
+			case R.id.action_scan_qr_code:
+				ScanActivity.scan(this);
 				return true;
 		}
 		return super.onOptionsItemSelected(item);
@@ -208,27 +224,24 @@ public class ChooseContactActivity extends AbstractSearchableListItemActivity {
 
 	protected void showEnterJidDialog() {
 		EnterJidDialog dialog = new EnterJidDialog(
-			this, mKnownHosts, mActivatedAccounts,
-			getString(R.string.enter_contact), getString(R.string.select),
-			null, getIntent().getStringExtra(EXTRA_ACCOUNT), true
+				this, mKnownHosts, mActivatedAccounts,
+				getString(R.string.enter_contact), getString(R.string.select),
+				null, getIntent().getStringExtra(EXTRA_ACCOUNT), true
 		);
 
-		dialog.setOnEnterJidDialogPositiveListener(new EnterJidDialog.OnEnterJidDialogPositiveListener() {
-			@Override
-			public boolean onEnterJidDialogPositive(Jid accountJid, Jid contactJid) throws EnterJidDialog.JidError {
-				final Intent request = getIntent();
-				final Intent data = new Intent();
-				data.putExtra("contact", contactJid.toString());
-				data.putExtra(EXTRA_ACCOUNT, accountJid.toString());
-				data.putExtra("conversation",
-						request.getStringExtra("conversation"));
-				data.putExtra("multiple", false);
-				data.putExtra("subject", request.getStringExtra("subject"));
-				setResult(RESULT_OK, data);
-				finish();
+		dialog.setOnEnterJidDialogPositiveListener((accountJid, contactJid) -> {
+			final Intent request = getIntent();
+			final Intent data = new Intent();
+			data.putExtra("contact", contactJid.toString());
+			data.putExtra(EXTRA_ACCOUNT, accountJid.toString());
+			data.putExtra("conversation",
+					request.getStringExtra("conversation"));
+			data.putExtra("multiple", false);
+			data.putExtra("subject", request.getStringExtra("subject"));
+			setResult(RESULT_OK, data);
+			finish();
 
-				return true;
-			}
+			return true;
 		});
 
 		dialog.show();
@@ -249,25 +262,4 @@ public class ChooseContactActivity extends AbstractSearchableListItemActivity {
 		}
 		this.mKnownHosts = xmppConnectionService.getKnownHosts();
 	}
-
-	public static Intent create(Activity activity, Conversation conversation) {
-		final Intent intent = new Intent(activity, ChooseContactActivity.class);
-		List<String> contacts = new ArrayList<>();
-		if (conversation.getMode() == Conversation.MODE_MULTI) {
-			for (MucOptions.User user : conversation.getMucOptions().getUsers(false)) {
-				Jid jid = user.getRealJid();
-				if (jid != null) {
-					contacts.add(jid.asBareJid().toString());
-				}
-			}
-		} else {
-			contacts.add(conversation.getJid().asBareJid().toString());
-		}
-		intent.putExtra("filter_contacts", contacts.toArray(new String[contacts.size()]));
-		intent.putExtra("conversation", conversation.getUuid());
-		intent.putExtra("multiple", true);
-		intent.putExtra("show_enter_jid", true);
-		intent.putExtra(EXTRA_ACCOUNT, conversation.getAccount().getJid().asBareJid().toString());
-		return intent;
-	}
 }

src/main/res/layout/activity_choose_contact.xml 🔗

@@ -1,16 +1,24 @@
 <?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="?attr/color_background_primary">
+<layout xmlns:android="http://schemas.android.com/apk/res/android">
 
-    <ListView
-        android:id="@+id/choose_contact_list"
+    <FrameLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        tools:listitem="@layout/contact"
-        android:divider="@android:color/transparent"
-        android:dividerHeight="0dp"/>
+        android:background="?attr/color_background_primary">
 
-</LinearLayout>
+        <ListView
+            android:id="@+id/choose_contact_list"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:divider="@android:color/transparent"
+            android:dividerHeight="0dp"/>
+
+        <android.support.design.widget.FloatingActionButton
+            android:id="@+id/fab"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="end|bottom"
+            android:layout_margin="16dp"
+            android:src="@drawable/ic_person_add_white_24dp"/>
+    </FrameLayout>
+</layout>

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

@@ -8,18 +8,10 @@
         android:icon="?attr/icon_search"
         app:showAsAction="collapseActionView|always"
         android:title="@string/search"/>
-
-    <item
-        android:id="@+id/action_create_contact"
-        android:icon="?attr/icon_add_person"
-        app:showAsAction="always"
-        android:title="@string/create_contact"
-        android:visible="false"/>
-
     <item
-        android:id="@+id/action_block_jid"
-        android:icon="?attr/icon_add_person"
+        android:id="@+id/action_scan_qr_code"
+        android:title="@string/scan_qr_code"
+        android:icon="?attr/icon_scan_qr_code"
         app:showAsAction="always"
-        android:title="@string/block_jabber_id"
         android:visible="false"/>
 </menu>