messenger-android

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

commit bb9dcd91a472055d09a46ca97a307bf562b732db
parent f68f2dd26efefec9e8114544effded92df529287
Author: t3sserakt <t3ss@posteo.de>
Date:   Wed,  9 Apr 2025 12:05:41 +0200

GUI tweeks, connecting GUI with mock service.

Diffstat:
MGNUnetMessenger/.gitignore | 1+
MGNUnetMessenger/.idea/misc.xml | 2+-
MGNUnetMessenger/app/build.gradle.kts | 1+
MGNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/MainActivity.kt | 32++++++++++++++++++++++++++++++++
MGNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/model/ChatAccount.kt | 13+++++++++----
MGNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ui/account/AccountListFragment.kt | 19++++++++++++++-----
MGNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ui/account/AccountOverviewFragment.kt | 4++++
AGNUnetMessenger/app/src/main/res/drawable/ic_menu.xml | 5+++++
MGNUnetMessenger/app/src/main/res/layout/activity_main.xml | 9++++-----
MGNUnetMessenger/app/src/main/res/layout/fragment_account_overview.xml | 18------------------
AGNUnetMessenger/app/src/main/res/menu/main_menu.xml | 15+++++++++++++++
MGNUnetMessenger/app/src/main/res/navigation/nav_graph.xml | 9++++++++-
MGNUnetMessenger/app/src/main/res/values/strings.xml | 2++
13 files changed, 96 insertions(+), 34 deletions(-)

