diff --git a/briar-android/src/org/briarproject/android/contact/ConversationActivity.java b/briar-android/src/org/briarproject/android/contact/ConversationActivity.java index d50adf35a5b08381363b645ebcfca8f93ac2f298..b1507615aedf709d828438b94a05ab584553592c 100644 --- a/briar-android/src/org/briarproject/android/contact/ConversationActivity.java +++ b/briar-android/src/org/briarproject/android/contact/ConversationActivity.java @@ -47,7 +47,6 @@ import org.briarproject.api.event.EventListener; import org.briarproject.api.event.ForumInvitationReceivedEvent; import org.briarproject.api.event.IntroductionRequestReceivedEvent; import org.briarproject.api.event.IntroductionResponseReceivedEvent; -import org.briarproject.api.event.MessageStateChangedEvent; import org.briarproject.api.event.MessagesAckedEvent; import org.briarproject.api.event.MessagesSentEvent; import org.briarproject.api.event.PrivateMessageReceivedEvent; @@ -63,7 +62,6 @@ import org.briarproject.api.messaging.PrivateMessageFactory; import org.briarproject.api.messaging.PrivateMessageHeader; import org.briarproject.api.plugins.ConnectionRegistry; import org.briarproject.api.sync.GroupId; -import org.briarproject.api.sync.Message; import org.briarproject.api.sync.MessageId; import org.briarproject.util.StringUtils; @@ -88,7 +86,6 @@ import static java.util.logging.Level.INFO; import static java.util.logging.Level.WARNING; import static org.briarproject.android.contact.ConversationItem.IncomingItem; import static org.briarproject.android.contact.ConversationItem.OutgoingItem; -import static org.briarproject.api.sync.ValidationManager.State.DELIVERED; public class ConversationActivity extends BriarActivity implements EventListener, OnClickListener, @@ -98,14 +95,13 @@ public class ConversationActivity extends BriarActivity Logger.getLogger(ConversationActivity.class.getName()); @Inject - protected AndroidNotificationManager notificationManager; + AndroidNotificationManager notificationManager; @Inject protected ConnectionRegistry connectionRegistry; @Inject @CryptoExecutor protected Executor cryptoExecutor; - private Map<MessageId, byte[]> bodyCache = new HashMap<>(); private ConversationAdapter adapter; private CircleImageView toolbarAvatar; private ImageView toolbarStatus; @@ -122,7 +118,7 @@ public class ConversationActivity extends BriarActivity @Inject protected volatile EventBus eventBus; @Inject - protected volatile PrivateMessageFactory privateMessageFactory; + volatile PrivateMessageFactory privateMessageFactory; @Inject protected volatile IntroductionManager introductionManager; @Inject @@ -133,6 +129,7 @@ public class ConversationActivity extends BriarActivity private volatile String contactName = null; private volatile byte[] contactIdenticonKey = null; private volatile boolean connected = false; + private volatile Map<MessageId, byte[]> bodyCache = new HashMap<>(); @Override public void onCreate(Bundle state) { @@ -147,10 +144,13 @@ public class ConversationActivity extends BriarActivity // Custom Toolbar Toolbar tb = (Toolbar) findViewById(R.id.toolbar); - toolbarAvatar = (CircleImageView) tb.findViewById(R.id.contactAvatar); - toolbarStatus = (ImageView) tb.findViewById(R.id.contactStatus); - toolbarTitle = (TextView) tb.findViewById(R.id.contactName); - setSupportActionBar(tb); + if (tb != null) { + toolbarAvatar = + (CircleImageView) tb.findViewById(R.id.contactAvatar); + toolbarStatus = (ImageView) tb.findViewById(R.id.contactStatus); + toolbarTitle = (TextView) tb.findViewById(R.id.contactName); + setSupportActionBar(tb); + } ActionBar ab = getSupportActionBar(); if (ab != null) { ab.setDisplayShowHomeEnabled(true); @@ -171,8 +171,11 @@ public class ConversationActivity extends BriarActivity content = (EditText) findViewById(R.id.contentView); sendButton = (ImageButton) findViewById(R.id.sendButton); - sendButton.setEnabled(false); // Enabled after loading the conversation - sendButton.setOnClickListener(this); + if (sendButton != null) { + // Enabled after loading the conversation + sendButton.setEnabled(false); + sendButton.setOnClickListener(this); + } } @Override @@ -236,7 +239,7 @@ public class ConversationActivity extends BriarActivity @Override public void onBackPressed() { - // FIXME disabled exit transition, because it doesn't work for some reason + // FIXME disabled exit transition, because it doesn't work for some reason #318 //supportFinishAfterTransition(); finish(); } @@ -479,15 +482,6 @@ public class ConversationActivity extends BriarActivity loadMessageBody(h); markMessageReadIfNew(h); } - } else if (e instanceof MessageStateChangedEvent) { - MessageStateChangedEvent m = (MessageStateChangedEvent) e; - if (m.getState() == DELIVERED && - m.getMessage().getGroupId().equals(groupId)) { - if (m.isLocal()) { - LOG.info("Message added, reloading"); - loadMessages(); - } - } } else if (e instanceof MessagesSentEvent) { MessagesSentEvent m = (MessagesSentEvent) e; if (m.getContactId().equals(contactId)) { @@ -615,8 +609,9 @@ public class ConversationActivity extends BriarActivity @Override public void run() { try { - storeMessage(privateMessageFactory.createPrivateMessage( - groupId, timestamp, null, "text/plain", body)); + storeMessage(privateMessageFactory + .createPrivateMessage(groupId, timestamp, null, + "text/plain", body), body); } catch (FormatException e) { throw new RuntimeException(e); } @@ -624,7 +619,7 @@ public class ConversationActivity extends BriarActivity }); } - private void storeMessage(final PrivateMessage m) { + private void storeMessage(final PrivateMessage m, final byte[] body) { runOnDbThread(new Runnable() { @Override public void run() { @@ -634,6 +629,16 @@ public class ConversationActivity extends BriarActivity long duration = System.currentTimeMillis() - now; if (LOG.isLoggable(INFO)) LOG.info("Storing message took " + duration + " ms"); + + PrivateMessageHeader h = new PrivateMessageHeader( + m.getMessage().getId(), + m.getMessage().getTimestamp(), m.getContentType(), + true, false, false, false); + ConversationMessageItem item = + (ConversationMessageItem) ConversationItem.from(h); + item.setBody(body); + bodyCache.put(m.getMessage().getId(), body); + addConversationItem(item); } catch (DbException e) { if (LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e);