Skip to content

Commit 9e56f5c

Browse files
committed
perf: check chromeVersion tip
1 parent 27d94c0 commit 9e56f5c

File tree

1 file changed

+33
-2
lines changed

1 file changed

+33
-2
lines changed

app/src/main/kotlin/li/songe/gkd/ui/WebViewPage.kt

+33-2
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,19 @@ import androidx.compose.foundation.layout.wrapContentSize
1414
import androidx.compose.material.icons.Icons
1515
import androidx.compose.material.icons.automirrored.filled.ArrowBack
1616
import androidx.compose.material.icons.filled.MoreVert
17+
import androidx.compose.material.icons.filled.WarningAmber
1718
import androidx.compose.material3.CircularProgressIndicator
1819
import androidx.compose.material3.DropdownMenu
1920
import androidx.compose.material3.DropdownMenuItem
2021
import androidx.compose.material3.Icon
2122
import androidx.compose.material3.IconButton
2223
import androidx.compose.material3.LocalTextStyle
24+
import androidx.compose.material3.MaterialTheme
2325
import androidx.compose.material3.Scaffold
2426
import androidx.compose.material3.Text
2527
import androidx.compose.material3.TopAppBar
2628
import androidx.compose.runtime.Composable
29+
import androidx.compose.runtime.LaunchedEffect
2730
import androidx.compose.runtime.getValue
2831
import androidx.compose.runtime.mutableStateOf
2932
import androidx.compose.runtime.remember
@@ -46,6 +49,8 @@ import kotlinx.coroutines.runBlocking
4649
import kotlinx.serialization.Serializable
4750
import li.songe.gkd.META
4851
import li.songe.gkd.data.Value
52+
import li.songe.gkd.ui.component.updateDialogOptions
53+
import li.songe.gkd.util.LocalMainViewModel
4954
import li.songe.gkd.util.LocalNavController
5055
import li.songe.gkd.util.ProfileTransitions
5156
import li.songe.gkd.util.client
@@ -59,10 +64,14 @@ import li.songe.gkd.util.throttle
5964
fun WebViewPage(
6065
initUrl: String,
6166
) {
67+
val mainVm = LocalMainViewModel.current
6268
val navController = LocalNavController.current
6369
val webViewState = rememberWebViewState(url = initUrl)
6470
val webViewClient = remember { GkdWebViewClient() }
6571
val webView = remember { Value<WebView?>(null) }
72+
LaunchedEffect(null) {
73+
WebView.getCurrentWebViewPackage()?.versionName?.run { splitToSequence('.').first() }
74+
}
6675
Scaffold(modifier = Modifier, topBar = {
6776
Box(
6877
modifier = Modifier.fillMaxWidth(),
@@ -99,6 +108,20 @@ fun WebViewPage(
99108
}
100109
},
101110
actions = {
111+
if (chromeVersion > 0 && chromeVersion < MINI_CHROME_VERSION) {
112+
IconButton(onClick = throttle {
113+
mainVm.dialogFlow.updateDialogOptions(
114+
title = "兼容性提示",
115+
text = "检测到您的系统内置浏览器版本($chromeVersion)过低, 可能无法正常浏览网页文档\n\n建议自行升级版本后重启 GKD 再查看文档, 或点击右上角后在外部浏览器打开查阅\n\n若能正常浏览文档请忽略此项提示"
116+
)
117+
}) {
118+
Icon(
119+
imageVector = Icons.Default.WarningAmber,
120+
contentDescription = null,
121+
tint = MaterialTheme.colorScheme.error,
122+
)
123+
}
124+
}
102125
var expanded by remember { mutableStateOf(false) }
103126
IconButton(onClick = { expanded = true }) {
104127
Icon(imageVector = Icons.Default.MoreVert, contentDescription = null)
@@ -128,7 +151,7 @@ fun WebViewPage(
128151
},
129152
onClick = {
130153
expanded = false
131-
webView.value?.url?.let { copyText(it) }
154+
copyText(webView.value?.url ?: initUrl)
132155
}
133156
)
134157
DropdownMenuItem(
@@ -137,7 +160,7 @@ fun WebViewPage(
137160
},
138161
onClick = {
139162
expanded = false
140-
webView.value?.url?.let { openUri(it) }
163+
openUri(webView.value?.url ?: initUrl)
141164
}
142165
)
143166
}
@@ -164,6 +187,14 @@ fun WebViewPage(
164187
}
165188
}
166189

190+
// 兼容性检测为最近 3 年, 2022-03-29
191+
private const val MINI_CHROME_VERSION = 100
192+
private val chromeVersion by lazy {
193+
WebView.getCurrentWebViewPackage()?.versionName?.run {
194+
splitToSequence('.').first().toIntOrNull()
195+
} ?: 0
196+
}
197+
167198
private const val DOC_CONFIG_URL =
168199
"https://registry.npmmirror.com/@gkd-kit/docs/latest/files/_config.json"
169200

0 commit comments

Comments
 (0)