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.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))

View File

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

View File

@@ -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();

View File

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

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

View File

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

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

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.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))