yayan 1 rok pred
rodič
commit
302dda7eb4

+ 2 - 2
app/build.gradle

@@ -60,10 +60,10 @@ dependencies {
     androidTestImplementation 'androidx.test.ext:junit:1.1.5'
     androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
 
-    implementation 'androidx.navigation:navigation-compose:2.7.6'
+    implementation 'androidx.navigation:navigation-compose:2.7.7'
     implementation 'io.coil-kt:coil-compose:2.2.2'
 
-    implementation platform('androidx.compose:compose-bom:2022.10.00')
+    implementation platform('androidx.compose:compose-bom:2024.02.00')
     implementation "androidx.compose.ui:ui"
     implementation "androidx.compose.ui:ui-tooling-preview"
     implementation 'androidx.compose.material3:material3'

+ 23 - 15
app/src/main/java/io/nexilis/alpha/ui/main/Chat.kt

@@ -8,9 +8,8 @@ import androidx.compose.foundation.shape.CircleShape
 import androidx.compose.foundation.shape.RoundedCornerShape
 import androidx.compose.foundation.text.KeyboardOptions
 import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.automirrored.filled.Send
 import androidx.compose.material.icons.filled.Add
-import androidx.compose.material.icons.filled.Face
-import androidx.compose.material.icons.filled.Send
 import androidx.compose.material3.*
 import androidx.compose.runtime.*
 import androidx.compose.runtime.livedata.observeAsState
@@ -29,7 +28,6 @@ import io.nexilis.service.data.entities.Message
 import io.nexilis.service.data.viewmodels.BuddyViewModel
 import io.nexilis.service.data.viewmodels.MessageViewModel
 
-@OptIn(ExperimentalMaterial3Api::class)
 @Composable
 fun Chat(navController: NavHostController, pin: String, mainViewModel: MainViewModel) {
     var textInput by rememberSaveable(stateSaver = TextFieldValue.Saver) {
@@ -61,7 +59,7 @@ fun Chat(navController: NavHostController, pin: String, mainViewModel: MainViewM
                     val m = l[it]
                     m
                 }
-                ListItem(modifier = Modifier.fillMaxWidth(), headlineText = {
+                ListItem(modifier = Modifier.fillMaxWidth(), headlineContent = {
                     Row(
                         modifier = Modifier.fillMaxWidth(),
                         horizontalArrangement = if (message?.f_pin == me?.f_pin) Arrangement.End else Arrangement.Start
@@ -70,6 +68,7 @@ fun Chat(navController: NavHostController, pin: String, mainViewModel: MainViewM
                             Spacer(modifier = Modifier.weight(0.2f))
                             Text(
                                 text = list?.get(it)?.message_text ?: "",
+                                color = MaterialTheme.colorScheme.onPrimary,
                                 style = MaterialTheme.typography.bodyMedium,
                                 modifier = Modifier
                                     .graphicsLayer {
@@ -78,12 +77,13 @@ fun Chat(navController: NavHostController, pin: String, mainViewModel: MainViewM
                                         clip = true
                                     }
                                     .weight(weight = 0.8f, fill = false)
-                                    .background(color = MaterialTheme.colorScheme.primaryContainer)
+                                    .background(color = MaterialTheme.colorScheme.primary)
                                     .padding(8.dp)
                             )
                         } else {
                             Text(
                                 text = list?.get(it)?.message_text ?: "",
+                                color = MaterialTheme.colorScheme.onSurface,
                                 style = MaterialTheme.typography.bodyMedium,
                                 modifier = Modifier
                                     .graphicsLayer {
@@ -114,18 +114,20 @@ fun Chat(navController: NavHostController, pin: String, mainViewModel: MainViewM
             onValueChange = { textInput = it },
             label = null,
             placeholder = {
-                Text(text = "Typing here...")
+                Text(text = "Typing here...", color = MaterialTheme.colorScheme.onPrimary)
             },
             leadingIcon = {
-                IconButton(onClick = { /*TODO*/ }) {
-                    Icon(imageVector = Icons.Default.Face, contentDescription = "")
+                IconButton(onClick = { }
+                ) {
+                    Icon(
+                        imageVector = Icons.Default.Add,
+                        contentDescription = "",
+                        tint = MaterialTheme.colorScheme.onPrimary
+                    )
                 }
             },
             trailingIcon = {
                 Row {
-                    IconButton(onClick = { /*TODO*/ }) {
-                        Icon(imageVector = Icons.Default.Add, contentDescription = "")
-                    }
                     IconButton(onClick = {
                         if (pin.trim().isEmpty()) {
                             return@IconButton
@@ -152,16 +154,22 @@ fun Chat(navController: NavHostController, pin: String, mainViewModel: MainViewM
                             textInput = TextFieldValue("")
                         }
                     }) {
-                        Icon(imageVector = Icons.Default.Send, contentDescription = "")
+                        Icon(
+                            imageVector = Icons.AutoMirrored.Filled.Send,
+                            contentDescription = "",
+                            tint = MaterialTheme.colorScheme.onPrimary
+                        )
                     }
                 }
             },
-            colors = TextFieldDefaults.textFieldColors(
-                containerColor = MaterialTheme.colorScheme.primaryContainer,
+            colors = TextFieldDefaults.colors(
+                focusedContainerColor = MaterialTheme.colorScheme.primary,
+                unfocusedContainerColor = MaterialTheme.colorScheme.primary,
+                disabledContainerColor = MaterialTheme.colorScheme.primary,
                 focusedIndicatorColor = Color.Transparent,
                 unfocusedIndicatorColor = Color.Transparent,
                 disabledIndicatorColor = Color.Transparent,
-                errorIndicatorColor = Color.Transparent
+                errorIndicatorColor = Color.Transparent,
             ),
             keyboardOptions = KeyboardOptions(KeyboardCapitalization.Sentences),
             maxLines = 3

+ 2 - 3
app/src/main/java/io/nexilis/alpha/ui/main/Chats.kt

@@ -29,7 +29,6 @@ import io.nexilis.service.data.viewmodels.BuddyViewModel
 import io.nexilis.service.data.viewmodels.MessageSummaryViewModel
 import io.nexilis.service.data.viewmodels.MessageViewModel
 
-@OptIn(ExperimentalMaterial3Api::class)
 @Composable
 fun Chats(
     navController: NavHostController,
@@ -64,13 +63,13 @@ fun Chats(
                         restoreState = true
                     }
                 }),
-                headlineText = {
+                headlineContent = {
                     Text(
                         "${buddy?.first_name ?: "First text"} ${buddy?.last_name ?: "Last text"}",
                         style = MaterialTheme.typography.titleSmall
                     )
                 },
-                supportingText = {
+                supportingContent = {
                     Text(
                         message?.message_text ?: "Secondary text",
                         style = MaterialTheme.typography.bodySmall

+ 2 - 3
app/src/main/java/io/nexilis/alpha/ui/main/Contact.kt

@@ -25,7 +25,6 @@ import io.nexilis.alpha.ui.screen.Screen
 import io.nexilis.alpha.ui.viewmodel.MainViewModel
 import io.nexilis.service.data.viewmodels.BuddyViewModel
 
-@OptIn(ExperimentalMaterial3Api::class)
 @Composable
 fun Contact(navController: NavHostController, mainViewModel: MainViewModel) {
     SideEffect {
@@ -50,13 +49,13 @@ fun Contact(navController: NavHostController, mainViewModel: MainViewModel) {
                         restoreState = true
                     }
                 }),
-                headlineText = {
+                headlineContent = {
                     Text(
                         buddy?.first_name ?: "",
                         style = MaterialTheme.typography.titleSmall
                     )
                 },
-                supportingText = {
+                supportingContent = {
                     Text(
                         "",
                         style = MaterialTheme.typography.bodySmall

+ 0 - 2
app/src/main/java/io/nexilis/alpha/ui/main/Friend.kt

@@ -4,7 +4,6 @@ import androidx.compose.foundation.layout.*
 import androidx.compose.foundation.rememberScrollState
 import androidx.compose.foundation.verticalScroll
 import androidx.compose.material3.Button
-import androidx.compose.material3.ExperimentalMaterial3Api
 import androidx.compose.material3.OutlinedTextField
 import androidx.compose.material3.Text
 import androidx.compose.runtime.Composable
@@ -22,7 +21,6 @@ import androidx.hilt.navigation.compose.hiltViewModel
 import androidx.navigation.NavHostController
 import io.nexilis.service.data.viewmodels.BuddyViewModel
 
-@OptIn(ExperimentalMaterial3Api::class)
 @Composable
 fun Friend(navController: NavHostController) {
     val viewModel: BuddyViewModel = hiltViewModel()

+ 33 - 45
app/src/main/java/io/nexilis/alpha/ui/main/Menu.kt

@@ -1,26 +1,37 @@
 package io.nexilis.alpha.ui.main
 
 import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.filled.Mic
+import androidx.compose.material.icons.filled.Call
 import androidx.compose.material.icons.filled.MoreVert
-import androidx.compose.material.icons.filled.Search
+import androidx.compose.material.icons.filled.VideoCall
 import androidx.compose.material3.*
 import androidx.compose.runtime.*
-import androidx.navigation.NavGraph.Companion.findStartDestination
 import androidx.navigation.NavHostController
+import androidx.navigation.compose.currentBackStackEntryAsState
 import io.nexilis.alpha.ui.screen.Screen
 
 @Composable
 fun HomeMenu(navController: NavHostController) {
+    val navBackStackEntry by navController.currentBackStackEntryAsState()
+    val currentDestination = navBackStackEntry?.destination
+    var isChat = false
+    currentDestination?.route.let {
+        it?.let {
+            isChat = it.startsWith("${Screen.Chat.route}/")
+        }
+    }
+    if (isChat) {
+        ChatMenu(navController = navController)
+    } else {
+        MainMenu(navController = navController)
+    }
+}
+
+@Composable
+fun MainMenu(navController: NavHostController) {
     var isOpenMenu by remember {
         mutableStateOf(false)
     }
-    IconButton(onClick = { }) {
-        Icon(
-            imageVector = Icons.Default.Mic,
-            contentDescription = ""
-        )
-    }
     IconButton(onClick = { isOpenMenu = !isOpenMenu }) {
         Icon(imageVector = Icons.Default.MoreVert, contentDescription = "")
     }
@@ -35,9 +46,6 @@ fun HomeMenu(navController: NavHostController) {
             onClick = {
                 isOpenMenu = false
                 navController.navigate(Screen.Friend.route) {
-//                    popUpTo(Screen.Chats.route) {
-//                        saveState = true
-//                    }
                     launchSingleTop = true
                     restoreState = true
                 }
@@ -47,9 +55,6 @@ fun HomeMenu(navController: NavHostController) {
             onClick = {
                 isOpenMenu = false
                 navController.navigate(Screen.SignUp.route) {
-//                    popUpTo(navController.graph.findStartDestination().id) {
-//                        saveState = true
-//                    }
                     launchSingleTop = true
                     restoreState = true
                 }
@@ -64,41 +69,21 @@ fun HomeMenu(navController: NavHostController) {
 }
 
 @Composable
-fun ContactMenu(navController: NavHostController) {
+fun ChatMenu(navController: NavHostController) {
     var isOpenMenu by remember {
         mutableStateOf(false)
     }
     IconButton(onClick = { }) {
-        Icon(imageVector = Icons.Default.Search, contentDescription = "")
-    }
-    IconButton(onClick = { isOpenMenu = !isOpenMenu }) {
-        Icon(imageVector = Icons.Default.MoreVert, contentDescription = "")
-    }
-    DropdownMenu(
-        expanded = isOpenMenu,
-        onDismissRequest = { isOpenMenu = false }) {
-        DropdownMenuItem(
-            text = { Text(text = "Add friend") },
-            onClick = {
-                isOpenMenu = false
-                navController.navigate(Screen.Friend.route) {
-                    popUpTo(navController.graph.findStartDestination().id) {
-                        saveState = true
-                    }
-                    launchSingleTop = true
-                    restoreState = true
-                }
-            })
-    }
-}
-
-@Composable
-fun ChatMenu(navController: NavHostController) {
-    var isOpenMenu by remember {
-        mutableStateOf(false)
+        Icon(
+            imageVector = Icons.Default.VideoCall,
+            contentDescription = ""
+        )
     }
     IconButton(onClick = { }) {
-        Icon(imageVector = Icons.Default.Search, contentDescription = "")
+        Icon(
+            imageVector = Icons.Default.Call,
+            contentDescription = ""
+        )
     }
     IconButton(onClick = { isOpenMenu = !isOpenMenu }) {
         Icon(imageVector = Icons.Default.MoreVert, contentDescription = "")
@@ -106,8 +91,11 @@ fun ChatMenu(navController: NavHostController) {
     DropdownMenu(
         expanded = isOpenMenu,
         onDismissRequest = { isOpenMenu = false }) {
+        DropdownMenuItem(
+            text = { Text(text = "Search chat") },
+            onClick = { })
         DropdownMenuItem(
             text = { Text(text = "Clear chat") },
-            onClick = { /*TODO*/ })
+            onClick = { })
     }
 }

+ 8 - 9
app/src/main/java/io/nexilis/alpha/ui/main/Profile.kt

@@ -27,7 +27,6 @@ import coil.request.ImageRequest
 import io.nexilis.alpha.ui.viewmodel.MainViewModel
 import io.nexilis.service.data.viewmodels.BuddyViewModel
 
-@OptIn(ExperimentalMaterial3Api::class)
 @Composable
 fun Profile(contentPadding: PaddingValues = PaddingValues(0.dp), mainViewModel: MainViewModel) {
     SideEffect {
@@ -79,8 +78,8 @@ fun Profile(contentPadding: PaddingValues = PaddingValues(0.dp), mainViewModel:
         }
         Spacer(modifier = Modifier.size(16.dp))
         ListItem(
-            headlineText = { Text("Name", style = MaterialTheme.typography.bodySmall) },
-            supportingText = {
+            headlineContent = { Text("Name", style = MaterialTheme.typography.bodySmall) },
+            supportingContent = {
                 me?.first_name?.let {
                     Text(
                         it,
@@ -93,22 +92,22 @@ fun Profile(contentPadding: PaddingValues = PaddingValues(0.dp), mainViewModel:
             }
         )
         ListItem(
-            headlineText = { Text("About", style = MaterialTheme.typography.bodySmall) },
-            supportingText = { Text("Yahoo", style = MaterialTheme.typography.titleMedium) },
+            headlineContent = { Text("About", style = MaterialTheme.typography.bodySmall) },
+            supportingContent = { Text("Yahoo", style = MaterialTheme.typography.titleMedium) },
             leadingContent = {
                 Icon(imageVector = Icons.Default.Info, contentDescription = "")
             }
         )
         ListItem(
-            headlineText = { Text("Phone", style = MaterialTheme.typography.bodySmall) },
-            supportingText = { Text("08112345678", style = MaterialTheme.typography.titleMedium) },
+            headlineContent = { Text("Phone", style = MaterialTheme.typography.bodySmall) },
+            supportingContent = { Text("08112345678", style = MaterialTheme.typography.titleMedium) },
             leadingContent = {
                 Icon(imageVector = Icons.Default.Call, contentDescription = "")
             }
         )
         ListItem(
-            headlineText = { Text("Email", style = MaterialTheme.typography.bodySmall) },
-            supportingText = {
+            headlineContent = { Text("Email", style = MaterialTheme.typography.bodySmall) },
+            supportingContent = {
                 Text(
                     "yayandw@gmail.com",
                     style = MaterialTheme.typography.titleMedium

+ 0 - 1
app/src/main/java/io/nexilis/alpha/ui/main/Sign.kt

@@ -26,7 +26,6 @@ import io.nexilis.service.core.getSharedPreferences
 import io.nexilis.service.core.put
 import io.nexilis.service.data.viewmodels.BuddyViewModel
 
-@OptIn(ExperimentalMaterial3Api::class)
 @Composable
 fun SignUp(
     navController: NavHostController,