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:
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