messenger-android

Android graphical user interfaces for GNUnet Messenger
Log | Files | Refs | README | LICENSE

commit 9845584db41e9d0a89bfd9e4be2c28ab74deb4ec
parent 39822deb9b30ae58238cd858214d69a443cdbd18
Author: t3sserakt <t3ss@posteo.de>
Date:   Tue,  9 Dec 2025 16:44:33 +0100

method implementation

Diffstat:
AGNUnetMessenger/app/src/main/aidl/org/gnunet/gnunetmessenger/ipc/ChatContactDto.aidl | 3+++
AGNUnetMessenger/app/src/main/aidl/org/gnunet/gnunetmessenger/ipc/ChatGroupDto.aidl | 3+++
AGNUnetMessenger/app/src/main/aidl/org/gnunet/gnunetmessenger/ipc/ChatUriDto.aidl | 3+++
AGNUnetMessenger/app/src/main/aidl/org/gnunet/gnunetmessenger/ipc/IAttributeCallback.aidl | 7+++++++
AGNUnetMessenger/app/src/main/aidl/org/gnunet/gnunetmessenger/ipc/IContactCallback.aidl | 9+++++++++
MGNUnetMessenger/app/src/main/aidl/org/gnunet/gnunetmessenger/ipc/IGnunetChat.aidl | 52++++++++++++++++++++++++++++++++++++++++++++++++++++
AGNUnetMessenger/app/src/main/aidl/org/gnunet/gnunetmessenger/ipc/IGroupCallback.aidl | 9+++++++++
AGNUnetMessenger/app/src/main/aidl/org/gnunet/gnunetmessenger/ipc/IGroupContactCallback.aidl | 10++++++++++
AGNUnetMessenger/app/src/main/aidl/org/gnunet/gnunetmessenger/ipc/ILobbyCallback.aidl | 6++++++
AGNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ipc/ChatContactDto.kt | 43+++++++++++++++++++++++++++++++++++++++++++
MGNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ipc/ChatContextDto.kt | 8++++----
AGNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ipc/ChatGroupDto.kt | 37+++++++++++++++++++++++++++++++++++++
MGNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ipc/ChatMessageDto.kt | 19+++++++++++--------
AGNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ipc/ChatUriDto.kt | 34++++++++++++++++++++++++++++++++++
MGNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ipc/DtoMappers.kt | 86+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------
15 files changed, 302 insertions(+), 27 deletions(-)

