Address review comments

This commit is contained in:
Torsten Grote
2016-10-28 15:15:36 -02:00
parent 7b627bb427
commit 2cc650d85f
39 changed files with 209 additions and 179 deletions

View File

@@ -123,7 +123,7 @@
</activity> </activity>
<activity <activity
android:name=".android.privategroup.invitation.GroupInvitationsActivity" android:name=".android.privategroup.invitation.GroupInvitationActivity"
android:label="@string/groups_invitations_title" android:label="@string/groups_invitations_title"
android:parentActivityName=".android.NavDrawerActivity"> android:parentActivityName=".android.NavDrawerActivity">
<meta-data <meta-data
@@ -133,7 +133,7 @@
</activity> </activity>
<activity <activity
android:name=".android.sharing.ForumInvitationsActivity" android:name=".android.sharing.ForumInvitationActivity"
android:label="@string/forum_invitations_title" android:label="@string/forum_invitations_title"
android:parentActivityName=".android.NavDrawerActivity"> android:parentActivityName=".android.NavDrawerActivity">
<meta-data <meta-data
@@ -143,7 +143,7 @@
</activity> </activity>
<activity <activity
android:name=".android.sharing.BlogInvitationsActivity" android:name=".android.sharing.BlogInvitationActivity"
android:label="@string/blogs_sharing_invitations_title" android:label="@string/blogs_sharing_invitations_title"
android:parentActivityName=".android.contact.ConversationActivity"> android:parentActivityName=".android.contact.ConversationActivity">
<meta-data <meta-data
@@ -175,7 +175,7 @@
</activity> </activity>
<activity <activity
android:name=".android.sharing.ForumShareActivity" android:name=".android.sharing.ShareForumActivity"
android:label="@string/activity_share_toolbar_header" android:label="@string/activity_share_toolbar_header"
android:parentActivityName=".android.forum.ForumActivity" android:parentActivityName=".android.forum.ForumActivity"
android:windowSoftInputMode="adjustResize|stateHidden"> android:windowSoftInputMode="adjustResize|stateHidden">
@@ -186,7 +186,7 @@
</activity> </activity>
<activity <activity
android:name=".android.sharing.BlogShareActivity" android:name=".android.sharing.ShareBlogActivity"
android:label="@string/activity_share_toolbar_header" android:label="@string/activity_share_toolbar_header"
android:parentActivityName=".android.blogs.BlogActivity" android:parentActivityName=".android.blogs.BlogActivity"
android:windowSoftInputMode="adjustResize|stateHidden"> android:windowSoftInputMode="adjustResize|stateHidden">

View File

@@ -33,16 +33,16 @@ import org.briarproject.android.privategroup.creation.CreateGroupFragment;
import org.briarproject.android.privategroup.conversation.GroupActivity; import org.briarproject.android.privategroup.conversation.GroupActivity;
import org.briarproject.android.privategroup.creation.CreateGroupMessageFragment; import org.briarproject.android.privategroup.creation.CreateGroupMessageFragment;
import org.briarproject.android.privategroup.list.GroupListFragment; import org.briarproject.android.privategroup.list.GroupListFragment;
import org.briarproject.android.privategroup.invitation.GroupInvitationsActivity; import org.briarproject.android.privategroup.invitation.GroupInvitationActivity;
import org.briarproject.android.sharing.BlogShareActivity; import org.briarproject.android.sharing.ShareBlogActivity;
import org.briarproject.android.sharing.BlogSharingStatusActivity; import org.briarproject.android.sharing.BlogSharingStatusActivity;
import org.briarproject.android.sharing.ContactSelectorFragment; import org.briarproject.android.sharing.ContactSelectorFragment;
import org.briarproject.android.sharing.BlogInvitationsActivity; import org.briarproject.android.sharing.BlogInvitationActivity;
import org.briarproject.android.sharing.ForumInvitationsActivity; import org.briarproject.android.sharing.ForumInvitationActivity;
import org.briarproject.android.sharing.ForumShareMessageFragment; import org.briarproject.android.sharing.ShareForumActivity;
import org.briarproject.android.sharing.ShareForumMessageFragment;
import org.briarproject.android.sharing.ForumSharingStatusActivity; import org.briarproject.android.sharing.ForumSharingStatusActivity;
import org.briarproject.android.sharing.BlogShareMessageFragment; import org.briarproject.android.sharing.ShareBlogMessageFragment;
import org.briarproject.android.sharing.ForumShareActivity;
import org.thoughtcrime.securesms.components.emoji.EmojiProvider; import org.thoughtcrime.securesms.components.emoji.EmojiProvider;
import org.thoughtcrime.securesms.components.emoji.RecentEmojiPageModel; import org.thoughtcrime.securesms.components.emoji.RecentEmojiPageModel;
@@ -73,19 +73,19 @@ public interface ActivityComponent {
void inject(ConversationActivity activity); void inject(ConversationActivity activity);
void inject(ForumInvitationsActivity activity); void inject(ForumInvitationActivity activity);
void inject(BlogInvitationsActivity activity); void inject(BlogInvitationActivity activity);
void inject(CreateGroupActivity activity); void inject(CreateGroupActivity activity);
void inject(GroupActivity activity); void inject(GroupActivity activity);
void inject(GroupInvitationsActivity activity); void inject(GroupInvitationActivity activity);
void inject(CreateForumActivity activity); void inject(CreateForumActivity activity);
void inject(ForumShareActivity activity); void inject(ShareForumActivity activity);
void inject(BlogShareActivity activity); void inject(ShareBlogActivity activity);
void inject(ForumSharingStatusActivity activity); void inject(ForumSharingStatusActivity activity);
@@ -133,8 +133,8 @@ 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(ForumShareMessageFragment fragment); void inject(ShareForumMessageFragment fragment);
void inject(BlogShareMessageFragment fragment); void inject(ShareBlogMessageFragment fragment);
void inject(IntroductionMessageFragment fragment); void inject(IntroductionMessageFragment fragment);
} }

