Skip to content

Commit 71768c2

Browse files
authored
🔀 #77 from boostcampwm-2022/feat/runningdatamanager_module
러닝 상태를 관리하는 RunningDataManager를 모듈로 분리
2 parents ee25b18 + 8b9c7df commit 71768c2

27 files changed

+241
-92
lines changed

presentation/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ android {
5151
dependencies {
5252

5353
implementation project(":domain")
54+
implementation project(":runningdata")
5455

5556
implementation "androidx.core:core-ktx:$coreKtxVersion"
5657
implementation "androidx.appcompat:appcompat:$appcompatVersion"

presentation/src/main/java/com/whyranoid/presentation/running/Event.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.whyranoid.presentation.running
22

3+
import com.whyranoid.runningdata.model.RunningFinishData
4+
35
sealed interface Event {
46
data class FinishButtonClick(val runningFinishData: RunningFinishData) : Event
57
object RunningFinishFailure : Event

presentation/src/main/java/com/whyranoid/presentation/running/RunningActivity.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,11 @@ import com.whyranoid.presentation.base.BaseActivity
1919
import com.whyranoid.presentation.databinding.ActivityRunningBinding
2020
import com.whyranoid.presentation.util.dateToString
2121
import com.whyranoid.presentation.util.repeatWhenUiStarted
22+
import com.whyranoid.runningdata.model.RunningData
23+
import com.whyranoid.runningdata.model.RunningFinishData
24+
import com.whyranoid.runningdata.model.RunningState
2225
import dagger.hilt.android.AndroidEntryPoint
23-
import java.util.*
26+
import java.util.Date
2427

2528
@AndroidEntryPoint
2629
internal class RunningActivity :
@@ -72,7 +75,7 @@ internal class RunningActivity :
7275
}
7376

7477
observeStateOnMapReady()
75-
naverMap.addOnCameraChangeListener { reason, animated ->
78+
naverMap.addOnCameraChangeListener { reason, _ ->
7679
if (reason == CameraUpdate.REASON_GESTURE) {
7780
viewModel.onTrackingCanceledByGesture()
7881
}

presentation/src/main/java/com/whyranoid/presentation/running/RunningPosition.kt

Lines changed: 0 additions & 15 deletions
This file was deleted.
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.whyranoid.presentation.running
2+
3+
import com.naver.maps.geometry.LatLng
4+
import com.whyranoid.domain.model.RunningHistory
5+
import com.whyranoid.presentation.model.RunningHistoryUiModel
6+
import com.whyranoid.runningdata.model.RunningHistoryModel
7+
import com.whyranoid.runningdata.model.RunningPosition
8+
9+
fun RunningPosition.toLatLng(): LatLng {
10+
return LatLng(
11+
this.latitude,
12+
this.longitude
13+
)
14+
}
15+
16+
fun RunningHistoryModel.toRunningHistoryUiModel() =
17+
RunningHistoryUiModel(
18+
historyId = historyId,
19+
date = startedAt,
20+
startedAt = startedAt,
21+
finishedAt = finishedAt,
22+
totalRunningTime = totalRunningTime,
23+
pace = pace,
24+
totalDistance = totalDistance
25+
)
26+
27+
fun RunningHistoryModel.toRunningHistory() =
28+
RunningHistory(
29+
historyId = historyId,
30+
startedAt = startedAt,
31+
finishedAt = finishedAt,
32+
totalRunningTime = totalRunningTime,
33+
pace = pace,
34+
totalDistance = totalDistance
35+
)

presentation/src/main/java/com/whyranoid/presentation/running/RunningViewModel.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ import androidx.work.WorkInfo
1212
import androidx.work.WorkManager
1313
import com.whyranoid.domain.usecase.FinishRunningUseCase
1414
import com.whyranoid.domain.usecase.StartRunningUseCase
15-
import com.whyranoid.presentation.model.toRunningHistory
15+
import com.whyranoid.runningdata.RunningDataManager
16+
import com.whyranoid.runningdata.model.RunningState
1617
import dagger.hilt.android.lifecycle.HiltViewModel
1718
import dagger.hilt.android.qualifiers.ApplicationContext
1819
import kotlinx.coroutines.flow.MutableSharedFlow
@@ -26,10 +27,10 @@ import javax.inject.Inject
2627
class RunningViewModel @Inject constructor(
2728
@ApplicationContext context: Context,
2829
startRunningUseCase: StartRunningUseCase,
29-
private val finishRunningUseCase: FinishRunningUseCase,
30-
private val runningDataManager: RunningDataManager
30+
private val finishRunningUseCase: FinishRunningUseCase
3131
) : ViewModel() {
3232

33+
private val runningDataManager = RunningDataManager.getInstance()
3334
val runningState = runningDataManager.runningState
3435

3536
private val _trackingModeState = MutableStateFlow(TrackingMode.FOLLOW)

presentation/src/main/java/com/whyranoid/presentation/running/RunningWorker.kt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,20 @@ import com.google.android.gms.location.LocationServices
2222
import com.google.android.gms.location.Priority
2323
import com.whyranoid.presentation.MainActivity
2424
import com.whyranoid.presentation.R
25+
import com.whyranoid.runningdata.RunningDataManager
26+
import com.whyranoid.runningdata.model.RunningState
2527
import dagger.assisted.Assisted
2628
import dagger.assisted.AssistedInject
2729
import kotlinx.coroutines.delay
2830

2931
@HiltWorker
3032
class RunningWorker @AssistedInject constructor(
3133
@Assisted private val context: Context,
32-
@Assisted params: WorkerParameters,
33-
private val runningDataManager: RunningDataManager
34+
@Assisted params: WorkerParameters
3435
) : CoroutineWorker(context, params) {
3536

37+
private val runningDataManager = RunningDataManager.getInstance()
38+
3639
private val fusedLocationClient = LocationServices.getFusedLocationProviderClient(context)
3740
private val locationRequest =
3841
LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, UPDATE_INTERVAL_MS).build()
@@ -59,7 +62,6 @@ class RunningWorker @AssistedInject constructor(
5962
}
6063

6164
private fun createForegroundInfo(progress: String): ForegroundInfo {
62-
val id = context.getString(R.string.running_notification_id)
6365
val title = context.getString(R.string.running_notification_title)
6466

6567
val intent = Intent(context, MainActivity::class.java)
@@ -70,7 +72,7 @@ class RunningWorker @AssistedInject constructor(
7072
createChannel()
7173
}
7274

73-
val notification = NotificationCompat.Builder(applicationContext, id)
75+
val notification = NotificationCompat.Builder(applicationContext, CHANNEL_ID)
7476
.setContentTitle(title)
7577
.setTicker(title)
7678
.setContentText(progress)

presentation/src/main/java/com/whyranoid/presentation/runningfinish/RunningFinishFragment.kt

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,12 @@ import com.whyranoid.presentation.base.BaseFragment
1515
import com.whyranoid.presentation.databinding.FragmentRunningFinishBinding
1616
import com.whyranoid.presentation.model.RunningHistoryUiModel
1717
import com.whyranoid.presentation.model.UiState
18-
import com.whyranoid.presentation.running.RunningFinishData
19-
import com.whyranoid.presentation.running.RunningPosition
2018
import com.whyranoid.presentation.running.toLatLng
21-
import com.whyranoid.presentation.util.pxdp.PxDpUtil
19+
import com.whyranoid.presentation.running.toRunningHistoryUiModel
20+
import com.whyranoid.presentation.util.converters.UnitConverters
2221
import com.whyranoid.presentation.util.repeatWhenUiStarted
22+
import com.whyranoid.runningdata.model.RunningFinishData
23+
import com.whyranoid.runningdata.model.RunningPosition
2324
import dagger.hilt.android.AndroidEntryPoint
2425
import timber.log.Timber
2526

@@ -72,7 +73,8 @@ internal class RunningFinishFragment :
7273
}
7374

7475
private fun handleDataStateSuccess(runningFinishData: RunningFinishData) {
75-
binding.runningHistoryItem.runningHistory = runningFinishData.runningHistory
76+
binding.runningHistoryItem.runningHistory =
77+
runningFinishData.runningHistory.toRunningHistoryUiModel()
7678

7779
moveCamera(runningFinishData)
7880
updatePathsOverlay(runningFinishData.runningPositionList)
@@ -95,9 +97,10 @@ internal class RunningFinishFragment :
9597
}
9698

9799
private fun handlePositiveButtonClicked(runningHistory: RunningHistoryUiModel) {
98-
val direction = RunningFinishFragmentDirections.actionRunningFinishFragmentToCreateRunningPostFragment(
99-
runningHistory
100-
)
100+
val direction =
101+
RunningFinishFragmentDirections.actionRunningFinishFragmentToCreateRunningPostFragment(
102+
runningHistory
103+
)
101104
findNavController().navigate(direction)
102105
}
103106

@@ -118,7 +121,7 @@ internal class RunningFinishFragment :
118121
position.toLatLng()
119122
}
120123
).build(),
121-
PxDpUtil.pxToDp(requireContext(), 200)
124+
UnitConverters.pxToDp(requireContext(), 200)
122125
)
123126
it.moveCamera(cameraUpdate)
124127
}

presentation/src/main/java/com/whyranoid/presentation/runningfinish/RunningFinishViewModel.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@ import androidx.lifecycle.viewModelScope
66
import com.whyranoid.domain.model.MoGakRunException
77
import com.whyranoid.domain.usecase.SaveRunningHistoryUseCase
88
import com.whyranoid.presentation.model.UiState
9-
import com.whyranoid.presentation.running.RunningFinishData
109
import com.whyranoid.presentation.running.RunningViewModel.Companion.RUNNING_FINISH_DATA_KEY
10+
import com.whyranoid.presentation.running.toRunningHistoryUiModel
11+
import com.whyranoid.runningdata.model.RunningFinishData
1112
import dagger.hilt.android.lifecycle.HiltViewModel
1213
import kotlinx.coroutines.flow.MutableSharedFlow
1314
import kotlinx.coroutines.flow.MutableStateFlow
@@ -58,7 +59,7 @@ class RunningFinishViewModel @Inject constructor(
5859

5960
fun onPositiveButtonClicked() {
6061
(runningFinishDataState.value as? UiState.Success<RunningFinishData>)?.value?.let { runningFinishData ->
61-
emitEvent(Event.PositiveButtonClick(runningFinishData.runningHistory))
62+
emitEvent(Event.PositiveButtonClick(runningFinishData.runningHistory.toRunningHistoryUiModel()))
6263
} ?: kotlin.run {
6364
_runningFinishDataState.value = UiState.Failure(
6465
MoGakRunException.FileNotFoundedException

presentation/src/main/java/com/whyranoid/presentation/runningstart/RunningStartFragment.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@ import com.whyranoid.presentation.R
1717
import com.whyranoid.presentation.base.BaseFragment
1818
import com.whyranoid.presentation.databinding.FragmentRunningStartBinding
1919
import com.whyranoid.presentation.running.RunningActivity
20-
import com.whyranoid.presentation.running.RunningFinishData
21-
import com.whyranoid.presentation.running.RunningState
2220
import com.whyranoid.presentation.running.RunningViewModel.Companion.RUNNING_FINISH_DATA_KEY
2321
import com.whyranoid.presentation.util.getSerializableData
2422
import com.whyranoid.presentation.util.gpsstate.GPSState
2523
import com.whyranoid.presentation.util.repeatWhenUiStarted
24+
import com.whyranoid.runningdata.model.RunningFinishData
25+
import com.whyranoid.runningdata.model.RunningState
2626
import dagger.hilt.android.AndroidEntryPoint
2727

2828
@AndroidEntryPoint

0 commit comments

Comments
 (0)