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(
|
Scaffold(
|
||||||
modifier = Modifier.fillMaxSize(),
|
modifier = Modifier.fillMaxSize(),
|
||||||
floatingActionButton = {
|
floatingActionButton = {
|
||||||
ExtendedFloatingActionButton(onClick = { viewModel.addRepository() }) {
|
ExtendedFloatingActionButton(onClick = { viewModel.showRepositorySheet(editMode = true) }) {
|
||||||
Icon(imageVector = Icons.Rounded.Add, contentDescription = "Add Repository")
|
Icon(imageVector = Icons.Rounded.Add, contentDescription = "Add Repository")
|
||||||
Text(text = "Add Repository")
|
Text(text = "Add Repository")
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,17 @@ class PrefsRepositoriesFragment : BaseNavFragment() {
|
|||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
lifecycleScope.launchWhenStarted {
|
lifecycleScope.launchWhenStarted {
|
||||||
viewModel.showSheet.collectLatest {
|
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 {
|
return ComposeView(requireContext()).apply {
|
||||||
@ -44,13 +54,6 @@ class PrefsRepositoriesFragment : BaseNavFragment() {
|
|||||||
|
|
||||||
override fun setupLayout() {
|
override fun setupLayout() {
|
||||||
viewModel.bindConnection(requireContext())
|
viewModel.bindConnection(requireContext())
|
||||||
viewModel.toLaunch.observe(viewLifecycleOwner) {
|
|
||||||
if (it?.first == true) {
|
|
||||||
EditRepositorySheetX(it.second)
|
|
||||||
.showNow(parentFragmentManager, "Repository ${it.second}")
|
|
||||||
viewModel.emptyToLaunch()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroyView() {
|
override fun onDestroyView() {
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package com.looker.droidify.ui.viewmodels
|
package com.looker.droidify.ui.viewmodels
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import androidx.lifecycle.MediatorLiveData
|
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.lifecycle.ViewModelProvider
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
@ -21,12 +20,10 @@ import kotlinx.coroutines.withContext
|
|||||||
|
|
||||||
class RepositoriesViewModelX(val repositoryDao: RepositoryDao) : ViewModel() {
|
class RepositoriesViewModelX(val repositoryDao: RepositoryDao) : ViewModel() {
|
||||||
|
|
||||||
val toLaunch: MediatorLiveData<Pair<Boolean, Long>?> = MediatorLiveData()
|
|
||||||
|
|
||||||
val syncConnection = Connection(SyncService::class.java)
|
val syncConnection = Connection(SyncService::class.java)
|
||||||
|
|
||||||
private val _showSheet = MutableSharedFlow<Long>()
|
private val _showSheet = MutableSharedFlow<SheetNavigationData>()
|
||||||
val showSheet: SharedFlow<Long> = _showSheet
|
val showSheet: SharedFlow<SheetNavigationData> = _showSheet
|
||||||
|
|
||||||
private val _repositories = MutableStateFlow<List<Repository>>(emptyList())
|
private val _repositories = MutableStateFlow<List<Repository>>(emptyList())
|
||||||
val repositories = _repositories.asStateFlow()
|
val repositories = _repositories.asStateFlow()
|
||||||
@ -37,15 +34,22 @@ class RepositoriesViewModelX(val repositoryDao: RepositoryDao) : ViewModel() {
|
|||||||
_repositories.emit(it)
|
_repositories.emit(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
toLaunch.value = null
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun bindConnection(context: Context) {
|
fun bindConnection(context: Context) {
|
||||||
viewModelScope.launch { syncConnection.bind(context) }
|
viewModelScope.launch { syncConnection.bind(context) }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun showRepositorySheet(repositoryId: Long) {
|
fun showRepositorySheet(repositoryId: Long = 0L, editMode: Boolean = false) {
|
||||||
viewModelScope.launch { _showSheet.emit(repositoryId) }
|
viewModelScope.launch {
|
||||||
|
_showSheet.emit(
|
||||||
|
if (editMode) {
|
||||||
|
SheetNavigationData(repositoryId, editMode)
|
||||||
|
} else {
|
||||||
|
SheetNavigationData(addNewRepository(), editMode)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun toggleRepository(repository: Repository, isEnabled: Boolean) {
|
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) {
|
private suspend fun addNewRepository(): Long = withContext(Dispatchers.IO) {
|
||||||
repositoryDao.insert(newRepository())
|
repositoryDao.insert(newRepository())
|
||||||
repositoryDao.latestAddedId()
|
repositoryDao.latestAddedId()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun emptyToLaunch() {
|
|
||||||
toLaunch.value = null
|
|
||||||
}
|
|
||||||
|
|
||||||
class Factory(private val repoDao: RepositoryDao) : ViewModelProvider.Factory {
|
class Factory(private val repoDao: RepositoryDao) : ViewModelProvider.Factory {
|
||||||
@Suppress("unchecked_cast")
|
@Suppress("unchecked_cast")
|
||||||
override fun <T : ViewModel> create(modelClass: Class<T>): T {
|
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