messenger-android

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

commit 2f01498d3a5f5332fe320cba4cc3af91d5e0ff42
parent 41c195465d0ae6d54650075531f129e2d54b14ff
Author: t3sserakt <t3sserakt@posteo.de>
Date:   Mon, 14 Apr 2025 19:19:07 +0200

Added message callback.

Diffstat:
MGNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/MainActivity.kt | 79++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
MGNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/model/ChatMessage.kt | 8++++++--
AGNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/model/EventType.kt | 10++++++++++
AGNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/model/MessageKind.kt | 11+++++++++++
MGNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ui/account/CreateAccountFragment.kt | 12+++++++-----
5 files changed, 110 insertions(+), 10 deletions(-)

diff --git a/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/MainActivity.kt b/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/MainActivity.kt @@ -3,10 +3,8 @@ package org.gnunet.gnunetmessenger import android.os.Bundle import android.view.Menu import android.view.MenuItem -import android.widget.ImageView import androidx.appcompat.app.AppCompatActivity import androidx.navigation.NavController -import androidx.navigation.findNavController import androidx.navigation.ui.AppBarConfiguration import androidx.navigation.ui.NavigationUI import androidx.appcompat.widget.Toolbar @@ -14,6 +12,9 @@ import androidx.navigation.fragment.NavHostFragment import org.gnunet.gnunetmessenger.model.ChatAccount import org.gnunet.gnunetmessenger.model.ChatContext import org.gnunet.gnunetmessenger.model.ChatHandle +import org.gnunet.gnunetmessenger.model.ChatMessage +import org.gnunet.gnunetmessenger.model.EventType +import org.gnunet.gnunetmessenger.model.MessageKind import org.gnunet.gnunetmessenger.model.MessengerApp import org.gnunet.gnunetmessenger.service.GnunetChat import org.gnunet.gnunetmessenger.service.ServiceFactory @@ -36,7 +37,7 @@ class MainActivity : AppCompatActivity() { val app = MessengerApp() handle = gnunetChat.startChat(app) { chatContext, chatMessage -> - + processChatMessage(chatContext, chatMessage) } // Initialize the NavController val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment @@ -57,6 +58,78 @@ class MainActivity : AppCompatActivity() { NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration) } + fun processChatMessage(chatContext: ChatContext, chatMessage: ChatMessage){ + requireNotNull(chatMessage) + + /*if (chatMessage.isDeleted()) { + app.callMessageEvent(EventType.DELETE_MESSAGE, chatContext, chatMessage) + return true + }*/ + + when (chatMessage.kind) { + MessageKind.WARNING -> { + //app.callMessageEvent(EventType.HANDLE_WARNING, chatContext, chatMessage) + } + MessageKind.REFRESH -> { + //app.callEvent(EventType.REFRESH_ACCOUNTS) + } + MessageKind.LOGIN -> { + //app.callEvent(EventType.UPDATE_PROFILE) + } + MessageKind.LOGOUT -> { + //app.callSyncEvent(EventType.CLEANUP_PROFILE) + } + MessageKind.CREATED_ACCOUNT, + MessageKind.UPDATE_ACCOUNT -> { + //app.callMessageEvent(EventType.SELECT_PROFILE, chatContext, chatMessage) + } + MessageKind.UPDATE_CONTEXT -> { + //app.callMessageEvent(EventType.UPDATE_CHATS, chatContext, chatMessage) + } + MessageKind.JOIN, + MessageKind.LEAVE -> { + /*val event = if (chatMessage.isSent()) { + EventType.UPDATE_CHATS + } else { + EventType.PRESENCE_CONTACT + }*/ + //app.callMessageEvent(event, chatContext, chatMessage) + } + MessageKind.CONTACT, + MessageKind.SHARED_ATTRIBUTES -> { + //app.callMessageEvent(EventType.UPDATE_CONTACTS, chatContext, chatMessage) + } + MessageKind.INVITATION -> { + //app.callMessageEvent(EventType.INVITATION, chatContext, chatMessage) + } + MessageKind.TEXT, + MessageKind.FILE -> { + //app.callMessageEvent(EventType.RECEIVE_MESSAGE, chatContext, chatMessage) + } + MessageKind.DELETION -> { + /*val target = chatMessage.getTarget() + if (target != null) { + //app.callMessageEvent(EventType.DELETE_MESSAGE, contchatContextext, target) + }*/ + } + MessageKind.TAG -> { + //app.callMessageEvent(EventType.TAG_MESSAGE, chatContext, chatMessage) + } + MessageKind.ATTRIBUTES -> { + //app.callEvent(EventType.UPDATE_ATTRIBUTES) + } + MessageKind.DISCOURSE -> { + //app.callMessageEvent(EventType.DISCOURSE, chatContext, chatMessage) + } + MessageKind.DATA -> { + //app.callMessageEvent(EventType.DISCOURSE_DATA, chatContext, chatMessage) + } + else -> { + // Unbekannter Typ – nichts tun + } + } + } + override fun onCreateOptionsMenu(menu: Menu?): Boolean { menuInflater.inflate(R.menu.main_menu, menu) val current = currentAccount diff --git a/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/model/ChatMessage.kt b/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/model/ChatMessage.kt @@ -1,5 +1,9 @@ package org.gnunet.gnunetmessenger.model -class ChatMessage { +import android.os.Parcelable +import kotlinx.parcelize.Parcelize -} +@Parcelize +data class ChatMessage( + val kind: MessageKind +): Parcelable diff --git a/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/model/EventType.kt b/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/model/EventType.kt @@ -0,0 +1,9 @@ +package org.gnunet.gnunetmessenger.model + +enum class EventType { + DELETE_MESSAGE, HANDLE_WARNING, REFRESH_ACCOUNTS, + UPDATE_PROFILE, CLEANUP_PROFILE, SELECT_PROFILE, + UPDATE_CHATS, PRESENCE_CONTACT, UPDATE_CONTACTS, + INVITATION, RECEIVE_MESSAGE, TAG_MESSAGE, + UPDATE_ATTRIBUTES, DISCOURSE, DISCOURSE_DATA +} +\ No newline at end of file diff --git a/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/model/MessageKind.kt b/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/model/MessageKind.kt @@ -0,0 +1,11 @@ +package org.gnunet.gnunetmessenger.model + +enum class MessageKind { + WARNING, REFRESH, LOGIN, LOGOUT, + CREATED_ACCOUNT, UPDATE_ACCOUNT, + UPDATE_CONTEXT, JOIN, LEAVE, + CONTACT, SHARED_ATTRIBUTES, + INVITATION, TEXT, FILE, + DELETION, TAG, ATTRIBUTES, + DISCOURSE, DATA +} diff --git a/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ui/account/CreateAccountFragment.kt b/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ui/account/CreateAccountFragment.kt @@ -79,11 +79,13 @@ class CreateAccountFragment : Fragment() { gnunetChat.iterateAccounts(handle) { account -> if (account.name == accountName) { gnunetChat.connect(handle, account) - val action = - CreateAccountFragmentDirections.actionCreateAccountFragmentToAccountOverviewFragment( - account = account - ) - findNavController().navigate(action) + requireActivity().runOnUiThread { + val action = + CreateAccountFragmentDirections.actionCreateAccountFragmentToAccountOverviewFragment( + account = account + ) + findNavController().navigate(action) + } } }