From 031eac54c5f138ddde1c3bdd18c44b1189bdb2bc Mon Sep 17 00:00:00 2001 From: akwizgran Date: Thu, 20 Sep 2018 14:43:19 +0100 Subject: [PATCH 1/3] Add private message visitor. --- .../briar/api/blog/BlogInvitationRequest.java | 5 +++ .../api/blog/BlogInvitationResponse.java | 5 +++ .../api/forum/ForumInvitationRequest.java | 5 +++ .../api/forum/ForumInvitationResponse.java | 5 +++ .../api/introduction/IntroductionRequest.java | 6 ++++ .../introduction/IntroductionResponse.java | 5 +++ .../api/messaging/PrivateMessageHeader.java | 3 ++ .../api/messaging/PrivateMessageVisitor.java | 31 +++++++++++++++++++ .../invitation/GroupInvitationRequest.java | 5 +++ .../invitation/GroupInvitationResponse.java | 5 +++ 10 files changed, 75 insertions(+) create mode 100644 briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateMessageVisitor.java diff --git a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationRequest.java index 9c700727f..1d50cd24f 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationRequest.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationRequest.java @@ -4,6 +4,7 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.api.client.SessionId; +import org.briarproject.briar.api.messaging.PrivateMessageVisitor; import org.briarproject.briar.api.sharing.InvitationRequest; import javax.annotation.Nullable; @@ -19,4 +20,8 @@ public class BlogInvitationRequest extends InvitationRequest { message, available, canBeOpened); } + @Override + public void accept(PrivateMessageVisitor v) { + v.visitBlogInvitatioRequest(this); + } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationResponse.java b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationResponse.java index cf3ac3ac8..266382131 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationResponse.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationResponse.java @@ -4,6 +4,7 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.api.client.SessionId; +import org.briarproject.briar.api.messaging.PrivateMessageVisitor; import org.briarproject.briar.api.sharing.InvitationResponse; @NotNullByDefault @@ -16,4 +17,8 @@ public class BlogInvitationResponse extends InvitationResponse { accept, shareableId); } + @Override + public void accept(PrivateMessageVisitor v) { + v.visitBlogInvitationResponse(this); + } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationRequest.java index 8d1028a9d..41f9919c5 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationRequest.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationRequest.java @@ -4,6 +4,7 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.api.client.SessionId; +import org.briarproject.briar.api.messaging.PrivateMessageVisitor; import org.briarproject.briar.api.sharing.InvitationRequest; import javax.annotation.Nullable; @@ -21,4 +22,8 @@ public class ForumInvitationRequest extends InvitationRequest { message, available, canBeOpened); } + @Override + public void accept(PrivateMessageVisitor v) { + v.visitForumInvitationRequest(this); + } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationResponse.java b/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationResponse.java index d0536ca91..1539ba206 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationResponse.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationResponse.java @@ -4,6 +4,7 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.api.client.SessionId; +import org.briarproject.briar.api.messaging.PrivateMessageVisitor; import org.briarproject.briar.api.sharing.InvitationResponse; import javax.annotation.concurrent.Immutable; @@ -19,4 +20,8 @@ public class ForumInvitationResponse extends InvitationResponse { accept, shareableId); } + @Override + public void accept(PrivateMessageVisitor v) { + v.visitForumInvitationResponse(this); + } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionRequest.java index 91d52c255..3350ac1b6 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionRequest.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionRequest.java @@ -5,6 +5,7 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.api.client.SessionId; +import org.briarproject.briar.api.messaging.PrivateMessageVisitor; import org.briarproject.briar.api.messaging.PrivateRequest; import javax.annotation.Nullable; @@ -28,4 +29,9 @@ public class IntroductionRequest extends PrivateRequest { public boolean isContact() { return contact; } + + @Override + public void accept(PrivateMessageVisitor v) { + v.visitIntroductionRequest(this); + } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionResponse.java b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionResponse.java index 6ff9d8830..8e26d4bfb 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionResponse.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionResponse.java @@ -5,6 +5,7 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.api.client.SessionId; +import org.briarproject.briar.api.messaging.PrivateMessageVisitor; import org.briarproject.briar.api.messaging.PrivateResponse; import javax.annotation.concurrent.Immutable; @@ -35,4 +36,8 @@ public class IntroductionResponse extends PrivateResponse { return ourRole == INTRODUCER; } + @Override + public void accept(PrivateMessageVisitor v) { + v.visitIntroductionResponse(this); + } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateMessageHeader.java b/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateMessageHeader.java index 619f0303b..b9f5110a6 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateMessageHeader.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateMessageHeader.java @@ -54,4 +54,7 @@ public class PrivateMessageHeader { return read; } + public void accept(PrivateMessageVisitor v) { + v.visitPrivateMessageHeader(this); + } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateMessageVisitor.java b/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateMessageVisitor.java new file mode 100644 index 000000000..d1e059745 --- /dev/null +++ b/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateMessageVisitor.java @@ -0,0 +1,31 @@ +package org.briarproject.briar.api.messaging; + +import org.briarproject.briar.api.blog.BlogInvitationRequest; +import org.briarproject.briar.api.blog.BlogInvitationResponse; +import org.briarproject.briar.api.forum.ForumInvitationRequest; +import org.briarproject.briar.api.forum.ForumInvitationResponse; +import org.briarproject.briar.api.introduction.IntroductionRequest; +import org.briarproject.briar.api.introduction.IntroductionResponse; +import org.briarproject.briar.api.privategroup.invitation.GroupInvitationRequest; +import org.briarproject.briar.api.privategroup.invitation.GroupInvitationResponse; + +public interface PrivateMessageVisitor { + + void visitPrivateMessageHeader(PrivateMessageHeader h); + + void visitBlogInvitatioRequest(BlogInvitationRequest r); + + void visitBlogInvitationResponse(BlogInvitationResponse r); + + void visitForumInvitationRequest(ForumInvitationRequest r); + + void visitForumInvitationResponse(ForumInvitationResponse r); + + void visitGroupInvitationRequest(GroupInvitationRequest r); + + void visitGroupInvitationResponse(GroupInvitationResponse r); + + void visitIntroductionRequest(IntroductionRequest r); + + void visitIntroductionResponse(IntroductionResponse r); +} diff --git a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationRequest.java index 8067def68..39c51f159 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationRequest.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationRequest.java @@ -4,6 +4,7 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.api.client.SessionId; +import org.briarproject.briar.api.messaging.PrivateMessageVisitor; import org.briarproject.briar.api.privategroup.PrivateGroup; import org.briarproject.briar.api.sharing.InvitationRequest; @@ -22,4 +23,8 @@ public class GroupInvitationRequest extends InvitationRequest { message, available, canBeOpened); } + @Override + public void accept(PrivateMessageVisitor v) { + v.visitGroupInvitationRequest(this); + } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationResponse.java b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationResponse.java index 4b260eb62..e74b0c67f 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationResponse.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationResponse.java @@ -4,6 +4,7 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.api.client.SessionId; +import org.briarproject.briar.api.messaging.PrivateMessageVisitor; import org.briarproject.briar.api.sharing.InvitationResponse; import javax.annotation.concurrent.Immutable; @@ -19,4 +20,8 @@ public class GroupInvitationResponse extends InvitationResponse { accept, shareableId); } + @Override + public void accept(PrivateMessageVisitor v) { + v.visitGroupInvitationResponse(this); + } } From 2e120f752c433358666dc734a12c82c66cb44730 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Thu, 20 Sep 2018 15:19:22 +0100 Subject: [PATCH 2/3] Add parameterised return type. --- .../briar/api/blog/BlogInvitationRequest.java | 4 ++-- .../api/blog/BlogInvitationResponse.java | 4 ++-- .../api/forum/ForumInvitationRequest.java | 4 ++-- .../api/forum/ForumInvitationResponse.java | 4 ++-- .../api/introduction/IntroductionRequest.java | 4 ++-- .../introduction/IntroductionResponse.java | 4 ++-- .../api/messaging/PrivateMessageHeader.java | 4 ++-- .../api/messaging/PrivateMessageVisitor.java | 22 ++++++++++--------- .../invitation/GroupInvitationRequest.java | 4 ++-- .../invitation/GroupInvitationResponse.java | 4 ++-- 10 files changed, 30 insertions(+), 28 deletions(-) diff --git a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationRequest.java index 1d50cd24f..b77e05bd7 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationRequest.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationRequest.java @@ -21,7 +21,7 @@ public class BlogInvitationRequest extends InvitationRequest { } @Override - public void accept(PrivateMessageVisitor v) { - v.visitBlogInvitatioRequest(this); + public T accept(PrivateMessageVisitor v) { + return v.visitBlogInvitationRequest(this); } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationResponse.java b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationResponse.java index 266382131..b760b9ec9 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationResponse.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationResponse.java @@ -18,7 +18,7 @@ public class BlogInvitationResponse extends InvitationResponse { } @Override - public void accept(PrivateMessageVisitor v) { - v.visitBlogInvitationResponse(this); + public T accept(PrivateMessageVisitor v) { + return v.visitBlogInvitationResponse(this); } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationRequest.java index 41f9919c5..3944eca74 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationRequest.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationRequest.java @@ -23,7 +23,7 @@ public class ForumInvitationRequest extends InvitationRequest { } @Override - public void accept(PrivateMessageVisitor v) { - v.visitForumInvitationRequest(this); + public T accept(PrivateMessageVisitor v) { + return v.visitForumInvitationRequest(this); } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationResponse.java b/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationResponse.java index 1539ba206..3cb26c700 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationResponse.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationResponse.java @@ -21,7 +21,7 @@ public class ForumInvitationResponse extends InvitationResponse { } @Override - public void accept(PrivateMessageVisitor v) { - v.visitForumInvitationResponse(this); + public T accept(PrivateMessageVisitor v) { + return v.visitForumInvitationResponse(this); } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionRequest.java index 3350ac1b6..fe7de46de 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionRequest.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionRequest.java @@ -31,7 +31,7 @@ public class IntroductionRequest extends PrivateRequest { } @Override - public void accept(PrivateMessageVisitor v) { - v.visitIntroductionRequest(this); + public T accept(PrivateMessageVisitor v) { + return v.visitIntroductionRequest(this); } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionResponse.java b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionResponse.java index 8e26d4bfb..b03f8d7ca 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionResponse.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/introduction/IntroductionResponse.java @@ -37,7 +37,7 @@ public class IntroductionResponse extends PrivateResponse { } @Override - public void accept(PrivateMessageVisitor v) { - v.visitIntroductionResponse(this); + public T accept(PrivateMessageVisitor v) { + return v.visitIntroductionResponse(this); } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateMessageHeader.java b/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateMessageHeader.java index b9f5110a6..3c5a16ed3 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateMessageHeader.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateMessageHeader.java @@ -54,7 +54,7 @@ public class PrivateMessageHeader { return read; } - public void accept(PrivateMessageVisitor v) { - v.visitPrivateMessageHeader(this); + public T accept(PrivateMessageVisitor v) { + return v.visitPrivateMessageHeader(this); } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateMessageVisitor.java b/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateMessageVisitor.java index d1e059745..f16566930 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateMessageVisitor.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/messaging/PrivateMessageVisitor.java @@ -1,5 +1,6 @@ package org.briarproject.briar.api.messaging; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.briar.api.blog.BlogInvitationRequest; import org.briarproject.briar.api.blog.BlogInvitationResponse; import org.briarproject.briar.api.forum.ForumInvitationRequest; @@ -9,23 +10,24 @@ import org.briarproject.briar.api.introduction.IntroductionResponse; import org.briarproject.briar.api.privategroup.invitation.GroupInvitationRequest; import org.briarproject.briar.api.privategroup.invitation.GroupInvitationResponse; -public interface PrivateMessageVisitor { +@NotNullByDefault +public interface PrivateMessageVisitor { - void visitPrivateMessageHeader(PrivateMessageHeader h); + T visitPrivateMessageHeader(PrivateMessageHeader h); - void visitBlogInvitatioRequest(BlogInvitationRequest r); + T visitBlogInvitationRequest(BlogInvitationRequest r); - void visitBlogInvitationResponse(BlogInvitationResponse r); + T visitBlogInvitationResponse(BlogInvitationResponse r); - void visitForumInvitationRequest(ForumInvitationRequest r); + T visitForumInvitationRequest(ForumInvitationRequest r); - void visitForumInvitationResponse(ForumInvitationResponse r); + T visitForumInvitationResponse(ForumInvitationResponse r); - void visitGroupInvitationRequest(GroupInvitationRequest r); + T visitGroupInvitationRequest(GroupInvitationRequest r); - void visitGroupInvitationResponse(GroupInvitationResponse r); + T visitGroupInvitationResponse(GroupInvitationResponse r); - void visitIntroductionRequest(IntroductionRequest r); + T visitIntroductionRequest(IntroductionRequest r); - void visitIntroductionResponse(IntroductionResponse r); + T visitIntroductionResponse(IntroductionResponse r); } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationRequest.java index 39c51f159..794b005af 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationRequest.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationRequest.java @@ -24,7 +24,7 @@ public class GroupInvitationRequest extends InvitationRequest { } @Override - public void accept(PrivateMessageVisitor v) { - v.visitGroupInvitationRequest(this); + public T accept(PrivateMessageVisitor v) { + return v.visitGroupInvitationRequest(this); } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationResponse.java b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationResponse.java index e74b0c67f..776993b14 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationResponse.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationResponse.java @@ -21,7 +21,7 @@ public class GroupInvitationResponse extends InvitationResponse { } @Override - public void accept(PrivateMessageVisitor v) { - v.visitGroupInvitationResponse(this); + public T accept(PrivateMessageVisitor v) { + return v.visitGroupInvitationResponse(this); } } From 0491c3cace968f0a3622a8901e190ad25eff058e Mon Sep 17 00:00:00 2001 From: akwizgran Date: Thu, 20 Sep 2018 16:11:35 +0100 Subject: [PATCH 3/3] Use a visitor to create ConversationItems. --- .../android/contact/ContactListFragment.java | 7 +- .../android/contact/ContactListItem.java | 8 +- .../android/contact/ConversationActivity.java | 43 ++- .../android/contact/ConversationItem.java | 48 ---- .../contact/ConversationNoticeInItem.java | 68 +---- .../contact/ConversationNoticeOutItem.java | 77 +----- .../contact/ConversationRequestItem.java | 64 +---- .../android/contact/ConversationVisitor.java | 246 ++++++++++++++++++ 8 files changed, 286 insertions(+), 275 deletions(-) create mode 100644 briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationVisitor.java diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java index a3ca713b8..fefbdeb61 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java @@ -1,7 +1,6 @@ package org.briarproject.briar.android.contact; import android.content.Intent; -import android.os.Build; import android.os.Bundle; import android.support.v4.app.ActivityCompat; import android.support.v4.app.ActivityOptionsCompat; @@ -48,6 +47,7 @@ import java.util.logging.Logger; import javax.annotation.Nullable; import javax.inject.Inject; +import static android.os.Build.VERSION.SDK_INT; import static android.support.v4.app.ActivityOptionsCompat.makeSceneTransitionAnimation; import static android.support.v4.view.ViewCompat.getTransitionName; import static java.util.logging.Level.WARNING; @@ -113,7 +113,7 @@ public class ContactListFragment extends BaseFragment implements EventListener { ContactId contactId = item.getContact().getId(); i.putExtra(CONTACT_ID, contactId.getInt()); - if (Build.VERSION.SDK_INT >= 23) { + if (SDK_INT >= 23) { ContactListItemViewHolder holder = (ContactListItemViewHolder) list .getRecyclerView() @@ -256,8 +256,7 @@ public class ContactListFragment extends BaseFragment implements EventListener { int position = adapter.findItemPosition(c); ContactListItem item = adapter.getItemAt(position); if (item != null) { - ConversationItem i = ConversationItem.from(getContext(), "", h); - item.addMessage(i); + item.addMessage(h); adapter.updateItemAt(position, item); } }); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListItem.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListItem.java index c8e47207c..7e910358c 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListItem.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListItem.java @@ -3,6 +3,7 @@ package org.briarproject.briar.android.contact; import org.briarproject.bramble.api.contact.Contact; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.briar.api.client.MessageTracker.GroupCount; +import org.briarproject.briar.api.messaging.PrivateMessageHeader; import javax.annotation.concurrent.NotThreadSafe; @@ -22,11 +23,10 @@ public class ContactListItem extends ContactItem { this.timestamp = count.getLatestMsgTime(); } - void addMessage(ConversationItem message) { + void addMessage(PrivateMessageHeader h) { empty = false; - if (message.getTime() > timestamp) timestamp = message.getTime(); - if (!message.isRead()) - unread++; + if (h.getTimestamp() > timestamp) timestamp = h.getTimestamp(); + if (!h.isRead()) unread++; } boolean isEmpty() { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java index 381cd5f92..6e6ce6d78 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java @@ -53,6 +53,7 @@ import org.briarproject.briar.android.activity.ActivityComponent; import org.briarproject.briar.android.activity.BriarActivity; import org.briarproject.briar.android.blog.BlogActivity; import org.briarproject.briar.android.contact.ConversationAdapter.ConversationListener; +import org.briarproject.briar.android.contact.ConversationVisitor.BodyCache; import org.briarproject.briar.android.forum.ForumActivity; import org.briarproject.briar.android.introduction.IntroductionActivity; import org.briarproject.briar.android.privategroup.conversation.GroupActivity; @@ -111,7 +112,8 @@ import static uk.co.samuelwall.materialtaptargetprompt.MaterialTapTargetPrompt.S @MethodsNotNullByDefault @ParametersNotNullByDefault public class ConversationActivity extends BriarActivity - implements EventListener, ConversationListener, TextInputListener { + implements EventListener, ConversationListener, TextInputListener, + BodyCache { public static final String CONTACT_ID = "briar.CONTACT_ID"; @@ -131,6 +133,7 @@ public class ConversationActivity extends BriarActivity private final Map bodyCache = new ConcurrentHashMap<>(); private final MutableLiveData contactName = new MutableLiveData<>(); + private ConversationVisitor visitor; private ConversationAdapter adapter; private Toolbar toolbar; private CircleImageView toolbarAvatar; @@ -191,6 +194,7 @@ public class ConversationActivity extends BriarActivity setTransitionName(toolbarAvatar, getAvatarTransitionName(contactId)); setTransitionName(toolbarStatus, getBulbTransitionName(contactId)); + visitor = new ConversationVisitor(this, this, contactName); adapter = new ConversationAdapter(this, this); list = findViewById(R.id.conversationView); list.setLayoutManager(new LinearLayoutManager(this)); @@ -362,18 +366,7 @@ public class ConversationActivity extends BriarActivity private List createItems( Collection headers) { List items = new ArrayList<>(headers.size()); - for (PrivateMessageHeader h : headers) { - ConversationItem item; - if (h instanceof PrivateRequest || h instanceof PrivateResponse) { - item = ConversationItem.from(this, contactName.getValue(), h); - } else { - item = ConversationItem.from(h); - String body = bodyCache.get(h.getId()); - if (body == null) loadMessageBody(h.getId()); - else item.setBody(body); - } - items.add(item); - } + for (PrivateMessageHeader h : headers) items.add(h.accept(visitor)); return items; } @@ -467,27 +460,21 @@ public class ConversationActivity extends BriarActivity @Override public void onChanged(@Nullable String cName) { if (cName != null) { - onNewPrivateRequestOrResponse(h, cName); + addConversationItem(h.accept(visitor)); contactName.removeObserver(this); } } }); } else { - onNewPrivateRequestOrResponse(h, cName); + addConversationItem(h.accept(visitor)); } } else { - addConversationItem(ConversationItem.from(h)); + addConversationItem(h.accept(visitor)); loadMessageBody(h.getId()); } }); } - @UiThread - private void onNewPrivateRequestOrResponse(PrivateMessageHeader h, - String cName) { - addConversationItem(ConversationItem.from(this, cName, h)); - } - private void markMessages(Collection messageIds, boolean sent, boolean seen) { runOnUiThreadUnlessDestroyed(() -> { @@ -558,10 +545,8 @@ public class ConversationActivity extends BriarActivity PrivateMessageHeader h = new PrivateMessageHeader( message.getId(), message.getGroupId(), message.getTimestamp(), true, false, false, false); - ConversationItem item = ConversationItem.from(h); - item.setBody(body); bodyCache.put(message.getId(), body); - addConversationItem(item); + addConversationItem(h.accept(visitor)); } catch (DbException e) { logException(LOG, WARNING, e); } @@ -773,4 +758,12 @@ public class ConversationActivity extends BriarActivity throws DbException { groupInvitationManager.respondToInvitation(contactId, id, accept); } + + @Nullable + @Override + public String getBody(MessageId m) { + String body = bodyCache.get(m); + if (body == null) loadMessageBody(m); + return body; + } } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java index 671f7c6d2..98b72b390 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java @@ -1,14 +1,10 @@ package org.briarproject.briar.android.contact; -import android.content.Context; import android.support.annotation.LayoutRes; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; -import org.briarproject.briar.api.messaging.PrivateMessageHeader; -import org.briarproject.briar.api.messaging.PrivateRequest; -import org.briarproject.briar.api.messaging.PrivateResponse; import javax.annotation.Nullable; import javax.annotation.concurrent.NotThreadSafe; @@ -62,48 +58,4 @@ abstract class ConversationItem { @LayoutRes abstract public int getLayout(); - - static ConversationItem from(PrivateMessageHeader h) { - if (h.isLocal()) { - return new ConversationMessageOutItem(h); - } else { - return new ConversationMessageInItem(h); - } - } - - static ConversationItem from(Context ctx, String contactName, - PrivateMessageHeader h) { - if (h.isLocal()) { - return fromLocal(ctx, contactName, h); - } else { - return fromRemote(ctx, contactName, h); - } - } - - private static ConversationItem fromLocal(Context ctx, String contactName, - PrivateMessageHeader h) { - if (h instanceof PrivateRequest) { - PrivateRequest r = (PrivateRequest) h; - return new ConversationNoticeOutItem(ctx, contactName, r); - } else if (h instanceof PrivateResponse) { - PrivateResponse r = (PrivateResponse) h; - return new ConversationNoticeOutItem(ctx, contactName, r); - } else { - return new ConversationMessageOutItem(h); - } - } - - private static ConversationItem fromRemote(Context ctx, String contactName, - PrivateMessageHeader h) { - if (h instanceof PrivateRequest) { - PrivateRequest r = (PrivateRequest) h; - return new ConversationRequestItem(ctx, contactName, r); - } else if (h instanceof PrivateResponse) { - PrivateResponse r = (PrivateResponse) h; - return new ConversationNoticeInItem(ctx, contactName, r); - } else { - return new ConversationMessageInItem(h); - } - } - } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeInItem.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeInItem.java index 2873ad64c..c28a97299 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeInItem.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeInItem.java @@ -1,18 +1,12 @@ package org.briarproject.briar.android.contact; -import android.content.Context; import android.support.annotation.LayoutRes; -import android.support.annotation.StringRes; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.R; -import org.briarproject.briar.api.blog.BlogInvitationResponse; -import org.briarproject.briar.api.forum.ForumInvitationResponse; -import org.briarproject.briar.api.introduction.IntroductionResponse; import org.briarproject.briar.api.messaging.PrivateResponse; -import org.briarproject.briar.api.privategroup.invitation.GroupInvitationResponse; import javax.annotation.Nullable; import javax.annotation.concurrent.NotThreadSafe; @@ -24,17 +18,14 @@ class ConversationNoticeInItem extends ConversationItem { @Nullable private final String msgText; - ConversationNoticeInItem(MessageId id, GroupId groupId, - String text, @Nullable String msgText, long time, - boolean read) { + ConversationNoticeInItem(MessageId id, GroupId groupId, String text, + @Nullable String msgText, long time, boolean read) { super(id, groupId, text, time, read); this.msgText = msgText; } - public ConversationNoticeInItem(Context ctx, String contactName, - PrivateResponse r) { - super(r.getId(), r.getGroupId(), getText(ctx, contactName, r), - r.getTimestamp(), r.isRead()); + ConversationNoticeInItem(String text, PrivateResponse r) { + super(r.getId(), r.getGroupId(), text, r.getTimestamp(), r.isRead()); this.msgText = null; } @@ -53,55 +44,4 @@ class ConversationNoticeInItem extends ConversationItem { public int getLayout() { return R.layout.list_item_conversation_notice_in; } - - private static String getText(Context ctx, String contactName, - PrivateResponse r) { - if (r.wasAccepted()) { - if (r instanceof IntroductionResponse) { - IntroductionResponse ir = (IntroductionResponse) r; - return ctx.getString( - R.string.introduction_response_accepted_received, - contactName, ir.getIntroducedAuthor().getName()); - } else if (r instanceof ForumInvitationResponse) { - return ctx.getString( - R.string.forum_invitation_response_accepted_received, - contactName); - } else if (r instanceof BlogInvitationResponse) { - return ctx.getString( - R.string.blogs_sharing_response_accepted_received, - contactName); - } else if (r instanceof GroupInvitationResponse) { - return ctx.getString( - R.string.groups_invitations_response_accepted_received, - contactName); - } - } else { - if (r instanceof IntroductionResponse) { - IntroductionResponse ir = (IntroductionResponse) r; - @StringRes int res; - if (ir.isIntroducer()) { - res = R.string.introduction_response_declined_received; - } else { - res = - R.string.introduction_response_declined_received_by_introducee; - } - return ctx.getString(res, contactName, - ir.getIntroducedAuthor().getName()); - } else if (r instanceof ForumInvitationResponse) { - return ctx.getString( - R.string.forum_invitation_response_declined_received, - contactName); - } else if (r instanceof BlogInvitationResponse) { - return ctx.getString( - R.string.blogs_sharing_response_declined_received, - contactName); - } else if (r instanceof GroupInvitationResponse) { - return ctx.getString( - R.string.groups_invitations_response_declined_received, - contactName); - } - } - throw new IllegalArgumentException("Unknown PrivateResponse"); - } - } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeOutItem.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeOutItem.java index b5b22203b..d575e2a83 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeOutItem.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationNoticeOutItem.java @@ -1,20 +1,11 @@ package org.briarproject.briar.android.contact; -import android.content.Context; import android.support.annotation.LayoutRes; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.briar.R; -import org.briarproject.briar.api.blog.BlogInvitationRequest; -import org.briarproject.briar.api.blog.BlogInvitationResponse; -import org.briarproject.briar.api.forum.ForumInvitationRequest; -import org.briarproject.briar.api.forum.ForumInvitationResponse; -import org.briarproject.briar.api.introduction.IntroductionRequest; -import org.briarproject.briar.api.introduction.IntroductionResponse; import org.briarproject.briar.api.messaging.PrivateRequest; import org.briarproject.briar.api.messaging.PrivateResponse; -import org.briarproject.briar.api.privategroup.invitation.GroupInvitationRequest; -import org.briarproject.briar.api.privategroup.invitation.GroupInvitationResponse; import javax.annotation.Nullable; import javax.annotation.concurrent.NotThreadSafe; @@ -26,17 +17,15 @@ class ConversationNoticeOutItem extends ConversationOutItem { @Nullable private final String msgText; - ConversationNoticeOutItem(Context ctx, String contactName, - PrivateRequest r) { - super(r.getId(), r.getGroupId(), getText(ctx, contactName, r), - r.getTimestamp(), r.isSent(), r.isSeen()); + ConversationNoticeOutItem(String text, PrivateRequest r) { + super(r.getId(), r.getGroupId(), text, r.getTimestamp(), r.isSent(), + r.isSeen()); this.msgText = r.getMessage(); } - ConversationNoticeOutItem(Context ctx, String contactName, - PrivateResponse r) { - super(r.getId(), r.getGroupId(), getText(ctx, contactName, r), - r.getTimestamp(), r.isSent(), r.isSeen()); + ConversationNoticeOutItem(String text, PrivateResponse r) { + super(r.getId(), r.getGroupId(), text, r.getTimestamp(), r.isSent(), + r.isSeen()); this.msgText = null; } @@ -50,58 +39,4 @@ class ConversationNoticeOutItem extends ConversationOutItem { public int getLayout() { return R.layout.list_item_conversation_notice_out; } - - private static String getText(Context ctx, String contactName, - PrivateRequest r) { - if (r instanceof IntroductionRequest) { - return ctx.getString(R.string.introduction_request_sent, - contactName, r.getName()); - } else if (r instanceof ForumInvitationRequest) { - return ctx.getString(R.string.forum_invitation_sent, - r.getName(), contactName); - } else if (r instanceof BlogInvitationRequest) { - return ctx.getString(R.string.blogs_sharing_invitation_sent, - r.getName(), contactName); - } else if (r instanceof GroupInvitationRequest) { - return ctx.getString(R.string.groups_invitations_invitation_sent, - contactName, r.getName()); - } - throw new IllegalArgumentException("Unknown PrivateRequest"); - } - - private static String getText(Context ctx, String contactName, - PrivateResponse r) { - if (r.wasAccepted()) { - if (r instanceof IntroductionResponse) { - String name = ((IntroductionResponse) r).getIntroducedAuthor() - .getName(); - return ctx.getString( - R.string.introduction_response_accepted_sent, - name) + "\n\n" + ctx.getString( - R.string.introduction_response_accepted_sent_info, - name); - } else if (r instanceof ForumInvitationResponse) { - return ctx.getString(R.string.forum_invitation_response_accepted_sent, contactName); - } else if (r instanceof BlogInvitationResponse) { - return ctx.getString(R.string.blogs_sharing_response_accepted_sent, contactName); - } else if (r instanceof GroupInvitationResponse) { - return ctx.getString(R.string.groups_invitations_response_accepted_sent, contactName); - } - } else { - if (r instanceof IntroductionResponse) { - String name = ((IntroductionResponse) r).getIntroducedAuthor() - .getName(); - return ctx.getString( - R.string.introduction_response_declined_sent, name); - } else if (r instanceof ForumInvitationResponse) { - return ctx.getString(R.string.forum_invitation_response_declined_sent, contactName); - } else if (r instanceof BlogInvitationResponse) { - return ctx.getString(R.string.blogs_sharing_response_declined_sent, contactName); - } else if (r instanceof GroupInvitationResponse) { - return ctx.getString(R.string.groups_invitations_response_declined_sent, contactName); - } - } - throw new IllegalArgumentException("Unknown PrivateResponse"); - } - } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestItem.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestItem.java index e61ebec22..f6dc0a2ea 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestItem.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestItem.java @@ -1,33 +1,23 @@ package org.briarproject.briar.android.contact; -import android.content.Context; import android.support.annotation.LayoutRes; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.briar.R; -import org.briarproject.briar.api.blog.BlogInvitationRequest; import org.briarproject.briar.api.client.SessionId; -import org.briarproject.briar.api.forum.ForumInvitationRequest; -import org.briarproject.briar.api.introduction.IntroductionRequest; import org.briarproject.briar.api.messaging.PrivateRequest; -import org.briarproject.briar.api.privategroup.invitation.GroupInvitationRequest; import org.briarproject.briar.api.sharing.InvitationRequest; import org.briarproject.briar.api.sharing.Shareable; import javax.annotation.Nullable; import javax.annotation.concurrent.NotThreadSafe; -import static org.briarproject.briar.android.contact.ConversationRequestItem.RequestType.BLOG; -import static org.briarproject.briar.android.contact.ConversationRequestItem.RequestType.FORUM; -import static org.briarproject.briar.android.contact.ConversationRequestItem.RequestType.GROUP; -import static org.briarproject.briar.android.contact.ConversationRequestItem.RequestType.INTRODUCTION; - @NotThreadSafe @NotNullByDefault class ConversationRequestItem extends ConversationNoticeInItem { - enum RequestType { INTRODUCTION, FORUM, BLOG, GROUP } + enum RequestType {INTRODUCTION, FORUM, BLOG, GROUP} @Nullable private final GroupId requestedGroupId; @@ -36,11 +26,10 @@ class ConversationRequestItem extends ConversationNoticeInItem { private final boolean canBeOpened; private boolean answered; - ConversationRequestItem(Context ctx, String contactName, - PrivateRequest r) { - super(r.getId(), r.getGroupId(), getText(ctx, contactName, r), - r.getMessage(), r.getTimestamp(), r.isRead()); - this.requestType = getType(r); + ConversationRequestItem(String text, RequestType type, PrivateRequest r) { + super(r.getId(), r.getGroupId(), text, r.getMessage(), + r.getTimestamp(), r.isRead()); + this.requestType = type; this.sessionId = r.getSessionId(); this.answered = r.wasAnswered(); if (r instanceof InvitationRequest) { @@ -82,47 +71,4 @@ class ConversationRequestItem extends ConversationNoticeInItem { public int getLayout() { return R.layout.list_item_conversation_request; } - - private static String getText(Context ctx, String contactName, - PrivateRequest r) { - if (r instanceof IntroductionRequest) { - if (r.wasAnswered()) { - return ctx.getString( - R.string.introduction_request_answered_received, - contactName, r.getName()); - } else if (((IntroductionRequest) r).isContact()) { - return ctx.getString( - R.string.introduction_request_exists_received, - contactName, r.getName()); - } else { - return ctx.getString(R.string.introduction_request_received, - contactName, r.getName()); - } - } else if (r instanceof ForumInvitationRequest) { - return ctx.getString(R.string.forum_invitation_received, - contactName, r.getName()); - } else if (r instanceof BlogInvitationRequest) { - return ctx.getString(R.string.blogs_sharing_invitation_received, - contactName, r.getName()); - } else if (r instanceof GroupInvitationRequest) { - return ctx.getString( - R.string.groups_invitations_invitation_received, - contactName, r.getName()); - } - throw new IllegalArgumentException("Unknown PrivateRequest"); - } - - private static RequestType getType(PrivateRequest r) { - if (r instanceof IntroductionRequest) { - return INTRODUCTION; - } else if (r instanceof ForumInvitationRequest) { - return FORUM; - } else if (r instanceof BlogInvitationRequest) { - return BLOG; - } else if (r instanceof GroupInvitationRequest) { - return GROUP; - } - throw new IllegalArgumentException("Unknown PrivateRequest"); - } - } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationVisitor.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationVisitor.java new file mode 100644 index 000000000..e74dfecf3 --- /dev/null +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationVisitor.java @@ -0,0 +1,246 @@ +package org.briarproject.briar.android.contact; + +import android.arch.lifecycle.LiveData; +import android.content.Context; +import android.support.annotation.UiThread; + +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; +import org.briarproject.bramble.api.sync.MessageId; +import org.briarproject.briar.R; +import org.briarproject.briar.api.blog.BlogInvitationRequest; +import org.briarproject.briar.api.blog.BlogInvitationResponse; +import org.briarproject.briar.api.forum.ForumInvitationRequest; +import org.briarproject.briar.api.forum.ForumInvitationResponse; +import org.briarproject.briar.api.introduction.IntroductionRequest; +import org.briarproject.briar.api.introduction.IntroductionResponse; +import org.briarproject.briar.api.messaging.PrivateMessageHeader; +import org.briarproject.briar.api.messaging.PrivateMessageVisitor; +import org.briarproject.briar.api.privategroup.invitation.GroupInvitationRequest; +import org.briarproject.briar.api.privategroup.invitation.GroupInvitationResponse; + +import javax.annotation.Nullable; + +import static org.briarproject.briar.android.contact.ConversationRequestItem.RequestType.BLOG; +import static org.briarproject.briar.android.contact.ConversationRequestItem.RequestType.FORUM; +import static org.briarproject.briar.android.contact.ConversationRequestItem.RequestType.GROUP; +import static org.briarproject.briar.android.contact.ConversationRequestItem.RequestType.INTRODUCTION; + +@UiThread +@NotNullByDefault +class ConversationVisitor implements PrivateMessageVisitor { + + private final Context ctx; + private final BodyCache bodyCache; + private final LiveData contactName; + + ConversationVisitor(Context ctx, BodyCache bodyCache, + LiveData contactName) { + this.ctx = ctx; + this.bodyCache = bodyCache; + this.contactName = contactName; + } + + @Override + public ConversationItem visitPrivateMessageHeader(PrivateMessageHeader h) { + ConversationItem item; + if (h.isLocal()) item = new ConversationMessageOutItem(h); + else item = new ConversationMessageInItem(h); + String body = bodyCache.getBody(h.getId()); + if (body != null) item.setBody(body); + return item; + } + + @Override + public ConversationItem visitBlogInvitationRequest( + BlogInvitationRequest r) { + if (r.isLocal()) { + String text = ctx.getString(R.string.blogs_sharing_invitation_sent, + r.getName(), contactName.getValue()); + return new ConversationNoticeOutItem(text, r); + } else { + String text = ctx.getString( + R.string.blogs_sharing_invitation_received, + contactName.getValue(), r.getName()); + return new ConversationRequestItem(text, BLOG, r); + } + } + + @Override + public ConversationItem visitBlogInvitationResponse( + BlogInvitationResponse r) { + if (r.isLocal()) { + String text; + if (r.wasAccepted()) { + text = ctx.getString( + R.string.blogs_sharing_response_accepted_sent, + contactName.getValue()); + } else { + text = ctx.getString( + R.string.blogs_sharing_response_declined_sent, + contactName.getValue()); + } + return new ConversationNoticeOutItem(text, r); + } else { + String text; + if (r.wasAccepted()) { + text = ctx.getString( + R.string.blogs_sharing_response_accepted_received, + contactName.getValue()); + } else { + text = ctx.getString( + R.string.blogs_sharing_response_declined_received, + contactName.getValue()); + } + return new ConversationNoticeInItem(text, r); + } + } + + @Override + public ConversationItem visitForumInvitationRequest( + ForumInvitationRequest r) { + if (r.isLocal()) { + String text = ctx.getString(R.string.forum_invitation_sent, + r.getName(), contactName.getValue()); + return new ConversationNoticeOutItem(text, r); + } else { + String text = ctx.getString( + R.string.forum_invitation_received, + contactName.getValue(), r.getName()); + return new ConversationRequestItem(text, FORUM, r); + } + } + + @Override + public ConversationItem visitForumInvitationResponse( + ForumInvitationResponse r) { + if (r.isLocal()) { + String text; + if (r.wasAccepted()) { + text = ctx.getString( + R.string.forum_invitation_response_accepted_sent, + contactName.getValue()); + } else { + text = ctx.getString( + R.string.forum_invitation_response_declined_sent, + contactName.getValue()); + } + return new ConversationNoticeOutItem(text, r); + } else { + String text; + if (r.wasAccepted()) { + text = ctx.getString( + R.string.forum_invitation_response_accepted_received, + contactName.getValue()); + } else { + text = ctx.getString( + R.string.forum_invitation_response_declined_received, + contactName.getValue()); + } + return new ConversationNoticeInItem(text, r); + } + } + + @Override + public ConversationItem visitGroupInvitationRequest( + GroupInvitationRequest r) { + if (r.isLocal()) { + String text = ctx.getString( + R.string.groups_invitations_invitation_sent, + contactName.getValue(), r.getName()); + return new ConversationNoticeOutItem(text, r); + } else { + String text = ctx.getString( + R.string.groups_invitations_invitation_received, + contactName.getValue(), r.getName()); + return new ConversationRequestItem(text, GROUP, r); + } + } + + @Override + public ConversationItem visitGroupInvitationResponse( + GroupInvitationResponse r) { + if (r.isLocal()) { + String text; + if (r.wasAccepted()) { + text = ctx.getString( + R.string.groups_invitations_response_accepted_sent, + contactName.getValue()); + } else { + text = ctx.getString( + R.string.groups_invitations_response_declined_sent, + contactName.getValue()); + } + return new ConversationNoticeOutItem(text, r); + } else { + String text; + if (r.wasAccepted()) { + text = ctx.getString( + R.string.groups_invitations_response_accepted_received, + contactName.getValue()); + } else { + text = ctx.getString( + R.string.groups_invitations_response_declined_received, + contactName.getValue()); + } + return new ConversationNoticeInItem(text, r); + } + } + + @Override + public ConversationItem visitIntroductionRequest(IntroductionRequest r) { + if (r.isLocal()) { + String text = ctx.getString(R.string.introduction_request_sent, + contactName.getValue(), r.getName()); + return new ConversationNoticeOutItem(text, r); + } else { + String text = ctx.getString(R.string.introduction_request_received, + contactName.getValue(), r.getName()); + return new ConversationRequestItem(text, INTRODUCTION, r); + } + } + + @Override + public ConversationItem visitIntroductionResponse(IntroductionResponse r) { + if (r.isLocal()) { + String text; + if (r.wasAccepted()) { + String introducee = r.getIntroducedAuthor().getName(); + text = ctx.getString( + R.string.introduction_response_accepted_sent, + introducee) + + "\n\n" + ctx.getString( + R.string.introduction_response_accepted_sent_info, + introducee); + } else { + text = ctx.getString( + R.string.introduction_response_declined_sent, + r.getIntroducedAuthor().getName()); + } + return new ConversationNoticeOutItem(text, r); + } else { + String text; + if (r.wasAccepted()) { + text = ctx.getString( + R.string.introduction_response_accepted_received, + contactName.getValue(), + r.getIntroducedAuthor().getName()); + } else if (r.isIntroducer()) { + text = ctx.getString( + R.string.introduction_response_declined_received, + contactName.getValue(), + r.getIntroducedAuthor().getName()); + } else { + text = ctx.getString( + R.string.introduction_response_declined_received_by_introducee, + contactName.getValue(), + r.getIntroducedAuthor().getName()); + } + return new ConversationNoticeInItem(text, r); + } + } + + interface BodyCache { + @Nullable + String getBody(MessageId m); + } +}