messenger-android

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

commit 3af09e6c6afc60512d30305c9916715c65767d0e
parent 7e17da6c3763e842aaaa77638648b92e4c79460b
Author: t3sserakt <t3ss@posteo.de>
Date:   Tue,  8 Apr 2025 13:27:32 +0200

Added more UI for account handling.

Diffstat:
MGNUnetMessenger/.idea/misc.xml | 2+-
MGNUnetMessenger/app/build.gradle.kts | 6++++++
MGNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/MainActivity.kt | 12+++++++++++-
MGNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ui/account/AccountAdapter.kt | 11+++++++++++
AGNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ui/account/AccountDetailsFragment.kt | 34++++++++++++++++++++++++++++++++++
MGNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ui/account/AccountListFragment.kt | 15+++++++++++++--
AGNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ui/account/AccountOverviewFragment.kt | 67+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MGNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ui/account/CreateAccountFragment.kt | 39++++++++++++++++++++++++++++++++-------
AGNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ui/adapter/ChatListAdapter.kt | 33+++++++++++++++++++++++++++++++++
AGNUnetMessenger/app/src/main/res/drawable/ic_account_circle.xml | 5+++++
AGNUnetMessenger/app/src/main/res/drawable/ic_avatar_placeholder.xml | 5+++++
AGNUnetMessenger/app/src/main/res/layout/account_drawer_header.xml | 21+++++++++++++++++++++
MGNUnetMessenger/app/src/main/res/layout/activity_main.xml | 2+-
DGNUnetMessenger/app/src/main/res/layout/chat_item.xml | 33---------------------------------
AGNUnetMessenger/app/src/main/res/layout/fragment_account_details.xml | 28++++++++++++++++++++++++++++
AGNUnetMessenger/app/src/main/res/layout/fragment_account_overview.xml | 41+++++++++++++++++++++++++++++++++++++++++
AGNUnetMessenger/app/src/main/res/layout/item_chat.xml | 16++++++++++++++++
AGNUnetMessenger/app/src/main/res/menu/account_drawer_menu.xml | 8++++++++
MGNUnetMessenger/app/src/main/res/navigation/nav_graph.xml | 51++++++++++++++++++++++++++++++++++++++++++++++++---
MGNUnetMessenger/gradle/libs.versions.toml | 7++++++-
20 files changed, 387 insertions(+), 49 deletions(-)

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 @@ -35,6 +35,10 @@ android { kotlinOptions { jvmTarget = "11" } + buildFeatures { + dataBinding = true + viewBinding = true + } } dependencies { @@ -46,6 +50,8 @@ dependencies { implementation(libs.androidx.navigation.fragment) implementation(libs.androidx.navigation.ui) implementation(libs.material) + implementation(libs.androidx.navigation.fragment.ktx) + implementation(libs.androidx.navigation.ui.ktx) testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) diff --git a/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/MainActivity.kt b/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/MainActivity.kt @@ -8,9 +8,12 @@ import android.widget.TextView import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.Toolbar import androidx.recyclerview.widget.RecyclerView +import org.gnunet.gnunetmessenger.service.GnunetChat +import org.gnunet.gnunetmessenger.service.ServiceFactory class MainActivity : AppCompatActivity() { + private lateinit var gnunetChat: GnunetChat private lateinit var noChatBox: LinearLayout private lateinit var noChatLabel: TextView private lateinit var chatsSearchEntry: SearchView @@ -20,6 +23,8 @@ class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + + gnunetChat = ServiceFactory.create(this, useMock = true) setContentView(R.layout.activity_main) // Initialize Views @@ -60,4 +65,8 @@ class MainActivity : AppCompatActivity() { chatsStack.visibility = View.VISIBLE } } -} + + fun getGnunetChatInstance(): GnunetChat { + return gnunetChat + } +} +\ No newline at end of file diff --git a/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ui/account/AccountAdapter.kt b/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ui/account/AccountAdapter.kt @@ -1,5 +1,16 @@ package org.gnunet.gnunetmessenger.ui.account +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.DiffUtil +import androidx.recyclerview.widget.ListAdapter +import androidx.recyclerview.widget.RecyclerView +import org.gnunet.gnunetmessenger.R +import org.gnunet.gnunetmessenger.model.ChatAccount + class AccountAdapter( private val onClick: (ChatAccount) -> Unit ) : ListAdapter<ChatAccount, AccountAdapter.AccountViewHolder>(DIFF) { diff --git a/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ui/account/AccountDetailsFragment.kt b/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ui/account/AccountDetailsFragment.kt @@ -0,0 +1,34 @@ +package org.gnunet.gnunetmessenger.ui.account + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import org.gnunet.gnunetmessenger.R +import org.gnunet.gnunetmessenger.databinding.FragmentAccountDetailsBinding + +class AccountDetailsFragment : Fragment() { + + private var _binding: FragmentAccountDetailsBinding? = null + private val binding get() = _binding!! + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + _binding = FragmentAccountDetailsBinding.inflate(inflater, container, false) + + // Set up the account details (dummy data for now) + // This could be loaded from a ViewModel or passed through arguments + binding.accountName.text = "Account Name: John Doe" + binding.accountAvatar.setImageResource(R.drawable.ic_account_circle) // Beispiel für Avatar + + return binding.root + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } +} 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 @@ -1,5 +1,16 @@ package org.gnunet.gnunetmessenger.ui.account +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Button +import androidx.fragment.app.Fragment +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import org.gnunet.gnunetmessenger.R +import org.gnunet.gnunetmessenger.model.ChatAccount + class AccountListFragment : Fragment() { private lateinit var recycler: RecyclerView @@ -27,8 +38,8 @@ class AccountListFragment : Fragment() { // Demo-Daten adapter.submitList(listOf( - ChatAccount("Alice"), - ChatAccount("Bob") + ChatAccount(1, "Alice"), + ChatAccount(2, "Bob") )) 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 @@ -0,0 +1,67 @@ +package org.gnunet.gnunetmessenger.ui.account + +import android.os.Bundle +import android.view.* +import androidx.drawerlayout.widget.DrawerLayout +import androidx.fragment.app.Fragment +import androidx.navigation.fragment.findNavController +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.ui.adapters.ChatListAdapter + +class AccountOverviewFragment : Fragment() { + + private var _binding: FragmentAccountOverviewBinding? = null + private val binding get() = _binding!! + + private lateinit var drawerLayout: DrawerLayout + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + _binding = FragmentAccountOverviewBinding.inflate(inflater, container, false) + + drawerLayout = binding.accountDrawerLayout + + // Toolbar Setup + (activity as MainActivity).setSupportActionBar(binding.toolbar) + setHasOptionsMenu(true) + + // Setup Chat list (dummy data vorerst) + val chatList = listOf("Chat mit Alex", "Projektgruppe", "Family", "Plattform XYZ") + val adapter = ChatListAdapter(chatList) { selectedChat -> + // Navigiere zum ChatFragment mit dem ausgewählten Chat + val action = AccountOverviewFragmentDirections.actionAccountOverviewFragmentToChatFragment(chatName = selectedChat) + findNavController().navigate(action) + } + binding.chatListRecyclerView.layoutManager = LinearLayoutManager(requireContext()) + binding.chatListRecyclerView.adapter = adapter + + // Menu Item Listener + binding.accountNavigationView.setNavigationItemSelectedListener { menuItem -> + when (menuItem.itemId) { + R.id.nav_account -> { + findNavController().navigate(AccountOverviewFragmentDirections.actionAccountOverviewFragmentToAccountDetailsFragment()) + } + R.id.nav_share_contact -> { + findNavController().navigate(AccountOverviewFragmentDirections.actionAccountOverviewFragmentToAccountDetailsFragment()) + } + R.id.nav_list_attributes -> { + findNavController().navigate(AccountOverviewFragmentDirections.actionAccountOverviewFragmentToAccountDetailsFragment()) + } + } + drawerLayout.closeDrawers() + true + } + + return binding.root + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } +} 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 @@ -1,7 +1,5 @@ package org.gnunet.gnunetmessenger -import android.app.Activity -import android.content.Intent import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -9,9 +7,9 @@ import android.view.ViewGroup import androidx.fragment.app.Fragment import androidx.activity.result.contract.ActivityResultContracts import org.gnunet.gnunetmessenger.databinding.FragmentCreateAccountBinding +import org.gnunet.gnunetmessenger.model.ChatHandle import org.gnunet.gnunetmessenger.service.GnunetChat import org.gnunet.gnunetmessenger.model.GnunetReturnValue -import java.io.File class CreateAccountFragment : Fragment() { @@ -30,12 +28,39 @@ class CreateAccountFragment : Fragment() { binding = FragmentCreateAccountBinding.inflate(inflater, container, false) // Initialize GnunetChat (or get it from the ServiceFactory) - gnunetChat = (activity as MainActivity).gnunetChat + gnunetChat = (activity as MainActivity).getGnunetChatInstance() // Set up listeners - binding.btnSelectAvatar.setOnClickListener { + binding.selectAvatarButton.setOnClickListener { avatarImageRequest.launch("image/*") // Start the image picker } - binding.btnConfirmAccount.setOnClickListener { - val accountName = binding.editTextAccountName + binding.confirmButton.setOnClickListener { + val accountName = binding.accountNameInput.text.toString() + if (accountName.isNotEmpty()) { + createAccount(accountName) + } + } + + binding.cancelButton.setOnClickListener { + // Navigate back to the previous screen + requireActivity().onBackPressed() + } + + return binding.root + } + + private fun createAccount(accountName: String) { + // Call the service to create the account + val result = gnunetChat.createAccount(handle = ChatHandle(1), name = accountName) + + when (result) { + GnunetReturnValue.OK -> { + // Handle success (e.g., navigate back or show a success message) + } + else -> { + // Handle failure (e.g., show an error message) + } + } + } +} diff --git a/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ui/adapter/ChatListAdapter.kt b/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ui/adapter/ChatListAdapter.kt @@ -0,0 +1,33 @@ +package org.gnunet.gnunetmessenger.ui.adapters + +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import org.gnunet.gnunetmessenger.databinding.ItemChatBinding + +class ChatListAdapter( + private val chats: List<String>, // später ersetzen durch ChatModel + private val onChatClick: (String) -> Unit +) : RecyclerView.Adapter<ChatListAdapter.ChatViewHolder>() { + + inner class ChatViewHolder(private val binding: ItemChatBinding) : + RecyclerView.ViewHolder(binding.root) { + fun bind(chatName: String) { + binding.chatName.text = chatName + binding.root.setOnClickListener { + onChatClick(chatName) + } + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ChatViewHolder { + val binding = ItemChatBinding.inflate(LayoutInflater.from(parent.context), parent, false) + return ChatViewHolder(binding) + } + + override fun onBindViewHolder(holder: ChatViewHolder, position: Int) { + holder.bind(chats[position]) + } + + override fun getItemCount() = chats.size +} diff --git a/GNUnetMessenger/app/src/main/res/drawable/ic_account_circle.xml b/GNUnetMessenger/app/src/main/res/drawable/ic_account_circle.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="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,5c1.66,0 3,1.34 3,3s-1.34,3 -3,3 -3,-1.34 -3,-3 1.34,-3 3,-3zM12,19.2c-2.5,0 -4.71,-1.28 -6,-3.22 0.03,-1.99 4,-3.08 6,-3.08 1.99,0 5.97,1.09 6,3.08 -1.29,1.94 -3.5,3.22 -6,3.22z"/> + +</vector> diff --git a/GNUnetMessenger/app/src/main/res/drawable/ic_avatar_placeholder.xml b/GNUnetMessenger/app/src/main/res/drawable/ic_avatar_placeholder.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="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,5c1.66,0 3,1.34 3,3s-1.34,3 -3,3 -3,-1.34 -3,-3 1.34,-3 3,-3zM12,19.2c-2.5,0 -4.71,-1.28 -6,-3.22 0.03,-1.99 4,-3.08 6,-3.08 1.99,0 5.97,1.09 6,3.08 -1.29,1.94 -3.5,3.22 -6,3.22z"/> + +</vector> diff --git a/GNUnetMessenger/app/src/main/res/layout/account_drawer_header.xml b/GNUnetMessenger/app/src/main/res/layout/account_drawer_header.xml @@ -0,0 +1,21 @@ +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:orientation="vertical" + android:padding="16dp" + android:layout_width="match_parent" + android:layout_height="wrap_content"> + + <ImageView + android:id="@+id/imageViewAvatar" + android:layout_width="64dp" + android:layout_height="64dp" + android:src="@drawable/ic_account_circle" + android:contentDescription="Avatar" /> + + <TextView + android:id="@+id/textViewAccountName" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="Account Name" + android:textSize="18sp" + android:paddingTop="8dp" /> +</LinearLayout> diff --git a/GNUnetMessenger/app/src/main/res/layout/activity_main.xml b/GNUnetMessenger/app/src/main/res/layout/activity_main.xml @@ -38,7 +38,7 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toBottomOf="parent" - tools:listitem="@layout/chat_item" /> + tools:listitem="@layout/item_chat" /> <!-- Empty chat placeholder box --> <LinearLayout diff --git a/GNUnetMessenger/app/src/main/res/layout/chat_item.xml b/GNUnetMessenger/app/src/main/res/layout/chat_item.xml @@ -1,33 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:app="http://schemas.android.com/apk/res-auto" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_margin="8dp" - app:cardElevation="4dp" - android:radius="8dp"> - - <LinearLayout - android:orientation="vertical" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:padding="16dp"> - - <TextView - android:id="@+id/chat_title" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="Chat Title" - android:textSize="18sp" - android:textStyle="bold"/> - - <TextView - android:id="@+id/chat_snippet" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="Last message here" - android:textSize="14sp" - android:textColor="#888"/> - - </LinearLayout> -</androidx.cardview.widget.CardView> diff --git a/GNUnetMessenger/app/src/main/res/layout/fragment_account_details.xml b/GNUnetMessenger/app/src/main/res/layout/fragment_account_details.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:context=".ui.account.AccountDetailsFragment"> + + <ImageView + android:id="@+id/accountAvatar" + android:layout_width="100dp" + android:layout_height="100dp" + android:src="@drawable/ic_account_circle" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + <TextView + android:id="@+id/accountName" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="Account Name" + android:textSize="18sp" + app:layout_constraintTop_toBottomOf="@id/accountAvatar" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" /> +</androidx.constraintlayout.widget.ConstraintLayout> diff --git a/GNUnetMessenger/app/src/main/res/layout/fragment_account_overview.xml b/GNUnetMessenger/app/src/main/res/layout/fragment_account_overview.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:id="@+id/accountDrawerLayout" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:context=".AccountOverviewFragment"> + + <!-- Main content --> + <LinearLayout + android:orientation="vertical" + 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" + android:layout_width="match_parent" + 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/layout/item_chat.xml b/GNUnetMessenger/app/src/main/res/layout/item_chat.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_margin="8dp" + android:elevation="4dp" + android:foreground="?attr/selectableItemBackground"> + + <TextView + android:id="@+id/chatName" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:padding="16dp" + android:textSize="18sp" + android:text="Chat Name" /> +</androidx.cardview.widget.CardView> diff --git a/GNUnetMessenger/app/src/main/res/menu/account_drawer_menu.xml b/GNUnetMessenger/app/src/main/res/menu/account_drawer_menu.xml @@ -0,0 +1,8 @@ +<menu xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:id="@+id/nav_account" + android:title="Account" /> + <item android:id="@+id/nav_share_contact" + android:title="Share Contact" /> + <item android:id="@+id/nav_list_attributes" + android:title="List Attributes" /> +</menu> diff --git a/GNUnetMessenger/app/src/main/res/navigation/nav_graph.xml b/GNUnetMessenger/app/src/main/res/navigation/nav_graph.xml @@ -1,6 +1,52 @@ <?xml version="1.0" encoding="utf-8"?> <navigation xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" - android:id="@+id/nav_graph.xml"> + android:id="@+id/nav_graph" + app:startDestination="@id/accountListFragment"> -</navigation> -\ No newline at end of file + <fragment + android:id="@+id/accountListFragment" + android:name="org.gnunet.gnunetmessenger.ui.account.AccountListFragment" + android:label="Accounts"> + <action + android:id="@+id/action_accountListFragment_to_createAccountFragment" + app:destination="@id/createAccountFragment" /> + <action + android:id="@+id/action_accountListFragment_to_accountOverviewFragment" + app:destination="@id/accountOverviewFragment" /> + </fragment> + + <fragment + android:id="@+id/createAccountFragment" + android:name="org.gnunet.gnunetmessenger.ui.account.CreateAccountFragment" + android:label="Create Account" /> + + <fragment + android:id="@+id/accountOverviewFragment" + android:name="org.gnunet.gnunetmessenger.ui.account.AccountOverviewFragment" + android:label="Account Overview"> + <!-- Action zur ChatFragment (Argument chatName übergeben) --> + <action + android:id="@+id/action_accountOverviewFragment_to_chatFragment" + app:destination="@id/chatFragment"> + <argument + android:name="chatName" + app:argType="string" /> + </action> + + <!-- Action zur AccountDetailsFragment --> + <action + android:id="@+id/action_accountOverviewFragment_to_accountDetailsFragment" + app:destination="@id/accountDetailsFragment" /> + </fragment> + + <fragment + android:id="@+id/chatFragment" + android:name="org.gnunet.gnunetmessenger.ui.chat.ChatFragment" + android:label="Chat" /> + + <fragment + android:id="@+id/accountDetailsFragment" + android:name="org.gnunet.gnunetmessenger.ui.account.AccountDetailsFragment" + android:label="Account Details" /> +</navigation> diff --git a/GNUnetMessenger/gradle/libs.versions.toml b/GNUnetMessenger/gradle/libs.versions.toml @@ -10,12 +10,17 @@ espressoCore = "3.5.1" appcompat = "1.6.1" material = "1.10.0" navigation = "2.7.7" +navigationFragmentKtx = "2.8.9" +navigationUiKtx = "2.8.9" [libraries] +androidx-core-ktx = { module = "androidx.core:core-ktx", version = "1.12.0" } +androidx-navigation-fragment-ktx = { module = "androidx.navigation:navigation-fragment-ktx", version = "2.7.7" } +androidx-navigation-ui-ktx = { module = "androidx.navigation:navigation-ui-ktx", version = "2.7.7" } + androidx-navigation-fragment = { module = "androidx.navigation:navigation-fragment-ktx", version.ref = "navigation" } androidx-navigation-ui = { module = "androidx.navigation:navigation-ui-ktx", version.ref = "navigation" } androidx-cardview = { module = "androidx.cardview:cardview", version.ref = "cardview" } -androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } firebase-bom = { module = "com.google.firebase:firebase-bom", version.ref = "firebaseBom" } junit = { group = "junit", name = "junit", version.ref = "junit" } androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" }