Browse Source

Add parent class for view configs

arkon 5 năm trước cách đây
mục cha
commit
678c004a64

+ 24 - 0
app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ViewerConfig.kt

@@ -0,0 +1,24 @@
+package eu.kanade.tachiyomi.ui.reader.viewer
+
+import com.tfcporciuncula.flow.Preference
+import eu.kanade.tachiyomi.util.lang.launchInUI
+import kotlinx.coroutines.flow.distinctUntilChanged
+import kotlinx.coroutines.flow.drop
+import kotlinx.coroutines.flow.onEach
+
+abstract class ViewerConfig {
+
+    var imagePropertyChangedListener: (() -> Unit)? = null
+
+    fun <T> Preference<T>.register(
+        valueAssignment: (T) -> Unit,
+        onChanged: (T) -> Unit = {}
+    ) {
+        asFlow()
+            .onEach { valueAssignment(it) }
+            .drop(1)
+            .distinctUntilChanged()
+            .onEach { onChanged(it) }
+            .launchInUI()
+    }
+}

+ 3 - 3
app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerConfig.kt

@@ -4,17 +4,17 @@ import com.f2prateek.rx.preferences.Preference
 import eu.kanade.tachiyomi.data.preference.PreferencesHelper
 import eu.kanade.tachiyomi.util.lang.addTo
 import rx.subscriptions.CompositeSubscription
+import eu.kanade.tachiyomi.ui.reader.viewer.ViewerConfig
 import uy.kohesive.injekt.Injekt
 import uy.kohesive.injekt.api.get
 
 /**
  * Configuration used by pager viewers.
  */
-class PagerConfig(private val viewer: PagerViewer, preferences: PreferencesHelper = Injekt.get()) {
 
     private val subscriptions = CompositeSubscription()
-
-    var imagePropertyChangedListener: (() -> Unit)? = null
+class PagerConfig(private val viewer: PagerViewer, preferences: PreferencesHelper = Injekt.get()) :
+    ViewerConfig() {
 
     var tappingEnabled = true
         private set

+ 2 - 3
app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonConfig.kt

@@ -4,17 +4,16 @@ import com.f2prateek.rx.preferences.Preference
 import eu.kanade.tachiyomi.data.preference.PreferencesHelper
 import eu.kanade.tachiyomi.util.lang.addTo
 import rx.subscriptions.CompositeSubscription
+import eu.kanade.tachiyomi.ui.reader.viewer.ViewerConfig
 import uy.kohesive.injekt.Injekt
 import uy.kohesive.injekt.api.get
 
 /**
  * Configuration used by webtoon viewers.
  */
-class WebtoonConfig(preferences: PreferencesHelper = Injekt.get()) {
 
     private val subscriptions = CompositeSubscription()
-
-    var imagePropertyChangedListener: (() -> Unit)? = null
+class WebtoonConfig(preferences: PreferencesHelper = Injekt.get()) : ViewerConfig() {
 
     var tappingEnabled = true
         private set