aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/kotlin/com/pitchedapps/frost/activities
diff options
context:
space:
mode:
authorAllan Wang <me@allanwang.ca>2021-11-22 23:21:34 -0800
committerAllan Wang <me@allanwang.ca>2021-11-22 23:21:34 -0800
commitdcd0db9282d92beacd35b3418d924ff3c607dead (patch)
tree4d11f3e2c8002bf19f871935b9816383b97e5106 /app/src/main/kotlin/com/pitchedapps/frost/activities
parentbbfac885b89a79af2c85f5f0df7635770b49a07a (diff)
downloadfrost-dcd0db9282d92beacd35b3418d924ff3c607dead.tar.gz
frost-dcd0db9282d92beacd35b3418d924ff3c607dead.tar.bz2
frost-dcd0db9282d92beacd35b3418d924ff3c607dead.zip
Convert header channel to flow
Diffstat (limited to 'app/src/main/kotlin/com/pitchedapps/frost/activities')
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/activities/MainActivity.kt39
1 files changed, 28 insertions, 11 deletions
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/activities/MainActivity.kt b/app/src/main/kotlin/com/pitchedapps/frost/activities/MainActivity.kt
index 755064cd..4b18088c 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/activities/MainActivity.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/activities/MainActivity.kt
@@ -18,23 +18,33 @@ package com.pitchedapps.frost.activities
import android.os.Bundle
import androidx.viewpager.widget.ViewPager
-import ca.allanwang.kau.utils.withMainContext
import com.google.android.material.tabs.TabLayout
import com.pitchedapps.frost.facebook.FbItem
import com.pitchedapps.frost.facebook.parsers.BadgeParser
-import com.pitchedapps.frost.kotlin.subscribeDuringJob
import com.pitchedapps.frost.utils.L
import com.pitchedapps.frost.views.BadgedIcon
+import com.pitchedapps.frost.web.FrostEmitter
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.channels.BroadcastChannel
-import kotlinx.coroutines.channels.Channel
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.SharedFlow
+import kotlinx.coroutines.flow.asSharedFlow
+import kotlinx.coroutines.flow.distinctUntilChanged
+import kotlinx.coroutines.flow.filter
+import kotlinx.coroutines.flow.flowOn
+import kotlinx.coroutines.flow.launchIn
+import kotlinx.coroutines.flow.mapNotNull
+import kotlinx.coroutines.flow.onEach
@UseExperimental(ExperimentalCoroutinesApi::class)
class MainActivity : BaseMainActivity() {
override val fragmentChannel = BroadcastChannel<Int>(10)
- override val headerBadgeChannel = BroadcastChannel<String>(Channel.CONFLATED)
+
+ private val headerMutableFlow = MutableStateFlow("")
+ override val headerFlow: SharedFlow<String> = headerMutableFlow.asSharedFlow()
+ override val headerEmit: FrostEmitter<String> = FrostEmitter { headerMutableFlow.tryEmit(it) }
override fun onNestedCreate(savedInstanceState: Bundle?) {
with(contentBinding) {
@@ -90,12 +100,18 @@ class MainActivity : BaseMainActivity() {
(tab.customView as BadgedIcon).badgeText = null
}
})
- headerBadgeChannel.subscribeDuringJob(this@MainActivity, Dispatchers.IO) { html ->
- val data =
- BadgeParser.parseFromData(cookie = fbCookie.webCookie, text = html)?.data
- ?: return@subscribeDuringJob
- L.v { "Badges $data" }
- withMainContext {
+ headerFlow
+ .filter { it.isNotBlank() }
+ .mapNotNull { html ->
+ BadgeParser.parseFromData(
+ cookie = fbCookie.webCookie,
+ text = html
+ )?.data
+ }
+ .distinctUntilChanged()
+ .flowOn(Dispatchers.IO)
+ .onEach { data ->
+ L.v { "Badges $data" }
tabsForEachView { _, view ->
when (view.iicon) {
FbItem.FEED.icon -> view.badgeText = data.feed
@@ -105,6 +121,7 @@ class MainActivity : BaseMainActivity() {
}
}
}
- }
+ .flowOn(Dispatchers.Main)
+ .launchIn(this@MainActivity)
}
}