From f7340caec4a3058f1cf4b2213070c3c6eba95db4 Mon Sep 17 00:00:00 2001 From: Torsten Grote <t@grobox.de> Date: Tue, 12 Apr 2016 12:25:58 -0300 Subject: [PATCH] restructure conversation item classes --- .../android/contact/ContactListFragment.java | 3 +- .../android/contact/ConversationActivity.java | 3 +- .../android/contact/ConversationAdapter.java | 8 ++-- .../ConversationIntroductionInItem.java | 23 ++-------- .../contact/ConversationIntroductionItem.java | 29 ++++++++++++ .../ConversationIntroductionOutItem.java | 3 +- .../android/contact/ConversationItem.java | 9 ++++ .../contact/ConversationMessageInItem.java | 32 +++++++++++++ .../contact/ConversationMessageItem.java | 45 +------------------ .../contact/ConversationMessageOutItem.java | 43 ++++++++++++++++++ .../introduction/ContactChooserFragment.java | 5 +-- 11 files changed, 127 insertions(+), 76 deletions(-) create mode 100644 briar-android/src/org/briarproject/android/contact/ConversationIntroductionItem.java create mode 100644 briar-android/src/org/briarproject/android/contact/ConversationMessageInItem.java create mode 100644 briar-android/src/org/briarproject/android/contact/ConversationMessageOutItem.java diff --git a/briar-android/src/org/briarproject/android/contact/ContactListFragment.java b/briar-android/src/org/briarproject/android/contact/ContactListFragment.java index f71a93a477..0556310213 100644 --- a/briar-android/src/org/briarproject/android/contact/ContactListFragment.java +++ b/briar-android/src/org/briarproject/android/contact/ContactListFragment.java @@ -6,7 +6,6 @@ import android.os.Bundle; import android.support.annotation.Nullable; import android.support.design.widget.FloatingActionButton; import android.support.v4.app.ActivityOptionsCompat; -import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.view.LayoutInflater; import android.view.View; @@ -297,7 +296,7 @@ public class ContactListFragment extends BaseEventFragment { Collection<PrivateMessageHeader> headers = messagingManager.getMessageHeaders(id); for (PrivateMessageHeader h : headers) { - messages.add(new ConversationMessageItem(h)); + messages.add(ConversationItem.from(h)); } long duration = System.currentTimeMillis() - now; if (LOG.isLoggable(INFO)) diff --git a/briar-android/src/org/briarproject/android/contact/ConversationActivity.java b/briar-android/src/org/briarproject/android/contact/ConversationActivity.java index 5e97e2130e..ae09f0a416 100644 --- a/briar-android/src/org/briarproject/android/contact/ConversationActivity.java +++ b/briar-android/src/org/briarproject/android/contact/ConversationActivity.java @@ -304,7 +304,8 @@ public class ConversationActivity extends BriarActivity } else { for (PrivateMessageHeader h : headers) { ConversationMessageItem item = - new ConversationMessageItem(h); + (ConversationMessageItem) ConversationItem + .from(h); byte[] body = bodyCache.get(h.getId()); if (body == null) loadMessageBody(h); else item.setBody(body); diff --git a/briar-android/src/org/briarproject/android/contact/ConversationAdapter.java b/briar-android/src/org/briarproject/android/contact/ConversationAdapter.java index de62800d13..e4c2977889 100644 --- a/briar-android/src/org/briarproject/android/contact/ConversationAdapter.java +++ b/briar-android/src/org/briarproject/android/contact/ConversationAdapter.java @@ -163,10 +163,10 @@ class ConversationAdapter extends RecyclerView.Adapter { PrivateMessageHeader header = item.getHeader(); - if (item.getType() == MSG_OUT) { - if (item.isSeen()) { + if (item instanceof ConversationItem.OutgoingItem) { + if (((OutgoingItem) item).isSeen()) { ui.status.setImageResource(R.drawable.message_delivered_white); - } else if (item.isSent()) { + } else if (((OutgoingItem) item).isSent()) { ui.status.setImageResource(R.drawable.message_sent_white); } else { ui.status.setImageResource(R.drawable.message_stored_white); @@ -204,7 +204,7 @@ class ConversationAdapter extends RecyclerView.Adapter { } private void bindIntroduction(IntroductionHolder ui, - final ConversationIntroductionInItem item, final int position) { + final ConversationIntroductionItem item, final int position) { final IntroductionRequest ir = item.getIntroductionRequest(); diff --git a/briar-android/src/org/briarproject/android/contact/ConversationIntroductionInItem.java b/briar-android/src/org/briarproject/android/contact/ConversationIntroductionInItem.java index 939f808792..fb891d0a1b 100644 --- a/briar-android/src/org/briarproject/android/contact/ConversationIntroductionInItem.java +++ b/briar-android/src/org/briarproject/android/contact/ConversationIntroductionInItem.java @@ -3,17 +3,14 @@ package org.briarproject.android.contact; import org.briarproject.api.introduction.IntroductionRequest; import org.briarproject.api.sync.MessageId; -public class ConversationIntroductionInItem extends ConversationItem implements - ConversationItem.IncomingItem { +public class ConversationIntroductionInItem extends ConversationIntroductionItem + implements ConversationItem.IncomingItem { - private IntroductionRequest ir; - private boolean answered, read; + private boolean read; public ConversationIntroductionInItem(IntroductionRequest ir) { - super(ir.getMessageId(), ir.getTime()); + super(ir); - this.ir = ir; - this.answered = ir.wasAnswered(); this.read = ir.isRead(); } @@ -22,18 +19,6 @@ public class ConversationIntroductionInItem extends ConversationItem implements return INTRODUCTION_IN; } - public IntroductionRequest getIntroductionRequest() { - return ir; - } - - public boolean wasAnswered() { - return answered; - } - - public void setAnswered(boolean answered) { - this.answered = answered; - } - @Override public boolean isRead() { return read; diff --git a/briar-android/src/org/briarproject/android/contact/ConversationIntroductionItem.java b/briar-android/src/org/briarproject/android/contact/ConversationIntroductionItem.java new file mode 100644 index 0000000000..e955ea3a47 --- /dev/null +++ b/briar-android/src/org/briarproject/android/contact/ConversationIntroductionItem.java @@ -0,0 +1,29 @@ +package org.briarproject.android.contact; + +import org.briarproject.api.introduction.IntroductionRequest; + +abstract class ConversationIntroductionItem extends ConversationItem { + + private IntroductionRequest ir; + private boolean answered; + + public ConversationIntroductionItem(IntroductionRequest ir) { + super(ir.getMessageId(), ir.getTime()); + + this.ir = ir; + this.answered = ir.wasAnswered(); + } + + public IntroductionRequest getIntroductionRequest() { + return ir; + } + + public boolean wasAnswered() { + return answered; + } + + public void setAnswered(boolean answered) { + this.answered = answered; + } + +} diff --git a/briar-android/src/org/briarproject/android/contact/ConversationIntroductionOutItem.java b/briar-android/src/org/briarproject/android/contact/ConversationIntroductionOutItem.java index 37f32a83d9..a2aba398f9 100644 --- a/briar-android/src/org/briarproject/android/contact/ConversationIntroductionOutItem.java +++ b/briar-android/src/org/briarproject/android/contact/ConversationIntroductionOutItem.java @@ -1,7 +1,6 @@ package org.briarproject.android.contact; import org.briarproject.api.introduction.IntroductionRequest; -import org.briarproject.api.sync.MessageId; /** * This class is needed and can not be replaced by an ConversationNoticeOutItem, @@ -9,7 +8,7 @@ import org.briarproject.api.sync.MessageId; * to be displayed as a regular private message. */ public class ConversationIntroductionOutItem - extends ConversationIntroductionInItem + extends ConversationIntroductionItem implements ConversationItem.OutgoingItem { private boolean sent, seen; diff --git a/briar-android/src/org/briarproject/android/contact/ConversationItem.java b/briar-android/src/org/briarproject/android/contact/ConversationItem.java index ad037996c4..2c1492a8c3 100644 --- a/briar-android/src/org/briarproject/android/contact/ConversationItem.java +++ b/briar-android/src/org/briarproject/android/contact/ConversationItem.java @@ -6,11 +6,13 @@ import org.briarproject.R; import org.briarproject.api.introduction.IntroductionMessage; import org.briarproject.api.introduction.IntroductionRequest; import org.briarproject.api.introduction.IntroductionResponse; +import org.briarproject.api.messaging.PrivateMessageHeader; import org.briarproject.api.sync.MessageId; // This class is not thread-safe public abstract class ConversationItem { + // this is needed for RecyclerView adapter which requires an int type final static int MSG_IN = 0; final static int MSG_IN_UNREAD = 1; final static int MSG_OUT = 2; @@ -37,6 +39,13 @@ public abstract class ConversationItem { return time; } + public static ConversationItem from(PrivateMessageHeader h) { + if (h.isLocal()) + return new ConversationMessageOutItem(h); + else + return new ConversationMessageInItem(h); + } + public static ConversationItem from(IntroductionRequest ir) { if (ir.isLocal()) { return new ConversationIntroductionOutItem(ir); diff --git a/briar-android/src/org/briarproject/android/contact/ConversationMessageInItem.java b/briar-android/src/org/briarproject/android/contact/ConversationMessageInItem.java new file mode 100644 index 0000000000..c24f86a128 --- /dev/null +++ b/briar-android/src/org/briarproject/android/contact/ConversationMessageInItem.java @@ -0,0 +1,32 @@ +package org.briarproject.android.contact; + +import org.briarproject.api.messaging.PrivateMessageHeader; + +// This class is not thread-safe +public class ConversationMessageInItem extends ConversationMessageItem + implements ConversationItem.IncomingItem { + + private boolean read; + + public ConversationMessageInItem(PrivateMessageHeader header) { + super(header); + + read = header.isRead(); + } + + @Override + int getType() { + return MSG_IN; + } + + @Override + public boolean isRead() { + return read; + } + + @Override + public void setRead(boolean read) { + this.read = read; + } + +} diff --git a/briar-android/src/org/briarproject/android/contact/ConversationMessageItem.java b/briar-android/src/org/briarproject/android/contact/ConversationMessageItem.java index 38e5afab0c..db780efbca 100644 --- a/briar-android/src/org/briarproject/android/contact/ConversationMessageItem.java +++ b/briar-android/src/org/briarproject/android/contact/ConversationMessageItem.java @@ -1,31 +1,18 @@ package org.briarproject.android.contact; import org.briarproject.api.messaging.PrivateMessageHeader; -import org.briarproject.api.sync.MessageId; // This class is not thread-safe -public class ConversationMessageItem extends ConversationItem implements - ConversationItem.OutgoingItem, ConversationItem.IncomingItem { +abstract class ConversationMessageItem extends ConversationItem { private final PrivateMessageHeader header; private byte[] body; - private boolean sent, seen, read; public ConversationMessageItem(PrivateMessageHeader header) { super(header.getId(), header.getTimestamp()); this.header = header; body = null; - sent = header.isSent(); - seen = header.isSeen(); - read = header.isRead(); - } - - @Override - int getType() { - if (getHeader().isLocal()) return MSG_OUT; - if (getHeader().isRead()) return MSG_IN; - return MSG_IN_UNREAD; } PrivateMessageHeader getHeader() { @@ -40,34 +27,4 @@ public class ConversationMessageItem extends ConversationItem implements this.body = body; } - @Override - public boolean isSent() { - return sent; - } - - @Override - public void setSent(boolean sent) { - this.sent = sent; - } - - @Override - public boolean isSeen() { - return seen; - } - - @Override - public void setSeen(boolean seen) { - this.seen = seen; - } - - @Override - public boolean isRead() { - return read; - } - - @Override - public void setRead(boolean read) { - this.read = read; - } - } diff --git a/briar-android/src/org/briarproject/android/contact/ConversationMessageOutItem.java b/briar-android/src/org/briarproject/android/contact/ConversationMessageOutItem.java new file mode 100644 index 0000000000..cfdf871afb --- /dev/null +++ b/briar-android/src/org/briarproject/android/contact/ConversationMessageOutItem.java @@ -0,0 +1,43 @@ +package org.briarproject.android.contact; + +import org.briarproject.api.messaging.PrivateMessageHeader; + +// This class is not thread-safe +public class ConversationMessageOutItem extends ConversationMessageItem + implements ConversationItem.OutgoingItem { + + private boolean sent, seen; + + public ConversationMessageOutItem(PrivateMessageHeader header) { + super(header); + + sent = header.isSent(); + seen = header.isSeen(); + } + + @Override + int getType() { + return MSG_OUT; + } + + @Override + public boolean isSent() { + return sent; + } + + @Override + public void setSent(boolean sent) { + this.sent = sent; + } + + @Override + public boolean isSeen() { + return seen; + } + + @Override + public void setSeen(boolean seen) { + this.seen = seen; + } + +} diff --git a/briar-android/src/org/briarproject/android/introduction/ContactChooserFragment.java b/briar-android/src/org/briarproject/android/introduction/ContactChooserFragment.java index 4fcdbdd555..ec5c276797 100644 --- a/briar-android/src/org/briarproject/android/introduction/ContactChooserFragment.java +++ b/briar-android/src/org/briarproject/android/introduction/ContactChooserFragment.java @@ -6,19 +6,16 @@ import android.os.Build; import android.os.Bundle; import android.support.v7.app.AlertDialog; import android.support.v7.widget.LinearLayoutManager; -import android.transition.ChangeBounds; import android.transition.Fade; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.Toast; import org.briarproject.R; import org.briarproject.android.AndroidComponent; import org.briarproject.android.contact.ContactListAdapter; import org.briarproject.android.contact.ContactListItem; import org.briarproject.android.contact.ConversationItem; -import org.briarproject.android.contact.ConversationMessageItem; import org.briarproject.android.fragment.BaseFragment; import org.briarproject.android.util.BriarRecyclerView; import org.briarproject.api.contact.Contact; @@ -218,7 +215,7 @@ public class ContactChooserFragment extends BaseFragment { Collection<PrivateMessageHeader> headers = messagingManager.getMessageHeaders(id); for (PrivateMessageHeader h : headers) { - messages.add(new ConversationMessageItem(h)); + messages.add(ConversationItem.from(h)); } long duration = System.currentTimeMillis() - now; if (LOG.isLoggable(INFO)) -- GitLab