mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-15 04:18:53 +01:00
Add ShardMessageHeader
This commit is contained in:
@@ -3,6 +3,7 @@ package org.briarproject.briar.android.conversation;
|
|||||||
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||||
import org.briarproject.briar.api.conversation.ConversationRequest;
|
import org.briarproject.briar.api.conversation.ConversationRequest;
|
||||||
import org.briarproject.briar.api.conversation.ConversationResponse;
|
import org.briarproject.briar.api.conversation.ConversationResponse;
|
||||||
|
import org.briarproject.briar.api.socialbackup.ShardMessageHeader;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import javax.annotation.concurrent.NotThreadSafe;
|
import javax.annotation.concurrent.NotThreadSafe;
|
||||||
@@ -30,6 +31,13 @@ class ConversationNoticeItem extends ConversationItem {
|
|||||||
this.msgText = null;
|
this.msgText = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ConversationNoticeItem(@LayoutRes int layoutRes, String text,
|
||||||
|
ShardMessageHeader r) {
|
||||||
|
super(layoutRes, r);
|
||||||
|
this.text = text;
|
||||||
|
this.msgText = null;
|
||||||
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
String getMsgText() {
|
String getMsgText() {
|
||||||
return msgText;
|
return msgText;
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import org.briarproject.briar.api.introduction.IntroductionResponse;
|
|||||||
import org.briarproject.briar.api.messaging.PrivateMessageHeader;
|
import org.briarproject.briar.api.messaging.PrivateMessageHeader;
|
||||||
import org.briarproject.briar.api.privategroup.invitation.GroupInvitationRequest;
|
import org.briarproject.briar.api.privategroup.invitation.GroupInvitationRequest;
|
||||||
import org.briarproject.briar.api.privategroup.invitation.GroupInvitationResponse;
|
import org.briarproject.briar.api.privategroup.invitation.GroupInvitationResponse;
|
||||||
|
import org.briarproject.briar.api.socialbackup.ShardMessageHeader;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -292,6 +293,19 @@ class ConversationVisitor implements
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ConversationItem visitShardMessage(ShardMessageHeader r) {
|
||||||
|
if (r.isLocal()) {
|
||||||
|
String text = ctx.getString(R.string.social_backup_shard_sent);
|
||||||
|
return new ConversationNoticeItem(
|
||||||
|
R.layout.list_item_conversation_notice_out, text, r);
|
||||||
|
} else {
|
||||||
|
String text = ctx.getString(R.string.social_backup_shard_received);
|
||||||
|
return new ConversationNoticeItem(
|
||||||
|
R.layout.list_item_conversation_notice_in, text, r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
interface TextCache {
|
interface TextCache {
|
||||||
@Nullable
|
@Nullable
|
||||||
String getText(MessageId m);
|
String getText(MessageId m);
|
||||||
|
|||||||
@@ -3,8 +3,6 @@ package org.briarproject.briar.android.socialbackup;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import androidx.fragment.app.FragmentTransaction;
|
|
||||||
|
|
||||||
import org.briarproject.bramble.api.contact.ContactId;
|
import org.briarproject.bramble.api.contact.ContactId;
|
||||||
import org.briarproject.bramble.api.db.DatabaseComponent;
|
import org.briarproject.bramble.api.db.DatabaseComponent;
|
||||||
import org.briarproject.bramble.api.db.DbException;
|
import org.briarproject.bramble.api.db.DbException;
|
||||||
@@ -14,7 +12,6 @@ import org.briarproject.briar.android.activity.BriarActivity;
|
|||||||
import org.briarproject.briar.android.contactselection.ContactSelectorListener;
|
import org.briarproject.briar.android.contactselection.ContactSelectorListener;
|
||||||
import org.briarproject.briar.android.fragment.BaseFragment;
|
import org.briarproject.briar.android.fragment.BaseFragment;
|
||||||
import org.briarproject.briar.api.socialbackup.BackupMetadata;
|
import org.briarproject.briar.api.socialbackup.BackupMetadata;
|
||||||
import org.briarproject.briar.api.socialbackup.Shard;
|
|
||||||
import org.briarproject.briar.api.socialbackup.SocialBackupManager;
|
import org.briarproject.briar.api.socialbackup.SocialBackupManager;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@@ -29,10 +26,10 @@ public class DistributedBackupActivity extends BriarActivity implements
|
|||||||
private Collection<ContactId> custodians;
|
private Collection<ContactId> custodians;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public SocialBackupManager socialBackupManager;
|
public SocialBackupManager socialBackupManager;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public DatabaseComponent db;
|
public DatabaseComponent db;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void injectActivity(ActivityComponent component) {
|
public void injectActivity(ActivityComponent component) {
|
||||||
@@ -43,19 +40,21 @@ public class DistributedBackupActivity extends BriarActivity implements
|
|||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setContentView(R.layout.activity_distributed_backup);
|
setContentView(R.layout.activity_distributed_backup);
|
||||||
// TODO here we should check if we already have a backup
|
// TODO here we should check if we already have a backup
|
||||||
|
|
||||||
try {
|
try {
|
||||||
db.transaction(false, txn -> {
|
db.transaction(false, txn -> {
|
||||||
BackupMetadata backupMetadata = socialBackupManager.getBackupMetadata(txn);
|
BackupMetadata backupMetadata =
|
||||||
if (backupMetadata == null) {
|
socialBackupManager.getBackupMetadata(txn);
|
||||||
CustodianSelectorFragment fragment =
|
if (backupMetadata == null) {
|
||||||
CustodianSelectorFragment.newInstance();
|
CustodianSelectorFragment fragment =
|
||||||
showInitialFragment(fragment);
|
CustodianSelectorFragment.newInstance();
|
||||||
} else {
|
showInitialFragment(fragment);
|
||||||
ExistingBackupFragment fragment = ExistingBackupFragment.newInstance(backupMetadata);
|
} else {
|
||||||
showInitialFragment(fragment);
|
ExistingBackupFragment fragment =
|
||||||
}
|
ExistingBackupFragment.newInstance(backupMetadata);
|
||||||
|
showInitialFragment(fragment);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
} catch (DbException e) {
|
} catch (DbException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@@ -68,14 +67,16 @@ public class DistributedBackupActivity extends BriarActivity implements
|
|||||||
String.format("selected %d contacts", contacts.size()),
|
String.format("selected %d contacts", contacts.size()),
|
||||||
Toast.LENGTH_SHORT).show();
|
Toast.LENGTH_SHORT).show();
|
||||||
custodians = contacts;
|
custodians = contacts;
|
||||||
ThresholdSelectorFragment fragment = ThresholdSelectorFragment.newInstance(contacts.size());
|
ThresholdSelectorFragment fragment =
|
||||||
|
ThresholdSelectorFragment.newInstance(contacts.size());
|
||||||
showNextFragment(fragment);
|
showNextFragment(fragment);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void thresholdDefined(int threshold) throws DbException {
|
public void thresholdDefined(int threshold) throws DbException {
|
||||||
db.transaction(false, txn -> {
|
db.transaction(false, txn -> {
|
||||||
socialBackupManager.createBackup(txn, (List<ContactId>) custodians, threshold);
|
socialBackupManager
|
||||||
|
.createBackup(txn, (List<ContactId>) custodians, threshold);
|
||||||
ShardsSentFragment fragment = new ShardsSentFragment();
|
ShardsSentFragment fragment = new ShardsSentFragment();
|
||||||
showNextFragment(fragment);
|
showNextFragment(fragment);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -706,10 +706,14 @@
|
|||||||
|
|
||||||
<!-- Symbols for visualising threshold values for social backup -->
|
<!-- Symbols for visualising threshold values for social backup -->
|
||||||
<string name="filled_bullet">\u25CF</string>
|
<string name="filled_bullet">\u25CF</string>
|
||||||
<string name="linear_bullet">\u25CB</string>
|
<string name="linear_bullet">\u25CB</string>
|
||||||
|
|
||||||
<!-- activity names -->
|
<!-- activity names -->
|
||||||
<string name="activity_name_distributed_backup">Social Backup</string>
|
<string name="activity_name_distributed_backup">Social Backup</string>
|
||||||
<string name="activity_name_old_distributed_backup">Old Social Backup</string>
|
<string name="activity_name_old_distributed_backup">Old Social Backup</string>
|
||||||
|
|
||||||
|
<!-- conversation -->
|
||||||
|
<string name="social_backup_shard_received">You have received a social backup shard.</string>
|
||||||
|
<string name="social_backup_shard_sent">You have sent a social backup shard.</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import org.briarproject.briar.api.introduction.IntroductionResponse;
|
|||||||
import org.briarproject.briar.api.messaging.PrivateMessageHeader;
|
import org.briarproject.briar.api.messaging.PrivateMessageHeader;
|
||||||
import org.briarproject.briar.api.privategroup.invitation.GroupInvitationRequest;
|
import org.briarproject.briar.api.privategroup.invitation.GroupInvitationRequest;
|
||||||
import org.briarproject.briar.api.privategroup.invitation.GroupInvitationResponse;
|
import org.briarproject.briar.api.privategroup.invitation.GroupInvitationResponse;
|
||||||
|
import org.briarproject.briar.api.socialbackup.ShardMessageHeader;
|
||||||
|
|
||||||
@NotNullByDefault
|
@NotNullByDefault
|
||||||
public interface ConversationMessageVisitor<T> {
|
public interface ConversationMessageVisitor<T> {
|
||||||
@@ -31,4 +32,6 @@ public interface ConversationMessageVisitor<T> {
|
|||||||
T visitIntroductionRequest(IntroductionRequest r);
|
T visitIntroductionRequest(IntroductionRequest r);
|
||||||
|
|
||||||
T visitIntroductionResponse(IntroductionResponse r);
|
T visitIntroductionResponse(IntroductionResponse r);
|
||||||
|
|
||||||
|
T visitShardMessage(ShardMessageHeader r);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
package org.briarproject.briar.api.socialbackup;
|
||||||
|
|
||||||
|
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||||
|
import org.briarproject.bramble.api.sync.GroupId;
|
||||||
|
import org.briarproject.bramble.api.sync.MessageId;
|
||||||
|
import org.briarproject.briar.api.attachment.AttachmentHeader;
|
||||||
|
import org.briarproject.briar.api.conversation.ConversationMessageHeader;
|
||||||
|
import org.briarproject.briar.api.conversation.ConversationMessageVisitor;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.annotation.concurrent.Immutable;
|
||||||
|
|
||||||
|
@Immutable
|
||||||
|
@NotNullByDefault
|
||||||
|
public class ShardMessageHeader extends ConversationMessageHeader {
|
||||||
|
|
||||||
|
private final List<AttachmentHeader> attachmentHeaders;
|
||||||
|
|
||||||
|
public ShardMessageHeader(MessageId id, GroupId groupId, long timestamp,
|
||||||
|
boolean local, boolean read, boolean sent, boolean seen,
|
||||||
|
List<AttachmentHeader> headers) {
|
||||||
|
super(id, groupId, timestamp, local, read, sent, seen);
|
||||||
|
this.attachmentHeaders = headers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<AttachmentHeader> getAttachmentHeaders() {
|
||||||
|
return attachmentHeaders;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <T> T accept(ConversationMessageVisitor<T> v) {
|
||||||
|
return v.visitShardMessage(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -11,9 +11,9 @@ import org.briarproject.bramble.api.db.DatabaseExecutor
|
|||||||
import org.briarproject.bramble.api.db.NoSuchContactException
|
import org.briarproject.bramble.api.db.NoSuchContactException
|
||||||
import org.briarproject.bramble.api.event.Event
|
import org.briarproject.bramble.api.event.Event
|
||||||
import org.briarproject.bramble.api.event.EventListener
|
import org.briarproject.bramble.api.event.EventListener
|
||||||
|
import org.briarproject.bramble.api.sync.MessageId
|
||||||
import org.briarproject.bramble.api.sync.event.MessagesAckedEvent
|
import org.briarproject.bramble.api.sync.event.MessagesAckedEvent
|
||||||
import org.briarproject.bramble.api.sync.event.MessagesSentEvent
|
import org.briarproject.bramble.api.sync.event.MessagesSentEvent
|
||||||
import org.briarproject.bramble.api.sync.MessageId
|
|
||||||
import org.briarproject.bramble.api.system.Clock
|
import org.briarproject.bramble.api.system.Clock
|
||||||
import org.briarproject.bramble.util.StringUtils.utf8IsTooLong
|
import org.briarproject.bramble.util.StringUtils.utf8IsTooLong
|
||||||
import org.briarproject.briar.api.blog.BlogInvitationRequest
|
import org.briarproject.briar.api.blog.BlogInvitationRequest
|
||||||
@@ -31,6 +31,7 @@ import org.briarproject.briar.api.messaging.PrivateMessageFactory
|
|||||||
import org.briarproject.briar.api.messaging.PrivateMessageHeader
|
import org.briarproject.briar.api.messaging.PrivateMessageHeader
|
||||||
import org.briarproject.briar.api.privategroup.invitation.GroupInvitationRequest
|
import org.briarproject.briar.api.privategroup.invitation.GroupInvitationRequest
|
||||||
import org.briarproject.briar.api.privategroup.invitation.GroupInvitationResponse
|
import org.briarproject.briar.api.privategroup.invitation.GroupInvitationResponse
|
||||||
|
import org.briarproject.briar.api.socialbackup.ShardMessageHeader
|
||||||
import org.briarproject.briar.headless.event.WebSocketController
|
import org.briarproject.briar.headless.event.WebSocketController
|
||||||
import org.briarproject.briar.headless.event.output
|
import org.briarproject.briar.headless.event.output
|
||||||
import org.briarproject.briar.headless.getContactIdFromPathParam
|
import org.briarproject.briar.headless.getContactIdFromPathParam
|
||||||
@@ -169,4 +170,6 @@ private class JsonVisitor(
|
|||||||
override fun visitIntroductionRequest(r: IntroductionRequest) = r.output(contactId)
|
override fun visitIntroductionRequest(r: IntroductionRequest) = r.output(contactId)
|
||||||
|
|
||||||
override fun visitIntroductionResponse(r: IntroductionResponse) = r.output(contactId)
|
override fun visitIntroductionResponse(r: IntroductionResponse) = r.output(contactId)
|
||||||
|
|
||||||
|
override fun visitShardMessage(r: ShardMessageHeader) = r.output(contactId)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user