11package com.criptext.mail.scenes
22
3+ import android.Manifest
34import android.annotation.TargetApi
5+ import android.app.Activity
6+ import android.content.ActivityNotFoundException
47import android.content.Intent
58import android.content.pm.PackageManager
6- import android.content.pm.ResolveInfo
79import android.net.Uri
810import android.os.Build
911import android.os.Bundle
1012import android.view.Menu
1113import android.view.MenuItem
12- import android.view.View
13- import android.webkit.WebChromeClient
14- import android.webkit.WebResourceRequest
15- import android.webkit.WebView
16- import android.webkit.WebViewClient
14+ import android.webkit.*
1715import android.widget.Toast
1816import androidx.appcompat.app.AppCompatActivity
17+ import androidx.core.app.ActivityCompat
18+ import com.criptext.mail.BaseActivity
1919import com.criptext.mail.R
2020import com.criptext.mail.utils.DownloadHelper
2121import com.criptext.mail.utils.UIMessage
2222import com.criptext.mail.utils.WebViewUtils
23+ import com.criptext.mail.utils.compat.PermissionUtilsCompat
2324import com.criptext.mail.utils.file.DownloadBlobInterface
2425import com.criptext.mail.utils.getLocalizedUIMessage
26+ import droidninja.filepicker.FilePickerConst
27+
2528
2629class WebViewActivity : AppCompatActivity () {
2730 val userAgent = " Mozilla/5.0 (Linux; Android 4.4.4; Nexus 5 Build/LMY48B) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/43.0.2357.65 Mobile Safari/537.36"
2831
2932 val webViewCriptext: WebView by lazy { findViewById<WebView >(R .id.webViewCriptext) }
3033 var mUrl: String? = null
3134 var browserName: String? = null
35+ private var mUploadMessage: ValueCallback <Array <Uri >>? = null
3236
3337 private val client = object : WebViewClient () {
3438 override fun shouldOverrideUrlLoading (view : WebView , url : String ): Boolean {
@@ -50,6 +54,33 @@ class WebViewActivity : AppCompatActivity() {
5054 }
5155 }
5256
57+ private val chromeClient = object : WebChromeClient () {
58+ override fun onShowFileChooser (webView : WebView ? , filePathCallback : ValueCallback <Array <Uri >>? , fileChooserParams : FileChooserParams ? ): Boolean {
59+ // make sure there is no existing message
60+ if (mUploadMessage != null ) {
61+ mUploadMessage!! .onReceiveValue(null )
62+ mUploadMessage = null
63+ }
64+
65+ mUploadMessage = filePathCallback
66+
67+ val intent = Intent (Intent .ACTION_OPEN_DOCUMENT ).apply {
68+ addCategory(Intent .CATEGORY_OPENABLE )
69+ putExtra(Intent .EXTRA_ALLOW_MULTIPLE , false )
70+ type = " image/*"
71+ }
72+ try {
73+ this @WebViewActivity.startActivityForResult(intent, FilePickerConst .REQUEST_CODE_PHOTO )
74+ } catch (e: ActivityNotFoundException ) {
75+ mUploadMessage = null
76+ Toast .makeText(this @WebViewActivity, " Cannot open file chooser" , Toast .LENGTH_LONG ).show()
77+ return false
78+ }
79+
80+ return true
81+ }
82+ }
83+
5384 private val downloadListener = { url: String , _: String , contentDisposition: String ,
5485 _: String , _: Long ->
5586
@@ -87,7 +118,7 @@ class WebViewActivity : AppCompatActivity() {
87118 }
88119
89120 private fun setupWebView () {
90- webViewCriptext.webChromeClient = WebChromeClient ()
121+ webViewCriptext.webChromeClient = chromeClient
91122 webViewCriptext.settings.javaScriptEnabled = true
92123 webViewCriptext.settings.userAgentString = userAgent
93124 webViewCriptext.webViewClient = client
@@ -180,4 +211,12 @@ class WebViewActivity : AppCompatActivity() {
180211 overridePendingTransition(R .anim.stay, R .anim.slide_out_down)
181212 }
182213
214+ override fun onActivityResult (requestCode : Int , resultCode : Int ,
215+ intent : Intent ? ) {
216+ if (requestCode == FilePickerConst .REQUEST_CODE_PHOTO ) {
217+ if (mUploadMessage == null ) return
218+ mUploadMessage!! .onReceiveValue(WebChromeClient .FileChooserParams .parseResult(resultCode, intent))
219+ mUploadMessage = null
220+ }
221+ }
183222}
0 commit comments