mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-20 06:39:54 +01:00
UI for Sharing Blogs
This commit refactors the code for sharing forums, so it can be used for sharing blogs as well. It does not yet include code for responding to blog invitations.
This commit is contained in:
@@ -133,7 +133,7 @@
|
|||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".android.forum.ShareForumActivity"
|
android:name=".android.sharing.ShareActivity"
|
||||||
android:label="@string/forums_share_toolbar_header"
|
android:label="@string/forums_share_toolbar_header"
|
||||||
android:parentActivityName=".android.forum.ForumActivity">
|
android:parentActivityName=".android.forum.ForumActivity">
|
||||||
<meta-data
|
<meta-data
|
||||||
@@ -143,7 +143,7 @@
|
|||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".android.forum.ForumSharingStatusActivity"
|
android:name=".android.sharing.SharingStatusActivity"
|
||||||
android:label="@string/forum_sharing_status"
|
android:label="@string/forum_sharing_status"
|
||||||
android:parentActivityName=".android.forum.ForumActivity">
|
android:parentActivityName=".android.forum.ForumActivity">
|
||||||
<meta-data
|
<meta-data
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
android:id="@+id/shareForumContainer"
|
android:id="@+id/shareContainer"
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"/>
|
android:layout_height="match_parent"/>
|
||||||
17
briar-android/res/menu/blogs_blog_actions.xml
Normal file
17
briar-android/res/menu/blogs_blog_actions.xml
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<menu
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_blog_share"
|
||||||
|
android:icon="@drawable/social_share_white"
|
||||||
|
android:title="@string/blogs_sharing_share"
|
||||||
|
app:showAsAction="ifRoom"/>
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_blog_sharing_status"
|
||||||
|
android:title="@string/forum_sharing_status"
|
||||||
|
app:showAsAction="never"/>
|
||||||
|
|
||||||
|
</menu>
|
||||||
@@ -113,6 +113,7 @@
|
|||||||
<string name="forum_share_button">Share Forum</string>
|
<string name="forum_share_button">Share Forum</string>
|
||||||
<string name="forum_shared_snackbar">Forum shared with chosen contacts</string>
|
<string name="forum_shared_snackbar">Forum shared with chosen contacts</string>
|
||||||
<string name="forum_share_message">You may compose an optional invitation message that will be sent to the selected contacts.</string>
|
<string name="forum_share_message">You may compose an optional invitation message that will be sent to the selected contacts.</string>
|
||||||
|
<string name="forum_share_error">There was an error sharing this forum.</string>
|
||||||
<string name="forum_invitation_received">%1$s has shared the forum \"%2$s\" with you.</string>
|
<string name="forum_invitation_received">%1$s has shared the forum \"%2$s\" with you.</string>
|
||||||
<string name="forum_invitation_sent">You have shared the forum \"%1$s\" with %2$s.</string>
|
<string name="forum_invitation_sent">You have shared the forum \"%1$s\" with %2$s.</string>
|
||||||
<string name="forum_show_invitations">Show Forum Invitations</string>
|
<string name="forum_show_invitations">Show Forum Invitations</string>
|
||||||
@@ -304,6 +305,10 @@
|
|||||||
<string name="blogs_delete_blog_cancel">Keep</string>
|
<string name="blogs_delete_blog_cancel">Keep</string>
|
||||||
<string name="blogs_blog_deleted">Blog Deleted</string>
|
<string name="blogs_blog_deleted">Blog Deleted</string>
|
||||||
<string name="blogs_remove_blog">Remove Blog</string>
|
<string name="blogs_remove_blog">Remove Blog</string>
|
||||||
|
<string name="blogs_sharing_share">Share Blog</string>
|
||||||
|
<string name="blogs_sharing_error">There was an error sharing this blog.</string>
|
||||||
|
<string name="blogs_sharing_button">Share Blog</string>
|
||||||
|
<string name="blogs_sharing_snackbar">Blog shared with chosen contacts</string>
|
||||||
|
|
||||||
<string name="blogs_blog_list">Blog List</string>
|
<string name="blogs_blog_list">Blog List</string>
|
||||||
<string name="blogs_available_blogs">Available Blogs</string>
|
<string name="blogs_available_blogs">Available Blogs</string>
|
||||||
|
|||||||
@@ -16,13 +16,13 @@ import org.briarproject.android.blogs.WriteBlogPostActivity;
|
|||||||
import org.briarproject.android.contact.ContactListFragment;
|
import org.briarproject.android.contact.ContactListFragment;
|
||||||
import org.briarproject.android.contact.ConversationActivity;
|
import org.briarproject.android.contact.ConversationActivity;
|
||||||
import org.briarproject.android.forum.ForumInvitationsActivity;
|
import org.briarproject.android.forum.ForumInvitationsActivity;
|
||||||
import org.briarproject.android.forum.ContactSelectorFragment;
|
import org.briarproject.android.sharing.ContactSelectorFragment;
|
||||||
import org.briarproject.android.forum.CreateForumActivity;
|
import org.briarproject.android.forum.CreateForumActivity;
|
||||||
import org.briarproject.android.forum.ForumActivity;
|
import org.briarproject.android.forum.ForumActivity;
|
||||||
import org.briarproject.android.forum.ForumListFragment;
|
import org.briarproject.android.forum.ForumListFragment;
|
||||||
import org.briarproject.android.forum.ForumSharingStatusActivity;
|
import org.briarproject.android.sharing.SharingStatusActivity;
|
||||||
import org.briarproject.android.forum.ShareForumActivity;
|
import org.briarproject.android.sharing.ShareActivity;
|
||||||
import org.briarproject.android.forum.ShareForumMessageFragment;
|
import org.briarproject.android.sharing.ShareMessageFragment;
|
||||||
import org.briarproject.android.identity.CreateIdentityActivity;
|
import org.briarproject.android.identity.CreateIdentityActivity;
|
||||||
import org.briarproject.android.introduction.ContactChooserFragment;
|
import org.briarproject.android.introduction.ContactChooserFragment;
|
||||||
import org.briarproject.android.introduction.IntroductionActivity;
|
import org.briarproject.android.introduction.IntroductionActivity;
|
||||||
@@ -67,9 +67,9 @@ public interface ActivityComponent {
|
|||||||
|
|
||||||
void inject(CreateForumActivity activity);
|
void inject(CreateForumActivity activity);
|
||||||
|
|
||||||
void inject(ShareForumActivity activity);
|
void inject(ShareActivity activity);
|
||||||
|
|
||||||
void inject(ForumSharingStatusActivity activity);
|
void inject(SharingStatusActivity activity);
|
||||||
|
|
||||||
void inject(ForumActivity activity);
|
void inject(ForumActivity activity);
|
||||||
|
|
||||||
@@ -104,7 +104,7 @@ public interface ActivityComponent {
|
|||||||
void inject(ShowQrCodeFragment fragment);
|
void inject(ShowQrCodeFragment fragment);
|
||||||
void inject(ContactChooserFragment fragment);
|
void inject(ContactChooserFragment fragment);
|
||||||
void inject(ContactSelectorFragment fragment);
|
void inject(ContactSelectorFragment fragment);
|
||||||
void inject(ShareForumMessageFragment fragment);
|
void inject(ShareMessageFragment fragment);
|
||||||
void inject(IntroductionMessageFragment fragment);
|
void inject(IntroductionMessageFragment fragment);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import org.briarproject.android.api.ReferenceManager;
|
|||||||
import org.briarproject.android.report.BriarReportSender;
|
import org.briarproject.android.report.BriarReportSender;
|
||||||
import org.briarproject.api.blogs.BlogManager;
|
import org.briarproject.api.blogs.BlogManager;
|
||||||
import org.briarproject.api.blogs.BlogPostFactory;
|
import org.briarproject.api.blogs.BlogPostFactory;
|
||||||
|
import org.briarproject.api.blogs.BlogSharingManager;
|
||||||
import org.briarproject.api.contact.ContactExchangeTask;
|
import org.briarproject.api.contact.ContactExchangeTask;
|
||||||
import org.briarproject.api.contact.ContactManager;
|
import org.briarproject.api.contact.ContactManager;
|
||||||
import org.briarproject.api.crypto.CryptoComponent;
|
import org.briarproject.api.crypto.CryptoComponent;
|
||||||
@@ -93,6 +94,8 @@ public interface AndroidComponent extends CoreEagerSingletons {
|
|||||||
|
|
||||||
ForumSharingManager forumSharingManager();
|
ForumSharingManager forumSharingManager();
|
||||||
|
|
||||||
|
BlogSharingManager blogSharingManager();
|
||||||
|
|
||||||
ForumPostFactory forumPostFactory();
|
ForumPostFactory forumPostFactory();
|
||||||
|
|
||||||
BlogManager blogManager();
|
BlogManager blogManager();
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ public class BlogActivity extends BriarActivity implements BlogPostListener,
|
|||||||
OnBlogPostClickListener, BaseFragmentListener {
|
OnBlogPostClickListener, BaseFragmentListener {
|
||||||
|
|
||||||
static final int REQUEST_WRITE_POST = 1;
|
static final int REQUEST_WRITE_POST = 1;
|
||||||
|
static final int REQUEST_SHARE = 2;
|
||||||
static final String BLOG_NAME = "briar.BLOG_NAME";
|
static final String BLOG_NAME = "briar.BLOG_NAME";
|
||||||
static final String IS_MY_BLOG = "briar.IS_MY_BLOG";
|
static final String IS_MY_BLOG = "briar.IS_MY_BLOG";
|
||||||
static final String IS_NEW_BLOG = "briar.IS_NEW_BLOG";
|
static final String IS_NEW_BLOG = "briar.IS_NEW_BLOG";
|
||||||
@@ -185,6 +186,7 @@ public class BlogActivity extends BriarActivity implements BlogPostListener,
|
|||||||
@Override
|
@Override
|
||||||
protected void onActivityResult(int requestCode, int resultCode,
|
protected void onActivityResult(int requestCode, int resultCode,
|
||||||
Intent data) {
|
Intent data) {
|
||||||
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
|
|
||||||
// The BlogPostAddedEvent arrives when the controller is not listening,
|
// The BlogPostAddedEvent arrives when the controller is not listening,
|
||||||
// so we need to manually reload the blog posts :(
|
// so we need to manually reload the blog posts :(
|
||||||
|
|||||||
@@ -23,6 +23,8 @@ import org.briarproject.android.blogs.BlogController.BlogPostListener;
|
|||||||
import org.briarproject.android.blogs.BlogPostAdapter.OnBlogPostClickListener;
|
import org.briarproject.android.blogs.BlogPostAdapter.OnBlogPostClickListener;
|
||||||
import org.briarproject.android.controller.handler.UiResultHandler;
|
import org.briarproject.android.controller.handler.UiResultHandler;
|
||||||
import org.briarproject.android.fragment.BaseFragment;
|
import org.briarproject.android.fragment.BaseFragment;
|
||||||
|
import org.briarproject.android.sharing.ShareActivity;
|
||||||
|
import org.briarproject.android.sharing.SharingStatusActivity;
|
||||||
import org.briarproject.android.util.BriarRecyclerView;
|
import org.briarproject.android.util.BriarRecyclerView;
|
||||||
import org.briarproject.api.sync.GroupId;
|
import org.briarproject.api.sync.GroupId;
|
||||||
|
|
||||||
@@ -30,6 +32,9 @@ import java.util.Collection;
|
|||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
import static android.app.Activity.RESULT_OK;
|
||||||
|
import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP;
|
||||||
|
import static android.content.Intent.FLAG_ACTIVITY_SINGLE_TOP;
|
||||||
import static android.support.design.widget.Snackbar.LENGTH_LONG;
|
import static android.support.design.widget.Snackbar.LENGTH_LONG;
|
||||||
import static android.support.v4.app.ActivityOptionsCompat.makeCustomAnimation;
|
import static android.support.v4.app.ActivityOptionsCompat.makeCustomAnimation;
|
||||||
import static android.widget.Toast.LENGTH_SHORT;
|
import static android.widget.Toast.LENGTH_SHORT;
|
||||||
@@ -37,7 +42,10 @@ import static org.briarproject.android.BriarActivity.GROUP_ID;
|
|||||||
import static org.briarproject.android.blogs.BlogActivity.BLOG_NAME;
|
import static org.briarproject.android.blogs.BlogActivity.BLOG_NAME;
|
||||||
import static org.briarproject.android.blogs.BlogActivity.IS_MY_BLOG;
|
import static org.briarproject.android.blogs.BlogActivity.IS_MY_BLOG;
|
||||||
import static org.briarproject.android.blogs.BlogActivity.IS_NEW_BLOG;
|
import static org.briarproject.android.blogs.BlogActivity.IS_NEW_BLOG;
|
||||||
|
import static org.briarproject.android.blogs.BlogActivity.REQUEST_SHARE;
|
||||||
import static org.briarproject.android.blogs.BlogActivity.REQUEST_WRITE_POST;
|
import static org.briarproject.android.blogs.BlogActivity.REQUEST_WRITE_POST;
|
||||||
|
import static org.briarproject.android.sharing.ShareActivity.BLOG;
|
||||||
|
import static org.briarproject.android.sharing.ShareActivity.SHAREABLE;
|
||||||
|
|
||||||
public class BlogFragment extends BaseFragment implements BlogPostListener {
|
public class BlogFragment extends BaseFragment implements BlogPostListener {
|
||||||
|
|
||||||
@@ -136,12 +144,18 @@ public class BlogFragment extends BaseFragment implements BlogPostListener {
|
|||||||
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
||||||
if (myBlog) {
|
if (myBlog) {
|
||||||
inflater.inflate(R.menu.blogs_my_blog_actions, menu);
|
inflater.inflate(R.menu.blogs_my_blog_actions, menu);
|
||||||
|
} else {
|
||||||
|
inflater.inflate(R.menu.blogs_blog_actions, menu);
|
||||||
}
|
}
|
||||||
super.onCreateOptionsMenu(menu, inflater);
|
super.onCreateOptionsMenu(menu, inflater);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onOptionsItemSelected(final MenuItem item) {
|
public boolean onOptionsItemSelected(final MenuItem item) {
|
||||||
|
ActivityOptionsCompat options =
|
||||||
|
makeCustomAnimation(getActivity(),
|
||||||
|
android.R.anim.slide_in_left,
|
||||||
|
android.R.anim.slide_out_right);
|
||||||
switch (item.getItemId()) {
|
switch (item.getItemId()) {
|
||||||
case android.R.id.home:
|
case android.R.id.home:
|
||||||
getActivity().onBackPressed();
|
getActivity().onBackPressed();
|
||||||
@@ -151,18 +165,37 @@ public class BlogFragment extends BaseFragment implements BlogPostListener {
|
|||||||
new Intent(getActivity(), WriteBlogPostActivity.class);
|
new Intent(getActivity(), WriteBlogPostActivity.class);
|
||||||
i.putExtra(GROUP_ID, groupId.getBytes());
|
i.putExtra(GROUP_ID, groupId.getBytes());
|
||||||
i.putExtra(BLOG_NAME, blogName);
|
i.putExtra(BLOG_NAME, blogName);
|
||||||
ActivityOptionsCompat options =
|
|
||||||
makeCustomAnimation(getActivity(),
|
|
||||||
android.R.anim.slide_in_left,
|
|
||||||
android.R.anim.slide_out_right);
|
|
||||||
ActivityCompat.startActivityForResult(getActivity(), i,
|
ActivityCompat.startActivityForResult(getActivity(), i,
|
||||||
REQUEST_WRITE_POST, options.toBundle());
|
REQUEST_WRITE_POST, options.toBundle());
|
||||||
return true;
|
return true;
|
||||||
|
case R.id.action_blog_share:
|
||||||
|
Intent i2 = new Intent(getActivity(), ShareActivity.class);
|
||||||
|
i2.setFlags(FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_SINGLE_TOP);
|
||||||
|
i2.putExtra(GROUP_ID, groupId.getBytes());
|
||||||
|
i2.putExtra(SHAREABLE, BLOG);
|
||||||
|
startActivityForResult(i2, REQUEST_SHARE, options.toBundle());
|
||||||
|
return true;
|
||||||
|
case R.id.action_blog_sharing_status:
|
||||||
|
Intent i3 =
|
||||||
|
new Intent(getActivity(), SharingStatusActivity.class);
|
||||||
|
i3.setFlags(FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_SINGLE_TOP);
|
||||||
|
i3.putExtra(GROUP_ID, groupId.getBytes());
|
||||||
|
startActivity(i3, options.toBundle());
|
||||||
|
return true;
|
||||||
default:
|
default:
|
||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onActivityResult(int request, int result, Intent data) {
|
||||||
|
super.onActivityResult(request, result, data);
|
||||||
|
|
||||||
|
if (request == REQUEST_SHARE && result == RESULT_OK) {
|
||||||
|
displaySnackbar(R.string.blogs_sharing_snackbar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getUniqueTag() {
|
public String getUniqueTag() {
|
||||||
return TAG;
|
return TAG;
|
||||||
@@ -202,6 +235,13 @@ public class BlogFragment extends BaseFragment implements BlogPostListener {
|
|||||||
loadData(true);
|
loadData(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void displaySnackbar(int stringId) {
|
||||||
|
Snackbar snackbar =
|
||||||
|
Snackbar.make(list, stringId, Snackbar.LENGTH_SHORT);
|
||||||
|
snackbar.getView().setBackgroundResource(R.color.briar_primary);
|
||||||
|
snackbar.show();
|
||||||
|
}
|
||||||
|
|
||||||
private void showDeleteDialog() {
|
private void showDeleteDialog() {
|
||||||
DialogInterface.OnClickListener okListener =
|
DialogInterface.OnClickListener okListener =
|
||||||
new DialogInterface.OnClickListener() {
|
new DialogInterface.OnClickListener() {
|
||||||
|
|||||||
@@ -33,6 +33,8 @@ import org.briarproject.android.ActivityComponent;
|
|||||||
import org.briarproject.android.BriarActivity;
|
import org.briarproject.android.BriarActivity;
|
||||||
import org.briarproject.android.api.AndroidNotificationManager;
|
import org.briarproject.android.api.AndroidNotificationManager;
|
||||||
import org.briarproject.android.controller.handler.UiResultHandler;
|
import org.briarproject.android.controller.handler.UiResultHandler;
|
||||||
|
import org.briarproject.android.sharing.ShareActivity;
|
||||||
|
import org.briarproject.android.sharing.SharingStatusActivity;
|
||||||
import org.briarproject.android.util.AndroidUtils;
|
import org.briarproject.android.util.AndroidUtils;
|
||||||
import org.briarproject.android.util.BriarRecyclerView;
|
import org.briarproject.android.util.BriarRecyclerView;
|
||||||
import org.briarproject.android.util.TrustIndicatorView;
|
import org.briarproject.android.util.TrustIndicatorView;
|
||||||
@@ -57,6 +59,8 @@ import static android.view.View.GONE;
|
|||||||
import static android.view.View.INVISIBLE;
|
import static android.view.View.INVISIBLE;
|
||||||
import static android.view.View.VISIBLE;
|
import static android.view.View.VISIBLE;
|
||||||
import static android.widget.Toast.LENGTH_SHORT;
|
import static android.widget.Toast.LENGTH_SHORT;
|
||||||
|
import static org.briarproject.android.sharing.ShareActivity.FORUM;
|
||||||
|
import static org.briarproject.android.sharing.ShareActivity.SHAREABLE;
|
||||||
|
|
||||||
public class ForumActivity extends BriarActivity implements
|
public class ForumActivity extends BriarActivity implements
|
||||||
ForumController.ForumPostListener {
|
ForumController.ForumPostListener {
|
||||||
@@ -220,15 +224,16 @@ public class ForumActivity extends BriarActivity implements
|
|||||||
showTextInput(null);
|
showTextInput(null);
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_forum_share:
|
case R.id.action_forum_share:
|
||||||
Intent i2 = new Intent(this, ShareForumActivity.class);
|
Intent i2 = new Intent(this, ShareActivity.class);
|
||||||
i2.setFlags(FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_SINGLE_TOP);
|
i2.setFlags(FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_SINGLE_TOP);
|
||||||
i2.putExtra(GROUP_ID, groupId.getBytes());
|
i2.putExtra(GROUP_ID, groupId.getBytes());
|
||||||
|
i2.putExtra(SHAREABLE, FORUM);
|
||||||
ActivityCompat
|
ActivityCompat
|
||||||
.startActivityForResult(this, i2, REQUEST_FORUM_SHARED,
|
.startActivityForResult(this, i2, REQUEST_FORUM_SHARED,
|
||||||
options.toBundle());
|
options.toBundle());
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_forum_sharing_status:
|
case R.id.action_forum_sharing_status:
|
||||||
Intent i3 = new Intent(this, ForumSharingStatusActivity.class);
|
Intent i3 = new Intent(this, SharingStatusActivity.class);
|
||||||
i3.setFlags(FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_SINGLE_TOP);
|
i3.setFlags(FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_SINGLE_TOP);
|
||||||
i3.putExtra(GROUP_ID, groupId.getBytes());
|
i3.putExtra(GROUP_ID, groupId.getBytes());
|
||||||
ActivityCompat.startActivity(this, i3, options.toBundle());
|
ActivityCompat.startActivity(this, i3, options.toBundle());
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package org.briarproject.android.forum;
|
package org.briarproject.android.sharing;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package org.briarproject.android.forum;
|
package org.briarproject.android.sharing;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
@@ -18,6 +18,7 @@ import org.briarproject.android.contact.BaseContactListAdapter;
|
|||||||
import org.briarproject.android.contact.ContactListItem;
|
import org.briarproject.android.contact.ContactListItem;
|
||||||
import org.briarproject.android.fragment.BaseFragment;
|
import org.briarproject.android.fragment.BaseFragment;
|
||||||
import org.briarproject.android.util.BriarRecyclerView;
|
import org.briarproject.android.util.BriarRecyclerView;
|
||||||
|
import org.briarproject.api.blogs.BlogSharingManager;
|
||||||
import org.briarproject.api.contact.Contact;
|
import org.briarproject.api.contact.Contact;
|
||||||
import org.briarproject.api.contact.ContactId;
|
import org.briarproject.api.contact.ContactId;
|
||||||
import org.briarproject.api.contact.ContactManager;
|
import org.briarproject.api.contact.ContactManager;
|
||||||
@@ -37,8 +38,11 @@ import javax.inject.Inject;
|
|||||||
|
|
||||||
import static java.util.logging.Level.INFO;
|
import static java.util.logging.Level.INFO;
|
||||||
import static java.util.logging.Level.WARNING;
|
import static java.util.logging.Level.WARNING;
|
||||||
import static org.briarproject.android.forum.ShareForumActivity.CONTACTS;
|
import static org.briarproject.android.sharing.ShareActivity.BLOG;
|
||||||
import static org.briarproject.android.forum.ShareForumActivity.getContactsFromIds;
|
import static org.briarproject.android.sharing.ShareActivity.CONTACTS;
|
||||||
|
import static org.briarproject.android.sharing.ShareActivity.FORUM;
|
||||||
|
import static org.briarproject.android.sharing.ShareActivity.SHAREABLE;
|
||||||
|
import static org.briarproject.android.sharing.ShareActivity.getContactsFromIds;
|
||||||
import static org.briarproject.api.sharing.SharingConstants.GROUP_ID;
|
import static org.briarproject.api.sharing.SharingConstants.GROUP_ID;
|
||||||
|
|
||||||
public class ContactSelectorFragment extends BaseFragment implements
|
public class ContactSelectorFragment extends BaseFragment implements
|
||||||
@@ -49,7 +53,7 @@ public class ContactSelectorFragment extends BaseFragment implements
|
|||||||
private static final Logger LOG =
|
private static final Logger LOG =
|
||||||
Logger.getLogger(ContactSelectorFragment.class.getName());
|
Logger.getLogger(ContactSelectorFragment.class.getName());
|
||||||
|
|
||||||
private ShareForumActivity shareForumActivity;
|
private ShareActivity shareActivity;
|
||||||
private Menu menu;
|
private Menu menu;
|
||||||
private BriarRecyclerView list;
|
private BriarRecyclerView list;
|
||||||
private ContactSelectorAdapter adapter;
|
private ContactSelectorAdapter adapter;
|
||||||
@@ -62,13 +66,18 @@ public class ContactSelectorFragment extends BaseFragment implements
|
|||||||
protected volatile IdentityManager identityManager;
|
protected volatile IdentityManager identityManager;
|
||||||
@Inject
|
@Inject
|
||||||
protected volatile ForumSharingManager forumSharingManager;
|
protected volatile ForumSharingManager forumSharingManager;
|
||||||
|
@Inject
|
||||||
|
volatile BlogSharingManager blogSharingManager;
|
||||||
|
|
||||||
protected volatile GroupId groupId;
|
private volatile GroupId groupId;
|
||||||
|
private volatile int shareable;
|
||||||
|
|
||||||
public static ContactSelectorFragment newInstance(GroupId groupId) {
|
public static ContactSelectorFragment newInstance(int shareable,
|
||||||
|
GroupId groupId) {
|
||||||
|
|
||||||
Bundle args = new Bundle();
|
Bundle args = new Bundle();
|
||||||
args.putByteArray(GROUP_ID, groupId.getBytes());
|
args.putByteArray(GROUP_ID, groupId.getBytes());
|
||||||
|
args.putInt(SHAREABLE, shareable);
|
||||||
ContactSelectorFragment fragment = new ContactSelectorFragment();
|
ContactSelectorFragment fragment = new ContactSelectorFragment();
|
||||||
fragment.setArguments(args);
|
fragment.setArguments(args);
|
||||||
return fragment;
|
return fragment;
|
||||||
@@ -83,7 +92,7 @@ public class ContactSelectorFragment extends BaseFragment implements
|
|||||||
public void onAttach(Context context) {
|
public void onAttach(Context context) {
|
||||||
super.onAttach(context);
|
super.onAttach(context);
|
||||||
try {
|
try {
|
||||||
shareForumActivity = (ShareForumActivity) context;
|
shareActivity = (ShareActivity) context;
|
||||||
} catch (ClassCastException e) {
|
} catch (ClassCastException e) {
|
||||||
throw new InstantiationError(
|
throw new InstantiationError(
|
||||||
"This fragment is only meant to be attached to the ShareForumActivity");
|
"This fragment is only meant to be attached to the ShareForumActivity");
|
||||||
@@ -97,6 +106,7 @@ public class ContactSelectorFragment extends BaseFragment implements
|
|||||||
setHasOptionsMenu(true);
|
setHasOptionsMenu(true);
|
||||||
groupId = new GroupId(getArguments().getByteArray(GROUP_ID));
|
groupId = new GroupId(getArguments().getByteArray(GROUP_ID));
|
||||||
if (groupId == null) throw new IllegalStateException("No GroupId");
|
if (groupId == null) throw new IllegalStateException("No GroupId");
|
||||||
|
shareable = getArguments().getInt(SHAREABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -121,7 +131,7 @@ public class ContactSelectorFragment extends BaseFragment implements
|
|||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
ArrayList<Integer> intContacts =
|
ArrayList<Integer> intContacts =
|
||||||
savedInstanceState.getIntegerArrayList(CONTACTS);
|
savedInstanceState.getIntegerArrayList(CONTACTS);
|
||||||
selectedContacts = ShareForumActivity.getContactsFromIntegers(
|
selectedContacts = ShareActivity.getContactsFromIntegers(
|
||||||
intContacts);
|
intContacts);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -160,11 +170,11 @@ public class ContactSelectorFragment extends BaseFragment implements
|
|||||||
// Handle presses on the action bar items
|
// Handle presses on the action bar items
|
||||||
switch (item.getItemId()) {
|
switch (item.getItemId()) {
|
||||||
case android.R.id.home:
|
case android.R.id.home:
|
||||||
shareForumActivity.onBackPressed();
|
shareActivity.onBackPressed();
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_share_forum:
|
case R.id.action_share_forum:
|
||||||
selectedContacts = adapter.getSelectedContactIds();
|
selectedContacts = adapter.getSelectedContactIds();
|
||||||
shareForumActivity.showMessageScreen(groupId, selectedContacts);
|
shareActivity.showMessageScreen(groupId, selectedContacts);
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
@@ -185,7 +195,7 @@ public class ContactSelectorFragment extends BaseFragment implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void loadContacts(final Collection<ContactId> selection) {
|
private void loadContacts(final Collection<ContactId> selection) {
|
||||||
shareForumActivity.runOnDbThread(new Runnable() {
|
listener.runOnDbThread(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
try {
|
try {
|
||||||
@@ -199,8 +209,14 @@ public class ContactSelectorFragment extends BaseFragment implements
|
|||||||
boolean selected = selection != null &&
|
boolean selected = selection != null &&
|
||||||
selection.contains(c.getId());
|
selection.contains(c.getId());
|
||||||
// do we have already some sharing with that contact?
|
// do we have already some sharing with that contact?
|
||||||
boolean disabled =
|
boolean disabled = true;
|
||||||
!forumSharingManager.canBeShared(groupId, c);
|
if (shareable == FORUM) {
|
||||||
|
disabled = !forumSharingManager
|
||||||
|
.canBeShared(groupId, c);
|
||||||
|
} else if (shareable == BLOG) {
|
||||||
|
disabled = !blogSharingManager
|
||||||
|
.canBeShared(groupId, c);
|
||||||
|
}
|
||||||
contacts.add(new SelectableContactListItem(c,
|
contacts.add(new SelectableContactListItem(c,
|
||||||
localAuthor, groupId, selected, disabled));
|
localAuthor, groupId, selected, disabled));
|
||||||
}
|
}
|
||||||
@@ -218,7 +234,7 @@ public class ContactSelectorFragment extends BaseFragment implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void displayContacts(final List<ContactListItem> contacts) {
|
private void displayContacts(final List<ContactListItem> contacts) {
|
||||||
shareForumActivity.runOnUiThread(new Runnable() {
|
shareActivity.runOnUiThread(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
if (!contacts.isEmpty()) adapter.addAll(contacts);
|
if (!contacts.isEmpty()) adapter.addAll(contacts);
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package org.briarproject.android.forum;
|
package org.briarproject.android.sharing;
|
||||||
|
|
||||||
import org.briarproject.android.contact.ContactListItem;
|
import org.briarproject.android.contact.ContactListItem;
|
||||||
import org.briarproject.android.contact.ConversationItem;
|
import org.briarproject.android.contact.ConversationItem;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package org.briarproject.android.forum;
|
package org.briarproject.android.sharing;
|
||||||
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
@@ -15,11 +15,16 @@ import java.util.ArrayList;
|
|||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
// TODO extend the BriarFragmentActivity ?
|
public class ShareActivity extends BriarActivity implements
|
||||||
public class ShareForumActivity extends BriarActivity implements
|
|
||||||
BaseFragment.BaseFragmentListener {
|
BaseFragment.BaseFragmentListener {
|
||||||
|
|
||||||
public final static String CONTACTS = "contacts";
|
public final static String SHAREABLE = "shareable";
|
||||||
|
public final static int FORUM = 1;
|
||||||
|
public final static int BLOG = 2;
|
||||||
|
|
||||||
|
final static String CONTACTS = "contacts";
|
||||||
|
|
||||||
|
private int shareable;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
@@ -32,11 +37,14 @@ public class ShareForumActivity extends BriarActivity implements
|
|||||||
if (b == null) throw new IllegalStateException("No GroupId");
|
if (b == null) throw new IllegalStateException("No GroupId");
|
||||||
GroupId groupId = new GroupId(b);
|
GroupId groupId = new GroupId(b);
|
||||||
|
|
||||||
|
shareable = i.getIntExtra(SHAREABLE, 0);
|
||||||
|
if (shareable == 0) throw new IllegalStateException("No Shareable");
|
||||||
|
|
||||||
if (savedInstanceState == null) {
|
if (savedInstanceState == null) {
|
||||||
ContactSelectorFragment contactSelectorFragment =
|
ContactSelectorFragment contactSelectorFragment =
|
||||||
ContactSelectorFragment.newInstance(groupId);
|
ContactSelectorFragment.newInstance(shareable, groupId);
|
||||||
getSupportFragmentManager().beginTransaction()
|
getSupportFragmentManager().beginTransaction()
|
||||||
.add(R.id.shareForumContainer, contactSelectorFragment)
|
.add(R.id.shareContainer, contactSelectorFragment)
|
||||||
.commit();
|
.commit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -46,24 +54,24 @@ public class ShareForumActivity extends BriarActivity implements
|
|||||||
component.inject(this);
|
component.inject(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void showMessageScreen(GroupId groupId,
|
void showMessageScreen(GroupId groupId,
|
||||||
Collection<ContactId> contacts) {
|
Collection<ContactId> contacts) {
|
||||||
|
|
||||||
ShareForumMessageFragment messageFragment =
|
ShareMessageFragment messageFragment =
|
||||||
ShareForumMessageFragment.newInstance(groupId, contacts);
|
ShareMessageFragment.newInstance(shareable, groupId, contacts);
|
||||||
|
|
||||||
getSupportFragmentManager().beginTransaction()
|
getSupportFragmentManager().beginTransaction()
|
||||||
.setCustomAnimations(android.R.anim.fade_in,
|
.setCustomAnimations(android.R.anim.fade_in,
|
||||||
android.R.anim.fade_out,
|
android.R.anim.fade_out,
|
||||||
android.R.anim.slide_in_left,
|
android.R.anim.slide_in_left,
|
||||||
android.R.anim.slide_out_right)
|
android.R.anim.slide_out_right)
|
||||||
.replace(R.id.shareForumContainer, messageFragment,
|
.replace(R.id.shareContainer, messageFragment,
|
||||||
ContactSelectorFragment.TAG)
|
ContactSelectorFragment.TAG)
|
||||||
.addToBackStack(null)
|
.addToBackStack(null)
|
||||||
.commit();
|
.commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ArrayList<Integer> getContactsFromIds(
|
static ArrayList<Integer> getContactsFromIds(
|
||||||
Collection<ContactId> contacts) {
|
Collection<ContactId> contacts) {
|
||||||
|
|
||||||
// transform ContactIds to Integers so they can be added to a bundle
|
// transform ContactIds to Integers so they can be added to a bundle
|
||||||
@@ -74,13 +82,13 @@ public class ShareForumActivity extends BriarActivity implements
|
|||||||
return intContacts;
|
return intContacts;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sharingSuccessful(View v) {
|
void sharingSuccessful(View v) {
|
||||||
setResult(RESULT_OK);
|
setResult(RESULT_OK);
|
||||||
hideSoftKeyboard(v);
|
hideSoftKeyboard(v);
|
||||||
supportFinishAfterTransition();
|
supportFinishAfterTransition();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static Collection<ContactId> getContactsFromIntegers(
|
static Collection<ContactId> getContactsFromIntegers(
|
||||||
ArrayList<Integer> intContacts) {
|
ArrayList<Integer> intContacts) {
|
||||||
|
|
||||||
// turn contact integers from a bundle back to ContactIds
|
// turn contact integers from a bundle back to ContactIds
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package org.briarproject.android.forum;
|
package org.briarproject.android.sharing;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
@@ -14,6 +14,8 @@ import android.widget.Toast;
|
|||||||
import org.briarproject.R;
|
import org.briarproject.R;
|
||||||
import org.briarproject.android.ActivityComponent;
|
import org.briarproject.android.ActivityComponent;
|
||||||
import org.briarproject.android.fragment.BaseFragment;
|
import org.briarproject.android.fragment.BaseFragment;
|
||||||
|
import org.briarproject.api.blogs.BlogManager;
|
||||||
|
import org.briarproject.api.blogs.BlogSharingManager;
|
||||||
import org.briarproject.api.contact.ContactId;
|
import org.briarproject.api.contact.ContactId;
|
||||||
import org.briarproject.api.db.DbException;
|
import org.briarproject.api.db.DbException;
|
||||||
import org.briarproject.api.forum.ForumSharingManager;
|
import org.briarproject.api.forum.ForumSharingManager;
|
||||||
@@ -27,31 +29,40 @@ import javax.inject.Inject;
|
|||||||
|
|
||||||
import static android.widget.Toast.LENGTH_SHORT;
|
import static android.widget.Toast.LENGTH_SHORT;
|
||||||
import static java.util.logging.Level.WARNING;
|
import static java.util.logging.Level.WARNING;
|
||||||
import static org.briarproject.android.forum.ShareForumActivity.CONTACTS;
|
import static org.briarproject.android.sharing.ShareActivity.BLOG;
|
||||||
import static org.briarproject.android.forum.ShareForumActivity.getContactsFromIds;
|
import static org.briarproject.android.sharing.ShareActivity.CONTACTS;
|
||||||
|
import static org.briarproject.android.sharing.ShareActivity.FORUM;
|
||||||
|
import static org.briarproject.android.sharing.ShareActivity.SHAREABLE;
|
||||||
|
import static org.briarproject.android.sharing.ShareActivity.getContactsFromIds;
|
||||||
import static org.briarproject.api.sharing.SharingConstants.GROUP_ID;
|
import static org.briarproject.api.sharing.SharingConstants.GROUP_ID;
|
||||||
|
|
||||||
public class ShareForumMessageFragment extends BaseFragment {
|
public class ShareMessageFragment extends BaseFragment {
|
||||||
|
|
||||||
public final static String TAG = "IntroductionMessageFragment";
|
public final static String TAG = "IntroductionMessageFragment";
|
||||||
|
|
||||||
private static final Logger LOG =
|
private static final Logger LOG =
|
||||||
Logger.getLogger(ShareForumMessageFragment.class.getName());
|
Logger.getLogger(ShareMessageFragment.class.getName());
|
||||||
|
|
||||||
private ShareForumActivity shareForumActivity;
|
private ShareActivity shareActivity;
|
||||||
private ViewHolder ui;
|
private ViewHolder ui;
|
||||||
|
|
||||||
// Fields that are accessed from background threads must be volatile
|
// Fields that are accessed from background threads must be volatile
|
||||||
@Inject
|
@Inject
|
||||||
protected volatile ForumSharingManager forumSharingManager;
|
protected volatile ForumSharingManager forumSharingManager;
|
||||||
|
@Inject
|
||||||
|
protected volatile BlogSharingManager blogSharingManager;
|
||||||
private volatile GroupId groupId;
|
private volatile GroupId groupId;
|
||||||
|
private volatile int shareable;
|
||||||
private volatile Collection<ContactId> contacts;
|
private volatile Collection<ContactId> contacts;
|
||||||
|
|
||||||
public static ShareForumMessageFragment newInstance(GroupId groupId, Collection<ContactId> contacts) {
|
public static ShareMessageFragment newInstance(int shareable,
|
||||||
|
GroupId groupId, Collection<ContactId> contacts) {
|
||||||
|
|
||||||
Bundle args = new Bundle();
|
Bundle args = new Bundle();
|
||||||
args.putByteArray(GROUP_ID, groupId.getBytes());
|
args.putByteArray(GROUP_ID, groupId.getBytes());
|
||||||
|
args.putInt(SHAREABLE, shareable);
|
||||||
args.putIntegerArrayList(CONTACTS, getContactsFromIds(contacts));
|
args.putIntegerArrayList(CONTACTS, getContactsFromIds(contacts));
|
||||||
ShareForumMessageFragment fragment = new ShareForumMessageFragment();
|
ShareMessageFragment fragment = new ShareMessageFragment();
|
||||||
fragment.setArguments(args);
|
fragment.setArguments(args);
|
||||||
return fragment;
|
return fragment;
|
||||||
}
|
}
|
||||||
@@ -60,7 +71,7 @@ public class ShareForumMessageFragment extends BaseFragment {
|
|||||||
public void onAttach(Context context) {
|
public void onAttach(Context context) {
|
||||||
super.onAttach(context);
|
super.onAttach(context);
|
||||||
try {
|
try {
|
||||||
shareForumActivity = (ShareForumActivity) context;
|
shareActivity = (ShareActivity) context;
|
||||||
} catch (ClassCastException e) {
|
} catch (ClassCastException e) {
|
||||||
throw new InstantiationError(
|
throw new InstantiationError(
|
||||||
"This fragment is only meant to be attached to the ShareForumActivity");
|
"This fragment is only meant to be attached to the ShareForumActivity");
|
||||||
@@ -71,17 +82,31 @@ public class ShareForumMessageFragment extends BaseFragment {
|
|||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||||
Bundle savedInstanceState) {
|
Bundle savedInstanceState) {
|
||||||
|
|
||||||
// change toolbar text
|
|
||||||
ActionBar actionBar = shareForumActivity.getSupportActionBar();
|
|
||||||
if (actionBar != null) {
|
|
||||||
actionBar.setTitle(R.string.forum_share_button);
|
|
||||||
}
|
|
||||||
|
|
||||||
// allow for home button to act as back button
|
// allow for home button to act as back button
|
||||||
setHasOptionsMenu(true);
|
setHasOptionsMenu(true);
|
||||||
|
|
||||||
|
// get groupID, shareable type and contactIDs from fragment arguments
|
||||||
|
groupId = new GroupId(getArguments().getByteArray(GROUP_ID));
|
||||||
|
shareable = getArguments().getInt(SHAREABLE);
|
||||||
|
ArrayList<Integer> intContacts =
|
||||||
|
getArguments().getIntegerArrayList(CONTACTS);
|
||||||
|
if (intContacts == null) throw new IllegalArgumentException();
|
||||||
|
contacts = ShareActivity.getContactsFromIntegers(intContacts);
|
||||||
|
|
||||||
|
// change toolbar text
|
||||||
|
ActionBar actionBar = shareActivity.getSupportActionBar();
|
||||||
|
if (actionBar != null) {
|
||||||
|
if (shareable == FORUM) {
|
||||||
|
actionBar.setTitle(R.string.forum_share_button);
|
||||||
|
} else if (shareable == BLOG) {
|
||||||
|
actionBar.setTitle(R.string.blogs_sharing_button);
|
||||||
|
} else {
|
||||||
|
throw new IllegalArgumentException("Invalid Shareable Type!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// inflate view
|
// inflate view
|
||||||
View v = inflater.inflate(R.layout.share_forum_message, container,
|
View v = inflater.inflate(R.layout.fragment_share_message, container,
|
||||||
false);
|
false);
|
||||||
ui = new ViewHolder(v);
|
ui = new ViewHolder(v);
|
||||||
ui.button.setOnClickListener(new View.OnClickListener() {
|
ui.button.setOnClickListener(new View.OnClickListener() {
|
||||||
@@ -90,13 +115,9 @@ public class ShareForumMessageFragment extends BaseFragment {
|
|||||||
onButtonClick();
|
onButtonClick();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
if (shareable == BLOG) {
|
||||||
// get groupID and contactIDs from fragment arguments
|
ui.button.setText(getString(R.string.blogs_sharing_button));
|
||||||
groupId = new GroupId(getArguments().getByteArray(GROUP_ID));
|
}
|
||||||
ArrayList<Integer> intContacts =
|
|
||||||
getArguments().getIntegerArrayList(CONTACTS);
|
|
||||||
if (intContacts == null) throw new IllegalArgumentException();
|
|
||||||
contacts = ShareForumActivity.getContactsFromIntegers(intContacts);
|
|
||||||
|
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
@@ -105,7 +126,7 @@ public class ShareForumMessageFragment extends BaseFragment {
|
|||||||
public boolean onOptionsItemSelected(final MenuItem item) {
|
public boolean onOptionsItemSelected(final MenuItem item) {
|
||||||
switch (item.getItemId()) {
|
switch (item.getItemId()) {
|
||||||
case android.R.id.home:
|
case android.R.id.home:
|
||||||
shareForumActivity.onBackPressed();
|
shareActivity.onBackPressed();
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
@@ -122,7 +143,7 @@ public class ShareForumMessageFragment extends BaseFragment {
|
|||||||
component.inject(this);
|
component.inject(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onButtonClick() {
|
private void onButtonClick() {
|
||||||
// disable button to prevent accidental double invitations
|
// disable button to prevent accidental double invitations
|
||||||
ui.button.setEnabled(false);
|
ui.button.setEnabled(false);
|
||||||
|
|
||||||
@@ -130,17 +151,21 @@ public class ShareForumMessageFragment extends BaseFragment {
|
|||||||
shareForum(msg);
|
shareForum(msg);
|
||||||
|
|
||||||
// don't wait for the introduction to be made before finishing activity
|
// don't wait for the introduction to be made before finishing activity
|
||||||
shareForumActivity.sharingSuccessful(ui.message);
|
shareActivity.sharingSuccessful(ui.message);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void shareForum(final String msg) {
|
private void shareForum(final String msg) {
|
||||||
shareForumActivity.runOnDbThread(new Runnable() {
|
listener.runOnDbThread(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
try {
|
try {
|
||||||
for (ContactId c : contacts) {
|
for (ContactId c : contacts) {
|
||||||
forumSharingManager.sendInvitation(groupId, c,
|
if (shareable == FORUM) {
|
||||||
msg);
|
forumSharingManager.sendInvitation(groupId, c,
|
||||||
|
msg);
|
||||||
|
} else if (shareable == BLOG) {
|
||||||
|
blogSharingManager.sendInvitation(groupId, c, msg);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch (DbException e) {
|
} catch (DbException e) {
|
||||||
sharingError();
|
sharingError();
|
||||||
@@ -152,11 +177,12 @@ public class ShareForumMessageFragment extends BaseFragment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void sharingError() {
|
private void sharingError() {
|
||||||
shareForumActivity.runOnUiThread(new Runnable() {
|
shareActivity.runOnUiThread(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
Toast.makeText(shareForumActivity,
|
int res = R.string.forum_share_error;
|
||||||
R.string.introduction_error, LENGTH_SHORT).show();
|
if (shareable == BLOG) res = R.string.blogs_sharing_error;
|
||||||
|
Toast.makeText(shareActivity, res, LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package org.briarproject.android.forum;
|
package org.briarproject.android.sharing;
|
||||||
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
@@ -26,11 +26,11 @@ import javax.inject.Inject;
|
|||||||
|
|
||||||
import static java.util.logging.Level.WARNING;
|
import static java.util.logging.Level.WARNING;
|
||||||
|
|
||||||
public class ForumSharingStatusActivity extends BriarActivity {
|
public class SharingStatusActivity extends BriarActivity {
|
||||||
|
|
||||||
private GroupId groupId;
|
private GroupId groupId;
|
||||||
private BriarRecyclerView sharedByList, sharedWithList;
|
private BriarRecyclerView sharedByList, sharedWithList;
|
||||||
private ForumSharingStatusAdapter sharedByAdapter, sharedWithAdapter;
|
private SharingStatusAdapter sharedByAdapter, sharedWithAdapter;
|
||||||
|
|
||||||
// Fields that are accessed from background threads must be volatile
|
// Fields that are accessed from background threads must be volatile
|
||||||
@Inject
|
@Inject
|
||||||
@@ -53,13 +53,13 @@ public class ForumSharingStatusActivity extends BriarActivity {
|
|||||||
groupId = new GroupId(b);
|
groupId = new GroupId(b);
|
||||||
|
|
||||||
sharedByList = (BriarRecyclerView) findViewById(R.id.sharedByView);
|
sharedByList = (BriarRecyclerView) findViewById(R.id.sharedByView);
|
||||||
sharedByAdapter = new ForumSharingStatusAdapter(this);
|
sharedByAdapter = new SharingStatusAdapter(this);
|
||||||
sharedByList.setLayoutManager(new LinearLayoutManager(this));
|
sharedByList.setLayoutManager(new LinearLayoutManager(this));
|
||||||
sharedByList.setAdapter(sharedByAdapter);
|
sharedByList.setAdapter(sharedByAdapter);
|
||||||
sharedByList.setEmptyText(getString(R.string.nobody));
|
sharedByList.setEmptyText(getString(R.string.nobody));
|
||||||
|
|
||||||
sharedWithList = (BriarRecyclerView) findViewById(R.id.sharedWithView);
|
sharedWithList = (BriarRecyclerView) findViewById(R.id.sharedWithView);
|
||||||
sharedWithAdapter = new ForumSharingStatusAdapter(this);
|
sharedWithAdapter = new SharingStatusAdapter(this);
|
||||||
sharedWithList.setLayoutManager(new LinearLayoutManager(this));
|
sharedWithList.setLayoutManager(new LinearLayoutManager(this));
|
||||||
sharedWithList.setAdapter(sharedWithAdapter);
|
sharedWithList.setAdapter(sharedWithAdapter);
|
||||||
sharedWithList.setEmptyText(getString(R.string.nobody));
|
sharedWithList.setEmptyText(getString(R.string.nobody));
|
||||||
@@ -1,22 +1,18 @@
|
|||||||
package org.briarproject.android.forum;
|
package org.briarproject.android.sharing;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.support.v4.content.ContextCompat;
|
|
||||||
import android.text.format.DateUtils;
|
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.ImageView;
|
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
import org.briarproject.R;
|
import org.briarproject.R;
|
||||||
import org.briarproject.android.contact.BaseContactListAdapter;
|
import org.briarproject.android.contact.BaseContactListAdapter;
|
||||||
import org.briarproject.android.contact.ContactListItem;
|
import org.briarproject.android.contact.ContactListItem;
|
||||||
|
|
||||||
public class ForumSharingStatusAdapter
|
class SharingStatusAdapter
|
||||||
extends BaseContactListAdapter<BaseContactListAdapter.BaseContactHolder> {
|
extends BaseContactListAdapter<BaseContactListAdapter.BaseContactHolder> {
|
||||||
|
|
||||||
public ForumSharingStatusAdapter(Context context) {
|
SharingStatusAdapter(Context context) {
|
||||||
super(context, null);
|
super(context, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -12,6 +12,7 @@ import org.briarproject.api.clients.ClientHelper;
|
|||||||
import org.briarproject.api.clients.MessageQueueManager;
|
import org.briarproject.api.clients.MessageQueueManager;
|
||||||
import org.briarproject.api.clients.PrivateGroupFactory;
|
import org.briarproject.api.clients.PrivateGroupFactory;
|
||||||
import org.briarproject.api.clients.SessionId;
|
import org.briarproject.api.clients.SessionId;
|
||||||
|
import org.briarproject.api.contact.Contact;
|
||||||
import org.briarproject.api.contact.ContactId;
|
import org.briarproject.api.contact.ContactId;
|
||||||
import org.briarproject.api.data.BdfDictionary;
|
import org.briarproject.api.data.BdfDictionary;
|
||||||
import org.briarproject.api.data.BdfList;
|
import org.briarproject.api.data.BdfList;
|
||||||
@@ -47,6 +48,8 @@ class BlogSharingManagerImpl extends
|
|||||||
"bee438b5de0b3a685badc4e49d76e72d"
|
"bee438b5de0b3a685badc4e49d76e72d"
|
||||||
+ "21e01c4b569a775112756bdae267a028"));
|
+ "21e01c4b569a775112756bdae267a028"));
|
||||||
|
|
||||||
|
private final BlogManager blogManager;
|
||||||
|
|
||||||
private final SFactory sFactory;
|
private final SFactory sFactory;
|
||||||
private final IFactory iFactory;
|
private final IFactory iFactory;
|
||||||
private final ISFactory isFactory;
|
private final ISFactory isFactory;
|
||||||
@@ -64,6 +67,7 @@ class BlogSharingManagerImpl extends
|
|||||||
super(db, messageQueueManager, clientHelper, metadataParser,
|
super(db, messageQueueManager, clientHelper, metadataParser,
|
||||||
metadataEncoder, random, privateGroupFactory, clock);
|
metadataEncoder, random, privateGroupFactory, clock);
|
||||||
|
|
||||||
|
this.blogManager = blogManager;
|
||||||
sFactory = new SFactory(authorFactory, blogFactory, blogManager);
|
sFactory = new SFactory(authorFactory, blogFactory, blogManager);
|
||||||
iFactory = new IFactory();
|
iFactory = new IFactory();
|
||||||
isFactory = new ISFactory();
|
isFactory = new ISFactory();
|
||||||
@@ -77,6 +81,13 @@ class BlogSharingManagerImpl extends
|
|||||||
return CLIENT_ID;
|
return CLIENT_ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canBeShared(GroupId g, Contact c) throws DbException {
|
||||||
|
Blog b = blogManager.getPersonalBlog(c.getAuthor());
|
||||||
|
if (b.getId().equals(g)) return false;
|
||||||
|
return super.canBeShared(g, c);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected BlogInvitationRequest createInvitationRequest(MessageId id,
|
protected BlogInvitationRequest createInvitationRequest(MessageId id,
|
||||||
BlogInvitation msg, ContactId contactId, boolean available,
|
BlogInvitation msg, ContactId contactId, boolean available,
|
||||||
|
|||||||
@@ -27,6 +27,8 @@ public class SharingModule {
|
|||||||
ForumSharingValidator forumSharingValidator;
|
ForumSharingValidator forumSharingValidator;
|
||||||
@Inject
|
@Inject
|
||||||
ForumSharingManager forumSharingManager;
|
ForumSharingManager forumSharingManager;
|
||||||
|
@Inject
|
||||||
|
BlogSharingManager blogSharingManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
|
|||||||
Reference in New Issue
Block a user