@@ -2,7 +2,6 @@ package com.combo.runcombi.walk.screen
22
33import android.annotation.SuppressLint
44import android.content.res.Configuration
5- import android.os.Looper
65import androidx.compose.foundation.ExperimentalFoundationApi
76import androidx.compose.foundation.background
87import androidx.compose.foundation.clickable
@@ -22,7 +21,6 @@ import androidx.compose.foundation.layout.width
2221import androidx.compose.foundation.shape.RoundedCornerShape
2322import androidx.compose.material3.Text
2423import androidx.compose.runtime.Composable
25- import androidx.compose.runtime.DisposableEffect
2624import androidx.compose.runtime.LaunchedEffect
2725import androidx.compose.runtime.getValue
2826import androidx.compose.runtime.mutableStateOf
@@ -72,12 +70,6 @@ import com.combo.runcombi.walk.model.WalkUiState
7270import com.combo.runcombi.walk.model.getBottomSheetContent
7371import com.combo.runcombi.walk.viewmodel.WalkMainViewModel
7472import com.combo.runcombi.walk.viewmodel.WalkTrackingViewModel
75- import com.google.android.gms.location.LocationCallback
76- import com.google.android.gms.location.LocationRequest
77- import com.google.android.gms.location.LocationResult
78- import com.google.android.gms.location.LocationServices
79- import com.google.android.gms.location.Priority
80- import kotlinx.coroutines.delay
8173import kotlinx.coroutines.flow.collectLatest
8274
8375@SuppressLint(" MissingPermission" )
@@ -92,35 +84,22 @@ fun WalkTrackingScreen(
9284 val analyticsHelper = walkRecordViewModel.analyticsHelper
9385 val uiState by walkRecordViewModel.uiState.collectAsStateWithLifecycle()
9486 val isPaused = uiState.isPaused
95- val fusedLocationClient = remember { LocationServices .getFusedLocationProviderClient(context) }
9687
9788 val isInitialized = rememberSaveable { mutableStateOf(false ) }
98-
9989 val showSheet = remember { mutableStateOf(BottomSheetType .NONE ) }
10090
101- val locationCallback = remember {
102- object : LocationCallback () {
103- override fun onLocationResult (result : LocationResult ) {
104- result.lastLocation?.let { location ->
105- walkRecordViewModel.addPathPointFromService(
106- location.latitude, location.longitude, location.accuracy, location.time
107- )
108- }
109- }
110- }
111- }
112-
11391 LaunchedEffect (isInitialized.value) {
11492 if (! isInitialized.value) {
11593 analyticsHelper.logScreenView(" WalkTrackingScreen" )
11694
117- walkMainViewModel.startRun()
118-
11995 val member = walkMainViewModel.walkData.value.member
12096 val exerciseType = walkMainViewModel.walkData.value.exerciseType
12197 val selectedPetList = walkMainViewModel.walkData.value.petList
98+
12299 if (member != null ) {
123100 walkRecordViewModel.initWalkData(exerciseType, member, selectedPetList)
101+
102+ walkMainViewModel.startRun()
124103 }
125104 isInitialized.value = true
126105 }
@@ -132,27 +111,6 @@ fun WalkTrackingScreen(
132111 }
133112 }
134113
135- DisposableEffect (isPaused) {
136- if (! isPaused) {
137- val request = LocationRequest .Builder (Priority .PRIORITY_HIGH_ACCURACY , 2000 )
138- .setMinUpdateIntervalMillis(1000 ).build()
139-
140- fusedLocationClient.requestLocationUpdates(
141- request, locationCallback, Looper .getMainLooper()
142- )
143- }
144- onDispose {
145- fusedLocationClient.removeLocationUpdates(locationCallback)
146- }
147- }
148-
149- LaunchedEffect (isPaused) {
150- while (! isPaused) {
151- walkRecordViewModel.updateTime(uiState.time + 1 )
152- delay(1000 )
153- }
154- }
155-
156114 WalkTrackingContent (
157115 uiState = uiState,
158116 onPauseToggle = walkRecordViewModel::togglePause,
@@ -170,7 +128,6 @@ fun WalkTrackingScreen(
170128 onAccept = {
171129 when (showSheet.value) {
172130 BottomSheetType .FINISH -> {
173- // 산책 완료 이벤트 로깅
174131 val duration = FormatUtils .formatTime(uiState.time)
175132 val distance = String .format(" %.2f" , uiState.distance / 1000.0 )
176133 analyticsHelper.logWalkCompleted(duration, " ${distance} km" )
@@ -182,10 +139,15 @@ fun WalkTrackingScreen(
182139 member = uiState.walkMemberUiModel,
183140 petList = uiState.walkPetUIModelList ? : emptyList()
184141 )
142+
143+ walkRecordViewModel.stopTracking()
185144 onFinish()
186145 }
187146
188- BottomSheetType .CANCEL -> onBack()
147+ BottomSheetType .CANCEL -> {
148+ walkRecordViewModel.stopTracking()
149+ onBack()
150+ }
189151 else -> Unit
190152 }
191153 showSheet.value = BottomSheetType .NONE
0 commit comments