messenger-android

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

commit 5b74e25ae8b559e606e724abab97c0b186204102
parent 4ece213f51e94d59dd1ab96e88a6c4a2773670f6
Author: t3sserakt <t3ss@posteo.de>
Date:   Tue,  7 Apr 2026 15:34:58 +0200

WIP: fixing chat overview

Diffstat:
MGNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/MainActivity.kt | 24+++++++++++++++++-------
MGNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ui/account/AccountListFragment.kt | 5+++++
2 files changed, 22 insertions(+), 7 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 @@ -81,6 +81,9 @@ class MainActivity : AppCompatActivity() { var currentAccount: ChatAccount? = null private set + @Volatile + var connectingAccount = false + companion object { private const val TAG = "MainActivity" private const val CHAT_READY_POLL_MS = 50L @@ -190,16 +193,19 @@ class MainActivity : AppCompatActivity() { } MessageKind.LOGIN -> { - loadChats() + if (!connectingAccount) { + loadChats() + } } MessageKind.LOGOUT -> { - Log.d(TAG, "Received LOGOUT") - contactListViewModel.clearModel() - chatOverviewViewModel.clearModel() - contactListViewModel.clearModel() - chatViewModels.values.forEach { it.clearModel() } - chats.clear() + if (!connectingAccount) { + Log.d(TAG, "Received LOGOUT") + contactListViewModel.clearModel() + chatOverviewViewModel.clearModel() + chatViewModels.values.forEach { it.clearModel() } + chats.clear() + } } MessageKind.CREATED_ACCOUNT, @@ -326,6 +332,10 @@ class MainActivity : AppCompatActivity() { } } + suspend fun loadChatsAwait() { + loadChatsSuspend() + } + private suspend fun loadChatsSuspend() = withContext(Dispatchers.IO) { val summaries = mutableListOf<ChatSummary>() val contacts = mutableListOf<ChatContact>() diff --git a/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ui/account/AccountListFragment.kt b/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ui/account/AccountListFragment.kt @@ -80,6 +80,8 @@ class AccountListFragment : Fragment() { viewLifecycleOwner.lifecycleScope.launch { try { + activity.connectingAccount = true + if (activity.currentAccount != null) { activity.clearChatState() runCatching { gnunetChat.disconnect(handle) } @@ -91,6 +93,7 @@ class AccountListFragment : Fragment() { gnunetChat.connect(handle, selectedAccount) selectedAccount.key = gnunetChat.getProfileKey(handle) activity.setCurrentAccount(selectedAccount) + activity.loadChatsAwait() val action = AccountListFragmentDirections.actionAccountListFragmentToAccountOverviewFragment( @@ -100,6 +103,8 @@ class AccountListFragment : Fragment() { } catch (t: Throwable) { Log.e(TAG, "Connecting account failed", t) showError(getString(R.string.account_connect_failed)) + } finally { + activity.connectingAccount = false } } }