From bd1f3fc2bd38d6d9574b5b2454fd593de74eb346 Mon Sep 17 00:00:00 2001 From: Torsten Grote 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 a3d6c1547..fbef25059 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"> \ 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 2967f16b1..e3f453755 100644 --- a/briar-android/res/values-de/strings.xml +++ b/briar-android/res/values-de/strings.xml @@ -171,7 +171,7 @@ Forum wurde verlassen Forum teilen - Teile dieses Forum mit den gewählten Kontakten + Teile dieses Forum mit den gewählten Kontakten Kontakte auswählen 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. Forum mit gewählten Kontakten geteilt diff --git a/briar-android/res/values-es/strings.xml b/briar-android/res/values-es/strings.xml index 521fbd9f8..63135b3bf 100644 --- a/briar-android/res/values-es/strings.xml +++ b/briar-android/res/values-es/strings.xml @@ -159,7 +159,7 @@ Foro abandonado Compartir foro - Compartir este foro con los contactos seleccionados + Compartir este foro con los contactos seleccionados Elige contactos Parece que eres nuevo aquí y no tienes contactos aún.\n\nPor favor, vuelve cuando hayas añadido tu primer contacto. Foro compartido con los contactos seleccionados diff --git a/briar-android/res/values-it/strings.xml b/briar-android/res/values-it/strings.xml index 28a764499..e7b7a678f 100644 --- a/briar-android/res/values-it/strings.xml +++ b/briar-android/res/values-it/strings.xml @@ -136,7 +136,7 @@ Forum lasciato Condividi Forum - Condividi questo forum con i contatti scelti + Condividi questo forum con i contatti scelti Scegli Contatti Forum condiviso con i contatti scelti C\'è stato un errore nella condivisione di questo forum. diff --git a/briar-android/res/values-pt-rBR/strings.xml b/briar-android/res/values-pt-rBR/strings.xml index 4fd4eb8c7..75d4cc14b 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! Saiu do fórum Compartilhar fórum - Compartilhar este fórum com os contatos escolhidos + Compartilhar este fórum com os contatos escolhidos Escolher contatos Parece que você é novo aqui e não tem nenhum contato ainda. Por favor volte aqui depois de adicionar um contato. diff --git a/briar-android/res/values/strings.xml b/briar-android/res/values/strings.xml index b1652f5fb..004c00129 100644 --- a/briar-android/res/values/strings.xml +++ b/briar-android/res/values/strings.xml @@ -195,7 +195,7 @@ Share Forum - Share this forum with chosen contacts + Contacts selected Choose Contacts It seems that you are new here and have no contacts yet.\n\nPlease come back here after you added your first contact. Forum shared with chosen contacts diff --git a/briar-android/src/org/briarproject/android/sharing/ContactSelectorFragment.java b/briar-android/src/org/briarproject/android/sharing/ContactSelectorFragment.java index 82db75adf..b496bcdeb 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 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 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 000000000..e1805594a --- /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 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 d79a7ed2e..abef634fe 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 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 contacts) { + @Override + public void contactsSelected(GroupId groupId, + Collection 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 696ea1452..b102453e5 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 51a5d5a22..1f7653537 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); } }