diff --git a/src/main/java/eu/siacs/conversations/ui/AbstractSearchableListItemActivity.java b/src/main/java/eu/siacs/conversations/ui/AbstractSearchableListItemActivity.java index 153da435e..d05de8f3c 100644 --- a/src/main/java/eu/siacs/conversations/ui/AbstractSearchableListItemActivity.java +++ b/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 listItems = new ArrayList<>(); private ArrayAdapter mListItemsAdapter; @@ -74,7 +76,7 @@ public abstract class AbstractSearchableListItemActivity extends XmppActivity { }; public ListView getListView() { - return mListView; + return binding.chooseContactList; } public List 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 diff --git a/src/main/java/eu/siacs/conversations/ui/BlocklistActivity.java b/src/main/java/eu/siacs/conversations/ui/BlocklistActivity.java index 1e7e2df47..be02277a9 100644 --- a/src/main/java/eu/siacs/conversations/ui/BlocklistActivity.java +++ b/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(); diff --git a/src/main/java/eu/siacs/conversations/ui/ChooseContactActivity.java b/src/main/java/eu/siacs/conversations/ui/ChooseContactActivity.java index 3a94b28f1..44802fa33 100644 --- a/src/main/java/eu/siacs/conversations/ui/ChooseContactActivity.java +++ b/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 mActivatedAccounts = new ArrayList<>(); private List mKnownHosts; - private Set selected; private Set 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 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 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; - } } diff --git a/src/main/res/layout/activity_choose_contact.xml b/src/main/res/layout/activity_choose_contact.xml index 4e2072752..5767def46 100644 --- a/src/main/res/layout/activity_choose_contact.xml +++ b/src/main/res/layout/activity_choose_contact.xml @@ -1,16 +1,24 @@ - + - + android:background="?attr/color_background_primary"> - \ No newline at end of file + + + + + \ No newline at end of file diff --git a/src/main/res/menu/choose_contact.xml b/src/main/res/menu/choose_contact.xml index a1ae1c9b9..893e985b9 100644 --- a/src/main/res/menu/choose_contact.xml +++ b/src/main/res/menu/choose_contact.xml @@ -8,18 +8,10 @@ android:icon="?attr/icon_search" app:showAsAction="collapseActionView|always" android:title="@string/search"/> - - -