11package com.espressodev.gptmap.feature.screenshot_gallery
22
3- import android.util.Log
43import androidx.activity.compose.BackHandler
54import androidx.compose.animation.core.FastOutSlowInEasing
65import androidx.compose.animation.core.animateFloatAsState
@@ -29,7 +28,6 @@ import androidx.compose.foundation.pager.HorizontalPager
2928import androidx.compose.foundation.pager.PagerState
3029import androidx.compose.foundation.pager.rememberPagerState
3130import androidx.compose.foundation.shape.CircleShape
32- import androidx.compose.foundation.shape.RoundedCornerShape
3331import androidx.compose.material3.Card
3432import androidx.compose.material3.ExperimentalMaterial3Api
3533import androidx.compose.material3.MaterialTheme
@@ -48,7 +46,6 @@ import androidx.compose.ui.Modifier
4846import androidx.compose.ui.draw.clip
4947import androidx.compose.ui.draw.shadow
5048import androidx.compose.ui.graphics.Color
51- import androidx.compose.ui.graphics.Shape
5249import androidx.compose.ui.graphics.graphicsLayer
5350import androidx.compose.ui.platform.LocalDensity
5451import androidx.compose.ui.text.style.TextAlign
@@ -63,12 +60,14 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
6360import com.espressodev.gptmap.core.designsystem.GmIcons
6461import com.espressodev.gptmap.core.designsystem.IconType
6562import com.espressodev.gptmap.core.designsystem.TextType
63+ import com.espressodev.gptmap.core.designsystem.component.GmAlertDialog
6664import com.espressodev.gptmap.core.designsystem.component.GmEditAlertDialog
6765import com.espressodev.gptmap.core.designsystem.component.GmTopAppBar
6866import com.espressodev.gptmap.core.designsystem.component.LottieAnimationPlaceholder
6967import com.espressodev.gptmap.core.designsystem.component.ShimmerImage
7068import com.espressodev.gptmap.core.designsystem.component.darkBottomOverlayBrush
7169import com.espressodev.gptmap.core.designsystem.theme.GptmapTheme
70+ import com.espressodev.gptmap.core.model.EditableItemUiEvent
7271import com.espressodev.gptmap.core.model.ImageSummary
7372import com.espressodev.gptmap.core.model.Response
7473import kotlinx.collections.immutable.PersistentList
@@ -77,6 +76,7 @@ import kotlin.math.absoluteValue
7776import com.espressodev.gptmap.core.designsystem.R.raw as AppRaw
7877import com.espressodev.gptmap.core.designsystem.R.string as AppText
7978
79+
8080@OptIn(ExperimentalMaterial3Api ::class )
8181@Composable
8282fun ScreenshotGalleryRoute (
@@ -91,11 +91,11 @@ fun ScreenshotGalleryRoute(
9191 text = TextType .Res (AppText .screenshot_gallery),
9292 icon = IconType .Vector (GmIcons .ImageSearchDefault ),
9393 onBackClick = popUp,
94- editText = uiState.selectedImageSummary .title,
94+ editText = uiState.selectedItem .title,
9595 isInEditMode = uiState.uiIsInEditMode,
96- onEditClick = { viewModel.onEvent(ScreenshotGalleryUiEvent .OnEditClick ) },
97- onDeleteClick = { viewModel.onEvent(ScreenshotGalleryUiEvent .OnDeleteClick ) },
98- onCancelClick = { viewModel.onEvent(ScreenshotGalleryUiEvent .OnCancelClick ) }
96+ onEditClick = { viewModel.onEvent(EditableItemUiEvent .OnEditClick ) },
97+ onDeleteClick = { viewModel.onEvent(EditableItemUiEvent .OnDeleteClick ) },
98+ onCancelClick = { viewModel.onEvent(EditableItemUiEvent .OnCancelClick ) }
9999 )
100100 }
101101 ) {
@@ -112,10 +112,11 @@ fun ScreenshotGalleryRoute(
112112 images = result.data,
113113 onLongClick = { imageSummary ->
114114 viewModel.onEvent(
115- ScreenshotGalleryUiEvent . OnLongClickToImage (imageSummary)
115+ EditableItemUiEvent . OnLongClickToItem (imageSummary)
116116 )
117117 },
118- selectedId = uiState.selectedImageSummary.id
118+ selectedId = uiState.selectedItem.id,
119+ isUiInEditMode = uiState.uiIsInEditMode
119120 )
120121 } else {
121122 LottieAnimationPlaceholder (
@@ -129,16 +130,24 @@ fun ScreenshotGalleryRoute(
129130
130131 BackHandler {
131132 if (uiState.uiIsInEditMode) {
132- viewModel.onEvent(ScreenshotGalleryUiEvent .Reset )
133+ viewModel.onEvent(EditableItemUiEvent .Reset )
133134 }
134135 }
135136
136137 if (uiState.editDialogState) {
137138 GmEditAlertDialog (
138- title = AppText .screenshot_gallery_edit_dialog_title ,
139+ title = AppText .rename ,
139140 textFieldLabel = AppText .screenshot_gallery_edit_dialog_text_field_placeholder,
140- onConfirm = { viewModel.onEvent(ScreenshotGalleryUiEvent .OnEditDialogConfirm (it)) },
141- onDismiss = { viewModel.onEvent(ScreenshotGalleryUiEvent .OnEditDialogDismiss ) }
141+ onConfirm = { viewModel.onEvent(EditableItemUiEvent .OnEditDialogConfirm (it)) },
142+ onDismiss = { viewModel.onEvent(EditableItemUiEvent .OnEditDialogDismiss ) }
143+ )
144+ }
145+
146+ if (uiState.deleteDialogState) {
147+ GmAlertDialog (
148+ title = AppText .screenshot_gallery_delete_dialog_title,
149+ onConfirm = { viewModel.onEvent(EditableItemUiEvent .OnDeleteDialogConfirm ) },
150+ onDismiss = { viewModel.onEvent(EditableItemUiEvent .OnDeleteDialogDismiss ) }
142151 )
143152 }
144153}
@@ -150,6 +159,7 @@ fun ScreenshotGalleryScreen(
150159 onLongClick : (ImageSummary ) -> Unit ,
151160 selectedId : String ,
152161 modifier : Modifier = Modifier ,
162+ isUiInEditMode : Boolean ,
153163) {
154164 var currentPage by rememberSaveable { mutableIntStateOf(0 ) }
155165 var dialogState by rememberSaveable { mutableStateOf(false ) }
@@ -171,8 +181,12 @@ fun ScreenshotGalleryScreen(
171181 ImageCard (
172182 imageSummary = imageSummary,
173183 onClick = {
174- currentPage = index
175- dialogState = true
184+ if (isUiInEditMode) {
185+ onLongClick(imageSummary)
186+ } else {
187+ currentPage = index
188+ dialogState = true
189+ }
176190 },
177191 onLongClick = { onLongClick(imageSummary) },
178192 isSelected = selectedId == imageSummary.id
@@ -186,20 +200,19 @@ fun ScreenshotGalleryScreen(
186200fun ImageCard (
187201 imageSummary : ImageSummary ,
188202 modifier : Modifier = Modifier ,
189- shape : Shape = RoundedCornerShape (16.dp),
190203 isSelected : Boolean = false,
191204 onClick : () -> Unit = {},
192205 onLongClick : () -> Unit = {}
193206) {
194207 var isImageLoaded by remember { mutableStateOf(value = false ) }
195208 val borderStroke = if (isSelected) 3 .dp else 0 .dp
196209 val elevation = if (isSelected) 8 .dp else 0 .dp
210+ val borderColor = if (isSelected) MaterialTheme .colorScheme.primary else Color .Transparent
197211
198212 Box (
199213 modifier = modifier
200- .shadow(elevation, shape)
201- .clip(shape)
202- .border(borderStroke, MaterialTheme .colorScheme.primary, shape)
214+ .shadow(elevation)
215+ .border(borderStroke, borderColor)
203216 .combinedClickable(
204217 onClick = onClick,
205218 onLongClick = onLongClick
@@ -239,7 +252,6 @@ private fun GalleryView(
239252 onDismiss : () -> Unit ,
240253 modifier : Modifier = Modifier
241254) {
242- Log .d(" GalleryView" , " images: $images " )
243255 Dialog (onDismissRequest = onDismiss) {
244256 Box (
245257 modifier = modifier
0 commit comments