|
@@ -1,22 +1,60 @@
|
|
|
package io.nexilis.alpha.ui.main
|
|
|
|
|
|
+import androidx.compose.foundation.background
|
|
|
+import androidx.compose.foundation.layout.Column
|
|
|
+import androidx.compose.foundation.layout.size
|
|
|
import androidx.compose.foundation.lazy.LazyColumn
|
|
|
import androidx.compose.foundation.selection.selectable
|
|
|
+import androidx.compose.foundation.shape.CircleShape
|
|
|
+import androidx.compose.material.icons.Icons
|
|
|
+import androidx.compose.material.icons.filled.Groups
|
|
|
import androidx.compose.material3.*
|
|
|
import androidx.compose.runtime.*
|
|
|
import androidx.compose.runtime.livedata.observeAsState
|
|
|
+import androidx.compose.runtime.saveable.rememberSaveable
|
|
|
import androidx.compose.ui.Modifier
|
|
|
+import androidx.compose.ui.draw.clip
|
|
|
+import androidx.compose.ui.graphics.Color
|
|
|
+import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
|
|
+import androidx.compose.ui.layout.ContentScale
|
|
|
+import androidx.compose.ui.platform.LocalContext
|
|
|
+import androidx.compose.ui.unit.dp
|
|
|
import androidx.hilt.navigation.compose.hiltViewModel
|
|
|
import androidx.navigation.NavHostController
|
|
|
+import coil.compose.AsyncImage
|
|
|
+import coil.request.ImageRequest
|
|
|
import io.nexilis.alpha.ui.components.Person
|
|
|
import io.nexilis.alpha.ui.screen.Screen
|
|
|
import io.nexilis.service.data.viewmodels.BuddyViewModel
|
|
|
+import io.nexilis.service.data.viewmodels.GroupViewModel
|
|
|
|
|
|
@Composable
|
|
|
fun Contact(navController: NavHostController) {
|
|
|
+ var state by rememberSaveable { mutableIntStateOf(0) }
|
|
|
+ val titles = listOf("Friends", "Groups")
|
|
|
+ Column {
|
|
|
+ TabRow(selectedTabIndex = state) {
|
|
|
+ titles.forEachIndexed { index, title ->
|
|
|
+ Tab(
|
|
|
+ text = { Text(title) },
|
|
|
+ selected = state == index,
|
|
|
+ onClick = { state = index }
|
|
|
+ )
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (state == 0) {
|
|
|
+ PersonContact(navController = navController)
|
|
|
+ } else {
|
|
|
+ GroupContact(navController = navController)
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+@Composable
|
|
|
+fun PersonContact(navController: NavHostController) {
|
|
|
val viewModel: BuddyViewModel = hiltViewModel()
|
|
|
val all by viewModel.all.observeAsState()
|
|
|
- var selectedItem by remember { mutableStateOf(0) }
|
|
|
+ var selectedItem by remember { mutableIntStateOf(0) }
|
|
|
LazyColumn {
|
|
|
items(
|
|
|
count = all?.size ?: 0,
|
|
@@ -52,4 +90,59 @@ fun Contact(navController: NavHostController) {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+}
|
|
|
+
|
|
|
+@Composable
|
|
|
+fun GroupContact(navController: NavHostController) {
|
|
|
+ val viewModel: GroupViewModel = hiltViewModel()
|
|
|
+ val all by viewModel.allGroup.observeAsState()
|
|
|
+ var selectedItem by remember { mutableIntStateOf(0) }
|
|
|
+ LazyColumn {
|
|
|
+ items(
|
|
|
+ count = all?.size ?: 0,
|
|
|
+ key = {
|
|
|
+ all?.get(it)?.group_id ?: 0
|
|
|
+ }
|
|
|
+ ) { item ->
|
|
|
+ all?.get(item)?.let {
|
|
|
+ ListItem(
|
|
|
+ modifier = Modifier.selectable(selected = selectedItem == item, onClick = {
|
|
|
+ selectedItem = item
|
|
|
+ navController.navigate(Screen.Chat.route + "/${it.group_id}") {
|
|
|
+ launchSingleTop = true
|
|
|
+ restoreState = true
|
|
|
+ }
|
|
|
+ }),
|
|
|
+ headlineContent = {
|
|
|
+ Text(
|
|
|
+ it.f_name.trim(),
|
|
|
+ style = MaterialTheme.typography.titleSmall
|
|
|
+ )
|
|
|
+ },
|
|
|
+ supportingContent = {
|
|
|
+ Text(
|
|
|
+ "",
|
|
|
+ style = MaterialTheme.typography.bodySmall
|
|
|
+ )
|
|
|
+ },
|
|
|
+ leadingContent = {
|
|
|
+ AsyncImage(
|
|
|
+ model = ImageRequest.Builder(LocalContext.current)
|
|
|
+ .data("https://digixplatform.com/filepalio/image/${it.image_id}")
|
|
|
+ .addHeader("Cookie", "PHPSESSID=123;MOBILE=123")
|
|
|
+ .crossfade(true)
|
|
|
+ .build(),
|
|
|
+ contentDescription = "",
|
|
|
+ contentScale = ContentScale.Crop,
|
|
|
+ modifier = Modifier
|
|
|
+ .size(48.dp)
|
|
|
+ .clip(CircleShape)
|
|
|
+ .background(Color.LightGray),
|
|
|
+ error = rememberVectorPainter(image = Icons.Default.Groups),
|
|
|
+ )
|
|
|
+ }
|
|
|
+ )
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|