diff options
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.kt | 58 |
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 +} |