View File

@@ -25,14 +25,14 @@ import org.briarproject.android.privategroup.conversation.GroupController;
import org.briarproject.android.privategroup.conversation.GroupControllerImpl; import org.briarproject.android.privategroup.conversation.GroupControllerImpl;
import org.briarproject.android.privategroup.creation.CreateGroupController; import org.briarproject.android.privategroup.creation.CreateGroupController;
import org.briarproject.android.privategroup.creation.CreateGroupControllerImpl; import org.briarproject.android.privategroup.creation.CreateGroupControllerImpl;
import org.briarproject.android.privategroup.invitation.GroupInvitationsController; import org.briarproject.android.privategroup.invitation.GroupInvitationController;
import org.briarproject.android.privategroup.invitation.GroupInvitationsControllerImpl; import org.briarproject.android.privategroup.invitation.GroupInvitationControllerImpl;
import org.briarproject.android.privategroup.list.GroupListController; import org.briarproject.android.privategroup.list.GroupListController;
import org.briarproject.android.privategroup.list.GroupListControllerImpl; import org.briarproject.android.privategroup.list.GroupListControllerImpl;
import org.briarproject.android.sharing.BlogInvitationsController; import org.briarproject.android.sharing.BlogInvitationController;
import org.briarproject.android.sharing.BlogInvitationsControllerImpl; import org.briarproject.android.sharing.BlogInvitationControllerImpl;
import org.briarproject.android.sharing.ForumInvitationsController; import org.briarproject.android.sharing.ForumInvitationController;
import org.briarproject.android.sharing.ForumInvitationsControllerImpl; import org.briarproject.android.sharing.ForumInvitationControllerImpl;
import dagger.Module; import dagger.Module;
import dagger.Provides; import dagger.Provides;
@@ -125,9 +125,9 @@ public class ActivityModule {
@ActivityScope @ActivityScope
@Provides @Provides
protected GroupInvitationsController provideInvitationsGroupController( protected GroupInvitationController provideInvitationGroupController(
GroupInvitationsControllerImpl invitationsGroupController) { GroupInvitationControllerImpl groupInvitationController) {
return invitationsGroupController; return groupInvitationController;
} }
@ActivityScope @ActivityScope
@@ -140,18 +140,18 @@ public class ActivityModule {
@ActivityScope @ActivityScope
@Provides @Provides
protected ForumInvitationsController provideInvitationsForumController( protected ForumInvitationController provideInvitationForumController(
ForumInvitationsControllerImpl invitationsForumController) { ForumInvitationControllerImpl forumInvitationController) {
activity.addLifecycleController(invitationsForumController); activity.addLifecycleController(forumInvitationController);
return invitationsForumController; return forumInvitationController;
} }
@ActivityScope @ActivityScope
@Provides @Provides
protected BlogInvitationsController provideInvitationsBlogController( protected BlogInvitationController provideInvitationBlogController(
BlogInvitationsControllerImpl invitationsBlogController) { BlogInvitationControllerImpl blogInvitationController) {
activity.addLifecycleController(invitationsBlogController); activity.addLifecycleController(blogInvitationController);
return invitationsBlogController; return blogInvitationController;
} }
@ActivityScope @ActivityScope

View File

@@ -23,7 +23,7 @@ import org.briarproject.android.blogs.BaseController.OnBlogPostAddedListener;
import org.briarproject.android.blogs.BlogPostAdapter.OnBlogPostClickListener; import org.briarproject.android.blogs.BlogPostAdapter.OnBlogPostClickListener;
import org.briarproject.android.controller.handler.UiResultExceptionHandler; import org.briarproject.android.controller.handler.UiResultExceptionHandler;
import org.briarproject.android.fragment.BaseFragment; import org.briarproject.android.fragment.BaseFragment;
import org.briarproject.android.sharing.BlogShareActivity; import org.briarproject.android.sharing.ShareBlogActivity;
import org.briarproject.android.sharing.BlogSharingStatusActivity; import org.briarproject.android.sharing.BlogSharingStatusActivity;
import org.briarproject.android.view.BriarRecyclerView; import org.briarproject.android.view.BriarRecyclerView;
import org.briarproject.api.blogs.BlogPostHeader; import org.briarproject.api.blogs.BlogPostHeader;
@@ -157,7 +157,7 @@ public class BlogFragment extends BaseFragment implements
options.toBundle()); options.toBundle());
return true; return true;
case R.id.action_blog_share: case R.id.action_blog_share:
Intent i2 = new Intent(getActivity(), BlogShareActivity.class); Intent i2 = new Intent(getActivity(), ShareBlogActivity.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());
startActivityForResult(i2, REQUEST_SHARE, options.toBundle()); startActivityForResult(i2, REQUEST_SHARE, options.toBundle());

View File

