Skip to content

Commit 2d0147e

Browse files
authored
Merge pull request #554 from jorgeblacio/sign_in_form_fix
Now you can upload images in sign in form, also couple of fixes.
2 parents a076e45 + a6be3e6 commit 2d0147e

File tree

4 files changed

+52
-11
lines changed

4 files changed

+52
-11
lines changed

build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ android {
4747
defaultConfig {
4848
minSdkVersion 21
4949
targetSdkVersion 28
50-
versionCode 92
51-
versionName "0.21.15"
50+
versionCode 93
51+
versionName "0.21.16"
5252
applicationId "com.criptext.mail"
5353
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
5454
multiDexEnabled true

src/main/kotlin/com/criptext/mail/scenes/WebViewActivity.kt

Lines changed: 46 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,38 @@
11
package com.criptext.mail.scenes
22

3+
import android.Manifest
34
import android.annotation.TargetApi
5+
import android.app.Activity
6+
import android.content.ActivityNotFoundException
47
import android.content.Intent
58
import android.content.pm.PackageManager
6-
import android.content.pm.ResolveInfo
79
import android.net.Uri
810
import android.os.Build
911
import android.os.Bundle
1012
import android.view.Menu
1113
import 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.*
1715
import android.widget.Toast
1816
import androidx.appcompat.app.AppCompatActivity
17+
import androidx.core.app.ActivityCompat
18+
import com.criptext.mail.BaseActivity
1919
import com.criptext.mail.R
2020
import com.criptext.mail.utils.DownloadHelper
2121
import com.criptext.mail.utils.UIMessage
2222
import com.criptext.mail.utils.WebViewUtils
23+
import com.criptext.mail.utils.compat.PermissionUtilsCompat
2324
import com.criptext.mail.utils.file.DownloadBlobInterface
2425
import com.criptext.mail.utils.getLocalizedUIMessage
26+
import droidninja.filepicker.FilePickerConst
27+
2528

2629
class 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
}

src/main/kotlin/com/criptext/mail/scenes/mailbox/MailboxSceneController.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -938,6 +938,8 @@ class MailboxSceneController(private val scene: MailboxScene,
938938
WebSocketSingleton.getInstance(activeAccount.jwt)
939939

940940
websocketEvents.setListener(webSocketEventListener)
941+
generalDataSource.listener = null
942+
dataSource.listener = null
941943
host.exitToScene(MailboxParams(),
942944
ActivityMessage.ShowUIMessage(UIMessage(R.string.snack_bar_active_account, arrayOf(activeAccount.userEmail))),
943945
true, false)

src/main/kotlin/com/criptext/mail/validation/AccountDataValidator.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ object AccountDataValidator {
2222

2323
return when {
2424
sanitizedValue.length < 3 -> FormData.Error(UIMessage(R.string.username_length_error))
25-
!validCriptextUserPattern.matcher(sanitizedValue).matches() ||
26-
validEmailAddressPattern.matcher(sanitizedValue).matches() -> FormData.Error(UIMessage(R.string.username_invalid_error))
25+
!validCriptextUserPattern.matcher(sanitizedValue).matches() &&
26+
!validEmailAddressPattern.matcher(sanitizedValue).matches() -> FormData.Error(UIMessage(R.string.username_invalid_error))
2727
else -> FormData.Valid(sanitizedValue)
2828
}
2929
}

0 commit comments

Comments
 (0)