use fab in choose contact activity. scan qr not yet working
This commit is contained in:
		
							parent
							
								
									ed0ba89551
								
							
						
					
					
						commit
						1efaecf745
					
				| @ -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 | ||||
|  | ||||
| @ -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(); | ||||
|  | ||||
| @ -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; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @ -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> | ||||
| @ -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" | ||||
|         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/create_contact" | ||||
|         android:visible="false"/> | ||||
| 
 | ||||
|     <item | ||||
|         android:id="@+id/action_block_jid" | ||||
|         android:icon="?attr/icon_add_person" | ||||
|         app:showAsAction="always" | ||||
|         android:title="@string/block_jabber_id" | ||||
|         android:visible="false"/> | ||||
| </menu> | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Daniel Gultsch
						Daniel Gultsch