restructure conversation item classes

This commit is contained in:
Torsten Grote
2016-04-12 12:25:58 -03:00
parent c5bfea2155
commit f7340caec4
11 changed files with 127 additions and 76 deletions

View File

@@ -6,7 +6,6 @@ import android.os.Bundle;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton; import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.ActivityOptionsCompat; import android.support.v4.app.ActivityOptionsCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.LinearLayoutManager;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@@ -297,7 +296,7 @@ public class ContactListFragment extends BaseEventFragment {
Collection<PrivateMessageHeader> headers = Collection<PrivateMessageHeader> headers =
messagingManager.getMessageHeaders(id); messagingManager.getMessageHeaders(id);
for (PrivateMessageHeader h : headers) { for (PrivateMessageHeader h : headers) {
messages.add(new ConversationMessageItem(h)); messages.add(ConversationItem.from(h));
} }
long duration = System.currentTimeMillis() - now; long duration = System.currentTimeMillis() - now;
if (LOG.isLoggable(INFO)) if (LOG.isLoggable(INFO))

View File

@@ -304,7 +304,8 @@ public class ConversationActivity extends BriarActivity
} else { } else {
for (PrivateMessageHeader h : headers) { for (PrivateMessageHeader h : headers) {
ConversationMessageItem item = ConversationMessageItem item =
new ConversationMessageItem(h); (ConversationMessageItem) ConversationItem
.from(h);
byte[] body = bodyCache.get(h.getId()); byte[] body = bodyCache.get(h.getId());
if (body == null) loadMessageBody(h); if (body == null) loadMessageBody(h);
else item.setBody(body); else item.setBody(body);

View File

@@ -163,10 +163,10 @@ class ConversationAdapter extends RecyclerView.Adapter {
PrivateMessageHeader header = item.getHeader(); PrivateMessageHeader header = item.getHeader();
if (item.getType() == MSG_OUT) { if (item instanceof ConversationItem.OutgoingItem) {
if (item.isSeen()) { if (((OutgoingItem) item).isSeen()) {
ui.status.setImageResource(R.drawable.message_delivered_white); 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); ui.status.setImageResource(R.drawable.message_sent_white);
} else { } else {
ui.status.setImageResource(R.drawable.message_stored_white); ui.status.setImageResource(R.drawable.message_stored_white);
@@ -204,7 +204,7 @@ class ConversationAdapter extends RecyclerView.Adapter {
} }
private void bindIntroduction(IntroductionHolder ui, private void bindIntroduction(IntroductionHolder ui,
final ConversationIntroductionInItem item, final int position) { final ConversationIntroductionItem item, final int position) {
final IntroductionRequest ir = item.getIntroductionRequest(); final IntroductionRequest ir = item.getIntroductionRequest();

View File

@@ -3,17 +3,14 @@ package org.briarproject.android.contact;
import org.briarproject.api.introduction.IntroductionRequest; import org.briarproject.api.introduction.IntroductionRequest;
import org.briarproject.api.sync.MessageId; import org.briarproject.api.sync.MessageId;
public class ConversationIntroductionInItem extends ConversationItem implements public class ConversationIntroductionInItem extends ConversationIntroductionItem
ConversationItem.IncomingItem { implements ConversationItem.IncomingItem {
private IntroductionRequest ir; private boolean read;
private boolean answered, read;
public ConversationIntroductionInItem(IntroductionRequest ir) { public ConversationIntroductionInItem(IntroductionRequest ir) {
super(ir.getMessageId(), ir.getTime()); super(ir);
this.ir = ir;
this.answered = ir.wasAnswered();
this.read = ir.isRead(); this.read = ir.isRead();
} }
@@ -22,18 +19,6 @@ public class ConversationIntroductionInItem extends ConversationItem implements
return INTRODUCTION_IN; return INTRODUCTION_IN;
} }
public IntroductionRequest getIntroductionRequest() {
return ir;
}
public boolean wasAnswered() {
return answered;
}
public void setAnswered(boolean answered) {
this.answered = answered;
}
@Override @Override
public boolean isRead() { public boolean isRead() {
return read; return read;

View File

@@ -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;
}
}

View File

@@ -1,7 +1,6 @@
package org.briarproject.android.contact; package org.briarproject.android.contact;
import org.briarproject.api.introduction.IntroductionRequest; import org.briarproject.api.introduction.IntroductionRequest;
import org.briarproject.api.sync.MessageId;
/** /**
* This class is needed and can not be replaced by an ConversationNoticeOutItem, * 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. * to be displayed as a regular private message.
*/ */
public class ConversationIntroductionOutItem public class ConversationIntroductionOutItem
extends ConversationIntroductionInItem extends ConversationIntroductionItem
implements ConversationItem.OutgoingItem { implements ConversationItem.OutgoingItem {
private boolean sent, seen; private boolean sent, seen;

View File

@@ -6,11 +6,13 @@ import org.briarproject.R;
import org.briarproject.api.introduction.IntroductionMessage; import org.briarproject.api.introduction.IntroductionMessage;
import org.briarproject.api.introduction.IntroductionRequest; import org.briarproject.api.introduction.IntroductionRequest;
import org.briarproject.api.introduction.IntroductionResponse; import org.briarproject.api.introduction.IntroductionResponse;
import org.briarproject.api.messaging.PrivateMessageHeader;
import org.briarproject.api.sync.MessageId; import org.briarproject.api.sync.MessageId;
// This class is not thread-safe // This class is not thread-safe
public abstract class ConversationItem { 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 = 0;
final static int MSG_IN_UNREAD = 1; final static int MSG_IN_UNREAD = 1;
final static int MSG_OUT = 2; final static int MSG_OUT = 2;
@@ -37,6 +39,13 @@ public abstract class ConversationItem {
return time; 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) { public static ConversationItem from(IntroductionRequest ir) {
if (ir.isLocal()) { if (ir.isLocal()) {
return new ConversationIntroductionOutItem(ir); return new ConversationIntroductionOutItem(ir);

View File

@@ -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;
}
}

View File

@@ -1,31 +1,18 @@
package org.briarproject.android.contact; package org.briarproject.android.contact;
import org.briarproject.api.messaging.PrivateMessageHeader; import org.briarproject.api.messaging.PrivateMessageHeader;
import org.briarproject.api.sync.MessageId;
// This class is not thread-safe // This class is not thread-safe
public class ConversationMessageItem extends ConversationItem implements abstract class ConversationMessageItem extends ConversationItem {
ConversationItem.OutgoingItem, ConversationItem.IncomingItem {
private final PrivateMessageHeader header; private final PrivateMessageHeader header;
private byte[] body; private byte[] body;
private boolean sent, seen, read;
public ConversationMessageItem(PrivateMessageHeader header) { public ConversationMessageItem(PrivateMessageHeader header) {
super(header.getId(), header.getTimestamp()); super(header.getId(), header.getTimestamp());
this.header = header; this.header = header;
body = null; 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() { PrivateMessageHeader getHeader() {
@@ -40,34 +27,4 @@ public class ConversationMessageItem extends ConversationItem implements
this.body = body; 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;
}
} }

View File

@@ -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;
}
}

View File

@@ -6,19 +6,16 @@ import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.support.v7.app.AlertDialog; import android.support.v7.app.AlertDialog;
import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.LinearLayoutManager;
import android.transition.ChangeBounds;
import android.transition.Fade; import android.transition.Fade;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.Toast;
import org.briarproject.R; import org.briarproject.R;
import org.briarproject.android.AndroidComponent; import org.briarproject.android.AndroidComponent;
import org.briarproject.android.contact.ContactListAdapter; import org.briarproject.android.contact.ContactListAdapter;
import org.briarproject.android.contact.ContactListItem; import org.briarproject.android.contact.ContactListItem;
import org.briarproject.android.contact.ConversationItem; import org.briarproject.android.contact.ConversationItem;
import org.briarproject.android.contact.ConversationMessageItem;
import org.briarproject.android.fragment.BaseFragment; import org.briarproject.android.fragment.BaseFragment;
import org.briarproject.android.util.BriarRecyclerView; import org.briarproject.android.util.BriarRecyclerView;
import org.briarproject.api.contact.Contact; import org.briarproject.api.contact.Contact;
@@ -218,7 +215,7 @@ public class ContactChooserFragment extends BaseFragment {
Collection<PrivateMessageHeader> headers = Collection<PrivateMessageHeader> headers =
messagingManager.getMessageHeaders(id); messagingManager.getMessageHeaders(id);
for (PrivateMessageHeader h : headers) { for (PrivateMessageHeader h : headers) {
messages.add(new ConversationMessageItem(h)); messages.add(ConversationItem.from(h));
} }
long duration = System.currentTimeMillis() - now; long duration = System.currentTimeMillis() - now;
if (LOG.isLoggable(INFO)) if (LOG.isLoggable(INFO))