aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/kotlin/com/pitchedapps/frost/contracts/FileChooser.kt
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/kotlin/com/pitchedapps/frost/contracts/FileChooser.kt')
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/contracts/FileChooser.kt58
1 files changed, 37 insertions, 21 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
index 4853e7ff..521d0f97 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/contracts/FileChooser.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/contracts/FileChooser.kt
@@ -25,55 +25,63 @@ import ca.allanwang.kau.permissions.PERMISSION_WRITE_EXTERNAL_STORAGE
import ca.allanwang.kau.permissions.kauRequestPermissions
import ca.allanwang.kau.utils.string
import com.pitchedapps.frost.R
+import com.pitchedapps.frost.injectors.ThemeProvider
import com.pitchedapps.frost.utils.L
+import com.pitchedapps.frost.utils.frostSnackbar
+import dagger.Binds
+import dagger.Module
+import dagger.hilt.InstallIn
+import dagger.hilt.android.components.ActivityComponent
+import dagger.hilt.android.scopes.ActivityScoped
+import javax.inject.Inject
/**
* Created by Allan Wang on 2017-07-04.
*/
-const val MEDIA_CHOOSER_RESULT = 67
+private const val MEDIA_CHOOSER_RESULT = 67
-interface FileChooserActivityContract {
- fun openFileChooser(
- filePathCallback: ValueCallback<Array<Uri>?>,
- fileChooserParams: WebChromeClient.FileChooserParams
- )
-}
-
-interface FileChooserContract {
- var filePathCallback: ValueCallback<Array<Uri>?>?
- fun Activity.openMediaPicker(
+interface WebFileChooser {
+ fun openMediaPicker(
filePathCallback: ValueCallback<Array<Uri>?>,
fileChooserParams: WebChromeClient.FileChooserParams
)
- fun Activity.onActivityResultWeb(requestCode: Int, resultCode: Int, intent: Intent?): Boolean
+ fun onActivityResultWeb(
+ requestCode: Int,
+ resultCode: Int,
+ intent: Intent?
+ ): Boolean
}
-class FileChooserDelegate : FileChooserContract {
-
- override var filePathCallback: ValueCallback<Array<Uri>?>? = null
+class WebFileChooserImpl @Inject internal constructor(
+ private val activity: Activity,
+ private val themeProvider: ThemeProvider
+) : WebFileChooser {
+ private var filePathCallback: ValueCallback<Array<Uri>?>? = null
- override fun Activity.openMediaPicker(
+ override fun openMediaPicker(
filePathCallback: ValueCallback<Array<Uri>?>,
fileChooserParams: WebChromeClient.FileChooserParams
) {
- kauRequestPermissions(PERMISSION_WRITE_EXTERNAL_STORAGE) { granted, _ ->
+ activity.kauRequestPermissions(PERMISSION_WRITE_EXTERNAL_STORAGE) { granted, _ ->
if (!granted) {
+ L.d { "Failed to get write permissions" }
+ activity.frostSnackbar(R.string.file_chooser_not_found, themeProvider)
filePathCallback.onReceiveValue(null)
return@kauRequestPermissions
}
- this@FileChooserDelegate.filePathCallback = filePathCallback
+ this.filePathCallback = filePathCallback
val intent = Intent()
intent.type = fileChooserParams.acceptTypes.firstOrNull()
intent.action = Intent.ACTION_GET_CONTENT
- startActivityForResult(
- Intent.createChooser(intent, string(R.string.pick_image)),
+ activity.startActivityForResult(
+ Intent.createChooser(intent, activity.string(R.string.pick_image)),
MEDIA_CHOOSER_RESULT
)
}
}
- override fun Activity.onActivityResultWeb(
+ override fun onActivityResultWeb(
requestCode: Int,
resultCode: Int,
intent: Intent?
@@ -86,3 +94,11 @@ class FileChooserDelegate : FileChooserContract {
return true
}
}
+
+@Module
+@InstallIn(ActivityComponent::class)
+interface WebFileChooserModule {
+ @Binds
+ @ActivityScoped
+ fun webFileChooser(to: WebFileChooserImpl): WebFileChooser
+}