Skip to content

Commit b96d6a9

Browse files
committed
feat: draggable button added
1 parent 22014c1 commit b96d6a9

File tree

4 files changed

+42
-25
lines changed

4 files changed

+42
-25
lines changed

feature/street-view/build.gradle.kts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ android {
99
}
1010

1111
dependencies {
12-
implementation(libs.maps.compose)
12+
implementation(projects.core.saveScreenshot)
13+
1314
implementation(projects.feature.screenshot)
14-
}
15+
16+
implementation(libs.maps.compose)
17+
}

feature/street-view/src/main/kotlin/com/espressodev/gptmap/feature/street_view/StreetViewNavigation.kt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ fun NavController.navigateToStreetView(latitude: Float, longitude: Float) {
1515
navigate("$streetViewRoute/$latitude/$longitude")
1616
}
1717

18-
fun NavGraphBuilder.streetViewScreen() {
18+
fun NavGraphBuilder.streetViewScreen(popUp: () -> Unit, navigateToScreenshot: () -> Unit) {
1919
composable(
2020
route = "$streetViewRoute/{$LATITUDE_ID}/{$LONGITUDE_ID}",
2121
arguments = listOf(
@@ -27,8 +27,11 @@ fun NavGraphBuilder.streetViewScreen() {
2727
backStackEntry.arguments?.getFloat(LATITUDE_ID)?.toDouble() ?: return@composable
2828
val longitude =
2929
backStackEntry.arguments?.getFloat(LONGITUDE_ID)?.toDouble() ?: return@composable
30-
StreetViewRoute(latitude, longitude)
30+
StreetViewRoute(
31+
latitude = latitude,
32+
longitude = longitude,
33+
popUp = popUp,
34+
navigateToScreenshot = navigateToScreenshot
35+
)
3136
}
3237
}
33-
34-
Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,40 @@
11
package com.espressodev.gptmap.feature.street_view
22

3-
import androidx.compose.animation.AnimatedVisibility
43
import androidx.compose.foundation.layout.Box
54
import androidx.compose.foundation.layout.fillMaxSize
5+
import androidx.compose.foundation.layout.padding
6+
import androidx.compose.material3.ExperimentalMaterial3Api
7+
import androidx.compose.material3.Scaffold
68
import androidx.compose.runtime.Composable
79
import androidx.compose.runtime.LaunchedEffect
810
import androidx.compose.runtime.getValue
911
import androidx.compose.runtime.mutableStateOf
1012
import androidx.compose.runtime.remember
1113
import androidx.compose.runtime.setValue
1214
import androidx.compose.ui.Modifier
13-
import androidx.compose.ui.zIndex
1415
import androidx.hilt.navigation.compose.hiltViewModel
1516
import androidx.lifecycle.compose.collectAsStateWithLifecycle
16-
import com.espressodev.gptmap.core.designsystem.GmIcons
17-
import com.espressodev.gptmap.core.designsystem.component.GmDraggableButton
17+
import com.espressodev.gptmap.core.designsystem.IconType
18+
import com.espressodev.gptmap.core.designsystem.TextType
19+
import com.espressodev.gptmap.core.designsystem.component.GmTopAppBar
1820
import com.espressodev.gptmap.core.designsystem.component.LottieAnimationView
21+
import com.espressodev.gptmap.core.save_screenshot.composable.SaveScreenshot
1922
import com.google.android.gms.maps.StreetViewPanoramaOptions
2023
import com.google.android.gms.maps.model.LatLng
2124
import com.google.maps.android.compose.streetview.StreetView
2225
import com.google.maps.android.ktx.MapsExperimentalFeature
2326
import kotlinx.coroutines.delay
2427
import com.espressodev.gptmap.core.designsystem.R.raw as AppRaw
28+
import com.espressodev.gptmap.core.designsystem.R.drawable as AppDrawable
29+
import com.espressodev.gptmap.core.designsystem.R.string as AppText
30+
31+
@OptIn(ExperimentalMaterial3Api::class)
2532
@Composable
2633
fun StreetViewRoute(
2734
latitude: Double,
2835
longitude: Double,
36+
popUp: () -> Unit,
37+
navigateToScreenshot: () -> Unit,
2938
viewModel: StreetViewViewModel = hiltViewModel()
3039
) {
3140
LaunchedEffect(key1 = latitude, key2 = longitude) {
@@ -34,20 +43,27 @@ fun StreetViewRoute(
3443
val uiState by viewModel.uiState.collectAsStateWithLifecycle(
3544
initialValue = StreetViewUiState(LatLng(latitude, longitude))
3645
)
37-
StreetViewScreen(uiState, onCameraButtonClick = viewModel::onCameraButtonClick)
38-
}
46+
Scaffold(
47+
topBar = {
48+
GmTopAppBar(
49+
text = TextType.Res(AppText.street_view),
50+
icon = IconType.Bitmap(AppDrawable.street_view),
51+
onBackClick = popUp
52+
)
53+
}
54+
) {
55+
StreetViewScreen(modifier = Modifier.padding(it), uiState)
56+
}
3957

58+
SaveScreenshot(onSuccess = navigateToScreenshot)
59+
}
4060

4161
@OptIn(MapsExperimentalFeature::class)
4262
@Composable
43-
fun StreetViewScreen(uiState: StreetViewUiState, onCameraButtonClick: (Boolean) -> Unit) {
63+
fun StreetViewScreen(modifier: Modifier, uiState: StreetViewUiState) {
4464
var isStreetViewLoaded by remember { mutableStateOf(value = false) }
4565

46-
Box(modifier = Modifier.fillMaxSize()) {
47-
48-
AnimatedVisibility(visible = uiState.cameraButtonState, modifier = Modifier.zIndex(4f)) {
49-
GmDraggableButton(icon = GmIcons.CameraFilled, onClick = { onCameraButtonClick(true) })
50-
}
66+
Box(modifier = modifier.fillMaxSize()) {
5167

5268
StreetView(
5369
streetViewPanoramaOptionsFactory = {
@@ -64,4 +80,4 @@ fun StreetViewScreen(uiState: StreetViewUiState, onCameraButtonClick: (Boolean)
6480
isStreetViewLoaded = true
6581
}
6682
}
67-
}
83+
}

feature/street-view/src/main/kotlin/com/espressodev/gptmap/feature/street_view/StreetViewViewModel.kt

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import kotlinx.coroutines.flow.asStateFlow
99
import kotlinx.coroutines.flow.update
1010
import javax.inject.Inject
1111

12-
1312
@HiltViewModel
1413
class StreetViewViewModel @Inject constructor(logService: LogService): GmViewModel(logService) {
1514

@@ -19,8 +18,4 @@ class StreetViewViewModel @Inject constructor(logService: LogService): GmViewMod
1918
fun getStreetView(latitude: Double, longitude: Double) {
2019
_uiState.update { it.copy(latLng = LatLng(latitude, longitude)) }
2120
}
22-
23-
fun onCameraButtonClick(state: Boolean) {
24-
_uiState.update { it.copy(screenshotState = state, cameraButtonState = false) }
25-
}
26-
}
21+
}

0 commit comments

Comments
 (0)