diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e9392e59..50a36b20 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -170,6 +170,17 @@
+
+
+
+
+
+
+
+
+
@@ -269,42 +280,7 @@
android:windowSoftInputMode="adjustResize" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:exported="true" />
> { throw IllegalStateException("not allowed here!") }
@@ -194,12 +201,61 @@ class MainActivityV2 : BaseComposeActivity() {
)
}
- private var myNavCollector: NavHostController? = null
+ private var direction: Direction? = null
+ private var waitingNavCollectorToNavigate = AtomicBoolean(false)
+ private var myNavController: NavHostController? = null
+ set(value) {
+ field = value
+ if (value != null && waitingNavCollectorToNavigate.get() && direction != null) {
+ launch {
+ value.currentDestinationFlow
+ .take(1)
+ .collect {
+ if (waitingNavCollectorToNavigate.get() && direction != null) {
+ value.navigate(direction!!)
+ waitingNavCollectorToNavigate.set(false)
+ direction = null
+ }
+ }
+ }
+ }
+ }
+
+ private fun navigate(direction: Direction) {
+ if (myNavController == null) {
+ waitingNavCollectorToNavigate.set(true)
+ this.direction = direction
+ } else {
+ myNavController?.navigate(direction)
+ }
+ }
+
+ private fun checkIntent(intent: Intent): Boolean {
+ return if (intent.data?.scheme == "com.baidu.tieba" && intent.data?.host == "unidispatch") {
+ val uri = intent.data!!
+ when (uri.path.orEmpty().lowercase()) {
+ "/frs" -> {
+ val forumName = uri.getQueryParameter("kw") ?: return true
+ navigate(ForumPageDestination(forumName))
+ }
+
+ "/pb" -> {
+ val threadId = uri.getQueryParameter("tid")?.toLongOrNull() ?: return true
+ navigate(ThreadPageDestination(threadId))
+ }
+ }
+ true
+ } else {
+ false
+ }
+ }
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
intent?.let {
- myNavCollector?.handleDeepLink(it)
+ if (!checkIntent(it)) {
+ myNavController?.handleDeepLink(it)
+ }
}
}
@@ -265,6 +321,7 @@ class MainActivityV2 : BaseComposeActivity() {
launch {
ClientUtils.setActiveTimestamp()
}
+ intent?.let { checkIntent(it) }
}
override fun onCreateContent(systemUiController: SystemUiController) {
@@ -276,11 +333,11 @@ class MainActivityV2 : BaseComposeActivity() {
private fun openClipBoardLink(link: ClipBoardLink) {
when (link) {
is ClipBoardThreadLink -> {
- myNavCollector?.navigate(Uri.parse("tblite://thread/${link.threadId}"))
+ myNavController?.navigate(Uri.parse("tblite://thread/${link.threadId}"))
}
is ClipBoardForumLink -> {
- myNavCollector?.navigate(Uri.parse("tblite://forum/${link.forumName}"))
+ myNavController?.navigate(Uri.parse("tblite://forum/${link.forumName}"))
}
else -> {
@@ -409,9 +466,6 @@ class MainActivityV2 : BaseComposeActivity() {
TiebaLiteLocalProvider {
TranslucentThemeBackground {
val navController = rememberNavController()
- SideEffect {
- myNavCollector = navController
- }
val engine = TiebaNavHostDefaults.rememberNavHostEngine()
val navigator = TiebaNavHostDefaults.rememberBottomSheetNavigator()
val currentDestination by navController.currentDestinationAsState()
@@ -447,6 +501,10 @@ class MainActivityV2 : BaseComposeActivity() {
)
}
}
+
+ SideEffect {
+ myNavController = navController
+ }
}
}
}