Skip to content

Commit bbcf9a8

Browse files
committed
refactoring
1 parent 900a43b commit bbcf9a8

File tree

2 files changed

+27
-29
lines changed

2 files changed

+27
-29
lines changed

app/src/main/kotlin/com/aykuttasil/modernapp/ui/user/UserActivity.kt

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,16 @@ package com.aykuttasil.modernapp.ui.user
1818
import android.os.Bundle
1919
import android.widget.Toast
2020
import androidx.activity.viewModels
21-
import androidx.lifecycle.Observer
21+
import androidx.lifecycle.lifecycleScope
22+
import com.aykuttasil.domain.util.logd
2223
import com.aykuttasil.modernapp.R
2324
import com.aykuttasil.modernapp.databinding.ActivityUserBinding
2425
import com.aykuttasil.modernapp.ui.common.BaseActivity
2526
import com.aykuttasil.modernapp.util.delegates.contentView
26-
import com.aykuttasil.domain.util.logd
2727
import dagger.hilt.android.AndroidEntryPoint
2828
import kotlinx.coroutines.ExperimentalCoroutinesApi
29+
import kotlinx.coroutines.flow.launchIn
30+
import kotlinx.coroutines.flow.onEach
2931

3032
@ExperimentalCoroutinesApi
3133
@AndroidEntryPoint
@@ -39,18 +41,20 @@ class UserActivity : BaseActivity() {
3941
super.onCreate(savedInstanceState)
4042
logd { "onCreate" }
4143

42-
viewModel.viewState.observe(this, Observer {
43-
if (it.isLoading) {
44-
Toast.makeText(this, "Lütfen Bekleyiniz", Toast.LENGTH_SHORT).show()
45-
} else if (it.userEntity != null) {
46-
Toast.makeText(this, "İşlem Tamamlandı", Toast.LENGTH_SHORT).show()
47-
Toast.makeText(this, it.userEntity?.userName, Toast.LENGTH_SHORT).show()
44+
viewModel.viewState.onEach {
45+
when (it) {
46+
is UserViewModel.ViewState.Loading -> {
47+
Toast.makeText(this, "Lütfen Bekleyiniz", Toast.LENGTH_SHORT).show()
48+
}
49+
is UserViewModel.ViewState.Success -> {
50+
Toast.makeText(this, "İşlem Tamamlandı", Toast.LENGTH_SHORT).show()
51+
Toast.makeText(this, it.user.userName, Toast.LENGTH_SHORT).show()
52+
}
53+
is UserViewModel.ViewState.Error -> {
54+
Toast.makeText(this, it.err.message, Toast.LENGTH_SHORT).show()
55+
}
4856
}
49-
})
50-
51-
viewModel.errorState.observe(this, Observer {
52-
Toast.makeText(this, it?.message, Toast.LENGTH_SHORT).show()
53-
})
57+
}.launchIn(lifecycleScope)
5458

5559
viewModel.getUser()
5660

app/src/main/kotlin/com/aykuttasil/modernapp/ui/user/UserViewModel.kt

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,53 +2,47 @@ package com.aykuttasil.modernapp.ui.user
22

33
import androidx.hilt.Assisted
44
import androidx.hilt.lifecycle.ViewModelInject
5-
import androidx.lifecycle.MutableLiveData
65
import androidx.lifecycle.SavedStateHandle
76
import androidx.lifecycle.viewModelScope
87
import com.aykuttasil.domain.entities.UserEntity
98
import com.aykuttasil.domain.usecases.user.GetUserUseCase
109
import com.aykuttasil.domain.util.Resource
1110
import com.aykuttasil.modernapp.App
1211
import com.aykuttasil.modernapp.ui.common.BaseViewModel
13-
import com.aykuttasil.modernapp.util.SingleLiveEvent
1412
import kotlinx.coroutines.ExperimentalCoroutinesApi
13+
import kotlinx.coroutines.flow.MutableStateFlow
1514
import kotlinx.coroutines.flow.launchIn
1615
import kotlinx.coroutines.flow.onEach
1716
import kotlinx.coroutines.launch
1817

19-
data class UserActivityViewState(
20-
var isLoading: Boolean = true,
21-
var userEntity: UserEntity? = null,
22-
var error: String? = null
23-
)
24-
2518
@ExperimentalCoroutinesApi
2619
class UserViewModel @ViewModelInject constructor(
2720
@Assisted private val savedStateHandle: SavedStateHandle,
2821
private val app: App,
2922
private val getUserUseCase: GetUserUseCase
3023
) : BaseViewModel(app) {
3124

32-
val viewState = MutableLiveData<UserActivityViewState>()
33-
var errorState: SingleLiveEvent<Throwable?> = SingleLiveEvent()
34-
35-
init {
36-
viewState.value = UserActivityViewState()
25+
sealed class ViewState {
26+
object Loading : ViewState()
27+
data class Success(val user: UserEntity) : ViewState()
28+
data class Error(val err: Throwable) : ViewState()
3729
}
3830

31+
val viewState = MutableStateFlow<ViewState>(ViewState.Loading)
32+
3933
fun getUser() {
4034
viewModelScope.launch {
4135
getUserUseCase("aykuttasil") { state ->
4236
state.onEach {
4337
when (it) {
4438
is Resource.Loading -> {
45-
viewState.value = viewState.value?.copy(isLoading = true)
39+
viewState.value = ViewState.Loading
4640
}
4741
is Resource.Success -> {
48-
viewState.value = viewState.value?.copy(isLoading = false, userEntity = it.data)
42+
viewState.value = ViewState.Success(it.data!!)
4943
}
5044
is Resource.Error -> {
51-
errorState.value = it.error
45+
viewState.value = ViewState.Error(it.error ?: Exception("Error!"))
5246
}
5347
}
5448
}.launchIn(viewModelScope)

0 commit comments

Comments
 (0)