Skip to content

Commit

Permalink
fix: fix #2
Browse files Browse the repository at this point in the history
  • Loading branch information
ilharp committed Feb 5, 2022
1 parent b9d3059 commit 7950012
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 6 deletions.
16 changes: 16 additions & 0 deletions app/src/main/java/cn/mfuns/webapp/MainActivity.kt
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
package cn.mfuns.webapp

import android.content.Intent
import android.os.Build
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.view.View
import android.widget.ImageView
import android.widget.Toast
import androidx.activity.result.ActivityResult
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
import androidx.preference.PreferenceManager
import cn.mfuns.webapp.util.AndroidUtil.Companion.setFullscreen
Expand All @@ -18,6 +22,18 @@ class MainActivity : AppCompatActivity() {
private var isInitialized = false
private lateinit var webViewContainer: MfunsWebViewContainer

// region File Chooser

private var fileChooserLauncher: ActivityResultLauncher<Intent> =
registerForActivityResult(
ActivityResultContracts.StartActivityForResult()
) { fileChooserCompleted?.invoke(it) }
var fileChooserCompleted: ((ActivityResult) -> Unit)? = null

fun chooseFile(intent: Intent) = fileChooserLauncher.launch(intent)

// endregion

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,53 @@
package cn.mfuns.webapp.webview

import android.net.Uri
import android.util.Log
import cn.mfuns.webapp.MainActivity
import com.tencent.smtt.export.external.interfaces.ConsoleMessage
import com.tencent.smtt.sdk.MimeTypeMap
import com.tencent.smtt.sdk.ValueCallback
import com.tencent.smtt.sdk.WebChromeClient
import com.tencent.smtt.sdk.WebView

class MfunsWebChromeClient : WebChromeClient() {
class MfunsWebChromeClient(private val activity: MainActivity) : WebChromeClient() {
override fun onConsoleMessage(message: ConsoleMessage): Boolean {
Log.d("mfwebv", message.message())
return true
}

override fun onShowFileChooser(
webView: WebView,
callback: ValueCallback<Array<Uri>>,
params: FileChooserParams
): Boolean {
val intent = params.createIntent()
extractValidMimeTypes(params.acceptTypes).apply {
if (isEmpty()) intent.type = "*/*"
else intent.type = joinToString(" ")
}
activity.fileChooserCompleted = {
callback.onReceiveValue(FileChooserParams.parseResult(it.resultCode, it.data))
}
activity.chooseFile(intent)
return true
}

private fun extractValidMimeTypes(mimeTypes: Array<String>): List<String> {
val results = ArrayList<String>()
val mimes =
if (mimeTypes.size == 1 && mimeTypes[0].contains(","))
mimeTypes[0].split(",").toTypedArray()
else mimeTypes
val typeMap = MimeTypeMap.getSingleton()
for (mime in mimes) {
if (mime.trim { it <= ' ' }.startsWith(".")) {
val dMime = typeMap.getMimeTypeFromExtension(
mime.trim { it <= ' ' }.substring(1, mime.trim { it <= ' ' }.length)
)
if (!results.contains(dMime)) results.add(dMime)
} else if (typeMap.getExtensionFromMimeType(mime) != null && !results.contains(mime))
results.add(mime)
}
return results
}
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
package cn.mfuns.webapp.webview

import android.app.Activity
import android.content.Intent
import android.net.Uri
import android.widget.Toast
import androidx.preference.PreferenceManager
import cn.mfuns.webapp.MainActivity
import cn.mfuns.webapp.PhotoViewActivity
import cn.mfuns.webapp.R
import cn.mfuns.webapp.util.Viewer
import com.tencent.smtt.sdk.WebView
import com.tencent.smtt.sdk.WebViewClient
import java.net.URL

class MfunsWebViewClient(private val activity: Activity) : WebViewClient() {
class MfunsWebViewClient(private val activity: MainActivity) : WebViewClient() {
override fun shouldOverrideUrlLoading(v: WebView?, url: String): Boolean {
try {
// Intercept mqqopensdkapi/mqqwpa
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package cn.mfuns.webapp.webview

import android.annotation.SuppressLint
import android.app.Activity
import android.os.Process
import android.view.KeyEvent
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AlertDialog
import androidx.preference.PreferenceManager
import cn.mfuns.webapp.MainActivity
import cn.mfuns.webapp.R
import com.tencent.smtt.export.external.TbsCoreSettings
import com.tencent.smtt.sdk.CookieManager
Expand All @@ -16,7 +16,7 @@ import com.tencent.smtt.sdk.WebSettings
import com.tencent.smtt.sdk.WebView
import com.tencent.smtt.sdk.WebViewClient

class MfunsWebViewContainer(private val activity: Activity) {
class MfunsWebViewContainer(private val activity: MainActivity) {
private var webView: WebView? = null

@SuppressLint("SetJavaScriptEnabled")
Expand Down Expand Up @@ -95,7 +95,7 @@ class MfunsWebViewContainer(private val activity: Activity) {
}
}

webChromeClient = MfunsWebChromeClient()
webChromeClient = MfunsWebChromeClient(activity)

loadUrl(activity.getString(R.string.app_url))
}
Expand Down

0 comments on commit 7950012

Please sign in to comment.