diff options
author | Allan Wang <me@allanwang.ca> | 2017-07-04 17:22:36 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-07-04 17:22:36 -0400 |
commit | a67f99fcf210792da5e028570efbad61407aeab2 (patch) | |
tree | 3a2d617e9d9649828f13e581d8491c0371c67223 /app/src/main/kotlin/com/pitchedapps/frost/contracts | |
parent | 4cf368be0cd2f179485b05a3d2cd9b7bc236ba8e (diff) | |
download | frost-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.kt | 56 | ||||
-rw-r--r-- | app/src/main/kotlin/com/pitchedapps/frost/contracts/WebContract.kt | 8 |
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 |