11package com.espressodev.gptmap.feature.map
22
3+ import StreetView
34import android.annotation.SuppressLint
45import androidx.activity.compose.BackHandler
56import androidx.compose.animation.AnimatedVisibility
@@ -13,7 +14,6 @@ import androidx.compose.foundation.layout.Arrangement
1314import androidx.compose.foundation.layout.Box
1415import androidx.compose.foundation.layout.BoxScope
1516import androidx.compose.foundation.layout.Column
16- import androidx.compose.foundation.layout.Row
1717import androidx.compose.foundation.layout.Spacer
1818import androidx.compose.foundation.layout.fillMaxSize
1919import androidx.compose.foundation.layout.fillMaxWidth
@@ -25,8 +25,6 @@ import androidx.compose.foundation.layout.width
2525import androidx.compose.foundation.pager.HorizontalPager
2626import androidx.compose.foundation.pager.rememberPagerState
2727import androidx.compose.foundation.shape.RoundedCornerShape
28- import androidx.compose.material3.Icon
29- import androidx.compose.material3.IconButton
3028import androidx.compose.material3.MaterialTheme
3129import androidx.compose.material3.OutlinedButton
3230import androidx.compose.material3.Scaffold
@@ -41,7 +39,6 @@ import androidx.compose.runtime.remember
4139import androidx.compose.runtime.setValue
4240import androidx.compose.ui.Alignment
4341import androidx.compose.ui.Modifier
44- import androidx.compose.ui.graphics.Color
4542import androidx.compose.ui.graphics.graphicsLayer
4643import androidx.compose.ui.layout.ContentScale
4744import androidx.compose.ui.platform.LocalContext
@@ -68,7 +65,8 @@ import com.espressodev.gptmap.core.designsystem.Constants.MEDIUM_PADDING
6865import com.espressodev.gptmap.core.designsystem.Constants.SMALL_PADDING
6966import com.espressodev.gptmap.core.designsystem.GmIcons
7067import com.espressodev.gptmap.core.designsystem.IconType
71- import com.espressodev.gptmap.core.designsystem.component.LottieAnimationView
68+ import com.espressodev.gptmap.core.designsystem.component.GmDraggableButton
69+ import com.espressodev.gptmap.core.designsystem.component.LottieAnimationPlaceholder
7270import com.espressodev.gptmap.core.designsystem.component.MapTextField
7371import com.espressodev.gptmap.core.designsystem.component.ShimmerImage
7472import com.espressodev.gptmap.core.designsystem.component.SquareButton
@@ -100,35 +98,14 @@ import com.espressodev.gptmap.core.designsystem.R.string as AppText
10098@Composable
10199fun MapRoute (
102100 navigateToStreetView : (Float , Float ) -> Unit ,
103- navigateToFavourite : () -> Unit ,
104101 navigateToScreenshot : () -> Unit ,
105102 navigateToProfile : () -> Unit ,
106- navigateToScreenshotGallery : () -> Unit ,
107103 favouriteId : String ,
108104 modifier : Modifier = Modifier ,
109105 viewModel : MapViewModel = hiltViewModel(),
110106) {
111107 val uiState by viewModel.uiState.collectAsStateWithLifecycle()
112108 Scaffold (
113- bottomBar = {
114- if (uiState.bottomSearchState) {
115- MapSearchBar (
116- value = uiState.searchValue,
117- userFirstChar = ' F' ,
118- onValueChange = { viewModel.onEvent(MapUiEvent .OnSearchValueChanged (it)) },
119- onSearchClick = { viewModel.onEvent(MapUiEvent .OnSearchClick ) },
120- onAvatarClick = {}
121- )
122- }
123- },
124- topBar = {
125- MapTopButtons (
126- onFavouriteClick = navigateToFavourite,
127- onScreenshotGalleryClick = navigateToScreenshotGallery,
128- onAccountClick = navigateToProfile,
129- modifier = modifier
130- )
131- },
132109 modifier = modifier
133110 ) {
134111 MapScreen (
@@ -141,7 +118,7 @@ fun MapRoute(
141118 }
142119 )
143120 },
144- modifier = Modifier .padding(top = it.calculateTopPadding())
121+ onAvatarClick = navigateToProfile
145122 )
146123 }
147124 SaveScreenshot (
@@ -164,6 +141,7 @@ fun MapRoute(
164141private fun MapScreen (
165142 uiState : MapUiState ,
166143 onEvent : (MapUiEvent ) -> Unit ,
144+ onAvatarClick : () -> Unit ,
167145 modifier : Modifier = Modifier ,
168146) {
169147 val latLng by remember(uiState.location) {
@@ -181,6 +159,19 @@ private fun MapScreen(
181159 onDismiss = { onEvent(MapUiEvent .OnImageDismiss ) }
182160 )
183161 Box (modifier = modifier.fillMaxSize()) {
162+ if (uiState.searchBarState) {
163+ MapSearchBar (
164+ value = uiState.searchValue,
165+ userFirstChar = uiState.userFirstChar,
166+ onValueChange = { onEvent(MapUiEvent .OnSearchValueChanged (it)) },
167+ onSearchClick = { onEvent(MapUiEvent .OnSearchClick ) },
168+ onAvatarClick = onAvatarClick,
169+ modifier = Modifier
170+ .zIndex(1f )
171+ .align(Alignment .TopCenter )
172+ )
173+ }
174+ GmDraggableButton (icon = StreetView , initialAlignment = Alignment .CenterStart )
184175 LoadingDialog (uiState.componentLoadingState)
185176 MapSection (
186177 isPinVisible = uiState.isLocationPinVisible,
@@ -190,66 +181,6 @@ private fun MapScreen(
190181 }
191182}
192183
193- @Composable
194- fun MapTopButtons (
195- onFavouriteClick : () -> Unit ,
196- onScreenshotGalleryClick : () -> Unit ,
197- onAccountClick : () -> Unit ,
198- modifier : Modifier = Modifier
199- ) {
200- Row (
201- modifier = modifier
202- .fillMaxWidth()
203- .height(56 .dp),
204- verticalAlignment = Alignment .CenterVertically ,
205- horizontalArrangement = Arrangement .SpaceBetween
206- ) {
207- GmIconButtonWithText (
208- onClick = onAccountClick,
209- icon = IconType .Vector (GmIcons .PersonDefault ),
210- )
211- Text (text = " Gptmap" , fontWeight = FontWeight .Medium )
212- Row {
213- GmIconButtonWithText (
214- onClick = onFavouriteClick,
215- icon = IconType .Vector (GmIcons .GalleryDefault ),
216- )
217- GmIconButtonWithText (
218- onClick = onScreenshotGalleryClick,
219- icon = IconType .Vector (GmIcons .ScreenshotDefault ),
220- )
221- }
222- }
223- }
224-
225- @Composable
226- fun GmIconButtonWithText (
227- onClick : () -> Unit ,
228- icon : IconType ,
229- modifier : Modifier = Modifier ,
230- color : Color = MaterialTheme .colorScheme.onSurface
231- ) {
232- IconButton (
233- onClick = onClick,
234- modifier = modifier.size(48 .dp)
235- ) {
236- when (icon) {
237- is IconType .Vector -> Icon (
238- imageVector = icon.imageVector,
239- contentDescription = null ,
240- modifier = Modifier .size(32 .dp),
241- tint = color
242- )
243-
244- is IconType .Bitmap -> Image (
245- painterResource(id = icon.painterId),
246- null ,
247- modifier = Modifier .size(32 .dp),
248- )
249- }
250- }
251- }
252-
253184@Composable
254185private fun AnimateCameraPosition (
255186 latLng : Pair <Double , Double >,
@@ -347,6 +278,7 @@ private fun MapSearchBar(
347278 onValueChange : (String ) -> Unit ,
348279 onSearchClick : () -> Unit ,
349280 onAvatarClick : () -> Unit ,
281+ modifier : Modifier = Modifier
350282) {
351283 MapTextField (
352284 value = value,
@@ -355,7 +287,7 @@ private fun MapSearchBar(
355287 onValueChange = onValueChange,
356288 onSearchClick = onSearchClick,
357289 onAvatarClick = onAvatarClick,
358- modifier = Modifier
290+ modifier = modifier
359291 .fillMaxWidth()
360292 .statusBarsPadding()
361293 .padding(8 .dp),
@@ -392,7 +324,7 @@ private fun MapSection(isPinVisible: Boolean, cameraPositionState: CameraPositio
392324 }
393325
394326 if (! isMapLoaded) {
395- LottieAnimationView (AppRaw .transistor_earth)
327+ LottieAnimationPlaceholder (AppRaw .transistor_earth)
396328 }
397329}
398330
0 commit comments