|
|
@ -1,5 +1,6 @@ |
|
|
package com.example.dattingapp |
|
|
package com.example.dattingapp |
|
|
|
|
|
|
|
|
|
|
|
import android.content.Context |
|
|
import android.os.Bundle |
|
|
import android.os.Bundle |
|
|
import androidx.activity.ComponentActivity |
|
|
import androidx.activity.ComponentActivity |
|
|
import androidx.activity.compose.setContent |
|
|
import androidx.activity.compose.setContent |
|
|
@ -17,46 +18,107 @@ import androidx.compose.foundation.layout.fillMaxWidth |
|
|
import androidx.compose.foundation.layout.height |
|
|
import androidx.compose.foundation.layout.height |
|
|
import androidx.compose.foundation.layout.padding |
|
|
import androidx.compose.foundation.layout.padding |
|
|
import androidx.compose.foundation.layout.size |
|
|
import androidx.compose.foundation.layout.size |
|
|
|
|
|
import androidx.compose.foundation.layout.width |
|
|
import androidx.compose.foundation.rememberScrollState |
|
|
import androidx.compose.foundation.rememberScrollState |
|
|
import androidx.compose.foundation.shape.CircleShape |
|
|
import androidx.compose.foundation.shape.CircleShape |
|
|
import androidx.compose.foundation.shape.RoundedCornerShape |
|
|
import androidx.compose.foundation.shape.RoundedCornerShape |
|
|
import androidx.compose.foundation.verticalScroll |
|
|
import androidx.compose.foundation.verticalScroll |
|
|
import androidx.compose.material.icons.Icons |
|
|
import androidx.compose.material.icons.Icons |
|
|
import androidx.compose.material.icons.automirrored.filled.ArrowBack |
|
|
import androidx.compose.material.icons.automirrored.filled.ArrowBack |
|
|
|
|
|
import androidx.compose.material.icons.filled.ChatBubble |
|
|
|
|
|
import androidx.compose.material.icons.filled.Close |
|
|
import androidx.compose.material.icons.filled.Favorite |
|
|
import androidx.compose.material.icons.filled.Favorite |
|
|
import androidx.compose.material.icons.filled.MoreHoriz |
|
|
import androidx.compose.material.icons.filled.MoreHoriz |
|
|
|
|
|
import androidx.compose.material.icons.filled.Star |
|
|
import androidx.compose.material.icons.outlined.LocationOn |
|
|
import androidx.compose.material.icons.outlined.LocationOn |
|
|
|
|
|
import androidx.compose.material3.Button |
|
|
|
|
|
import androidx.compose.material3.ButtonDefaults |
|
|
import androidx.compose.material3.Icon |
|
|
import androidx.compose.material3.Icon |
|
|
import androidx.compose.material3.IconButton |
|
|
import androidx.compose.material3.IconButton |
|
|
import androidx.compose.material3.Scaffold |
|
|
import androidx.compose.material3.Scaffold |
|
|
import androidx.compose.material3.Surface |
|
|
import androidx.compose.material3.Surface |
|
|
import androidx.compose.material3.Text |
|
|
import androidx.compose.material3.Text |
|
|
import androidx.compose.runtime.Composable |
|
|
import androidx.compose.runtime.Composable |
|
|
|
|
|
import androidx.compose.runtime.LaunchedEffect |
|
|
|
|
|
import androidx.compose.runtime.collectAsState |
|
|
|
|
|
import androidx.compose.runtime.getValue |
|
|
|
|
|
import androidx.compose.runtime.remember |
|
|
import androidx.compose.ui.Alignment |
|
|
import androidx.compose.ui.Alignment |
|
|
import androidx.compose.ui.Modifier |
|
|
import androidx.compose.ui.Modifier |
|
|
import androidx.compose.ui.draw.clip |
|
|
import androidx.compose.ui.draw.clip |
|
|
import androidx.compose.ui.draw.scale |
|
|
import androidx.compose.ui.draw.scale |
|
|
import androidx.compose.ui.graphics.Color |
|
|
import androidx.compose.ui.graphics.Color |
|
|
import androidx.compose.ui.layout.ContentScale |
|
|
import androidx.compose.ui.layout.ContentScale |
|
|
|
|
|
import androidx.compose.ui.platform.LocalContext |
|
|
import androidx.compose.ui.res.painterResource |
|
|
import androidx.compose.ui.res.painterResource |
|
|
import androidx.compose.ui.text.font.FontWeight |
|
|
import androidx.compose.ui.text.font.FontWeight |
|
|
import androidx.compose.ui.tooling.preview.Preview |
|
|
import androidx.compose.ui.tooling.preview.Preview |
|
|
import androidx.compose.ui.unit.dp |
|
|
import androidx.compose.ui.unit.dp |
|
|
import androidx.compose.ui.unit.sp |
|
|
import androidx.compose.ui.unit.sp |
|
|
|
|
|
import androidx.lifecycle.viewmodel.compose.viewModel |
|
|
|
|
|
import coil.compose.AsyncImage |
|
|
|
|
|
import com.example.dattingapp.homes.networkandapi.FriendProfileMedia |
|
|
|
|
|
import com.example.dattingapp.homes.networkandapi.FriendProfileResponse |
|
|
|
|
|
import com.example.dattingapp.homes.networkandapi.FriendProfileUiState |
|
|
|
|
|
import com.example.dattingapp.homes.networkandapi.FriendProfileViewModel |
|
|
|
|
|
import com.example.dattingapp.homes.networkandapi.MeetUserProfile |
|
|
|
|
|
import com.example.dattingapp.homes.networkandapi.SwipeRequest |
|
|
|
|
|
import com.example.dattingapp.homes.networkandapi.SwipeViewModel |
|
|
import com.example.dattingapp.ui.theme.AccentPurple |
|
|
import com.example.dattingapp.ui.theme.AccentPurple |
|
|
import com.example.dattingapp.ui.theme.DattingAPPTheme |
|
|
import com.example.dattingapp.ui.theme.DattingAPPTheme |
|
|
import com.example.dattingapp.ui.theme.textDark |
|
|
import com.example.dattingapp.ui.theme.textDark |
|
|
import com.example.dattingapp.ui.theme.BadgePink |
|
|
import com.example.dattingapp.ui.theme.BadgePink |
|
|
|
|
|
import com.example.dattingapp.ui.theme.gradientBrush |
|
|
|
|
|
import com.example.dattingapp.ui.theme.purpleButtonColor |
|
|
import java.nio.file.WatchEvent |
|
|
import java.nio.file.WatchEvent |
|
|
|
|
|
import java.time.LocalDate |
|
|
|
|
|
import java.time.Period |
|
|
|
|
|
import java.time.format.DateTimeFormatter |
|
|
|
|
|
|
|
|
|
|
|
import androidx.compose.foundation.layout.* |
|
|
|
|
|
import androidx.compose.foundation.lazy.grid.GridCells |
|
|
|
|
|
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid |
|
|
|
|
|
import androidx.compose.foundation.lazy.grid.items |
|
|
|
|
|
import androidx.compose.material3.CircularProgressIndicator |
|
|
|
|
|
import androidx.compose.material3.Text |
|
|
|
|
|
import androidx.compose.ui.unit.dp |
|
|
|
|
|
|
|
|
class FriendProfile : ComponentActivity() { |
|
|
class FriendProfile : ComponentActivity() { |
|
|
override fun onCreate(savedInstanceState: Bundle?) { |
|
|
override fun onCreate(savedInstanceState: Bundle?) { |
|
|
super.onCreate(savedInstanceState) |
|
|
super.onCreate(savedInstanceState) |
|
|
enableEdgeToEdge() |
|
|
enableEdgeToEdge() |
|
|
|
|
|
|
|
|
|
|
|
// Read extras passed from the Intent |
|
|
|
|
|
val userId = intent.getIntExtra("USER_ID", -1) |
|
|
|
|
|
|
|
|
setContent { |
|
|
setContent { |
|
|
DattingAPPTheme { |
|
|
DattingAPPTheme { |
|
|
|
|
|
val context = LocalContext.current |
|
|
|
|
|
val viewModel: FriendProfileViewModel = viewModel() |
|
|
|
|
|
|
|
|
FriendProfileScreen() |
|
|
// 2. Collect state from ViewModel |
|
|
|
|
|
val uiState by viewModel.friendProfileUiState.collectAsState() |
|
|
|
|
|
|
|
|
|
|
|
// 3. Trigger network call once when screen loads |
|
|
|
|
|
LaunchedEffect(Unit) { |
|
|
|
|
|
viewModel.fetchUserProfile(context,userId) |
|
|
|
|
|
} |
|
|
|
|
|
when (val state = uiState) { |
|
|
|
|
|
is FriendProfileUiState.Loading -> { |
|
|
|
|
|
// Show loading indicator |
|
|
|
|
|
} |
|
|
|
|
|
is FriendProfileUiState.Success -> { |
|
|
|
|
|
val friendProfileData = state.friendProfile |
|
|
|
|
|
FriendProfileScreen(friendProfileData,context) |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
is FriendProfileUiState.Error -> { |
|
|
|
|
|
// Show error message |
|
|
|
|
|
} |
|
|
|
|
|
FriendProfileUiState.Idle -> { |
|
|
|
|
|
// Idle state |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
@ -65,13 +127,24 @@ class FriendProfile : ComponentActivity() { |
|
|
|
|
|
|
|
|
@Composable |
|
|
@Composable |
|
|
fun FriendProfileScreen( |
|
|
fun FriendProfileScreen( |
|
|
|
|
|
friendProfileData: FriendProfileResponse, |
|
|
|
|
|
context: Context, |
|
|
|
|
|
swipeViewModel: SwipeViewModel= viewModel() , |
|
|
onBackClick:()->Unit={}, |
|
|
onBackClick:()->Unit={}, |
|
|
onMoreClick:()->Unit={}, |
|
|
onMoreClick:()->Unit={}, |
|
|
onMessageClick:()->Unit={}, |
|
|
onMessageClick:()->Unit={}, |
|
|
onLikeClick:()->Unit={}, |
|
|
onLikeClick:()->Unit={}, |
|
|
onStarClick:()->Unit={}, |
|
|
onStarClick:()->Unit={}, |
|
|
|
|
|
onCancelClick:()->Unit={}, |
|
|
){ |
|
|
){ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
val age = remember(friendProfileData.birthDate) { |
|
|
|
|
|
calculateAge(friendProfileData.birthDate) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Column( |
|
|
Column( |
|
|
modifier = Modifier |
|
|
modifier = Modifier |
|
|
.fillMaxSize() |
|
|
.fillMaxSize() |
|
|
@ -119,11 +192,14 @@ fun FriendProfileScreen( |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
Image( |
|
|
// Assuming 'profileImageUrl' is passed into your composable from FriendProfileResponse |
|
|
painter = painterResource(id = R.drawable.locationpermissionbg), |
|
|
AsyncImage( |
|
|
|
|
|
model = friendProfileData?.profileImageUrl, // Pass the String URL from FriendProfileResponse |
|
|
contentDescription = "Profile Avatar", |
|
|
contentDescription = "Profile Avatar", |
|
|
|
|
|
placeholder = painterResource(id = R.drawable.locationpermissionbg), // Placeholder while loading |
|
|
|
|
|
error = painterResource(id = R.drawable.locationpermissionbg), // Fallback if URL fails or is null |
|
|
modifier = Modifier |
|
|
modifier = Modifier |
|
|
.padding(start = 20.dp) // Move padding to the VERY TOP of modifier chain |
|
|
.padding(start = 20.dp) |
|
|
.align(Alignment.BottomStart) |
|
|
.align(Alignment.BottomStart) |
|
|
.size(100.dp) |
|
|
.size(100.dp) |
|
|
.clip(CircleShape) |
|
|
.clip(CircleShape) |
|
|
@ -139,12 +215,16 @@ fun FriendProfileScreen( |
|
|
.padding(horizontal = 20.dp) |
|
|
.padding(horizontal = 20.dp) |
|
|
){ |
|
|
){ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Row( |
|
|
Row( |
|
|
verticalAlignment = Alignment.CenterVertically, |
|
|
verticalAlignment = Alignment.CenterVertically, |
|
|
horizontalArrangement = Arrangement.spacedBy(8.dp) |
|
|
horizontalArrangement = Arrangement.spacedBy(8.dp) |
|
|
) { |
|
|
) { |
|
|
|
|
|
|
|
|
|
|
|
val displayName = friendProfileData.fullName ?: "User" |
|
|
|
|
|
val nameAndAge = if (age != null) "$displayName, $age" else displayName |
|
|
Text( |
|
|
Text( |
|
|
text = "Elena", |
|
|
text = nameAndAge, |
|
|
fontSize = 24.sp, |
|
|
fontSize = 24.sp, |
|
|
fontWeight = FontWeight.Bold, |
|
|
fontWeight = FontWeight.Bold, |
|
|
color = textDark |
|
|
color = textDark |
|
|
@ -213,6 +293,8 @@ fun FriendProfileScreen( |
|
|
color = Color.Gray |
|
|
color = Color.Gray |
|
|
) |
|
|
) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Surface( |
|
|
Surface( |
|
|
onClick = { |
|
|
onClick = { |
|
|
// Handle bio click action here (e.g., expand bio or navigate) |
|
|
// Handle bio click action here (e.g., expand bio or navigate) |
|
|
@ -222,25 +304,207 @@ fun FriendProfileScreen( |
|
|
color = Color(0xFFF9F9F9), |
|
|
color = Color(0xFFF9F9F9), |
|
|
shadowElevation = 1.dp |
|
|
shadowElevation = 1.dp |
|
|
) { |
|
|
) { |
|
|
|
|
|
val displayBio= friendProfileData.bio ?: "" |
|
|
Text( |
|
|
Text( |
|
|
text = "\"Always looking for the best flat white in the city. Amateur photographer, professional dog petter. Let...\"", |
|
|
text = displayBio, |
|
|
fontSize = 13.sp, |
|
|
fontSize = 13.sp, |
|
|
color = Color(0xFF4A4A4A), |
|
|
color = Color(0xFF4A4A4A), |
|
|
modifier = Modifier.padding(12.dp), |
|
|
modifier = Modifier.padding(12.dp), |
|
|
|
|
|
maxLines = 2, |
|
|
lineHeight = 18.sp |
|
|
lineHeight = 18.sp |
|
|
) |
|
|
) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Row( |
|
|
|
|
|
modifier = Modifier |
|
|
|
|
|
.fillMaxWidth() |
|
|
|
|
|
.padding(vertical = 8.dp), |
|
|
|
|
|
horizontalArrangement = Arrangement.spacedBy(10.dp), |
|
|
|
|
|
verticalAlignment = Alignment.CenterVertically |
|
|
|
|
|
) { |
|
|
|
|
|
// Message Button (Gradient Background) |
|
|
|
|
|
Button( |
|
|
|
|
|
onClick = onMessageClick, |
|
|
|
|
|
modifier = Modifier |
|
|
|
|
|
.weight(1f) |
|
|
|
|
|
.height(48.dp) |
|
|
|
|
|
.background( |
|
|
|
|
|
brush = gradientBrush, |
|
|
|
|
|
shape = RoundedCornerShape(10.dp) |
|
|
|
|
|
), |
|
|
|
|
|
colors = ButtonDefaults.buttonColors( |
|
|
|
|
|
containerColor = Color.Transparent, |
|
|
|
|
|
contentColor = Color.White |
|
|
|
|
|
), |
|
|
|
|
|
shape = RoundedCornerShape(10.dp) |
|
|
|
|
|
) { |
|
|
|
|
|
Icon( |
|
|
|
|
|
imageVector = Icons.Default.ChatBubble, |
|
|
|
|
|
contentDescription = "Message", |
|
|
|
|
|
modifier = Modifier.size(18.dp) |
|
|
|
|
|
) |
|
|
|
|
|
Spacer(modifier = Modifier.width(8.dp)) |
|
|
|
|
|
Text( |
|
|
|
|
|
text = "Message", |
|
|
|
|
|
fontSize = 16.sp, |
|
|
|
|
|
fontWeight = FontWeight.Bold |
|
|
|
|
|
) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Heart Button |
|
|
|
|
|
IconButton( |
|
|
|
|
|
onClick = { |
|
|
|
|
|
// Option 1: Invoke callback directly if handleSwipeAction is inside the parent screen |
|
|
|
|
|
onLikeClick() |
|
|
|
|
|
|
|
|
|
|
|
// Option 2: Call handleSwipeAction directly here |
|
|
|
|
|
handleLikeAndDislikeAction( |
|
|
|
|
|
context = context, |
|
|
|
|
|
direction = "right", // Or "like", matching your API endpoint expected value |
|
|
|
|
|
profile = friendProfileData, // Your MeetUserProfile instance |
|
|
|
|
|
swipeViewModel = swipeViewModel |
|
|
|
|
|
) |
|
|
|
|
|
}, |
|
|
|
|
|
modifier = Modifier |
|
|
|
|
|
.size(48.dp) |
|
|
|
|
|
.background( |
|
|
|
|
|
color = purpleButtonColor, |
|
|
|
|
|
shape = RoundedCornerShape(10.dp) |
|
|
|
|
|
) |
|
|
|
|
|
) { |
|
|
|
|
|
Icon( |
|
|
|
|
|
imageVector = Icons.Default.Favorite, |
|
|
|
|
|
contentDescription = "Like", |
|
|
|
|
|
tint = Color(0xFFE2C4FF), // Soft light purple icon color |
|
|
|
|
|
modifier = Modifier.size(20.dp) |
|
|
|
|
|
) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Star Button |
|
|
|
|
|
IconButton( |
|
|
|
|
|
onClick = { |
|
|
|
|
|
onStarClick() |
|
|
|
|
|
handleLikeAndDislikeAction( |
|
|
|
|
|
context = context, |
|
|
|
|
|
direction = "right", // Or "like", matching your API endpoint expected value |
|
|
|
|
|
profile = friendProfileData, // Your MeetUserProfile instance |
|
|
|
|
|
swipeViewModel = swipeViewModel |
|
|
|
|
|
) |
|
|
|
|
|
}, |
|
|
|
|
|
modifier = Modifier |
|
|
|
|
|
.size(48.dp) |
|
|
|
|
|
.background( |
|
|
|
|
|
color = purpleButtonColor, |
|
|
|
|
|
shape = RoundedCornerShape(10.dp) |
|
|
|
|
|
) |
|
|
|
|
|
) { |
|
|
|
|
|
Icon( |
|
|
|
|
|
imageVector = Icons.Default.Star, |
|
|
|
|
|
contentDescription = "Favorite", |
|
|
|
|
|
tint = Color(0xFFE2C4FF), // Soft light purple icon color |
|
|
|
|
|
modifier = Modifier.size(20.dp) |
|
|
|
|
|
) |
|
|
} |
|
|
} |
|
|
|
|
|
IconButton( |
|
|
|
|
|
onClick = { |
|
|
|
|
|
onStarClick() |
|
|
|
|
|
handleLikeAndDislikeAction( |
|
|
|
|
|
context = context, |
|
|
|
|
|
direction = "right", // Or "like", matching your API endpoint expected value |
|
|
|
|
|
profile = friendProfileData, // Your MeetUserProfile instance |
|
|
|
|
|
swipeViewModel = swipeViewModel |
|
|
|
|
|
) |
|
|
|
|
|
}, |
|
|
|
|
|
modifier = Modifier |
|
|
|
|
|
.size(48.dp) |
|
|
|
|
|
.background( |
|
|
|
|
|
color = purpleButtonColor, |
|
|
|
|
|
shape = RoundedCornerShape(10.dp) |
|
|
|
|
|
) |
|
|
|
|
|
) { |
|
|
|
|
|
Icon( |
|
|
|
|
|
imageVector = Icons.Default.Close, |
|
|
|
|
|
contentDescription = "Favorite", |
|
|
|
|
|
tint = Color(0xFFE2C4FF), // Soft light purple icon color |
|
|
|
|
|
modifier = Modifier.size(20.dp) |
|
|
|
|
|
) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
// |
|
|
|
|
|
// LazyVerticalGrid( |
|
|
|
|
|
// columns = GridCells.Fixed(3), |
|
|
|
|
|
// contentPadding = PaddingValues(12.dp), |
|
|
|
|
|
// horizontalArrangement = Arrangement.spacedBy(8.dp), |
|
|
|
|
|
// verticalArrangement = Arrangement.spacedBy(8.dp), |
|
|
|
|
|
// modifier = Modifier.fillMaxSize() |
|
|
|
|
|
// ) { |
|
|
|
|
|
// items( |
|
|
|
|
|
// items = uiState.items, |
|
|
|
|
|
// key = { post -> post.id } |
|
|
|
|
|
// ) { item -> |
|
|
|
|
|
// PostGridItem(item = item) |
|
|
|
|
|
// } |
|
|
|
|
|
// } |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private fun handleLikeAndDislikeAction( |
|
|
|
|
|
context: Context, |
|
|
|
|
|
direction:String, |
|
|
|
|
|
profile: FriendProfileResponse, |
|
|
|
|
|
swipeViewModel: SwipeViewModel |
|
|
|
|
|
) { |
|
|
|
|
|
val targetUserId = profile.id |
|
|
|
|
|
val swipeRequest = SwipeRequest(targetUserId, direction) |
|
|
|
|
|
swipeViewModel.sendSwipeResponse(context, swipeRequest) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//calculte age |
|
|
|
|
|
private fun calculateAge(birthDateStr: String?): Int? { |
|
|
|
|
|
if (birthDateStr.isNullOrBlank()) return null |
|
|
|
|
|
return try { |
|
|
|
|
|
val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd") |
|
|
|
|
|
val birthDate = LocalDate.parse(birthDateStr.take(10), formatter) |
|
|
|
|
|
Period.between(birthDate, LocalDate.now()).years |
|
|
|
|
|
} catch (e: Exception) { |
|
|
|
|
|
null |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Preview(showBackground = true, showSystemUi = true) |
|
|
@Preview(showBackground = true, showSystemUi = true) |
|
|
@Composable |
|
|
@Composable |
|
|
fun FriendProfileScreenPreview() { |
|
|
fun FriendProfileScreenPreview() { |
|
|
DattingAPPTheme { |
|
|
DattingAPPTheme { |
|
|
FriendProfileScreen() |
|
|
val mockProfileResponse = FriendProfileResponse( |
|
|
|
|
|
id = 101, |
|
|
|
|
|
fullName = "Elena Rostova", |
|
|
|
|
|
gender = "Female", |
|
|
|
|
|
birthDate = "1999-05-14", |
|
|
|
|
|
city = "San Francisco", |
|
|
|
|
|
country = "USA", |
|
|
|
|
|
relationshipGoal = "Long-term relationship", |
|
|
|
|
|
bio = "Always looking for the best flat white in the city. Amateur photographer, professional dog petter.", |
|
|
|
|
|
profileImageUrl = "https://via.placeholder.com/150", |
|
|
|
|
|
videoUrl = null, |
|
|
|
|
|
compatibilityPercentage = 98, |
|
|
|
|
|
media = null |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
FriendProfileScreen( |
|
|
|
|
|
friendProfileData = mockProfileResponse, |
|
|
|
|
|
context = LocalContext.current, |
|
|
|
|
|
onBackClick = {}, |
|
|
|
|
|
onMoreClick = {}, |
|
|
|
|
|
onMessageClick = {}, |
|
|
|
|
|
onLikeClick = {}, |
|
|
|
|
|
onStarClick = {} |
|
|
|
|
|
) |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|