From 5f3bf05518803cd5cb7d4bee8c85e38bcfdf7042 Mon Sep 17 00:00:00 2001 From: Lea Lobanov Date: Tue, 18 Mar 2025 17:09:48 +0300 Subject: [PATCH 1/6] Debug crash in WebView dropdown --- .../page/browser/widgets/LilicoWebView.kt | 79 ++++++++++++++++++- app/src/main/res/layout/activity_webview.xml | 3 +- .../main/res/layout/webview_dropdown_item.xml | 13 +++ app/src/main/res/values/webview_styles.xml | 20 +++++ 4 files changed, 113 insertions(+), 2 deletions(-) create mode 100644 app/src/main/res/layout/webview_dropdown_item.xml create mode 100644 app/src/main/res/values/webview_styles.xml diff --git a/app/src/main/java/com/flowfoundation/wallet/page/browser/widgets/LilicoWebView.kt b/app/src/main/java/com/flowfoundation/wallet/page/browser/widgets/LilicoWebView.kt index a9f2e7cba..dbdd459eb 100644 --- a/app/src/main/java/com/flowfoundation/wallet/page/browser/widgets/LilicoWebView.kt +++ b/app/src/main/java/com/flowfoundation/wallet/page/browser/widgets/LilicoWebView.kt @@ -12,6 +12,7 @@ import android.webkit.WebResourceRequest import android.webkit.WebView import androidx.annotation.ColorInt import com.flowfoundation.wallet.BuildConfig +import com.flowfoundation.wallet.R import com.flowfoundation.wallet.manager.evm.loadInitJS import com.flowfoundation.wallet.manager.evm.loadProviderJS import com.flowfoundation.wallet.manager.walletconnect.WalletConnect @@ -48,9 +49,22 @@ class LilicoWebView : WebView { webChromeClient = WebChromeClient() domStorageEnabled = true javaScriptCanOpenWindowsAutomatically = true + setSupportMultipleWindows(true) + setDefaultTextEncodingName("utf-8") + setNeedInitialFocus(true) + builtInZoomControls = false + displayZoomControls = false + allowFileAccess = true + allowContentAccess = true + loadWithOverviewMode = true + useWideViewPort = true + layoutAlgorithm = android.webkit.WebSettings.LayoutAlgorithm.NORMAL } setWebContentsDebuggingEnabled(BuildConfig.DEBUG) + // Apply WebView styles + context.theme.applyStyle(R.style.WebViewStyle, true) + addJavascriptInterface(JsInterface(this), "android") addJavascriptInterface(EvmInterface(this), "_tw_") setOnScrollChangeListener { _, scrollX, scrollY, _, oldScrollY -> @@ -84,6 +98,32 @@ class LilicoWebView : WebView { if (newProgress == 100) { logd(TAG, "load finish") view.executeJs(JS_QUERY_WINDOW_COLOR) + // Inject CSS to style select elements + val css = """ + select { + background-color: white; + border: 1px solid #ccc; + border-radius: 4px; + padding: 8px; + font-size: 16px; + color: black; + } + select option { + padding: 8px; + font-size: 16px; + background-color: white; + color: black; + } + """.trimIndent() + view.evaluateJavascript( + "(function() { " + + " var style = document.createElement('style'); " + + " style.type = 'text/css'; " + + " style.innerHTML = '${css}'; " + + " document.head.appendChild(style); " + + "})();", + null + ) } } @@ -100,6 +140,43 @@ class LilicoWebView : WebView { uiScope { showWebviewFilePicker(context, filePathCallback, fileChooserParams) } return true } + + @SuppressLint("SetJavaScriptEnabled") + override fun onCreateWindow( + view: WebView?, + isDialog: Boolean, + isUserGesture: Boolean, + resultMsg: android.os.Message? + ): Boolean { + val newWebView = WebView(context) + with(newWebView.settings) { + javaScriptEnabled = true + javaScriptCanOpenWindowsAutomatically = true + domStorageEnabled = true + setSupportMultipleWindows(true) + } + + val transport = resultMsg?.obj as? android.webkit.WebView.WebViewTransport + transport?.webView = newWebView + resultMsg?.sendToTarget() + + newWebView.webViewClient = object : android.webkit.WebViewClient() { + override fun shouldOverrideUrlLoading( + view: WebView?, + request: WebResourceRequest? + ): Boolean { + request?.url?.let { uri -> + try { + context.startActivity(Intent(Intent.ACTION_VIEW, uri)) + } catch (e: Exception) { + e.printStackTrace() + } + } + return true + } + } + return true + } } private inner class WebViewClient : android.webkit.WebViewClient() { @@ -169,7 +246,7 @@ class LilicoWebView : WebView { } interface WebviewCallback { - fun onScrollChange(scrollY: Int, offset: Int) + fun onScrollChange(scrollX: Int, scrollY: Int) fun onProgressChange(progress: Float) fun onTitleChange(title: String) fun onPageUrlChange(url: String, isReload: Boolean) diff --git a/app/src/main/res/layout/activity_webview.xml b/app/src/main/res/layout/activity_webview.xml index f4c09c666..731ff5edb 100644 --- a/app/src/main/res/layout/activity_webview.xml +++ b/app/src/main/res/layout/activity_webview.xml @@ -6,5 +6,6 @@ + android:layout_height="match_parent" + android:theme="@style/WebViewStyle"/> \ No newline at end of file diff --git a/app/src/main/res/layout/webview_dropdown_item.xml b/app/src/main/res/layout/webview_dropdown_item.xml new file mode 100644 index 000000000..6b3efc210 --- /dev/null +++ b/app/src/main/res/layout/webview_dropdown_item.xml @@ -0,0 +1,13 @@ + + \ No newline at end of file diff --git a/app/src/main/res/values/webview_styles.xml b/app/src/main/res/values/webview_styles.xml new file mode 100644 index 000000000..f668034ef --- /dev/null +++ b/app/src/main/res/values/webview_styles.xml @@ -0,0 +1,20 @@ + + + + + + + + \ No newline at end of file From b339d93cd4762d0d0e9bbb6e2e537a667b72af70 Mon Sep 17 00:00:00 2001 From: Lea Lobanov Date: Mon, 19 May 2025 16:27:45 +0900 Subject: [PATCH 2/6] Bump CrowdIn to latest --- app/build.gradle | 2 +- .../java/com/flowfoundation/wallet/FlowWalletApplication.kt | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 0adfa7a9b..89425e867 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -347,7 +347,7 @@ dependencies { implementation 'com.dropbox.core:dropbox-android-sdk:7.0.0' /** Crowdin **/ - implementation ('com.github.crowdin.mobile-sdk-android:sdk:1.9.2') { + implementation ('com.github.crowdin.mobile-sdk-android:sdk:1.10.0') { exclude group: 'com.google.code.gson', module: 'gson' } diff --git a/app/src/main/java/com/flowfoundation/wallet/FlowWalletApplication.kt b/app/src/main/java/com/flowfoundation/wallet/FlowWalletApplication.kt index 2f064e9f2..a29adeaca 100644 --- a/app/src/main/java/com/flowfoundation/wallet/FlowWalletApplication.kt +++ b/app/src/main/java/com/flowfoundation/wallet/FlowWalletApplication.kt @@ -1,6 +1,7 @@ package com.flowfoundation.wallet import android.app.Application +import com.flowfoundation.wallet.crowdin.crowdinInitialize import com.flowfoundation.wallet.manager.LaunchManager import com.flowfoundation.wallet.utils.Env @@ -9,6 +10,7 @@ class FlowWalletApplication : Application() { override fun onCreate() { super.onCreate() Env.init(this) + crowdinInitialize(this) LaunchManager.init(this) } } From 88515560c9c0b8a1411715a4c6d1af42e8603ebe Mon Sep 17 00:00:00 2001 From: Lea Lobanov Date: Mon, 19 May 2025 17:22:40 +0900 Subject: [PATCH 3/6] Bump CrowdIn to latest --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 89425e867..f367caf1e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -347,7 +347,7 @@ dependencies { implementation 'com.dropbox.core:dropbox-android-sdk:7.0.0' /** Crowdin **/ - implementation ('com.github.crowdin.mobile-sdk-android:sdk:1.10.0') { + implementation ('com.github.crowdin.mobile-sdk-android:sdk:1.13.1') { exclude group: 'com.google.code.gson', module: 'gson' } From f0ef454843ca64e46168e9064c57851547a9b78f Mon Sep 17 00:00:00 2001 From: Lea Lobanov Date: Mon, 19 May 2025 17:31:07 +0900 Subject: [PATCH 4/6] Bump CrowdIn to latest --- .../wallet/crowdin/CrowdinUtils.kt | 1 + app/src/main/res/layout/activity_webview.xml | 3 +-- .../main/res/layout/webview_dropdown_item.xml | 13 ------------ app/src/main/res/values/webview_styles.xml | 20 ------------------- 4 files changed, 2 insertions(+), 35 deletions(-) delete mode 100644 app/src/main/res/layout/webview_dropdown_item.xml delete mode 100644 app/src/main/res/values/webview_styles.xml diff --git a/app/src/main/java/com/flowfoundation/wallet/crowdin/CrowdinUtils.kt b/app/src/main/java/com/flowfoundation/wallet/crowdin/CrowdinUtils.kt index b9f2bf5e4..8f27a9310 100644 --- a/app/src/main/java/com/flowfoundation/wallet/crowdin/CrowdinUtils.kt +++ b/app/src/main/java/com/flowfoundation/wallet/crowdin/CrowdinUtils.kt @@ -12,5 +12,6 @@ fun crowdinInitialize(application: Application) { CrowdinConfig.Builder() .withDistributionHash(BuildConfig.CROWDIN_DISTRIBUTION) .withNetworkType(NetworkType.ALL) + .withFrameworkResourcesEnabled(false) .build()) } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_webview.xml b/app/src/main/res/layout/activity_webview.xml index 731ff5edb..f4c09c666 100644 --- a/app/src/main/res/layout/activity_webview.xml +++ b/app/src/main/res/layout/activity_webview.xml @@ -6,6 +6,5 @@ + android:layout_height="match_parent"/> \ No newline at end of file diff --git a/app/src/main/res/layout/webview_dropdown_item.xml b/app/src/main/res/layout/webview_dropdown_item.xml deleted file mode 100644 index 6b3efc210..000000000 --- a/app/src/main/res/layout/webview_dropdown_item.xml +++ /dev/null @@ -1,13 +0,0 @@ - - \ No newline at end of file diff --git a/app/src/main/res/values/webview_styles.xml b/app/src/main/res/values/webview_styles.xml deleted file mode 100644 index f668034ef..000000000 --- a/app/src/main/res/values/webview_styles.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - \ No newline at end of file From b3862f44ee684a9df108d325eba47d86690c6f97 Mon Sep 17 00:00:00 2001 From: Lea Lobanov Date: Mon, 19 May 2025 17:33:43 +0900 Subject: [PATCH 5/6] Bump CrowdIn to latest --- .../java/com/flowfoundation/wallet/crowdin/CrowdinUtils.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/src/main/java/com/flowfoundation/wallet/crowdin/CrowdinUtils.kt b/app/src/main/java/com/flowfoundation/wallet/crowdin/CrowdinUtils.kt index 8f27a9310..08315b395 100644 --- a/app/src/main/java/com/flowfoundation/wallet/crowdin/CrowdinUtils.kt +++ b/app/src/main/java/com/flowfoundation/wallet/crowdin/CrowdinUtils.kt @@ -6,12 +6,11 @@ import com.crowdin.platform.CrowdinConfig import com.crowdin.platform.data.remote.NetworkType import com.flowfoundation.wallet.BuildConfig - fun crowdinInitialize(application: Application) { Crowdin.init(application, CrowdinConfig.Builder() .withDistributionHash(BuildConfig.CROWDIN_DISTRIBUTION) .withNetworkType(NetworkType.ALL) - .withFrameworkResourcesEnabled(false) + .withInitSyncDisabled() // Disable initial sync to prevent framework resource issues .build()) } \ No newline at end of file From 24048f2b8d02b2612b484af3f1d37021a9d58bbd Mon Sep 17 00:00:00 2001 From: Lea Lobanov Date: Mon, 19 May 2025 17:41:15 +0900 Subject: [PATCH 6/6] Bump CrowdIn to latest --- .../java/com/flowfoundation/wallet/crowdin/CrowdinUtils.kt | 1 - .../wallet/page/browser/widgets/LilicoWebView.kt | 7 ++++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/flowfoundation/wallet/crowdin/CrowdinUtils.kt b/app/src/main/java/com/flowfoundation/wallet/crowdin/CrowdinUtils.kt index 08315b395..d6edaa89e 100644 --- a/app/src/main/java/com/flowfoundation/wallet/crowdin/CrowdinUtils.kt +++ b/app/src/main/java/com/flowfoundation/wallet/crowdin/CrowdinUtils.kt @@ -11,6 +11,5 @@ fun crowdinInitialize(application: Application) { CrowdinConfig.Builder() .withDistributionHash(BuildConfig.CROWDIN_DISTRIBUTION) .withNetworkType(NetworkType.ALL) - .withInitSyncDisabled() // Disable initial sync to prevent framework resource issues .build()) } \ No newline at end of file diff --git a/app/src/main/java/com/flowfoundation/wallet/page/browser/widgets/LilicoWebView.kt b/app/src/main/java/com/flowfoundation/wallet/page/browser/widgets/LilicoWebView.kt index f7b38c043..98b673f05 100644 --- a/app/src/main/java/com/flowfoundation/wallet/page/browser/widgets/LilicoWebView.kt +++ b/app/src/main/java/com/flowfoundation/wallet/page/browser/widgets/LilicoWebView.kt @@ -22,6 +22,7 @@ import android.widget.FrameLayout import android.widget.TextView import android.widget.Toast import androidx.annotation.ColorInt +import com.crowdin.platform.Crowdin import com.flowfoundation.wallet.BuildConfig import com.flowfoundation.wallet.R import com.flowfoundation.wallet.manager.blocklist.BlockManager @@ -55,16 +56,16 @@ class LilicoWebView : WebView { private var blockedUrl: String? = null - constructor(context: Context) : super(context) { + constructor(context: Context) : super(Crowdin.wrapContext(context)) { initWebView() } - constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) { + constructor(context: Context, attrs: AttributeSet?) : super(Crowdin.wrapContext(context), attrs) { initWebView() } constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super( - context, + Crowdin.wrapContext(context), attrs, defStyleAttr ) {