diff --git a/GNUnetMessenger/.gitignore b/GNUnetMessenger/.gitignore @@ -14,3 +14,4 @@ .externalNativeBuild .cxx local.properties +.kotlin/ diff --git a/GNUnetMessenger/.idea/misc.xml b/GNUnetMessenger/.idea/misc.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="ExternalStorageConfigurationManager" enabled="true" /> - <component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="jbr-17" project-jdk-type="JavaSDK"> + <component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="jbr-21" project-jdk-type="JavaSDK"> <output url="file://$PROJECT_DIR$/build/classes" /> </component> <component name="ProjectType"> diff --git a/GNUnetMessenger/app/build.gradle.kts b/GNUnetMessenger/app/build.gradle.kts @@ -3,6 +3,7 @@ plugins { id("com.google.gms.google-services") kotlin("android") id("androidx.navigation.safeargs.kotlin") + id ("kotlin-parcelize") } android { diff --git a/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/MainActivity.kt b/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/MainActivity.kt @@ -1,6 +1,8 @@ package org.gnunet.gnunetmessenger import android.os.Bundle +import android.view.Menu +import android.widget.ImageView import androidx.appcompat.app.AppCompatActivity import androidx.navigation.NavController import androidx.navigation.findNavController @@ -8,6 +10,10 @@ import androidx.navigation.ui.AppBarConfiguration import androidx.navigation.ui.NavigationUI import androidx.appcompat.widget.Toolbar 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.MessengerApp import org.gnunet.gnunetmessenger.service.GnunetChat import org.gnunet.gnunetmessenger.service.ServiceFactory @@ -16,6 +22,8 @@ class MainActivity : AppCompatActivity() { private lateinit var gnunetChat: GnunetChat private lateinit var navController: NavController private lateinit var appBarConfiguration: AppBarConfiguration + private lateinit var handle: ChatHandle + private lateinit var currentAccount: ChatAccount override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -24,6 +32,10 @@ class MainActivity : AppCompatActivity() { // Initialize GnunetChat (keep this line!) gnunetChat = ServiceFactory.create(this, useMock = true) + val app = MessengerApp() + handle = gnunetChat.startChat(app) { chatContext, chatMessage -> + + } // Initialize the NavController val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment navController = navHostFragment.navController @@ -41,6 +53,18 @@ class MainActivity : AppCompatActivity() { // Set up ActionBar with NavController NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration) + val hamburgerIcon = findViewById<ImageView>(R.id.hamburger_icon) + hamburgerIcon.setOnClickListener { + // Handle click event for the hamburger icon + // For example, you can open a custom menu, navigate, etc. + // Here, you can display a Toast or handle any action like showing a custom menu. + } + } + + override fun onCreateOptionsMenu(menu: Menu?): Boolean { + // Fragment-spezifisches Menü wird vom Fragment selbst gesetzt + // Hier könntest du bei Bedarf globales Menü setzen + return super.onCreateOptionsMenu(menu) } override fun onSupportNavigateUp(): Boolean { @@ -52,4 +76,12 @@ class MainActivity : AppCompatActivity() { fun getGnunetChatInstance(): GnunetChat { return gnunetChat } + + fun getChatHandle(): ChatHandle { + return handle + } + + fun setCurrentAccount(account: ChatAccount) { + currentAccount = account + } } diff --git a/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/model/ChatAccount.kt b/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/model/ChatAccount.kt @@ -1,6 +1,11 @@ package org.gnunet.gnunetmessenger.model -class ChatAccount(pointer: Long, name: String) { - val pointer: Long = pointer - val name: String = name -} +import android.os.Parcelable +import kotlinx.parcelize.Parcelize + +@Parcelize +data class ChatAccount( + val pointer: Long, + val name: String +) : Parcelable + 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 @@ -6,8 +6,10 @@ import android.view.View import android.view.ViewGroup import android.widget.Button import androidx.fragment.app.Fragment +import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import org.gnunet.gnunetmessenger.MainActivity import org.gnunet.gnunetmessenger.R import org.gnunet.gnunetmessenger.model.ChatAccount @@ -21,12 +23,19 @@ class AccountListFragment : Fragment() { inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { + // Demo-Daten + val list = mutableListOf<ChatAccount>()/*listOf( + ChatAccount(1, "Alice"), + ChatAccount(2, "Bob") + )*/ val view = inflater.inflate(R.layout.fragment_account_list, container, false) recycler = view.findViewById(R.id.account_recycler) createButton = view.findViewById(R.id.btn_create_account) adapter = AccountAdapter { selectedAccount -> // Navigation zu Chats dieses Accounts (wird später implementiert) + val action = AccountListFragmentDirections.actionAccountListFragmentToAccountOverviewFragment(account = selectedAccount) + findNavController().navigate(action) } recycler.layoutManager = LinearLayoutManager(context) @@ -36,11 +45,11 @@ class AccountListFragment : Fragment() { // Navigation zu CreateAccountFragment (wird später gemacht) } - // Demo-Daten - adapter.submitList(listOf( - ChatAccount(1, "Alice"), - ChatAccount(2, "Bob") - )) + (activity as MainActivity).getGnunetChatInstance().iterateAccounts((activity as MainActivity).getChatHandle()) { account -> + list.add(account) + } + + adapter.submitList(list) return view } diff --git a/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ui/account/AccountOverviewFragment.kt b/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ui/account/AccountOverviewFragment.kt @@ -9,6 +9,7 @@ import androidx.recyclerview.widget.LinearLayoutManager import org.gnunet.gnunetmessenger.MainActivity import org.gnunet.gnunetmessenger.databinding.FragmentAccountOverviewBinding import org.gnunet.gnunetmessenger.R +import org.gnunet.gnunetmessenger.model.ChatAccount import org.gnunet.gnunetmessenger.ui.adapters.ChatListAdapter class AccountOverviewFragment : Fragment() { @@ -24,6 +25,9 @@ class AccountOverviewFragment : Fragment() { ): View { _binding = FragmentAccountOverviewBinding.inflate(inflater, container, false) + val args = AccountOverviewFragmentArgs.fromBundle(requireArguments()) + (activity as MainActivity).setCurrentAccount(args.account) + drawerLayout = binding.accountDrawerLayout // Toolbar Setup diff --git a/GNUnetMessenger/app/src/main/res/drawable/ic_menu.xml b/GNUnetMessenger/app/src/main/res/drawable/ic_menu.xml @@ -0,0 +1,5 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp"> + + <path android:fillColor="@android:color/white" android:pathData="M2,15.5v2h20v-2L2,15.5zM2,10.5v2h20v-2L2,10.5zM2,5.5v2h20v-2L2,5.5z"/> + +</vector> diff --git a/GNUnetMessenger/app/src/main/res/layout/activity_main.xml b/GNUnetMessenger/app/src/main/res/layout/activity_main.xml @@ -17,13 +17,12 @@ app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent"> - <TextView - android:id="@+id/app_name" + <ImageView + android:id="@+id/hamburger_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="GNUnet Messenger" - android:textAppearance="?android:textAppearanceLarge" - android:textColor="@android:color/white" /> + android:src="@drawable/ic_menu" + android:layout_gravity="end|center_vertical" /> </androidx.appcompat.widget.Toolbar> <!-- NavHost Fragment for Navigation --> diff --git a/GNUnetMessenger/app/src/main/res/layout/fragment_account_overview.xml b/GNUnetMessenger/app/src/main/res/layout/fragment_account_overview.xml @@ -13,14 +13,6 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - <!-- Toolbar mit Hamburger --> - <androidx.appcompat.widget.Toolbar - android:id="@+id/toolbar" - android:layout_width="match_parent" - android:layout_height="?attr/actionBarSize" - android:background="?attr/colorPrimary" - android:theme="?attr/actionBarTheme" /> - <!-- RecyclerView für die Chatliste --> <androidx.recyclerview.widget.RecyclerView android:id="@+id/chatListRecyclerView" @@ -28,14 +20,4 @@ android:layout_height="0dp" android:layout_weight="1" /> </LinearLayout> - - <!-- Hamburger Menu --> - <com.google.android.material.navigation.NavigationView - android:id="@+id/accountNavigationView" - android:layout_width="wrap_content" - android:layout_height="match_parent" - android:layout_gravity="start" - android:fitsSystemWindows="true" - app:menu="@menu/account_drawer_menu" - app:headerLayout="@layout/account_drawer_header" /> </androidx.drawerlayout.widget.DrawerLayout> diff --git a/GNUnetMessenger/app/src/main/res/menu/main_menu.xml b/GNUnetMessenger/app/src/main/res/menu/main_menu.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<menu xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto"> + <item + android:id="@+id/menu_settings" + android:icon="@android:drawable/ic_menu_preferences" + android:title="@string/settings" + app:showAsAction="always" /> + + <item + android:id="@+id/menu_about" + android:icon="@android:drawable/ic_menu_info_details" + android:title="@string/about" + app:showAsAction="ifRoom" /> +</menu> diff --git a/GNUnetMessenger/app/src/main/res/navigation/nav_graph.xml b/GNUnetMessenger/app/src/main/res/navigation/nav_graph.xml @@ -14,7 +14,11 @@ app:destination="@id/createAccountFragment" /> <action android:id="@+id/action_accountListFragment_to_accountOverviewFragment" - app:destination="@id/accountOverviewFragment" /> + app:destination="@id/accountOverviewFragment"> + <argument + android:name="account" + app:argType="org.gnunet.gnunetmessenger.model.ChatAccount" /> + </action> </fragment> <fragment @@ -27,6 +31,9 @@ android:id="@+id/accountOverviewFragment" android:name="org.gnunet.gnunetmessenger.ui.account.AccountOverviewFragment" android:label="Account Overview"> + <argument + android:name="account" + app:argType="org.gnunet.gnunetmessenger.model.ChatAccount" /> <action android:id="@+id/action_accountOverviewFragment_to_chatFragment" app:destination="@id/chatFragment"> diff --git a/GNUnetMessenger/app/src/main/res/values/strings.xml b/GNUnetMessenger/app/src/main/res/values/strings.xml @@ -5,4 +5,6 @@ <string name="select_avatar">Select Avatar</string> <string name="cancel">Cancel</string> <string name="confirm">Confirm</string> + <string name="settings">Settings</string> + <string name="about">About</string> </resources> \ No newline at end of file