[android] use ScrollListener to mark messages read in private conversation

This commit is contained in:
Torsten Grote
2019-03-04 15:15:59 -03:00
parent 1c227e81e4
commit 880d77922e
6 changed files with 49 additions and 22 deletions

View File

@@ -47,7 +47,6 @@ import org.briarproject.bramble.api.plugin.ConnectionRegistry;
import org.briarproject.bramble.api.plugin.event.ContactConnectedEvent;
import org.briarproject.bramble.api.plugin.event.ContactDisconnectedEvent;
import org.briarproject.bramble.api.settings.SettingsManager;
import org.briarproject.bramble.api.sync.GroupId;
import org.briarproject.bramble.api.sync.MessageId;
import org.briarproject.bramble.api.sync.event.MessagesAckedEvent;
import org.briarproject.bramble.api.sync.event.MessagesSentEvent;
@@ -256,6 +255,9 @@ public class ConversationActivity extends BriarActivity
list.setLayoutManager(layoutManager);
list.setAdapter(adapter);
list.setEmptyText(getString(R.string.no_private_messages));
ConversationScrollListener scrollListener =
new ConversationScrollListener(adapter, viewModel);
list.getRecyclerView().addOnScrollListener(scrollListener);
textInputView = findViewById(R.id.text_input_container);
if (FEATURE_FLAG_IMAGE_ATTACHMENTS) {
@@ -787,23 +789,6 @@ public class ConversationActivity extends BriarActivity
.show();
}
@Override
public void onItemVisible(ConversationItem item) {
if (!item.isRead()) markMessageRead(item.getGroupId(), item.getId());
}
private void markMessageRead(GroupId g, MessageId m) {
runOnDbThread(() -> {
try {
long start = now();
messagingManager.setReadFlag(g, m, true);
logDuration(LOG, "Marking read", start);
} catch (DbException e) {
logException(LOG, WARNING, e);
}
});
}
@UiThread
@Override
public void respondToRequest(ConversationRequestItem item, boolean accept) {

View File

@@ -14,12 +14,14 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.sync.MessageId;
import org.briarproject.briar.R;
import org.briarproject.briar.android.util.BriarAdapter;
import org.briarproject.briar.android.util.ItemReturningAdapter;
import javax.annotation.Nullable;
@NotNullByDefault
class ConversationAdapter
extends BriarAdapter<ConversationItem, ConversationItemViewHolder> {
extends BriarAdapter<ConversationItem, ConversationItemViewHolder>
implements ItemReturningAdapter<ConversationItem> {
private ConversationListener listener;
private final RecycledViewPool imageViewPool;
@@ -69,7 +71,6 @@ class ConversationAdapter
public void onBindViewHolder(ConversationItemViewHolder ui, int position) {
ConversationItem item = items.get(position);
ui.bind(item);
listener.onItemVisible(item);
}
@Override

View File

@@ -69,6 +69,10 @@ abstract class ConversationItem {
return read;
}
void markRead() {
read = true;
}
/**
* Only useful for outgoing messages.
*/

View File

@@ -9,8 +9,6 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
@NotNullByDefault
interface ConversationListener {
void onItemVisible(ConversationItem item);
void respondToRequest(ConversationRequestItem item, boolean accept);
void openRequestedShareable(ConversationRequestItem item);

View File

@@ -0,0 +1,26 @@
package org.briarproject.briar.android.conversation;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.briar.android.view.BriarRecyclerViewScrollListener;
@NotNullByDefault
class ConversationScrollListener extends
BriarRecyclerViewScrollListener<ConversationAdapter, ConversationItem> {
private final ConversationViewModel viewModel;
protected ConversationScrollListener(ConversationAdapter adapter,
ConversationViewModel viewModel) {
super(adapter);
this.viewModel = viewModel;
}
@Override
protected void onNewItemVisible(ConversationItem item) {
if (!item.isRead()) {
viewModel.markMessageRead(item.getGroupId(), item.getId());
item.markRead();
}
}
}

View File

@@ -26,6 +26,7 @@ import org.briarproject.bramble.api.settings.Settings;
import org.briarproject.bramble.api.settings.SettingsManager;
import org.briarproject.bramble.api.sync.GroupId;
import org.briarproject.bramble.api.sync.Message;
import org.briarproject.bramble.api.sync.MessageId;
import org.briarproject.briar.android.util.UiUtils;
import org.briarproject.briar.api.messaging.Attachment;
import org.briarproject.briar.api.messaging.AttachmentHeader;
@@ -150,6 +151,18 @@ public class ConversationViewModel extends AndroidViewModel {
});
}
void markMessageRead(GroupId g, MessageId m) {
dbExecutor.execute(() -> {
try {
long start = now();
messagingManager.setReadFlag(g, m, true);
logDuration(LOG, "Marking read", start);
} catch (DbException e) {
logException(LOG, WARNING, e);
}
});
}
void setContactAlias(String alias) {
dbExecutor.execute(() -> {
try {