@@ -6,7 +6,9 @@ import org.briarproject.api.identity.LocalAuthor;
import org.briarproject.api.sync.GroupId; import org.briarproject.api.sync.GroupId;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
// This class is NOT thread-safe import javax.annotation.concurrent.NotThreadSafe;
@NotThreadSafe
public class ContactListItem { public class ContactListItem {
private final Contact contact; private final Contact contact;
@@ -32,8 +34,7 @@ public class ContactListItem {
empty = empty && message == null; empty = empty && message == null;
if (message != null) { if (message != null) {
if (message.getTime() > timestamp) timestamp = message.getTime(); if (message.getTime() > timestamp) timestamp = message.getTime();
if (message instanceof ConversationInItem && if (!message.isRead())
!((ConversationInItem) message).isRead())
unread++; unread++;
} }
} }

View File

@@ -497,9 +497,9 @@ public class ConversationActivity extends BriarActivity
private void markMessagesRead() { private void markMessagesRead() {
Map<MessageId, GroupId> unread = new HashMap<>(); Map<MessageId, GroupId> unread = new HashMap<>();
SparseArray<ConversationInItem> list = adapter.getIncomingMessages(); SparseArray<ConversationItem> list = adapter.getIncomingMessages();
for (int i = 0; i < list.size(); i++) { for (int i = 0; i < list.size(); i++) {
ConversationInItem item = list.valueAt(i); ConversationItem item = list.valueAt(i);
if (!item.isRead()) if (!item.isRead())
unread.put(item.getId(), item.getGroupId()); unread.put(item.getId(), item.getGroupId());
} }

View File

@@ -27,19 +27,7 @@ class ConversationAdapter
@Override @Override
public int getItemViewType(int position) { public int getItemViewType(int position) {
ConversationItem item = items.get(position); ConversationItem item = items.get(position);
if (item instanceof ConversationRequestItem) { return item.getLayout();
return R.layout.list_item_conversation_request;
} else if (item instanceof ConversationNoticeOutItem) {
return R.layout.list_item_conversation_notice_out;
} else if (item instanceof ConversationNoticeInItem) {
return R.layout.list_item_conversation_notice_in;
} else if (item instanceof ConversationMessageOutItem) {
return R.layout.list_item_conversation_msg_out;
} else if (item instanceof ConversationMessageInItem) {
return R.layout.list_item_conversation_msg_in;
} else {
throw new IllegalArgumentException("Unknown ConversationItem");
}
} }
@Override @Override
@@ -104,13 +92,13 @@ class ConversationAdapter
} }
} }
SparseArray<ConversationInItem> getIncomingMessages() { SparseArray<ConversationItem> getIncomingMessages() {
SparseArray<ConversationInItem> messages = new SparseArray<>(); SparseArray<ConversationItem> messages = new SparseArray<>();
for (int i = 0; i < items.size(); i++) { for (int i = 0; i < items.size(); i++) {
ConversationItem item = items.get(i); ConversationItem item = items.get(i);
if (item instanceof ConversationInItem) { if (item.isIncoming()) {
messages.put(i, (ConversationInItem) item); messages.put(i, item);
} }
} }
return messages; return messages;

View File

@@ -1,31 +0,0 @@
package org.briarproject.android.contact;
import org.briarproject.api.nullsafety.NotNullByDefault;
import org.briarproject.api.sync.GroupId;
import org.briarproject.api.sync.MessageId;
import org.jetbrains.annotations.Nullable;
import javax.annotation.concurrent.NotThreadSafe;
@NotThreadSafe
@NotNullByDefault
abstract class ConversationInItem extends ConversationItem {
private boolean read;
ConversationInItem(MessageId id, GroupId groupId, @Nullable String text,
long time, boolean read) {
super(id, groupId, text, time);
this.read = read;
}
public boolean isRead() {
return read;
}
public void setRead(boolean read) {
this.read = read;
}
}

View File

@@ -1,6 +1,7 @@
package org.briarproject.android.contact; package org.briarproject.android.contact;
import android.content.Context; import android.content.Context;
import android.support.annotation.LayoutRes;
import android.support.annotation.StringRes; import android.support.annotation.StringRes;
import org.briarproject.R; import org.briarproject.R;
@@ -37,13 +38,15 @@ abstract class ConversationItem {
final private MessageId id; final private MessageId id;
final private GroupId groupId; final private GroupId groupId;
final private long time; final private long time;
private boolean read;
ConversationItem(MessageId id, GroupId groupId, ConversationItem(MessageId id, GroupId groupId, @Nullable String body,
@Nullable String body, long time) { long time, boolean read) {
this.id = id; this.id = id;
this.groupId = groupId; this.groupId = groupId;
this.body = body; this.body = body;
this.time = time; this.time = time;
this.read = read;
} }
MessageId getId() { MessageId getId() {
@@ -67,6 +70,15 @@ abstract class ConversationItem {
return time; return time;
} }
public boolean isRead() {
return read;
}
abstract public boolean isIncoming();
@LayoutRes
abstract public int getLayout();
static ConversationItem from(PrivateMessageHeader h) { static ConversationItem from(PrivateMessageHeader h) {
if (h.isLocal()) { if (h.isLocal()) {
return new ConversationMessageOutItem(h); return new ConversationMessageOutItem(h);

View File

@@ -1,5 +1,8 @@
package org.briarproject.android.contact; package org.briarproject.android.contact;
import android.support.annotation.LayoutRes;
import org.briarproject.R;
import org.briarproject.api.messaging.PrivateMessageHeader; import org.briarproject.api.messaging.PrivateMessageHeader;
import org.briarproject.api.nullsafety.NotNullByDefault; import org.briarproject.api.nullsafety.NotNullByDefault;
@@ -7,10 +10,21 @@ import javax.annotation.concurrent.NotThreadSafe;
@NotThreadSafe @NotThreadSafe
@NotNullByDefault @NotNullByDefault
class ConversationMessageInItem extends ConversationInItem { class ConversationMessageInItem extends ConversationItem {
ConversationMessageInItem(PrivateMessageHeader h) { ConversationMessageInItem(PrivateMessageHeader h) {
super(h.getId(), h.getGroupId(), null, h.getTimestamp(), h.isRead()); super(h.getId(), h.getGroupId(), null, h.getTimestamp(), h.isRead());
} }
@Override
public boolean isIncoming() {
return true;
}
@LayoutRes
@Override
public int getLayout() {
return R.layout.list_item_conversation_msg_in;
}
} }

View File

@@ -1,5 +1,8 @@
package org.briarproject.android.contact; package org.briarproject.android.contact;
import android.support.annotation.LayoutRes;
import org.briarproject.R;
import org.briarproject.api.messaging.PrivateMessageHeader; import org.briarproject.api.messaging.PrivateMessageHeader;
import org.briarproject.api.nullsafety.NotNullByDefault; import org.briarproject.api.nullsafety.NotNullByDefault;
@@ -14,4 +17,10 @@ class ConversationMessageOutItem extends ConversationOutItem {
h.isSeen()); h.isSeen());
} }
@LayoutRes
@Override
public int getLayout() {
return R.layout.list_item_conversation_msg_out;
}
} }

View File

@@ -1,5 +1,8 @@
package org.briarproject.android.contact; package org.briarproject.android.contact;
import android.support.annotation.LayoutRes;
import org.briarproject.R;
import org.briarproject.api.nullsafety.NotNullByDefault; import org.briarproject.api.nullsafety.NotNullByDefault;
import org.briarproject.api.sync.GroupId; import org.briarproject.api.sync.GroupId;
import org.briarproject.api.sync.MessageId; import org.briarproject.api.sync.MessageId;
@@ -9,7 +12,7 @@ import javax.annotation.concurrent.NotThreadSafe;
@NotThreadSafe @NotThreadSafe
@NotNullByDefault @NotNullByDefault
class ConversationNoticeInItem extends ConversationInItem { class ConversationNoticeInItem extends ConversationItem {
@Nullable @Nullable
private final String msgText; private final String msgText;
@@ -26,4 +29,15 @@ class ConversationNoticeInItem extends ConversationInItem {
return msgText; return msgText;
} }
@Override
public boolean isIncoming() {
return true;
}
@LayoutRes
@Override
public int getLayout() {
return R.layout.list_item_conversation_notice_in;
}
} }

View File

@@ -1,5 +1,8 @@
package org.briarproject.android.contact; package org.briarproject.android.contact;
import android.support.annotation.LayoutRes;
import org.briarproject.R;
import org.briarproject.api.nullsafety.NotNullByDefault; import org.briarproject.api.nullsafety.NotNullByDefault;
import org.briarproject.api.sync.GroupId; import org.briarproject.api.sync.GroupId;
import org.briarproject.api.sync.MessageId; import org.briarproject.api.sync.MessageId;
@@ -26,4 +29,10 @@ class ConversationNoticeOutItem extends ConversationOutItem {
return msgText; return msgText;
} }
@LayoutRes
@Override
public int getLayout() {
return R.layout.list_item_conversation_notice_out;
}
} }

