aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAllan Wang <me@allanwang.ca>2021-11-22 22:57:55 -0800
committerAllan Wang <me@allanwang.ca>2021-11-22 22:57:55 -0800
commitbbfac885b89a79af2c85f5f0df7635770b49a07a (patch)
treed806571943a490bb7b88224a3d246933c1516e90
parent779ec08188f4bda736b3e0f2940570f1f7eb49e1 (diff)
downloadfrost-bbfac885b89a79af2c85f5f0df7635770b49a07a.tar.gz
frost-bbfac885b89a79af2c85f5f0df7635770b49a07a.tar.bz2
frost-bbfac885b89a79af2c85f5f0df7635770b49a07a.zip
Convert title channel to flow
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/activities/WebOverlayActivity.kt8
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/contracts/FrostContentContract.kt6
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/views/FrostContentView.kt8
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/web/FrostChromeClients.kt5
4 files changed, 14 insertions, 13 deletions
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/activities/WebOverlayActivity.kt b/app/src/main/kotlin/com/pitchedapps/frost/activities/WebOverlayActivity.kt
index 171583ed..ae8d442f 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/activities/WebOverlayActivity.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/activities/WebOverlayActivity.kt
@@ -27,7 +27,6 @@ import androidx.coordinatorlayout.widget.CoordinatorLayout
import ca.allanwang.kau.swipe.SwipeBackContract
import ca.allanwang.kau.swipe.kauSwipeOnCreate
import ca.allanwang.kau.swipe.kauSwipeOnDestroy
-import ca.allanwang.kau.utils.ContextHelper
import ca.allanwang.kau.utils.bindView
import ca.allanwang.kau.utils.copyToClipboard
import ca.allanwang.kau.utils.darken
@@ -56,7 +55,6 @@ import com.pitchedapps.frost.facebook.USER_AGENT
import com.pitchedapps.frost.facebook.USER_AGENT_DESKTOP_CONST
import com.pitchedapps.frost.facebook.USER_AGENT_MOBILE_CONST
import com.pitchedapps.frost.facebook.formattedFbUrl
-import com.pitchedapps.frost.kotlin.subscribeDuringJob
import com.pitchedapps.frost.utils.ARG_URL
import com.pitchedapps.frost.utils.ARG_USER_ID
import com.pitchedapps.frost.utils.BiometricUtils
@@ -69,6 +67,8 @@ import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.collect
+import kotlinx.coroutines.flow.launchIn
+import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.take
import kotlinx.coroutines.launch
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
@@ -215,9 +215,7 @@ abstract class WebOverlayActivityBase(private val userAgent: String = USER_AGENT
content.bind(this)
- content.titleChannel.subscribeDuringJob(this, ContextHelper.coroutineContext) {
- toolbar.title = it
- }
+ content.titleFlow.onEach { toolbar.title = it }.launchIn(this)
with(web) {
userAgentString = userAgent
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/contracts/FrostContentContract.kt b/app/src/main/kotlin/com/pitchedapps/frost/contracts/FrostContentContract.kt
index 8ebf7af7..d32cb873 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/contracts/FrostContentContract.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/contracts/FrostContentContract.kt
@@ -21,7 +21,6 @@ import com.pitchedapps.frost.facebook.FbItem
import com.pitchedapps.frost.web.FrostEmitter
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi
-import kotlinx.coroutines.channels.BroadcastChannel
import kotlinx.coroutines.flow.SharedFlow
/**
@@ -72,8 +71,9 @@ interface FrostContentParent : DynamicUiContract {
/**
* Observable to get new title data (unique values only)
*/
- // todo note that this should be like a behavior subject vs publish subject
- val titleChannel: BroadcastChannel<String>
+ val titleFlow: SharedFlow<String>
+
+ val titleEmit: FrostEmitter<String>
var baseUrl: String
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/views/FrostContentView.kt b/app/src/main/kotlin/com/pitchedapps/frost/views/FrostContentView.kt
index 3ec80f36..b76f6e39 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/views/FrostContentView.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/views/FrostContentView.kt
@@ -80,7 +80,6 @@ class FrostContentRecycler @JvmOverloads constructor(
override val layoutRes: Int = R.layout.view_content_base_recycler
}
-@UseExperimental(ExperimentalCoroutinesApi::class)
abstract class FrostContentView<out T> @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
@@ -152,7 +151,12 @@ abstract class FrostContentViewBase(
override val progressEmit: FrostEmitter<Int> =
FrostEmitter { progressMutableFlow.tryEmit(it) }
- override val titleChannel: BroadcastChannel<String> = ConflatedBroadcastChannel()
+ private val titleMutableFlow = MutableStateFlow("")
+
+ override val titleFlow: SharedFlow<String> = titleMutableFlow.asSharedFlow()
+
+ override val titleEmit: FrostEmitter<String> =
+ FrostEmitter { titleMutableFlow.tryEmit(it) }
override lateinit var scope: CoroutineScope
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/web/FrostChromeClients.kt b/app/src/main/kotlin/com/pitchedapps/frost/web/FrostChromeClients.kt
index 9f2437b0..90345aa2 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/web/FrostChromeClients.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/web/FrostChromeClients.kt
@@ -34,7 +34,6 @@ import com.pitchedapps.frost.contracts.WebFileChooser
import com.pitchedapps.frost.injectors.ThemeProvider
import com.pitchedapps.frost.utils.L
import com.pitchedapps.frost.views.FrostWebView
-import kotlinx.coroutines.channels.SendChannel
/**
* Created by Allan Wang on 2017-05-31.
@@ -54,7 +53,7 @@ class FrostChromeClient(
// private val refresh: SendChannel<Boolean> = web.parent.refreshChannel
private val refreshEmit = web.parent.refreshEmit
private val progressEmit = web.parent.progressEmit
- private val title: SendChannel<String> = web.parent.titleChannel
+ private val titleEmit = web.parent.titleEmit
private val context = web.context!!
override fun getDefaultVideoPoster(): Bitmap? =
@@ -69,7 +68,7 @@ class FrostChromeClient(
override fun onReceivedTitle(view: WebView, title: String) {
super.onReceivedTitle(view, title)
if (title.startsWith("http")) return
- this.title.offer(title)
+ titleEmit(title)
}
override fun onProgressChanged(view: WebView, newProgress: Int) {