From 2f76f124d7fa437c5ae4740ac245aee9485c04d5 Mon Sep 17 00:00:00 2001 From: Iamlooker Date: Thu, 30 Jun 2022 19:50:13 +0530 Subject: [PATCH] Cleanup with using flow instead of LiveData --- .../settings/repository/RepositoryPage.kt | 2 +- .../ui/fragments/PrefsRepositoriesFragment.kt | 19 +++++----- .../ui/viewmodels/RepositoriesViewModelX.kt | 35 +++++++++---------- 3 files changed, 29 insertions(+), 27 deletions(-) diff --git a/src/main/kotlin/com/looker/droidify/ui/compose/pages/settings/repository/RepositoryPage.kt b/src/main/kotlin/com/looker/droidify/ui/compose/pages/settings/repository/RepositoryPage.kt index ca7a5f75..328e4f72 100644 --- a/src/main/kotlin/com/looker/droidify/ui/compose/pages/settings/repository/RepositoryPage.kt +++ b/src/main/kotlin/com/looker/droidify/ui/compose/pages/settings/repository/RepositoryPage.kt @@ -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") } diff --git a/src/main/kotlin/com/looker/droidify/ui/fragments/PrefsRepositoriesFragment.kt b/src/main/kotlin/com/looker/droidify/ui/fragments/PrefsRepositoriesFragment.kt index ebbca85f..ba2a7f83 100644 --- a/src/main/kotlin/com/looker/droidify/ui/fragments/PrefsRepositoriesFragment.kt +++ b/src/main/kotlin/com/looker/droidify/ui/fragments/PrefsRepositoriesFragment.kt @@ -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() { diff --git a/src/main/kotlin/com/looker/droidify/ui/viewmodels/RepositoriesViewModelX.kt b/src/main/kotlin/com/looker/droidify/ui/viewmodels/RepositoriesViewModelX.kt index 79b35bdc..138d3662 100644 --- a/src/main/kotlin/com/looker/droidify/ui/viewmodels/RepositoriesViewModelX.kt +++ b/src/main/kotlin/com/looker/droidify/ui/viewmodels/RepositoriesViewModelX.kt @@ -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?> = MediatorLiveData() - val syncConnection = Connection(SyncService::class.java) - private val _showSheet = MutableSharedFlow() - val showSheet: SharedFlow = _showSheet + private val _showSheet = MutableSharedFlow() + val showSheet: SharedFlow = _showSheet private val _repositories = MutableStateFlow>(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 create(modelClass: Class): T { @@ -79,3 +73,8 @@ class RepositoriesViewModelX(val repositoryDao: RepositoryDao) : ViewModel() { } } } + +data class SheetNavigationData( + val repositoryId: Long = 0L, + val editMode: Boolean = false +) \ No newline at end of file