mirror of
https://github.com/Aviortheking/Neo-Store.git
synced 2025-04-23 11:22:12 +00:00
Cleanup with using flow instead of LiveData
This commit is contained in:
parent
dfa7d6ffbd
commit
2f76f124d7
@ -23,7 +23,7 @@ fun RepositoryPage(viewModel: RepositoriesViewModelX) {
|
||||
Scaffold(
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
floatingActionButton = {
|
||||
ExtendedFloatingActionButton(onClick = { viewModel.addRepository() }) {
|
||||
ExtendedFloatingActionButton(onClick = { viewModel.showRepositorySheet(editMode = true) }) {
|
||||
Icon(imageVector = Icons.Rounded.Add, contentDescription = "Add Repository")
|
||||
Text(text = "Add Repository")
|
||||
}
|
||||
|
@ -34,7 +34,17 @@ class PrefsRepositoriesFragment : BaseNavFragment() {
|
||||
super.onCreate(savedInstanceState)
|
||||
lifecycleScope.launchWhenStarted {
|
||||
viewModel.showSheet.collectLatest {
|
||||
RepositorySheetX(it).showNow(childFragmentManager, "Repository $it")
|
||||
if (it.editMode) {
|
||||
EditRepositorySheetX(it.repositoryId).showNow(
|
||||
childFragmentManager,
|
||||
"Repository ${it.repositoryId}"
|
||||
)
|
||||
} else {
|
||||
RepositorySheetX(it.repositoryId).showNow(
|
||||
childFragmentManager,
|
||||
"Repository $it"
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
return ComposeView(requireContext()).apply {
|
||||
@ -44,13 +54,6 @@ class PrefsRepositoriesFragment : BaseNavFragment() {
|
||||
|
||||
override fun setupLayout() {
|
||||
viewModel.bindConnection(requireContext())
|
||||
viewModel.toLaunch.observe(viewLifecycleOwner) {
|
||||
if (it?.first == true) {
|
||||
EditRepositorySheetX(it.second)
|
||||
.showNow(parentFragmentManager, "Repository ${it.second}")
|
||||
viewModel.emptyToLaunch()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
|
@ -1,7 +1,6 @@
|
||||
package com.looker.droidify.ui.viewmodels
|
||||
|
||||
import android.content.Context
|
||||
import androidx.lifecycle.MediatorLiveData
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.viewModelScope
|
||||
@ -21,12 +20,10 @@ import kotlinx.coroutines.withContext
|
||||
|
||||
class RepositoriesViewModelX(val repositoryDao: RepositoryDao) : ViewModel() {
|
||||
|
||||
val toLaunch: MediatorLiveData<Pair<Boolean, Long>?> = MediatorLiveData()
|
||||
|
||||
val syncConnection = Connection(SyncService::class.java)
|
||||
|
||||
private val _showSheet = MutableSharedFlow<Long>()
|
||||
val showSheet: SharedFlow<Long> = _showSheet
|
||||
private val _showSheet = MutableSharedFlow<SheetNavigationData>()
|
||||
val showSheet: SharedFlow<SheetNavigationData> = _showSheet
|
||||
|
||||
private val _repositories = MutableStateFlow<List<Repository>>(emptyList())
|
||||
val repositories = _repositories.asStateFlow()
|
||||
@ -37,15 +34,22 @@ class RepositoriesViewModelX(val repositoryDao: RepositoryDao) : ViewModel() {
|
||||
_repositories.emit(it)
|
||||
}
|
||||
}
|
||||
toLaunch.value = null
|
||||
}
|
||||
|
||||
fun bindConnection(context: Context) {
|
||||
viewModelScope.launch { syncConnection.bind(context) }
|
||||
}
|
||||
|
||||
fun showRepositorySheet(repositoryId: Long) {
|
||||
viewModelScope.launch { _showSheet.emit(repositoryId) }
|
||||
fun showRepositorySheet(repositoryId: Long = 0L, editMode: Boolean = false) {
|
||||
viewModelScope.launch {
|
||||
_showSheet.emit(
|
||||
if (editMode) {
|
||||
SheetNavigationData(repositoryId, editMode)
|
||||
} else {
|
||||
SheetNavigationData(addNewRepository(), editMode)
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun toggleRepository(repository: Repository, isEnabled: Boolean) {
|
||||
@ -54,21 +58,11 @@ class RepositoriesViewModelX(val repositoryDao: RepositoryDao) : ViewModel() {
|
||||
}
|
||||
}
|
||||
|
||||
fun addRepository() {
|
||||
viewModelScope.launch {
|
||||
toLaunch.value = Pair(true, addNewRepository())
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun addNewRepository(): Long = withContext(Dispatchers.IO) {
|
||||
repositoryDao.insert(newRepository())
|
||||
repositoryDao.latestAddedId()
|
||||
}
|
||||
|
||||
fun emptyToLaunch() {
|
||||
toLaunch.value = null
|
||||
}
|
||||
|
||||
class Factory(private val repoDao: RepositoryDao) : ViewModelProvider.Factory {
|
||||
@Suppress("unchecked_cast")
|
||||
override fun <T : ViewModel> create(modelClass: Class<T>): T {
|
||||
@ -79,3 +73,8 @@ class RepositoriesViewModelX(val repositoryDao: RepositoryDao) : ViewModel() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
data class SheetNavigationData(
|
||||
val repositoryId: Long = 0L,
|
||||
val editMode: Boolean = false
|
||||
)
|
Loading…
x
Reference in New Issue
Block a user