@@ -3,14 +3,19 @@ package com.whyranoid.presentation.community.runningpost
3
3
import androidx.lifecycle.SavedStateHandle
4
4
import androidx.lifecycle.ViewModel
5
5
import androidx.lifecycle.viewModelScope
6
+ import com.whyranoid.domain.repository.NetworkRepository
6
7
import com.whyranoid.domain.usecase.CreateRunningPostUseCase
7
8
import com.whyranoid.presentation.model.RunningHistoryUiModel
8
9
import com.whyranoid.presentation.model.UiState
10
+ import com.whyranoid.presentation.util.networkconnection.NetworkState
9
11
import dagger.hilt.android.lifecycle.HiltViewModel
12
+ import kotlinx.coroutines.FlowPreview
10
13
import kotlinx.coroutines.flow.MutableStateFlow
11
14
import kotlinx.coroutines.flow.SharingStarted
12
15
import kotlinx.coroutines.flow.StateFlow
13
16
import kotlinx.coroutines.flow.asStateFlow
17
+ import kotlinx.coroutines.flow.combine
18
+ import kotlinx.coroutines.flow.debounce
14
19
import kotlinx.coroutines.flow.map
15
20
import kotlinx.coroutines.flow.stateIn
16
21
import kotlinx.coroutines.launch
@@ -19,6 +24,7 @@ import javax.inject.Inject
19
24
@HiltViewModel
20
25
class CreateRunningPostViewModel @Inject constructor(
21
26
private val createRunningPostUseCase : CreateRunningPostUseCase ,
27
+ private val networkRepository : NetworkRepository ,
22
28
savedState : SavedStateHandle
23
29
) : ViewModel() {
24
30
@@ -27,8 +33,8 @@ class CreateRunningPostViewModel @Inject constructor(
27
33
val runningPostContent = MutableStateFlow <String ?>(null )
28
34
29
35
val createPostButtonEnableState: StateFlow <Boolean >
30
- get() = runningPostContent.map { content ->
31
- content.isNullOrBlank().not ()
36
+ get() = runningPostContent.combine(networkState) { content, networkState ->
37
+ content.isNullOrBlank().not () && networkState is NetworkState . Connection
32
38
}.stateIn(
33
39
initialValue = false ,
34
40
started = SharingStarted .WhileSubscribed (5000 ),
@@ -39,6 +45,18 @@ class CreateRunningPostViewModel @Inject constructor(
39
45
val createPostState: StateFlow <UiState <Boolean >>
40
46
get() = _createPostState .asStateFlow()
41
47
48
+ @OptIn(FlowPreview ::class )
49
+ val networkState = networkRepository.getNetworkConnectionState()
50
+ .map { isConnected ->
51
+ if (isConnected) NetworkState .Connection else NetworkState .DisConnection
52
+ }
53
+ .debounce(500 )
54
+ .stateIn(
55
+ scope = viewModelScope,
56
+ started = SharingStarted .WhileSubscribed (5000 ),
57
+ initialValue = NetworkState .UnInitialized
58
+ )
59
+
42
60
fun createRunningPost () {
43
61
viewModelScope.launch {
44
62
_createPostState .value = UiState .Loading
@@ -56,6 +74,14 @@ class CreateRunningPostViewModel @Inject constructor(
56
74
}
57
75
}
58
76
77
+ fun startObservingNetworkState () {
78
+ networkRepository.addNetworkConnectionCallback()
79
+ }
80
+
81
+ fun finishObservingNetworkState () {
82
+ networkRepository.removeNetworkConnectionCallback()
83
+ }
84
+
59
85
companion object {
60
86
private const val RUNNING_HISTORY_SAFE_ARGS_KEY = " selectedRunningHistory"
61
87
}
0 commit comments