aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/kotlin/com/pitchedapps/frost/contracts
diff options
context:
space:
mode:
authorAllan Wang <me@allanwang.ca>2017-07-04 17:22:36 -0400
committerGitHub <noreply@github.com>2017-07-04 17:22:36 -0400
commita67f99fcf210792da5e028570efbad61407aeab2 (patch)
tree3a2d617e9d9649828f13e581d8491c0371c67223 /app/src/main/kotlin/com/pitchedapps/frost/contracts
parent4cf368be0cd2f179485b05a3d2cd9b7bc236ba8e (diff)
downloadfrost-a67f99fcf210792da5e028570efbad61407aeab2.tar.gz
frost-a67f99fcf210792da5e028570efbad61407aeab2.tar.bz2
frost-a67f99fcf210792da5e028570efbad61407aeab2.zip
Dev (#21) - fix search and file chooser
* Fix up search and add file chooser * Fix repeating file chooser
Diffstat (limited to 'app/src/main/kotlin/com/pitchedapps/frost/contracts')
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/contracts/FileChooser.kt56
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/contracts/WebContract.kt8
2 files changed, 64 insertions, 0 deletions
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/contracts/FileChooser.kt b/app/src/main/kotlin/com/pitchedapps/frost/contracts/FileChooser.kt
new file mode 100644
index 00000000..5b2cfa49
--- /dev/null
+++ b/app/src/main/kotlin/com/pitchedapps/frost/contracts/FileChooser.kt
@@ -0,0 +1,56 @@
+package com.pitchedapps.frost.contracts
+
+import android.app.Activity
+import android.content.Intent
+import android.net.Uri
+import android.webkit.ValueCallback
+import android.webkit.WebChromeClient
+import ca.allanwang.kau.permissions.PERMISSION_READ_EXTERNAL_STORAGE
+import ca.allanwang.kau.permissions.kauRequestPermissions
+import com.pitchedapps.frost.utils.L
+
+/**
+ * Created by Allan Wang on 2017-07-04.
+ */
+const val FILE_CHOOSER_REQUEST = 67
+
+interface FileChooserActivityContract {
+ fun openFileChooser(filePathCallback: ValueCallback<Array<Uri>>, fileChooserParams: WebChromeClient.FileChooserParams)
+}
+
+interface FileChooserContract {
+ var filePathCallback: ValueCallback<Array<Uri>>?
+ fun openFileChooser(activity: Activity, filePathCallback: ValueCallback<Array<Uri>>, fileChooserParams: WebChromeClient.FileChooserParams)
+ fun onActivityResultWeb(requestCode: Int, resultCode: Int, intent: Intent?): Boolean
+}
+
+class FileChooserDelegate : FileChooserContract {
+
+ override var filePathCallback: ValueCallback<Array<Uri>>? = null
+
+ override fun openFileChooser(activity: Activity, filePathCallback: ValueCallback<Array<Uri>>, fileChooserParams: WebChromeClient.FileChooserParams) {
+ activity.kauRequestPermissions(PERMISSION_READ_EXTERNAL_STORAGE) {
+ granted, _ ->
+ if (!granted) return@kauRequestPermissions
+ val contentSelectionIntent = Intent(Intent.ACTION_GET_CONTENT)
+ contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE)
+ contentSelectionIntent.type = fileChooserParams.acceptTypes?.joinToString(separator = "|") ?: "*/*"
+ activity.startActivityForResult(contentSelectionIntent, FILE_CHOOSER_REQUEST)
+ this.filePathCallback?.onReceiveValue(null)
+ this.filePathCallback = filePathCallback
+ }
+ }
+
+ override fun onActivityResultWeb(requestCode: Int, resultCode: Int, intent: Intent?): Boolean {
+ L.d("On activity results web $requestCode")
+ if (requestCode != FILE_CHOOSER_REQUEST) return false
+ var results: Uri? = null
+
+ if (resultCode == Activity.RESULT_OK && intent != null) results = Uri.parse(intent.dataString)
+ L.d("Callback received; ${filePathCallback != null}")
+ filePathCallback?.onReceiveValue(if (results == null) null else arrayOf(results))
+ filePathCallback = null
+ return true
+ }
+
+} \ No newline at end of file
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/contracts/WebContract.kt b/app/src/main/kotlin/com/pitchedapps/frost/contracts/WebContract.kt
new file mode 100644
index 00000000..2485a468
--- /dev/null
+++ b/app/src/main/kotlin/com/pitchedapps/frost/contracts/WebContract.kt
@@ -0,0 +1,8 @@
+package com.pitchedapps.frost.contracts
+
+/**
+ * Created by Allan Wang on 2017-07-04.
+ *
+ * Combination of all the core functions implemented by the Activity
+ */
+interface ActivityWebContract : FileChooserActivityContract \ No newline at end of file