View File

@@ -15,7 +15,7 @@ abstract class ConversationOutItem extends ConversationItem {
ConversationOutItem(MessageId id, GroupId groupId, @Nullable String text, ConversationOutItem(MessageId id, GroupId groupId, @Nullable String text,
long time, boolean sent, boolean seen) { long time, boolean sent, boolean seen) {
super(id, groupId, text, time); super(id, groupId, text, time, true);
this.sent = sent; this.sent = sent;
this.seen = seen; this.seen = seen;
@@ -37,4 +37,9 @@ abstract class ConversationOutItem extends ConversationItem {
this.seen = seen; this.seen = seen;
} }
@Override
public boolean isIncoming() {
return false;
}
} }

View File

@@ -1,5 +1,8 @@
package org.briarproject.android.contact; package org.briarproject.android.contact;
import android.support.annotation.LayoutRes;
import org.briarproject.R;
import org.briarproject.api.clients.SessionId; import org.briarproject.api.clients.SessionId;
import org.briarproject.api.nullsafety.NotNullByDefault; import org.briarproject.api.nullsafety.NotNullByDefault;
import org.briarproject.api.sync.GroupId; import org.briarproject.api.sync.GroupId;
@@ -43,4 +46,10 @@ class ConversationRequestItem extends ConversationNoticeInItem {
this.answered = answered; this.answered = answered;
} }
@LayoutRes
@Override
public int getLayout() {
return R.layout.list_item_conversation_request;
}
} }

View File

@@ -18,7 +18,7 @@ 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.controller.handler.UiResultExceptionHandler; import org.briarproject.android.controller.handler.UiResultExceptionHandler;
import org.briarproject.android.sharing.ForumShareActivity; import org.briarproject.android.sharing.ShareForumActivity;
import org.briarproject.android.sharing.ForumSharingStatusActivity; import org.briarproject.android.sharing.ForumSharingStatusActivity;
import org.briarproject.android.threaded.ThreadListActivity; import org.briarproject.android.threaded.ThreadListActivity;
import org.briarproject.android.threaded.ThreadListController; import org.briarproject.android.threaded.ThreadListController;
@@ -107,7 +107,7 @@ public class ForumActivity extends
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, ForumShareActivity.class); Intent i2 = new Intent(this, ShareForumActivity.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());
ActivityCompat.startActivityForResult(this, i2, ActivityCompat.startActivityForResult(this, i2,

View File

@@ -18,7 +18,7 @@ import org.briarproject.R;
import org.briarproject.android.ActivityComponent; import org.briarproject.android.ActivityComponent;
import org.briarproject.android.api.AndroidNotificationManager; import org.briarproject.android.api.AndroidNotificationManager;
import org.briarproject.android.fragment.BaseEventFragment; import org.briarproject.android.fragment.BaseEventFragment;
import org.briarproject.android.sharing.ForumInvitationsActivity; import org.briarproject.android.sharing.ForumInvitationActivity;
import org.briarproject.android.view.BriarRecyclerView; import org.briarproject.android.view.BriarRecyclerView;
import org.briarproject.api.clients.MessageTracker.GroupCount; import org.briarproject.api.clients.MessageTracker.GroupCount;
import org.briarproject.api.db.DbException; import org.briarproject.api.db.DbException;
@@ -286,7 +286,7 @@ public class ForumListFragment extends BaseEventFragment implements
@Override @Override
public void onClick(View view) { public void onClick(View view) {
// snackbar click // snackbar click
Intent i = new Intent(getContext(), ForumInvitationsActivity.class); Intent i = new Intent(getContext(), ForumInvitationActivity.class);
startActivity(i); startActivity(i);
} }
} }

