add manual continue button for SSO login flow

This commit is contained in:
2026-08-31 17:20:24 +08:00
parent 53aed9e220
commit cb5573da73

View File

@@ -582,6 +582,7 @@ class MainActivity : Activity() {
setBackgroundColor(COLOR_BACKGROUND) setBackgroundColor(COLOR_BACKGROUND)
} }
// ── 顶部:取消按钮 ──
container.addView(Button(this).apply { container.addView(Button(this).apply {
text = "取消登录" text = "取消登录"
setOnClickListener { setOnClickListener {
@@ -592,19 +593,11 @@ class MainActivity : Activity() {
layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 44.dp) layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 44.dp)
}) })
// ── 中间:WebView ──
ssoWebView = WebView(this).apply { ssoWebView = WebView(this).apply {
settings.javaScriptEnabled = true settings.javaScriptEnabled = true
settings.domStorageEnabled = true settings.domStorageEnabled = true
webViewClient = object : WebViewClient() { webViewClient = object : WebViewClient() {
override fun onPageFinished(view: WebView?, url: String?) {
super.onPageFinished(view, url)
if (ssoPhase == 0 && url != null && !url.contains("/login")) {
// 用户已登录(离开了登录页),现在加载授权页
ssoPhase = 1
view?.post { view.loadUrl(authorizeUrl) }
}
}
override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean { override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
val url = request?.url ?: return false val url = request?.url ?: return false
if (ssoPhase >= 1 && url.toString().startsWith(SSO_REDIRECT_URI)) { if (ssoPhase >= 1 && url.toString().startsWith(SSO_REDIRECT_URI)) {
@@ -621,6 +614,18 @@ class MainActivity : Activity() {
container.addView(ssoWebView, LinearLayout.LayoutParams( container.addView(ssoWebView, LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, 0, 1f ViewGroup.LayoutParams.MATCH_PARENT, 0, 1f
)) ))
// ── 底部:登录完成后手动点继续 ──
container.addView(Button(this).apply {
text = "已登录,点击继续授权"
background = rounded(COLOR_ACCENT, 8f)
setTextColor(Color.WHITE)
setOnClickListener {
ssoPhase = 1
ssoWebView?.loadUrl(authorizeUrl)
}
layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 48.dp).withMargins(8.dp, 8.dp, 8.dp, 8.dp)
})
return container return container
} }