diff --git a/GNUnetMessenger/app/src/main/aidl/org/gnunet/gnunetmessenger/ipc/ChatContactDto.aidl b/GNUnetMessenger/app/src/main/aidl/org/gnunet/gnunetmessenger/ipc/ChatContactDto.aidl @@ -0,0 +1,3 @@ +package org.gnunet.gnunetmessenger.ipc; + +parcelable ChatContactDto; diff --git a/GNUnetMessenger/app/src/main/aidl/org/gnunet/gnunetmessenger/ipc/ChatGroupDto.aidl b/GNUnetMessenger/app/src/main/aidl/org/gnunet/gnunetmessenger/ipc/ChatGroupDto.aidl @@ -0,0 +1,3 @@ +package org.gnunet.gnunetmessenger.ipc; + +parcelable ChatGroupDto; diff --git a/GNUnetMessenger/app/src/main/aidl/org/gnunet/gnunetmessenger/ipc/ChatUriDto.aidl b/GNUnetMessenger/app/src/main/aidl/org/gnunet/gnunetmessenger/ipc/ChatUriDto.aidl @@ -0,0 +1,3 @@ +package org.gnunet.gnunetmessenger.ipc; + +parcelable ChatUriDto; diff --git a/GNUnetMessenger/app/src/main/aidl/org/gnunet/gnunetmessenger/ipc/IAttributeCallback.aidl b/GNUnetMessenger/app/src/main/aidl/org/gnunet/gnunetmessenger/ipc/IAttributeCallback.aidl @@ -0,0 +1,7 @@ +package org.gnunet.gnunetmessenger.ipc; + +interface IAttributeCallback { + void onAttribute(String key, String value); + void onDone(); + void onError(int code, String message); +} diff --git a/GNUnetMessenger/app/src/main/aidl/org/gnunet/gnunetmessenger/ipc/IContactCallback.aidl b/GNUnetMessenger/app/src/main/aidl/org/gnunet/gnunetmessenger/ipc/IContactCallback.aidl @@ -0,0 +1,9 @@ +package org.gnunet.gnunetmessenger.ipc; + +import org.gnunet.gnunetmessenger.ipc.ChatContactDto; + +interface IContactCallback { + void onContact(in ChatContactDto contact); + void onDone(); + void onError(int code, String message); +} diff --git a/GNUnetMessenger/app/src/main/aidl/org/gnunet/gnunetmessenger/ipc/IGnunetChat.aidl b/GNUnetMessenger/app/src/main/aidl/org/gnunet/gnunetmessenger/ipc/IGnunetChat.aidl @@ -3,6 +3,16 @@ package org.gnunet.gnunetmessenger.ipc; import org.gnunet.gnunetmessenger.ipc.ChatAccountDto; import org.gnunet.gnunetmessenger.ipc.IAccountCallback; import org.gnunet.gnunetmessenger.ipc.IChatCallback; +import org.gnunet.gnunetmessenger.ipc.ChatContactDto; +import org.gnunet.gnunetmessenger.ipc.ChatContextDto; +import org.gnunet.gnunetmessenger.ipc.ChatGroupDto; +import org.gnunet.gnunetmessenger.ipc.ChatMessageDto; +import org.gnunet.gnunetmessenger.ipc.ChatUriDto; +import org.gnunet.gnunetmessenger.ipc.IAttributeCallback; +import org.gnunet.gnunetmessenger.ipc.ILobbyCallback; +import org.gnunet.gnunetmessenger.ipc.IContactCallback; +import org.gnunet.gnunetmessenger.ipc.IGroupCallback; +import org.gnunet.gnunetmessenger.ipc.IGroupContactCallback; interface IGnunetChat { int getApiVersion(); @@ -13,4 +23,46 @@ interface IGnunetChat { void disconnect(long handle); String getProfileName(long handle); void setProfileName(long handle, String name); + + // Additional methods for complete IPC interface + String getProfileKey(long handle); + void setContactBlocked(in ChatContactDto contact, boolean isBlocked); + boolean isContactBlocked(in ChatContactDto contact); + void setAttribute(long handle, String key, String value); + void getAttributes(long handle, in IAttributeCallback cb); + void lobbyOpen(long handle, in ILobbyCallback cb); + void lobbyJoin(long handle, String uri); + void setGroupName(in ChatGroupDto group, String name); + ChatGroupDto createGroup(long handle, String topic); + ChatUriDto parseUri(String uri); + void destroyUri(in ChatUriDto uri); + void inviteContactToGroup(in ChatGroupDto group, in ChatContactDto contact); + String getUserPointerForContext(in ChatContextDto context); + void setUserPointerForContext(in ChatContextDto context, String userPointer); + ChatContactDto getSenderFromMessage(in ChatMessageDto message); + ChatGroupDto getGroupFromContext(in ChatContextDto context); + ChatMessageDto getMessageForGroupContact(in ChatGroupDto group, in ChatContactDto contact); + int getMessageKind(in ChatMessageDto message); + int isMessageRecent(in ChatMessageDto message); + long getMessageTimestamp(in ChatMessageDto message); + void setMessageForGroupContact(in ChatGroupDto group, in ChatContactDto contact, in ChatMessageDto message); + void iterateContacts(long handle, in IContactCallback cb); + void iterateGroups(long handle, in IGroupCallback cb); + ChatContextDto getContactContext(in ChatContactDto chatContact); + ChatContextDto getGroupContext(in ChatGroupDto chatGroup); + String getContactUserPointer(in ChatContactDto chatContact); + void setContactUserPointer(in ChatContactDto chatContact, String userPointer); + String getGroupUserPointer(in ChatGroupDto chatGroup); + void setGroupUserPointer(in ChatGroupDto chatGroup, String userPointer); + void sendText(in ChatContextDto chatContext, String text); + String getContactKey(in ChatContactDto chatContact); + ChatContactDto getContextContact(in ChatContextDto context); + void deleteContact(in ChatContactDto chatContact); + boolean isGroup(in ChatContextDto context); + boolean isPlatform(in ChatContextDto context); + void iterateGroupContacts(in ChatGroupDto chatGroup, in IGroupContactCallback cb); + String randomUUID(); + void getContactAttributes(in ChatContactDto contact, in IAttributeCallback cb); + void shareAttributes(long handle, in ChatContactDto contact, String key); + void unshareAttributes(long handle, in ChatContactDto contact, String key); } diff --git a/GNUnetMessenger/app/src/main/aidl/org/gnunet/gnunetmessenger/ipc/IGroupCallback.aidl b/GNUnetMessenger/app/src/main/aidl/org/gnunet/gnunetmessenger/ipc/IGroupCallback.aidl @@ -0,0 +1,9 @@ +package org.gnunet.gnunetmessenger.ipc; + +import org.gnunet.gnunetmessenger.ipc.ChatGroupDto; + +interface IGroupCallback { + void onGroup(in ChatGroupDto group); + void onDone(); + void onError(int code, String message); +} diff --git a/GNUnetMessenger/app/src/main/aidl/org/gnunet/gnunetmessenger/ipc/IGroupContactCallback.aidl b/GNUnetMessenger/app/src/main/aidl/org/gnunet/gnunetmessenger/ipc/IGroupContactCallback.aidl @@ -0,0 +1,10 @@ +package org.gnunet.gnunetmessenger.ipc; + +import org.gnunet.gnunetmessenger.ipc.ChatGroupDto; +import org.gnunet.gnunetmessenger.ipc.ChatContactDto; + +interface IGroupContactCallback { + void onGroupContact(in ChatGroupDto group, in ChatContactDto contact); + void onDone(); + void onError(int code, String message); +} diff --git a/GNUnetMessenger/app/src/main/aidl/org/gnunet/gnunetmessenger/ipc/ILobbyCallback.aidl b/GNUnetMessenger/app/src/main/aidl/org/gnunet/gnunetmessenger/ipc/ILobbyCallback.aidl @@ -0,0 +1,6 @@ +package org.gnunet.gnunetmessenger.ipc; + +interface ILobbyCallback { + void onLobbyUri(String uri); + void onError(int code, String message); +} diff --git a/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ipc/ChatContactDto.kt b/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ipc/ChatContactDto.kt @@ -0,0 +1,43 @@ +package org.gnunet.gnunetmessenger.ipc + +import android.os.Parcelable +import android.os.Parcel + +data class ChatContactDto( + var chatContext: ChatContextDto? = null, + var name: String? = null, + var key: String? = null, + var isBlocked: Boolean = false, + var userPointer: String? = null +) : Parcelable { + + constructor(parcel: Parcel) : this( + parcel.readParcelable(ChatContextDto::class.java.classLoader), + parcel.readString(), + parcel.readString(), + parcel.readByte() != 0.toByte(), + parcel.readString() + ) + + override fun writeToParcel(parcel: Parcel, flags: Int) { + parcel.writeParcelable(chatContext, flags) + parcel.writeString(name) + parcel.writeString(key) + parcel.writeByte(if (isBlocked) 1 else 0) + parcel.writeString(userPointer) + } + + override fun describeContents(): Int { + return 0 + } + + companion object CREATOR : Parcelable.Creator<ChatContactDto> { + override fun createFromParcel(parcel: Parcel): ChatContactDto { + return ChatContactDto(parcel) + } + + override fun newArray(size: Int): Array<ChatContactDto?> { + return arrayOfNulls(size) + } + } +} diff --git a/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ipc/ChatContextDto.kt b/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ipc/ChatContextDto.kt @@ -11,10 +11,10 @@ data class ChatContextDto( ) : Parcelable { constructor(parcel: Parcel) : this( - chatContextType = parcel.readInt(), - userPointer = parcel.readString(), - isGroup = parcel.readByte() != 0.toByte(), - isPlatform = parcel.readByte() != 0.toByte() + parcel.readInt(), + parcel.readString(), + parcel.readByte() != 0.toByte(), + parcel.readByte() != 0.toByte() ) override fun writeToParcel(parcel: Parcel, flags: Int) { diff --git a/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ipc/ChatGroupDto.kt b/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ipc/ChatGroupDto.kt @@ -0,0 +1,37 @@ +package org.gnunet.gnunetmessenger.ipc + +import android.os.Parcelable +import android.os.Parcel + +data class ChatGroupDto( + var chatContext: ChatContextDto? = null, + var name: String? = null, + var userPointer: String? = null +) : Parcelable { + + constructor(parcel: Parcel) : this( + parcel.readParcelable(ChatContextDto::class.java.classLoader), + parcel.readString(), + parcel.readString() + ) + + override fun writeToParcel(parcel: Parcel, flags: Int) { + parcel.writeParcelable(chatContext, flags) + parcel.writeString(name) + parcel.writeString(userPointer) + } + + override fun describeContents(): Int { + return 0 + } + + companion object CREATOR : Parcelable.Creator<ChatGroupDto> { + override fun createFromParcel(parcel: Parcel): ChatGroupDto { + return ChatGroupDto(parcel) + } + + override fun newArray(size: Int): Array<ChatGroupDto?> { + return arrayOfNulls(size) + } + } +} diff --git a/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ipc/ChatMessageDto.kt b/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ipc/ChatMessageDto.kt @@ -4,27 +4,30 @@ import android.os.Parcelable import android.os.Parcel data class ChatMessageDto( + var chatContext: ChatContextDto? = null, var text: String? = null, var timestamp: Long = 0L, + var senderKey: String? = null, var kind: Int = 0, - var type: Int = 0, - var senderKey: String? = null + var type: Int = -1 ) : Parcelable { constructor(parcel: Parcel) : this( - text = parcel.readString(), - timestamp = parcel.readLong(), - kind = parcel.readInt(), - type = parcel.readInt(), - senderKey = parcel.readString() + parcel.readParcelable(ChatContextDto::class.java.classLoader), + parcel.readString(), + parcel.readLong(), + parcel.readString(), + parcel.readInt(), + parcel.readInt() ) override fun writeToParcel(parcel: Parcel, flags: Int) { + parcel.writeParcelable(chatContext, flags) parcel.writeString(text) parcel.writeLong(timestamp) + parcel.writeString(senderKey) parcel.writeInt(kind) parcel.writeInt(type) - parcel.writeString(senderKey) } override fun describeContents(): Int { diff --git a/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ipc/ChatUriDto.kt b/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ipc/ChatUriDto.kt @@ -0,0 +1,34 @@ +package org.gnunet.gnunetmessenger.ipc + +import android.os.Parcelable +import android.os.Parcel + +data class ChatUriDto( + var uri: String? = null, + var isValid: Boolean = false +) : Parcelable { + + constructor(parcel: Parcel) : this( + parcel.readString(), + parcel.readByte() != 0.toByte() + ) + + override fun writeToParcel(parcel: Parcel, flags: Int) { + parcel.writeString(uri) + parcel.writeByte(if (isValid) 1 else 0) + } + + override fun describeContents(): Int { + return 0 + } + + companion object CREATOR : Parcelable.Creator<ChatUriDto> { + override fun createFromParcel(parcel: Parcel): ChatUriDto { + return ChatUriDto(parcel) + } + + override fun newArray(size: Int): Array<ChatUriDto?> { + return arrayOfNulls(size) + } + } +} diff --git a/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ipc/DtoMappers.kt b/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ipc/DtoMappers.kt @@ -1,13 +1,8 @@ -package org.gnunet.gnunetmessenger.ipc // oder dein passendes Paket +package org.gnunet.gnunetmessenger.ipc +import org.gnunet.gnunetmessenger.model.* -import org.gnunet.gnunetmessenger.model.ChatAccount -import org.gnunet.gnunetmessenger.model.ChatContext -import org.gnunet.gnunetmessenger.model.ChatMessage -import org.gnunet.gnunetmessenger.model.ChatContextType -import org.gnunet.gnunetmessenger.model.MessageKind -import org.gnunet.gnunetmessenger.model.ChatMessageType - +// DTO -> Local Model Mappers fun ChatAccountDto.toLocal(): ChatAccount { return ChatAccount( key = this.key ?: "", @@ -16,6 +11,21 @@ fun ChatAccountDto.toLocal(): ChatAccount { ) } +fun ChatContactDto.toLocal(): ChatContact { + return ChatContact( + chatContext = this.chatContext?.toLocal() ?: ChatContext(ChatContextType.CONTACT, null, false, false), + name = this.name ?: "", + blocked = this.isBlocked + ) +} + +fun ChatGroupDto.toLocal(): ChatGroup { + return ChatGroup( + chatContext = this.chatContext?.toLocal() ?: ChatContext(ChatContextType.GROUP, null, true, false), + name = this.name ?: "" + ) +} + fun ChatContextDto.toLocal(): ChatContext { val type = ChatContextType.fromCode(chatContextType) return ChatContext( @@ -28,16 +38,63 @@ fun ChatContextDto.toLocal(): ChatContext { fun ChatMessageDto.toLocal(ctx: ChatContext): ChatMessage { val kindEnum = MessageKind.fromCode(kind) - - val typeEnum = if (type < 0) null - else ChatMessageType.fromCode(type) - + val typeEnum = if (type < 0) null else ChatMessageType.fromCode(type) return ChatMessage( chatContext = ctx, text = text ?: "", timestamp = timestamp, - sender = null, // senderKey kannst du später über ein Repo auflösen + sender = null, // senderKey kannst du später über ein Repo auflösen kind = kindEnum, type = typeEnum ) -} -\ No newline at end of file +} + +fun ChatUriDto.toLocal(): ChatUri { + return ChatUri( + error = if (isValid) "" else (uri ?: "Invalid URI") + ) +} + +// Local Model -> DTO Mappers +fun ChatAccount.toDto(): ChatAccountDto = + ChatAccountDto().apply { + key = this@toDto.key + name = this@toDto.name + } + +fun ChatContact.toDto(): ChatContactDto = + ChatContactDto().apply { + chatContext = this@toDto.chatContext.toDto() + name = this@toDto.name + isBlocked = this@toDto.blocked + } + +fun ChatGroup.toDto(): ChatGroupDto = + ChatGroupDto().apply { + chatContext = this@toDto.chatContext.toDto() + name = this@toDto.name + } + +fun ChatContext.toDto(): ChatContextDto = + ChatContextDto().apply { + chatContextType = this@toDto.chatContextType?.code ?: 0 + userPointer = this@toDto.userPointer + isGroup = this@toDto.isGroup + isPlatform = this@toDto.isPlatform + } + +fun ChatMessage.toDto(): ChatMessageDto = + ChatMessageDto().apply { + chatContext = this@toDto.chatContext.toDto() + text = this@toDto.text + timestamp = this@toDto.timestamp + senderKey = "" // Sender key will be resolved by the server + kind = this@toDto.kind.code + type = this@toDto.type?.code ?: -1 + } + +fun ChatUri.toDto(): ChatUriDto = + ChatUriDto().apply { + uri = if (error.isEmpty()) "valid" else error + isValid = error.isEmpty() + }