diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/ReaderViewModel.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/ReaderViewModel.kt index 46dc4fa12..0c58bd1c0 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/ReaderViewModel.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/ReaderViewModel.kt @@ -72,10 +72,7 @@ class ReaderViewModel( .flowOn(Dispatchers.IO) .asLiveData(viewModelScope.coroutineContext) - val onZoomChanged = settings.observe() - .filter { it == AppSettings.KEY_ZOOM_MODE } - .flowOn(Dispatchers.IO) - .asLiveEvent(viewModelScope.coroutineContext) + val onZoomChanged = SingleLiveEvent() init { loadingJob = launchLoadingJob(Dispatchers.Default) { @@ -113,6 +110,8 @@ class ReaderViewModel( shortcutsRepository.updateShortcuts() } } + + subscribeToSettings() } fun switchMode(newMode: ReaderMode) { @@ -255,6 +254,13 @@ class ReaderViewModel( } } + private fun subscribeToSettings() { + settings.observe() + .filter { it == AppSettings.KEY_ZOOM_MODE } + .onEach { onZoomChanged.postCall(Unit) } + .launchIn(viewModelScope + Dispatchers.IO) + } + private companion object : KoinComponent { const val BOUNDS_PAGE_OFFSET = 2 diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/reversed/ReversedReaderFragment.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/reversed/ReversedReaderFragment.kt index 79d3ae50c..26ee06174 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/reversed/ReversedReaderFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/reversed/ReversedReaderFragment.kt @@ -42,8 +42,7 @@ class ReversedReaderFragment : BaseReader() { } } viewModel.onZoomChanged.observe(viewLifecycleOwner) { - pagerAdapter = ReversedPagesAdapter(loader, get()) - binding.pager.swapAdapter(pagerAdapter) + pagerAdapter?.notifyDataSetChanged() } } diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/standard/PagerReaderFragment.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/standard/PagerReaderFragment.kt index 58b335d3f..63e623180 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/standard/PagerReaderFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/pager/standard/PagerReaderFragment.kt @@ -42,8 +42,7 @@ class PagerReaderFragment : BaseReader() { } } viewModel.onZoomChanged.observe(viewLifecycleOwner) { - pagesAdapter = PagesAdapter(loader, get()) - binding.pager.swapAdapter(pagesAdapter) + pagesAdapter?.notifyDataSetChanged() } } diff --git a/app/src/main/java/org/koitharu/kotatsu/utils/FlowLiveEvent.kt b/app/src/main/java/org/koitharu/kotatsu/utils/FlowLiveEvent.kt deleted file mode 100644 index 6102c9d1f..000000000 --- a/app/src/main/java/org/koitharu/kotatsu/utils/FlowLiveEvent.kt +++ /dev/null @@ -1,54 +0,0 @@ -package org.koitharu.kotatsu.utils - -import androidx.lifecycle.LifecycleOwner -import androidx.lifecycle.LiveData -import androidx.lifecycle.Observer -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.Job -import kotlinx.coroutines.SupervisorJob -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.launchIn -import kotlinx.coroutines.flow.onEach -import java.util.concurrent.atomic.AtomicBoolean -import kotlin.coroutines.CoroutineContext - -class FlowLiveEvent( - private val source: Flow, - private val context: CoroutineContext -) : LiveData() { - - private val scope = CoroutineScope( - Dispatchers.Main.immediate + context + SupervisorJob(context[Job]) - ) - private val pending = AtomicBoolean(false) - private var collectJob: Job? = null - - override fun observe(owner: LifecycleOwner, observer: Observer) { - super.observe(owner) { - if (pending.compareAndSet(true, false)) { - observer.onChanged(it) - } - } - } - - override fun onActive() { - super.onActive() - if (collectJob == null) { - collectJob = source.onEach { - setValue(it) - }.launchIn(scope) - } - } - - override fun onInactive() { - collectJob?.cancel() - collectJob = null - super.onInactive() - } - - override fun setValue(value: T) { - pending.set(true) - super.setValue(value) - } -} \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/utils/ext/LiveDataExt.kt b/app/src/main/java/org/koitharu/kotatsu/utils/ext/LiveDataExt.kt index 78b85b91a..2ce4190c8 100644 --- a/app/src/main/java/org/koitharu/kotatsu/utils/ext/LiveDataExt.kt +++ b/app/src/main/java/org/koitharu/kotatsu/utils/ext/LiveDataExt.kt @@ -7,7 +7,6 @@ import androidx.lifecycle.liveData import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.collect import org.koitharu.kotatsu.utils.BufferedObserver -import org.koitharu.kotatsu.utils.FlowLiveEvent import kotlin.coroutines.CoroutineContext import kotlin.coroutines.EmptyCoroutineContext @@ -37,8 +36,4 @@ fun Flow.asLiveData( collect { emit(it) } -} - -fun Flow.asLiveEvent( - context: CoroutineContext = EmptyCoroutineContext -): LiveData = FlowLiveEvent(this, context) \ No newline at end of file +} \ No newline at end of file