From bd1f3fc2bd38d6d9574b5b2454fd593de74eb346 Mon Sep 17 00:00:00 2001 From: Torsten Grote <t@grobox.de> Date: Thu, 13 Oct 2016 10:04:00 -0300 Subject: [PATCH] Make ContactSelectorFragment reusable --- ...ions.xml => contact_selection_actions.xml} | 4 +-- briar-android/res/values-de/strings.xml | 2 +- briar-android/res/values-es/strings.xml | 2 +- briar-android/res/values-it/strings.xml | 2 +- briar-android/res/values-pt-rBR/strings.xml | 2 +- briar-android/res/values/strings.xml | 2 +- .../sharing/ContactSelectorFragment.java | 25 ++++++++----------- .../sharing/ContactSelectorListener.java | 25 +++++++++++++++++++ .../android/sharing/ShareActivity.java | 14 ++++++++--- .../android/sharing/ShareBlogActivity.java | 2 +- .../android/sharing/ShareForumActivity.java | 2 +- 11 files changed, 55 insertions(+), 27 deletions(-) rename briar-android/res/menu/{forum_share_actions.xml => contact_selection_actions.xml} (73%) create mode 100644 briar-android/src/org/briarproject/android/sharing/ContactSelectorListener.java diff --git a/briar-android/res/menu/forum_share_actions.xml b/briar-android/res/menu/contact_selection_actions.xml similarity index 73% rename from briar-android/res/menu/forum_share_actions.xml rename to briar-android/res/menu/contact_selection_actions.xml index a3d6c15477..fbef25059b 100644 --- a/briar-android/res/menu/forum_share_actions.xml +++ b/briar-android/res/menu/contact_selection_actions.xml @@ -4,9 +4,9 @@ xmlns:app="http://schemas.android.com/apk/res-auto"> <item - android:id="@+id/action_share_forum" + android:id="@+id/action_contacts_selected" android:icon="@drawable/ic_check_white" - android:title="@string/forum_share_action" + android:title="@string/contacts_selected" app:showAsAction="always"/> </menu> \ No newline at end of file diff --git a/briar-android/res/values-de/strings.xml b/briar-android/res/values-de/strings.xml index 2967f16b19..e3f4537551 100644 --- a/briar-android/res/values-de/strings.xml +++ b/briar-android/res/values-de/strings.xml @@ -171,7 +171,7 @@ <string name="forum_left_toast">Forum wurde verlassen</string> <!--Forum Sharing--> <string name="forum_share_button">Forum teilen</string> - <string name="forum_share_action">Teile dieses Forum mit den gewählten Kontakten</string> + <string name="contacts_selected">Teile dieses Forum mit den gewählten Kontakten</string> <string name="activity_share_toolbar_header">Kontakte auswählen</string> <string name="no_contacts_selector">Du scheinst hier neu zu sein und noch keine Kontakte zu haben.\n\nBitte komm zurück, wenn du deinen ersten Kontakt hinzugefügt hast.</string> <string name="forum_shared_snackbar">Forum mit gewählten Kontakten geteilt</string> diff --git a/briar-android/res/values-es/strings.xml b/briar-android/res/values-es/strings.xml index 521fbd9f86..63135b3bf9 100644 --- a/briar-android/res/values-es/strings.xml +++ b/briar-android/res/values-es/strings.xml @@ -159,7 +159,7 @@ <string name="forum_left_toast">Foro abandonado</string> <!--Forum Sharing--> <string name="forum_share_button">Compartir foro</string> - <string name="forum_share_action">Compartir este foro con los contactos seleccionados</string> + <string name="contacts_selected">Compartir este foro con los contactos seleccionados</string> <string name="activity_share_toolbar_header">Elige contactos</string> <string name="no_contacts_selector">Parece que eres nuevo aquà y no tienes contactos aún.\n\nPor favor, vuelve cuando hayas añadido tu primer contacto.</string> <string name="forum_shared_snackbar">Foro compartido con los contactos seleccionados</string> diff --git a/briar-android/res/values-it/strings.xml b/briar-android/res/values-it/strings.xml index 28a764499d..e7b7a678f8 100644 --- a/briar-android/res/values-it/strings.xml +++ b/briar-android/res/values-it/strings.xml @@ -136,7 +136,7 @@ <string name="forum_left_toast">Forum lasciato</string> <!--Forum Sharing--> <string name="forum_share_button">Condividi Forum</string> - <string name="forum_share_action">Condividi questo forum con i contatti scelti</string> + <string name="contacts_selected">Condividi questo forum con i contatti scelti</string> <string name="activity_share_toolbar_header">Scegli Contatti</string> <string name="forum_shared_snackbar">Forum condiviso con i contatti scelti</string> <string name="forum_share_error">C\'è stato un errore nella condivisione di questo forum.</string> diff --git a/briar-android/res/values-pt-rBR/strings.xml b/briar-android/res/values-pt-rBR/strings.xml index 4fd4eb8c7b..75d4cc14b4 100644 --- a/briar-android/res/values-pt-rBR/strings.xml +++ b/briar-android/res/values-pt-rBR/strings.xml @@ -171,7 +171,7 @@ Se sentido sozinho aqui? Compartilhe esse fórum com seus contatos!</string> <string name="forum_left_toast">Saiu do fórum</string> <!--Forum Sharing--> <string name="forum_share_button">Compartilhar fórum</string> - <string name="forum_share_action">Compartilhar este fórum com os contatos escolhidos</string> + <string name="contacts_selected">Compartilhar este fórum com os contatos escolhidos</string> <string name="activity_share_toolbar_header">Escolher contatos</string> <string name="no_contacts_selector">Parece que você é novo aqui e não tem nenhum contato ainda. Por favor volte aqui depois de adicionar um contato.</string> diff --git a/briar-android/res/values/strings.xml b/briar-android/res/values/strings.xml index b1652f5fb7..004c001290 100644 --- a/briar-android/res/values/strings.xml +++ b/briar-android/res/values/strings.xml @@ -195,7 +195,7 @@ <!-- Forum Sharing --> <string name="forum_share_button">Share Forum</string> - <string name="forum_share_action">Share this forum with chosen contacts</string> + <string name="contacts_selected">Contacts selected</string> <string name="activity_share_toolbar_header">Choose Contacts</string> <string name="no_contacts_selector">It seems that you are new here and have no contacts yet.\n\nPlease come back here after you added your first contact.</string> <string name="forum_shared_snackbar">Forum shared with chosen contacts</string> diff --git a/briar-android/src/org/briarproject/android/sharing/ContactSelectorFragment.java b/briar-android/src/org/briarproject/android/sharing/ContactSelectorFragment.java index 82db75adf1..b496bcdebb 100644 --- a/briar-android/src/org/briarproject/android/sharing/ContactSelectorFragment.java +++ b/briar-android/src/org/briarproject/android/sharing/ContactSelectorFragment.java @@ -23,7 +23,6 @@ import org.briarproject.api.contact.Contact; import org.briarproject.api.contact.ContactId; import org.briarproject.api.contact.ContactManager; import org.briarproject.api.db.DbException; -import org.briarproject.api.forum.ForumSharingManager; import org.briarproject.api.identity.IdentityManager; import org.briarproject.api.identity.LocalAuthor; import org.briarproject.api.sync.GroupId; @@ -48,7 +47,6 @@ public class ContactSelectorFragment extends BaseFragment implements public static final String TAG = ContactSelectorFragment.class.getName(); private static final Logger LOG = Logger.getLogger(TAG); - private ShareActivity shareActivity; private Menu menu; private BriarRecyclerView list; private ContactSelectorAdapter adapter; @@ -59,13 +57,11 @@ public class ContactSelectorFragment extends BaseFragment implements volatile ContactManager contactManager; @Inject volatile IdentityManager identityManager; - @Inject - volatile ForumSharingManager forumSharingManager; private volatile GroupId groupId; + private volatile ContactSelectorListener listener; public static ContactSelectorFragment newInstance(GroupId groupId) { - Bundle args = new Bundle(); args.putByteArray(GROUP_ID, groupId.getBytes()); ContactSelectorFragment fragment = new ContactSelectorFragment(); @@ -81,7 +77,7 @@ public class ContactSelectorFragment extends BaseFragment implements @Override public void onAttach(Context context) { super.onAttach(context); - shareActivity = (ShareActivity) context; + listener = (ContactSelectorListener) context; } @Override @@ -139,6 +135,7 @@ public class ContactSelectorFragment extends BaseFragment implements @Override public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); if (adapter != null) { selectedContacts = adapter.getSelectedContactIds(); outState.putIntegerArrayList(CONTACTS, @@ -148,7 +145,7 @@ public class ContactSelectorFragment extends BaseFragment implements @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - inflater.inflate(R.menu.forum_share_actions, menu); + inflater.inflate(R.menu.contact_selection_actions, menu); super.onCreateOptionsMenu(menu, inflater); this.menu = menu; // hide sharing action initially, if no contact is selected @@ -160,11 +157,11 @@ public class ContactSelectorFragment extends BaseFragment implements // Handle presses on the action bar items switch (item.getItemId()) { case android.R.id.home: - shareActivity.onBackPressed(); + listener.onBackPressed(); return true; - case R.id.action_share_forum: + case R.id.action_contacts_selected: selectedContacts = adapter.getSelectedContactIds(); - shareActivity.showMessageScreen(groupId, selectedContacts); + listener.contactsSelected(groupId, selectedContacts); return true; default: return super.onOptionsItemSelected(item); @@ -185,7 +182,7 @@ public class ContactSelectorFragment extends BaseFragment implements } private void loadContacts(@Nullable final Collection<ContactId> selection) { - shareActivity.runOnDbThread(new Runnable() { + listener.runOnDbThread(new Runnable() { @Override public void run() { try { @@ -199,7 +196,7 @@ public class ContactSelectorFragment extends BaseFragment implements boolean selected = selection != null && selection.contains(c.getId()); // do we have already some sharing with that contact? - boolean disabled = shareActivity.isDisabled(groupId, c); + boolean disabled = listener.isDisabled(groupId, c); contacts.add(new SelectableContactListItem(c, localAuthor, groupId, selected, disabled)); } @@ -216,7 +213,7 @@ public class ContactSelectorFragment extends BaseFragment implements } private void displayContacts(final List<ContactListItem> contacts) { - shareActivity.runOnUiThreadUnlessDestroyed(new Runnable() { + listener.runOnUiThreadUnlessDestroyed(new Runnable() { @Override public void run() { if (contacts.isEmpty()) list.showData(); @@ -228,7 +225,7 @@ public class ContactSelectorFragment extends BaseFragment implements private void updateMenuItem() { if (menu == null) return; - MenuItem item = menu.findItem(R.id.action_share_forum); + MenuItem item = menu.findItem(R.id.action_contacts_selected); if (item == null) return; selectedContacts = adapter.getSelectedContactIds(); diff --git a/briar-android/src/org/briarproject/android/sharing/ContactSelectorListener.java b/briar-android/src/org/briarproject/android/sharing/ContactSelectorListener.java new file mode 100644 index 0000000000..e1805594af --- /dev/null +++ b/briar-android/src/org/briarproject/android/sharing/ContactSelectorListener.java @@ -0,0 +1,25 @@ +package org.briarproject.android.sharing; + +import android.support.annotation.UiThread; + +import org.briarproject.android.DestroyableContext; +import org.briarproject.api.contact.Contact; +import org.briarproject.api.contact.ContactId; +import org.briarproject.api.db.DbException; +import org.briarproject.api.sync.GroupId; + +import java.util.Collection; + +public interface ContactSelectorListener extends DestroyableContext { + + void runOnDbThread(Runnable runnable); + + boolean isDisabled(GroupId groupId, Contact c) throws DbException; + + @UiThread + void contactsSelected(GroupId groupId, Collection<ContactId> contacts); + + @UiThread + void onBackPressed(); + +} diff --git a/briar-android/src/org/briarproject/android/sharing/ShareActivity.java b/briar-android/src/org/briarproject/android/sharing/ShareActivity.java index d79a7ed2ee..abef634fe2 100644 --- a/briar-android/src/org/briarproject/android/sharing/ShareActivity.java +++ b/briar-android/src/org/briarproject/android/sharing/ShareActivity.java @@ -6,7 +6,7 @@ import android.view.View; import org.briarproject.R; import org.briarproject.android.BriarActivity; -import org.briarproject.android.fragment.BaseFragment; +import org.briarproject.android.fragment.BaseFragment.BaseFragmentListener; import org.briarproject.api.contact.Contact; import org.briarproject.api.contact.ContactId; import org.briarproject.api.db.DbException; @@ -17,7 +17,7 @@ import java.util.Collection; import java.util.List; public abstract class ShareActivity extends BriarActivity implements - BaseFragment.BaseFragmentListener { + BaseFragmentListener, ContactSelectorListener { final static String CONTACTS = "contacts"; @@ -44,9 +44,15 @@ public abstract class ShareActivity extends BriarActivity implements abstract ShareMessageFragment getMessageFragment(GroupId groupId, Collection<ContactId> contacts); - abstract boolean isDisabled(GroupId groupId, Contact c) throws DbException; + /** + * This must only be called from a DbThread + */ + public abstract boolean isDisabled(GroupId groupId, Contact c) + throws DbException; - void showMessageScreen(GroupId groupId, Collection<ContactId> contacts) { + @Override + public void contactsSelected(GroupId groupId, + Collection<ContactId> contacts) { ShareMessageFragment messageFragment = getMessageFragment(groupId, contacts); diff --git a/briar-android/src/org/briarproject/android/sharing/ShareBlogActivity.java b/briar-android/src/org/briarproject/android/sharing/ShareBlogActivity.java index 696ea14522..b102453e59 100644 --- a/briar-android/src/org/briarproject/android/sharing/ShareBlogActivity.java +++ b/briar-android/src/org/briarproject/android/sharing/ShareBlogActivity.java @@ -29,7 +29,7 @@ public class ShareBlogActivity extends ShareActivity { /** * This must only be called from a DbThread */ - boolean isDisabled(GroupId groupId, Contact c) throws DbException { + public boolean isDisabled(GroupId groupId, Contact c) throws DbException { return !blogSharingManager.canBeShared(groupId, c); } } diff --git a/briar-android/src/org/briarproject/android/sharing/ShareForumActivity.java b/briar-android/src/org/briarproject/android/sharing/ShareForumActivity.java index 51a5d5a22a..1f76535371 100644 --- a/briar-android/src/org/briarproject/android/sharing/ShareForumActivity.java +++ b/briar-android/src/org/briarproject/android/sharing/ShareForumActivity.java @@ -28,7 +28,7 @@ public class ShareForumActivity extends ShareActivity { /** * This must only be called from a DbThread */ - boolean isDisabled(GroupId groupId, Contact c) throws DbException { + public boolean isDisabled(GroupId groupId, Contact c) throws DbException { return !forumSharingManager.canBeShared(groupId, c); } } -- GitLab