View File

@@ -4,19 +4,19 @@ import android.content.Context;
import org.briarproject.R; import org.briarproject.R;
import org.briarproject.android.ActivityComponent; import org.briarproject.android.ActivityComponent;
import org.briarproject.android.sharing.InvitationActivity;
import org.briarproject.android.sharing.InvitationAdapter; import org.briarproject.android.sharing.InvitationAdapter;
import org.briarproject.android.sharing.InvitationsActivity;
import org.briarproject.api.privategroup.invitation.GroupInvitationItem; import org.briarproject.api.privategroup.invitation.GroupInvitationItem;
import javax.inject.Inject; import javax.inject.Inject;
import static org.briarproject.android.sharing.InvitationAdapter.InvitationClickListener; import static org.briarproject.android.sharing.InvitationAdapter.InvitationClickListener;
public class GroupInvitationsActivity public class GroupInvitationActivity
extends InvitationsActivity<GroupInvitationItem> { extends InvitationActivity<GroupInvitationItem> {
@Inject @Inject
protected GroupInvitationsController controller; protected GroupInvitationController controller;
@Override @Override
public void injectActivity(ActivityComponent component) { public void injectActivity(ActivityComponent component) {
@@ -24,7 +24,7 @@ public class GroupInvitationsActivity
} }
@Override @Override
protected GroupInvitationsController getController() { protected GroupInvitationController getController() {
return controller; return controller;
} }

View File

@@ -0,0 +1,8 @@
package org.briarproject.android.privategroup.invitation;
import org.briarproject.android.sharing.InvitationController;
import org.briarproject.api.privategroup.invitation.GroupInvitationItem;
public interface GroupInvitationController
extends InvitationController<GroupInvitationItem> {
}

View File

@@ -1,7 +1,7 @@
package org.briarproject.android.privategroup.invitation; package org.briarproject.android.privategroup.invitation;
import org.briarproject.android.controller.handler.ResultExceptionHandler; import org.briarproject.android.controller.handler.ResultExceptionHandler;
import org.briarproject.android.sharing.InvitationsControllerImpl; import org.briarproject.android.sharing.InvitationControllerImpl;
import org.briarproject.api.contact.Contact; import org.briarproject.api.contact.Contact;
import org.briarproject.api.db.DatabaseExecutor; import org.briarproject.api.db.DatabaseExecutor;
import org.briarproject.api.db.DbException; import org.briarproject.api.db.DbException;
@@ -22,15 +22,15 @@ import javax.inject.Inject;
import static java.util.logging.Level.WARNING; import static java.util.logging.Level.WARNING;
public class GroupInvitationsControllerImpl public class GroupInvitationControllerImpl
extends InvitationsControllerImpl<GroupInvitationItem> extends InvitationControllerImpl<GroupInvitationItem>
implements GroupInvitationsController { implements GroupInvitationController {
private final PrivateGroupManager privateGroupManager; private final PrivateGroupManager privateGroupManager;
private final GroupInvitationManager groupInvitationManager; private final GroupInvitationManager groupInvitationManager;
@Inject @Inject
GroupInvitationsControllerImpl(@DatabaseExecutor Executor dbExecutor, GroupInvitationControllerImpl(@DatabaseExecutor Executor dbExecutor,
LifecycleManager lifecycleManager, EventBus eventBus, LifecycleManager lifecycleManager, EventBus eventBus,
PrivateGroupManager privateGroupManager, PrivateGroupManager privateGroupManager,
GroupInvitationManager groupInvitationManager) { GroupInvitationManager groupInvitationManager) {
@@ -50,7 +50,7 @@ public class GroupInvitationsControllerImpl
} }
@Override @Override
protected ClientId getClientId() { protected ClientId getShareableClientId() {
return privateGroupManager.getClientId(); return privateGroupManager.getClientId();
} }
@@ -68,7 +68,7 @@ public class GroupInvitationsControllerImpl
@Override @Override
public void run() { public void run() {
try { try {
PrivateGroup g = (PrivateGroup) item.getShareable(); PrivateGroup g = item.getShareable();
Contact c = item.getCreator(); Contact c = item.getCreator();
groupInvitationManager.respondToInvitation(g, c, accept); groupInvitationManager.respondToInvitation(g, c, accept);
} catch (DbException e) { } catch (DbException e) {

View File

@@ -1,8 +0,0 @@
package org.briarproject.android.privategroup.invitation;
import org.briarproject.android.sharing.InvitationsController;
import org.briarproject.api.privategroup.invitation.GroupInvitationItem;
public interface GroupInvitationsController
extends InvitationsController<GroupInvitationItem> {
}

View File

@@ -21,7 +21,7 @@ import org.briarproject.android.ActivityComponent;
import org.briarproject.android.controller.handler.UiResultExceptionHandler; import org.briarproject.android.controller.handler.UiResultExceptionHandler;
import org.briarproject.android.fragment.BaseFragment; import org.briarproject.android.fragment.BaseFragment;
import org.briarproject.android.privategroup.creation.CreateGroupActivity; import org.briarproject.android.privategroup.creation.CreateGroupActivity;
import org.briarproject.android.privategroup.invitation.GroupInvitationsActivity; import org.briarproject.android.privategroup.invitation.GroupInvitationActivity;
import org.briarproject.android.privategroup.list.GroupListController.GroupListListener; import org.briarproject.android.privategroup.list.GroupListController.GroupListListener;
import org.briarproject.android.privategroup.list.GroupViewHolder.OnGroupRemoveClickListener; import org.briarproject.android.privategroup.list.GroupViewHolder.OnGroupRemoveClickListener;
import org.briarproject.android.view.BriarRecyclerView; import org.briarproject.android.view.BriarRecyclerView;
@@ -221,7 +221,7 @@ public class GroupListFragment extends BaseFragment implements
*/ */
@Override @Override
public void onClick(View v) { public void onClick(View v) {
Intent i = new Intent(getContext(), GroupInvitationsActivity.class); Intent i = new Intent(getContext(), GroupInvitationActivity.class);
ActivityOptionsCompat options = ActivityOptionsCompat options =
makeCustomAnimation(getActivity(), makeCustomAnimation(getActivity(),
android.R.anim.slide_in_left, android.R.anim.slide_in_left,

View File

@@ -10,11 +10,11 @@ import javax.inject.Inject;
import static org.briarproject.android.sharing.InvitationAdapter.InvitationClickListener; import static org.briarproject.android.sharing.InvitationAdapter.InvitationClickListener;
public class BlogInvitationsActivity public class BlogInvitationActivity
extends InvitationsActivity<SharingInvitationItem> { extends InvitationActivity<SharingInvitationItem> {
@Inject @Inject
BlogInvitationsController controller; BlogInvitationController controller;
@Override @Override
public void injectActivity(ActivityComponent component) { public void injectActivity(ActivityComponent component) {
@@ -22,7 +22,7 @@ public class BlogInvitationsActivity
} }
@Override @Override
protected InvitationsController<SharingInvitationItem> getController() { protected InvitationController<SharingInvitationItem> getController() {
return controller; return controller;
} }

View File

@@ -2,6 +2,6 @@ package org.briarproject.android.sharing;
import org.briarproject.api.sharing.SharingInvitationItem; import org.briarproject.api.sharing.SharingInvitationItem;
public interface BlogInvitationsController public interface BlogInvitationController
extends InvitationsController<SharingInvitationItem> { extends InvitationController<SharingInvitationItem> {
} }

View File

@@ -21,15 +21,15 @@ import javax.inject.Inject;
import static java.util.logging.Level.WARNING; import static java.util.logging.Level.WARNING;
public class BlogInvitationsControllerImpl public class BlogInvitationControllerImpl
extends InvitationsControllerImpl<SharingInvitationItem> extends InvitationControllerImpl<SharingInvitationItem>
implements BlogInvitationsController { implements BlogInvitationController {
private final BlogManager blogManager; private final BlogManager blogManager;
private final BlogSharingManager blogSharingManager; private final BlogSharingManager blogSharingManager;
@Inject @Inject
BlogInvitationsControllerImpl(@DatabaseExecutor Executor dbExecutor, BlogInvitationControllerImpl(@DatabaseExecutor Executor dbExecutor,
LifecycleManager lifecycleManager, EventBus eventBus, LifecycleManager lifecycleManager, EventBus eventBus,
BlogManager blogManager, BlogSharingManager blogSharingManager) { BlogManager blogManager, BlogSharingManager blogSharingManager) {
super(dbExecutor, lifecycleManager, eventBus); super(dbExecutor, lifecycleManager, eventBus);
@@ -48,7 +48,7 @@ public class BlogInvitationsControllerImpl
} }
@Override @Override
protected ClientId getClientId() { protected ClientId getShareableClientId() {
return blogManager.getClientId(); return blogManager.getClientId();
} }

View File

@@ -10,11 +10,11 @@ import javax.inject.Inject;
import static org.briarproject.android.sharing.InvitationAdapter.InvitationClickListener; import static org.briarproject.android.sharing.InvitationAdapter.InvitationClickListener;
public class ForumInvitationsActivity public class ForumInvitationActivity
extends InvitationsActivity<SharingInvitationItem> { extends InvitationActivity<SharingInvitationItem> {
@Inject @Inject
ForumInvitationsController controller; ForumInvitationController controller;
@Override @Override
public void injectActivity(ActivityComponent component) { public void injectActivity(ActivityComponent component) {
@@ -22,7 +22,7 @@ public class ForumInvitationsActivity
} }
@Override @Override
protected InvitationsController<SharingInvitationItem> getController() { protected InvitationController<SharingInvitationItem> getController() {
return controller; return controller;
} }

View File

@@ -2,6 +2,6 @@ package org.briarproject.android.sharing;
import org.briarproject.api.sharing.SharingInvitationItem; import org.briarproject.api.sharing.SharingInvitationItem;
public interface ForumInvitationsController public interface ForumInvitationController
extends InvitationsController<SharingInvitationItem> { extends InvitationController<SharingInvitationItem> {
} }

View File

@@ -21,15 +21,15 @@ import javax.inject.Inject;
import static java.util.logging.Level.WARNING; import static java.util.logging.Level.WARNING;
public class ForumInvitationsControllerImpl public class ForumInvitationControllerImpl
extends InvitationsControllerImpl<SharingInvitationItem> extends InvitationControllerImpl<SharingInvitationItem>
implements ForumInvitationsController { implements ForumInvitationController {
private final ForumManager forumManager; private final ForumManager forumManager;
private final ForumSharingManager forumSharingManager; private final ForumSharingManager forumSharingManager;
@Inject @Inject
ForumInvitationsControllerImpl(@DatabaseExecutor Executor dbExecutor, ForumInvitationControllerImpl(@DatabaseExecutor Executor dbExecutor,
LifecycleManager lifecycleManager, EventBus eventBus, LifecycleManager lifecycleManager, EventBus eventBus,
ForumManager forumManager, ForumManager forumManager,
ForumSharingManager forumSharingManager) { ForumSharingManager forumSharingManager) {
@@ -49,7 +49,7 @@ public class ForumInvitationsControllerImpl
} }
@Override @Override
protected ClientId getClientId() { protected ClientId getShareableClientId() {
return forumManager.getClientId(); return forumManager.getClientId();
} }

View File

@@ -9,7 +9,7 @@ import android.widget.Toast;
import org.briarproject.R; import org.briarproject.R;
import org.briarproject.android.BriarActivity; import org.briarproject.android.BriarActivity;
import org.briarproject.android.controller.handler.UiResultExceptionHandler; import org.briarproject.android.controller.handler.UiResultExceptionHandler;
import org.briarproject.android.sharing.InvitationsController.InvitationListener; import org.briarproject.android.sharing.InvitationController.InvitationListener;
import org.briarproject.android.view.BriarRecyclerView; import org.briarproject.android.view.BriarRecyclerView;
import org.briarproject.api.db.DbException; import org.briarproject.api.db.DbException;
import org.briarproject.api.sharing.InvitationItem; import org.briarproject.api.sharing.InvitationItem;
@@ -20,12 +20,12 @@ import java.util.logging.Logger;
import static android.widget.Toast.LENGTH_SHORT; import static android.widget.Toast.LENGTH_SHORT;
import static org.briarproject.android.sharing.InvitationAdapter.InvitationClickListener; import static org.briarproject.android.sharing.InvitationAdapter.InvitationClickListener;
public abstract class InvitationsActivity<I extends InvitationItem> public abstract class InvitationActivity<I extends InvitationItem>
extends BriarActivity extends BriarActivity
implements InvitationListener, InvitationClickListener<I> { implements InvitationListener, InvitationClickListener<I> {
protected static final Logger LOG = protected static final Logger LOG =
Logger.getLogger(InvitationsActivity.class.getName()); Logger.getLogger(InvitationActivity.class.getName());
private InvitationAdapter<I, ?> adapter; private InvitationAdapter<I, ?> adapter;
private BriarRecyclerView list; private BriarRecyclerView list;
@@ -96,7 +96,7 @@ public abstract class InvitationsActivity<I extends InvitationItem>
}); });
} }
abstract protected InvitationsController<I> getController(); abstract protected InvitationController<I> getController();
protected void respondToInvitation(final I item, protected void respondToInvitation(final I item,
final boolean accept) { final boolean accept) {

View File

@@ -7,7 +7,7 @@ import org.briarproject.api.sharing.InvitationItem;
import java.util.Collection; import java.util.Collection;
public interface InvitationsController<I extends InvitationItem> public interface InvitationController<I extends InvitationItem>
extends ActivityLifecycleController { extends ActivityLifecycleController {
void loadInvitations(boolean clear, void loadInvitations(boolean clear,

View File

@@ -25,17 +25,17 @@ import java.util.logging.Logger;
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;
public abstract class InvitationsControllerImpl<I extends InvitationItem> public abstract class InvitationControllerImpl<I extends InvitationItem>
extends DbControllerImpl extends DbControllerImpl
implements InvitationsController<I>, EventListener { implements InvitationController<I>, EventListener {
protected static final Logger LOG = protected static final Logger LOG =
Logger.getLogger(InvitationsControllerImpl.class.getName()); Logger.getLogger(InvitationControllerImpl.class.getName());
private final EventBus eventBus; private final EventBus eventBus;
protected InvitationListener listener; protected InvitationListener listener;
public InvitationsControllerImpl(@DatabaseExecutor Executor dbExecutor, public InvitationControllerImpl(@DatabaseExecutor Executor dbExecutor,
LifecycleManager lifecycleManager, EventBus eventBus) { LifecycleManager lifecycleManager, EventBus eventBus) {
super(dbExecutor, lifecycleManager); super(dbExecutor, lifecycleManager);
this.eventBus = eventBus; this.eventBus = eventBus;
@@ -70,21 +70,21 @@ public abstract class InvitationsControllerImpl<I extends InvitationItem>
} else if (e instanceof GroupAddedEvent) { } else if (e instanceof GroupAddedEvent) {
GroupAddedEvent g = (GroupAddedEvent) e; GroupAddedEvent g = (GroupAddedEvent) e;
ClientId cId = g.getGroup().getClientId(); ClientId cId = g.getGroup().getClientId();
if (cId.equals(getClientId())) { if (cId.equals(getShareableClientId())) {
LOG.info("Group added, reloading"); LOG.info("Group added, reloading");
listener.loadInvitations(false); listener.loadInvitations(false);
} }
} else if (e instanceof GroupRemovedEvent) { } else if (e instanceof GroupRemovedEvent) {
GroupRemovedEvent g = (GroupRemovedEvent) e; GroupRemovedEvent g = (GroupRemovedEvent) e;
ClientId cId = g.getGroup().getClientId(); ClientId cId = g.getGroup().getClientId();
if (cId.equals(getClientId())) { if (cId.equals(getShareableClientId())) {
LOG.info("Group removed, reloading"); LOG.info("Group removed, reloading");
listener.loadInvitations(true); listener.loadInvitations(false);
} }
} }
} }
protected abstract ClientId getClientId(); protected abstract ClientId getShareableClientId();
@Override @Override
public void loadInvitations(final boolean clear, public void loadInvitations(final boolean clear,

View File

@@ -12,7 +12,7 @@ import javax.inject.Inject;
import static org.briarproject.api.sync.SyncConstants.MAX_MESSAGE_BODY_LENGTH; import static org.briarproject.api.sync.SyncConstants.MAX_MESSAGE_BODY_LENGTH;
public class BlogShareActivity extends ShareActivity { public class ShareBlogActivity extends ShareActivity {
// Fields that are accessed from background threads must be volatile // Fields that are accessed from background threads must be volatile
@Inject @Inject
@@ -20,7 +20,7 @@ public class BlogShareActivity extends ShareActivity {
@Override @Override
BaseMessageFragment getMessageFragment() { BaseMessageFragment getMessageFragment() {
return BlogShareMessageFragment.newInstance(); return ShareBlogMessageFragment.newInstance();
} }
@Override @Override

View File

@@ -9,12 +9,12 @@ import android.view.ViewGroup;
import org.briarproject.R; import org.briarproject.R;
import org.briarproject.android.ActivityComponent; import org.briarproject.android.ActivityComponent;
public class BlogShareMessageFragment extends BaseMessageFragment { public class ShareBlogMessageFragment extends BaseMessageFragment {
public final static String TAG = BlogShareMessageFragment.class.getName(); public final static String TAG = ShareBlogMessageFragment.class.getName();
public static BlogShareMessageFragment newInstance() { public static ShareBlogMessageFragment newInstance() {
return new BlogShareMessageFragment(); return new ShareBlogMessageFragment();
} }
@Override @Override

View File

@@ -12,7 +12,7 @@ import javax.inject.Inject;
import static org.briarproject.api.sync.SyncConstants.MAX_MESSAGE_BODY_LENGTH; import static org.briarproject.api.sync.SyncConstants.MAX_MESSAGE_BODY_LENGTH;
public class ForumShareActivity extends ShareActivity { public class ShareForumActivity extends ShareActivity {
// Fields that are accessed from background threads must be volatile // Fields that are accessed from background threads must be volatile
@Inject @Inject
@@ -20,7 +20,7 @@ public class ForumShareActivity extends ShareActivity {
@Override @Override
BaseMessageFragment getMessageFragment() { BaseMessageFragment getMessageFragment() {
return ForumShareMessageFragment.newInstance(); return ShareForumMessageFragment.newInstance();
} }
@Override @Override

View File

@@ -9,12 +9,12 @@ import android.view.ViewGroup;
import org.briarproject.R; import org.briarproject.R;
import org.briarproject.android.ActivityComponent; import org.briarproject.android.ActivityComponent;
public class ForumShareMessageFragment extends BaseMessageFragment { public class ShareForumMessageFragment extends BaseMessageFragment {
public final static String TAG = ForumShareMessageFragment.class.getName(); public final static String TAG = ShareForumMessageFragment.class.getName();
public static ForumShareMessageFragment newInstance() { public static ShareForumMessageFragment newInstance() {
return new ForumShareMessageFragment(); return new ShareForumMessageFragment();
} }
@Override @Override

View File

@@ -3,12 +3,13 @@ package org.briarproject.api.event;
import org.briarproject.api.contact.ContactId; import org.briarproject.api.contact.ContactId;
import org.briarproject.api.forum.ForumInvitationRequest; import org.briarproject.api.forum.ForumInvitationRequest;
import org.briarproject.api.privategroup.PrivateGroup; import org.briarproject.api.privategroup.PrivateGroup;
import org.briarproject.api.privategroup.invitation.GroupInvitationRequest;
public class GroupInvitationReceivedEvent extends public class GroupInvitationReceivedEvent extends
InvitationRequestReceivedEvent<PrivateGroup> { InvitationRequestReceivedEvent<PrivateGroup> {
public GroupInvitationReceivedEvent(PrivateGroup group, ContactId contactId, public GroupInvitationReceivedEvent(PrivateGroup group, ContactId contactId,
ForumInvitationRequest request) { GroupInvitationRequest request) {
super(group, contactId, request); super(group, contactId, request);
} }

View File

@@ -2,18 +2,18 @@ package org.briarproject.api.privategroup.invitation;
import org.briarproject.api.contact.Contact; import org.briarproject.api.contact.Contact;
import org.briarproject.api.nullsafety.NotNullByDefault; import org.briarproject.api.nullsafety.NotNullByDefault;
import org.briarproject.api.privategroup.PrivateGroup;
import org.briarproject.api.sharing.InvitationItem; import org.briarproject.api.sharing.InvitationItem;
import org.briarproject.api.sharing.Shareable;
import javax.annotation.concurrent.Immutable; import javax.annotation.concurrent.Immutable;
@Immutable @Immutable
@NotNullByDefault @NotNullByDefault
public class GroupInvitationItem extends InvitationItem { public class GroupInvitationItem extends InvitationItem<PrivateGroup> {
private final Contact creator; private final Contact creator;
public GroupInvitationItem(Shareable shareable, boolean subscribed, public GroupInvitationItem(PrivateGroup shareable, boolean subscribed,
Contact creator) { Contact creator) {
super(shareable, subscribed); super(shareable, subscribed);

View File

@@ -4,21 +4,20 @@ import org.briarproject.api.nullsafety.NotNullByDefault;
import org.briarproject.api.sync.GroupId; import org.briarproject.api.sync.GroupId;
import javax.annotation.concurrent.Immutable; import javax.annotation.concurrent.Immutable;
import javax.annotation.concurrent.ThreadSafe;
@Immutable @Immutable
@NotNullByDefault @NotNullByDefault
public abstract class InvitationItem { public abstract class InvitationItem<S extends Shareable> {
private final Shareable shareable; private final S shareable;
private final boolean subscribed; private final boolean subscribed;
public InvitationItem(Shareable shareable, boolean subscribed) { public InvitationItem(S shareable, boolean subscribed) {
this.shareable = shareable; this.shareable = shareable;
this.subscribed = subscribed; this.subscribed = subscribed;
} }
public Shareable getShareable() { public S getShareable() {
return shareable; return shareable;
} }

View File

@@ -9,7 +9,7 @@ import javax.annotation.concurrent.Immutable;
@Immutable @Immutable
@NotNullByDefault @NotNullByDefault
public class SharingInvitationItem extends InvitationItem { public class SharingInvitationItem extends InvitationItem<Shareable> {
private final Collection<Contact> newSharers; private final Collection<Contact> newSharers;