Always show forums posts expanded in conversation view. Bug #32.

This commit is contained in:
akwizgran
2014-02-09 14:28:52 +00:00
parent 1f169dd160
commit 021e6f2cda
3 changed files with 30 additions and 54 deletions

View File

@@ -151,35 +151,21 @@ OnClickListener, OnItemClickListener {
list.setVisibility(VISIBLE); list.setVisibility(VISIBLE);
loading.setVisibility(GONE); loading.setVisibility(GONE);
adapter.clear(); adapter.clear();
for(MessageHeader h : headers) adapter.add(new GroupItem(h)); for(MessageHeader h : headers) {
GroupItem item = new GroupItem(h);
byte[] body = bodyCache.get(h.getId());
if(body == null) loadMessageBody(h);
else item.setBody(body);
adapter.add(item);
}
adapter.sort(GroupItemComparator.INSTANCE); adapter.sort(GroupItemComparator.INSTANCE);
adapter.notifyDataSetChanged(); adapter.notifyDataSetChanged();
expandMessages(); // Scroll to the bottom
list.setSelection(adapter.getCount() - 1);
} }
}); });
} }
private void expandMessages() {
// Expand unread messages and the last three messages
int count = adapter.getCount();
if(count == 0) return;
for(int i = 0; i < count; i++) {
GroupItem item = adapter.getItem(i);
MessageHeader h = item.getHeader();
if(h.isRead() && i < count - 3) {
item.setExpanded(false);
} else {
item.setExpanded(true);
item.setExpanded(true);
byte[] body = bodyCache.get(h.getId());
if(body == null) loadMessageBody(h);
else item.setBody(body);
}
}
// Scroll to the bottom
list.setSelection(count - 1);
}
private void loadMessageBody(final MessageHeader h) { private void loadMessageBody(final MessageHeader h) {
dbUiExecutor.execute(new Runnable() { dbUiExecutor.execute(new Runnable() {
public void run() { public void run() {
@@ -215,10 +201,9 @@ OnClickListener, OnItemClickListener {
GroupItem item = adapter.getItem(i); GroupItem item = adapter.getItem(i);
if(item.getHeader().getId().equals(m)) { if(item.getHeader().getId().equals(m)) {
item.setBody(body); item.setBody(body);
if(item.isExpanded()) { adapter.notifyDataSetChanged();
adapter.notifyDataSetChanged(); // Scroll to the bottom
list.setSelection(count - 1); list.setSelection(count - 1);
}
return; return;
} }
} }

View File

@@ -43,13 +43,17 @@ class GroupAdapter extends ArrayAdapter<GroupItem> {
Context ctx = getContext(); Context ctx = getContext();
Resources res = ctx.getResources(); Resources res = ctx.getResources();
LinearLayout headerLayout = new LinearLayout(ctx); LinearLayout layout = new LinearLayout(ctx);
headerLayout.setOrientation(HORIZONTAL); layout.setOrientation(VERTICAL);
headerLayout.setGravity(CENTER_VERTICAL); layout.setGravity(CENTER_HORIZONTAL);
int background; int background;
if(header.isRead()) background = res.getColor(R.color.read_background); if(header.isRead()) background = res.getColor(R.color.read_background);
else background = res.getColor(R.color.unread_background); else background = res.getColor(R.color.unread_background);
headerLayout.setBackgroundColor(background); layout.setBackgroundColor(background);
LinearLayout headerLayout = new LinearLayout(ctx);
headerLayout.setOrientation(HORIZONTAL);
headerLayout.setGravity(CENTER_VERTICAL);
AuthorView authorView = new AuthorView(ctx); AuthorView authorView = new AuthorView(ctx);
authorView.setLayoutParams(WRAP_WRAP_1); authorView.setLayoutParams(WRAP_WRAP_1);
@@ -64,28 +68,25 @@ class GroupAdapter extends ArrayAdapter<GroupItem> {
long then = header.getTimestamp(), now = System.currentTimeMillis(); long then = header.getTimestamp(), now = System.currentTimeMillis();
date.setText(DateUtils.formatSameDayTime(then, now, SHORT, SHORT)); date.setText(DateUtils.formatSameDayTime(then, now, SHORT, SHORT));
headerLayout.addView(date); headerLayout.addView(date);
layout.addView(headerLayout);
if(!item.isExpanded() || item.getBody() == null) return headerLayout; if(item.getBody() == null) {
TextView ellipsis = new TextView(ctx);
LinearLayout expanded = new LinearLayout(ctx); ellipsis.setPadding(pad, 0, pad, pad);
expanded.setOrientation(VERTICAL); ellipsis.setText("\u2026");
expanded.setGravity(CENTER_HORIZONTAL); layout.addView(ellipsis);
expanded.setBackgroundColor(background); } else if(header.getContentType().equals("text/plain")) {
expanded.addView(headerLayout);
if(header.getContentType().equals("text/plain")) {
TextView text = new TextView(ctx); TextView text = new TextView(ctx);
text.setPadding(pad, 0, pad, pad); text.setPadding(pad, 0, pad, pad);
text.setBackgroundColor(background);
text.setText(StringUtils.fromUtf8(item.getBody())); text.setText(StringUtils.fromUtf8(item.getBody()));
expanded.addView(text); layout.addView(text);
} else { } else {
ImageButton attachment = new ImageButton(ctx); ImageButton attachment = new ImageButton(ctx);
attachment.setPadding(pad, 0, pad, pad); attachment.setPadding(pad, 0, pad, pad);
attachment.setImageResource(R.drawable.content_attachment); attachment.setImageResource(R.drawable.content_attachment);
expanded.addView(attachment); layout.addView(attachment);
} }
return expanded; return layout;
} }
} }

View File

@@ -6,12 +6,10 @@ import org.briarproject.api.db.MessageHeader;
class GroupItem { class GroupItem {
private final MessageHeader header; private final MessageHeader header;
private boolean expanded;
private byte[] body; private byte[] body;
GroupItem(MessageHeader header) { GroupItem(MessageHeader header) {
this.header = header; this.header = header;
expanded = false;
body = null; body = null;
} }
@@ -19,14 +17,6 @@ class GroupItem {
return header; return header;
} }
boolean isExpanded() {
return expanded;
}
void setExpanded(boolean expanded) {
this.expanded = expanded;
}
byte[] getBody() { byte[] getBody() {
return body; return body;
} }