diff --git a/app/src/main/java/io/elixxir/dapp/bindings/data/Cmix.kt b/app/src/main/java/io/elixxir/dapp/bindings/data/Cmix.kt index be20d16dd7af7162344a4093c9cea6da3eacf7cd..ef91c1f5b20cf25aeb691f2a3826d611cb664be9 100644 --- a/app/src/main/java/io/elixxir/dapp/bindings/data/Cmix.kt +++ b/app/src/main/java/io/elixxir/dapp/bindings/data/Cmix.kt @@ -1,19 +1,31 @@ package io.elixxir.dapp.bindings.data -import bindings.ReceptionIdentity -import io.elixxir.dapp.bindings.model.Connection +import io.elixxir.dapp.bindings.model.* +import io.elixxir.dapp.bindings.model.Contact +import io.elixxir.dapp.bindings.model.E2eId import io.elixxir.dapp.bindings.model.NetworkFollowerStatus -import io.elixxir.dapp.bindings.model.NodeRegistrationStatus internal interface Cmix { - fun connect(): Connection - fun startNetworkFollower() + fun connect( + e2eId: E2eId, + recipientContact: Contact, + e2eParams: E2eParams + ): Connection + + fun startNetworkFollower(timeoutMs: Long) + fun stopNetworkFollower() + fun isNetworkHealthy(): Boolean - fun registerHealthCallback() - fun unregisterHealthCallback() + + fun registerHealthListener(listener: NetworkHealthListener): HealthListenerId + + fun unregisterHealthListener(id: HealthListenerId) + fun getNodeRegistrationStatus(): NodeRegistrationStatus + fun makeReceptionIdentity(): ReceptionIdentity + fun getNetworkFollowerStatus(): NetworkFollowerStatus } diff --git a/app/src/main/java/io/elixxir/dapp/bindings/data/CmixAdapter.kt b/app/src/main/java/io/elixxir/dapp/bindings/data/CmixAdapter.kt index 61bfbccc4e3160d1f0cc9b9a918e5d6f56d1ecd9..7c7203b420eee201f6b19c9062adf296b788f253 100644 --- a/app/src/main/java/io/elixxir/dapp/bindings/data/CmixAdapter.kt +++ b/app/src/main/java/io/elixxir/dapp/bindings/data/CmixAdapter.kt @@ -1,47 +1,62 @@ package io.elixxir.dapp.bindings.data -import bindings.ReceptionIdentity +import io.elixxir.dapp.bindings.model.* import io.elixxir.dapp.bindings.model.Connection +import io.elixxir.dapp.bindings.model.Contact +import io.elixxir.dapp.bindings.model.E2eId +import io.elixxir.dapp.bindings.model.E2eParams import io.elixxir.dapp.bindings.model.NetworkFollowerStatus -import io.elixxir.dapp.bindings.model.NodeRegistrationStatus import bindings.Cmix as CoreCmix @JvmInline internal value class CmixAdapter(private val cmix: CoreCmix) : Cmix { - override fun connect(): Connection { - TODO("Not yet implemented") + override fun connect( + e2eId: E2eId, + recipientContact: Contact, + e2eParams: E2eParams + ): Connection { + // TODO: Use factory method to get Connection implementation + return ConnectionAdapter( + cmix.connect( + e2eId.value, + recipientContact.value, + e2eParams.value + ) + ) } - override fun startNetworkFollower() { - TODO("Not yet implemented") + override fun startNetworkFollower(timeoutMs: Long) { + cmix.startNetworkFollower(timeoutMs) } override fun stopNetworkFollower() { - TODO("Not yet implemented") + cmix.stopNetworkFollower() } override fun isNetworkHealthy(): Boolean { - TODO("Not yet implemented") + return cmix.isHealthy } - override fun registerHealthCallback() { - TODO("Not yet implemented") + override fun registerHealthListener(listener: NetworkHealthListener): HealthListenerId { + return HealthListenerId( + cmix.addHealthCallback(HealthCallbackAdapter.placeholder) + ) } - override fun unregisterHealthCallback() { - TODO("Not yet implemented") + override fun unregisterHealthListener(id: HealthListenerId) { + cmix.removeHealthCallback(id.value) } override fun getNodeRegistrationStatus(): NodeRegistrationStatus { - TODO("Not yet implemented") + return NodeRegistrationStatus(cmix.nodeRegistrationStatus) } override fun makeReceptionIdentity(): ReceptionIdentity { - TODO("Not yet implemented") + return ReceptionIdentity(cmix.makeReceptionIdentity()) } override fun getNetworkFollowerStatus(): NetworkFollowerStatus { - TODO("Not yet implemented") + return NetworkFollowerStatus.from(cmix.networkFollowerStatus()) } } \ No newline at end of file diff --git a/app/src/main/java/io/elixxir/dapp/bindings/data/GroupChat.kt b/app/src/main/java/io/elixxir/dapp/bindings/data/GroupChat.kt index 162e8d766c89abbfd36e8a73de2a661167802aa5..ff2d4d85dc13963b169eca4d310649f2f3daa343 100644 --- a/app/src/main/java/io/elixxir/dapp/bindings/data/GroupChat.kt +++ b/app/src/main/java/io/elixxir/dapp/bindings/data/GroupChat.kt @@ -1,11 +1,14 @@ package io.elixxir.dapp.bindings.data +import io.elixxir.dapp.bindings.model.GroupInfo +import io.elixxir.dapp.bindings.model.GroupReport +import io.elixxir.dapp.group.model.Group import io.elixxir.dapp.group.model.GroupId internal interface GroupChat { - fun getGroup(groupId: GroupId) - fun joinGroup() - fun leaveGroup() - fun makeGroup() - fun resendInvitation() + fun getGroup(groupId: GroupId): Group + fun joinGroup(trackedGroupId: Long) + fun leaveGroup(groupId: GroupId) + fun makeGroup(info: GroupInfo): GroupReport + fun resendInvitations(group: Group): GroupReport } \ No newline at end of file diff --git a/app/src/main/java/io/elixxir/dapp/bindings/data/GroupChatAdapter.kt b/app/src/main/java/io/elixxir/dapp/bindings/data/GroupChatAdapter.kt index a2252a980b036a1731de9f012b2aa60206c7f640..277bc79934ddb01b67f6d5fcafd91a4b67483845 100644 --- a/app/src/main/java/io/elixxir/dapp/bindings/data/GroupChatAdapter.kt +++ b/app/src/main/java/io/elixxir/dapp/bindings/data/GroupChatAdapter.kt @@ -1,26 +1,37 @@ package io.elixxir.dapp.bindings.data +import io.elixxir.dapp.bindings.model.GroupAdapter +import io.elixxir.dapp.bindings.model.GroupInfo +import io.elixxir.dapp.bindings.model.GroupReport +import io.elixxir.dapp.group.model.Group import io.elixxir.dapp.group.model.GroupId import bindings.GroupChat as CoreGroupChat internal class GroupChatAdapter(private val groupChat: CoreGroupChat) : GroupChat { - override fun getGroup(groupId: GroupId) { - TODO("Not yet implemented") + override fun getGroup(groupId: GroupId): Group { + return GroupAdapter(groupChat.getGroup(groupId.value)) } - override fun joinGroup() { - TODO("Not yet implemented") + override fun joinGroup(trackedGroupId: Long) { + groupChat.joinGroup(trackedGroupId) } - override fun leaveGroup() { - TODO("Not yet implemented") + override fun leaveGroup(groupId: GroupId) { + groupChat.leaveGroup(groupId.value) } - override fun makeGroup() { - TODO("Not yet implemented") + override fun makeGroup(info: GroupInfo): GroupReport { + return GroupReport( + groupChat.makeGroup( + info.membershipData.value, + info.description.toByteArray(), + info.name.toByteArray()) + ) } - override fun resendInvitation() { - TODO("Not yet implemented") + override fun resendInvitations(group: Group): GroupReport { + return GroupReport( + groupChat.resendRequest(group.groupId.value) + ) } } \ No newline at end of file diff --git a/app/src/main/java/io/elixxir/dapp/bindings/model/Group.kt b/app/src/main/java/io/elixxir/dapp/bindings/model/Group.kt deleted file mode 100644 index 1bf99c9b1615aa6e036f299028023c1f5c12b18d..0000000000000000000000000000000000000000 --- a/app/src/main/java/io/elixxir/dapp/bindings/model/Group.kt +++ /dev/null @@ -1,11 +0,0 @@ -package io.elixxir.dapp.bindings.model - -import io.elixxir.dapp.group.model.GroupId - -internal interface Group { - val id: GroupId - val name: String - val initMessage: String - val members: List<String> - val creationTimeMs: Long -} \ No newline at end of file diff --git a/app/src/main/java/io/elixxir/dapp/bindings/model/GroupAdapter.kt b/app/src/main/java/io/elixxir/dapp/bindings/model/GroupAdapter.kt new file mode 100644 index 0000000000000000000000000000000000000000..07a97a7dd461756db4966f651cd4f6e2f5ed3908 --- /dev/null +++ b/app/src/main/java/io/elixxir/dapp/bindings/model/GroupAdapter.kt @@ -0,0 +1,20 @@ +package io.elixxir.dapp.bindings.model + +import io.elixxir.dapp.group.model.Group +import io.elixxir.dapp.group.model.GroupId +import io.elixxir.dapp.user.model.User +import bindings.Group as CoreGroup + +@JvmInline +internal value class GroupAdapter(val value: CoreGroup): Group { + override val groupId: GroupId + get() = GroupId(value.id) + override val name: String + get() = String(value.name) + override val description: String + get() = String(value.initMessage) + override val members: List<User> + get() = listOf() + override val creator: User + get() = User.placeholder +} \ No newline at end of file diff --git a/app/src/main/java/io/elixxir/dapp/bindings/model/GroupInfo.kt b/app/src/main/java/io/elixxir/dapp/bindings/model/GroupInfo.kt new file mode 100644 index 0000000000000000000000000000000000000000..84b84ddc462d0d106fa3540432617f7529acdae0 --- /dev/null +++ b/app/src/main/java/io/elixxir/dapp/bindings/model/GroupInfo.kt @@ -0,0 +1,7 @@ +package io.elixxir.dapp.bindings.model + +internal data class GroupInfo( + val membershipData: GroupMembership, + val description: String, + val name: String +) \ No newline at end of file diff --git a/app/src/main/java/io/elixxir/dapp/bindings/model/GroupMembership.kt b/app/src/main/java/io/elixxir/dapp/bindings/model/GroupMembership.kt new file mode 100644 index 0000000000000000000000000000000000000000..04c32bf12a8c43c125e569625d0256a9e3c00238 --- /dev/null +++ b/app/src/main/java/io/elixxir/dapp/bindings/model/GroupMembership.kt @@ -0,0 +1,4 @@ +package io.elixxir.dapp.bindings.model + +@JvmInline +internal value class GroupMembership(val value: ByteArray) \ No newline at end of file diff --git a/app/src/main/java/io/elixxir/dapp/bindings/model/GroupReport.kt b/app/src/main/java/io/elixxir/dapp/bindings/model/GroupReport.kt new file mode 100644 index 0000000000000000000000000000000000000000..c70edbb833711757ee5d25fbcb4cec8cef6abc2c --- /dev/null +++ b/app/src/main/java/io/elixxir/dapp/bindings/model/GroupReport.kt @@ -0,0 +1,4 @@ +package io.elixxir.dapp.bindings.model + +@JvmInline +internal value class GroupReport(val value: ByteArray) \ No newline at end of file diff --git a/app/src/main/java/io/elixxir/dapp/bindings/model/HealthCallback.kt b/app/src/main/java/io/elixxir/dapp/bindings/model/HealthCallback.kt new file mode 100644 index 0000000000000000000000000000000000000000..bc5aec42b9d98577f51da4b26cdc19228eaac4d3 --- /dev/null +++ b/app/src/main/java/io/elixxir/dapp/bindings/model/HealthCallback.kt @@ -0,0 +1,24 @@ +package io.elixxir.dapp.bindings.model + +internal interface NetworkHealthListener { + fun onHealthChanged(isHealthy: Boolean) +} + +internal class HealthCallbackAdapter( + private val listener: NetworkHealthListener +) : NetworkHealthListener by listener, + bindings.NetworkHealthCallback +{ + override fun callback(isHealthy: Boolean) { + onHealthChanged(isHealthy) + } + + companion object { + val placeholder: HealthCallbackAdapter = + HealthCallbackAdapter( + object : NetworkHealthListener { + override fun onHealthChanged(isHealthy: Boolean) { } + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/io/elixxir/dapp/bindings/model/HealthListenerId.kt b/app/src/main/java/io/elixxir/dapp/bindings/model/HealthListenerId.kt new file mode 100644 index 0000000000000000000000000000000000000000..5034d6810b296e4fb05643409eb1b3c8fafc07c9 --- /dev/null +++ b/app/src/main/java/io/elixxir/dapp/bindings/model/HealthListenerId.kt @@ -0,0 +1,4 @@ +package io.elixxir.dapp.bindings.model + +@JvmInline +internal value class HealthListenerId(val value: Long) \ No newline at end of file diff --git a/app/src/main/java/io/elixxir/dapp/bindings/model/NodeRegistrationStatus.kt b/app/src/main/java/io/elixxir/dapp/bindings/model/NodeRegistrationStatus.kt index 90fb610b62c769f4880fd514bf570662b9837e17..620eee54a3914d7de4577827aa5882f7f6a01ee7 100644 --- a/app/src/main/java/io/elixxir/dapp/bindings/model/NodeRegistrationStatus.kt +++ b/app/src/main/java/io/elixxir/dapp/bindings/model/NodeRegistrationStatus.kt @@ -1,4 +1,4 @@ package io.elixxir.dapp.bindings.model -class NodeRegistrationStatus { -} \ No newline at end of file +@JvmInline +internal value class NodeRegistrationStatus(val value: ByteArray) \ No newline at end of file diff --git a/app/src/main/java/io/elixxir/dapp/user/model/User.kt b/app/src/main/java/io/elixxir/dapp/user/model/User.kt index 056dbd64805f81cd27c56fe1febd1449cce01f3e..c24e22376e3aca42596669f4387cc917c91789d2 100644 --- a/app/src/main/java/io/elixxir/dapp/user/model/User.kt +++ b/app/src/main/java/io/elixxir/dapp/user/model/User.kt @@ -3,6 +3,16 @@ package io.elixxir.dapp.user.model interface User { val userId: Long val username: String - val phone: String - val email: String + val phone: String? + val email: String? + + companion object { + val placeholder = object : User { + override val userId: Long = 0 + override val username: String = "" + override val phone: String? = null + override val email: String? = null + + } + } } \ No newline at end of file