1
0
mirror of https://github.com/AllanWang/Frost-for-Facebook.git synced 2024-11-10 13:02:35 +01:00

Revert/mediapicker (#407)

* Remove kau mediapicker

* Allow cancellation and clean up

* Fix up downloader
This commit is contained in:
Allan Wang 2017-10-13 20:32:00 -04:00 committed by GitHub
parent 32ff6c3269
commit 4ad2d23cec
8 changed files with 21 additions and 58 deletions

View File

@ -135,12 +135,6 @@
<activity
android:name=".activities.ImageActivity"
android:theme="@style/FrostTheme.Transparent" />
<activity
android:name=".activities.ImagePickerActivity"
android:theme="@style/Kau.MediaPicker.Overlay" />
<activity
android:name=".activities.VideoPickerActivity"
android:theme="@style/Kau.MediaPicker.Overlay" />
<service
android:name=".services.NotificationService"

View File

@ -372,7 +372,7 @@ class MainActivity : BaseActivity(),
return true
}
override fun openFileChooser(filePathCallback: ValueCallback<Array<Uri>>, fileChooserParams: WebChromeClient.FileChooserParams) {
override fun openFileChooser(filePathCallback: ValueCallback<Array<Uri>?>, fileChooserParams: WebChromeClient.FileChooserParams) {
openMediaPicker(filePathCallback, fileChooserParams)
}

View File

@ -1,30 +0,0 @@
package com.pitchedapps.frost.activities
import android.content.Context
import android.net.Uri
import android.support.v4.content.FileProvider
import ca.allanwang.kau.mediapicker.*
import ca.allanwang.kau.utils.colorToBackground
import com.pitchedapps.frost.BuildConfig
import com.pitchedapps.frost.utils.Prefs
import java.io.File
/**
* Created by Allan Wang on 2017-07-23.
*/
private fun actions(): List<MediaAction> {
val color = Prefs.accentColorForWhite
return listOf(object : MediaActionCamera(color) {
override fun createFile(context: Context): File
= createMediaFile("Frost", ".jpg")
override fun createUri(context: Context, file: File): Uri
= FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider", file)
}, MediaActionGallery(color = color.colorToBackground(0.1f)))
}
class ImagePickerActivity : MediaPickerActivityOverlayBase(MediaType.IMAGE, actions())
class VideoPickerActivity : MediaPickerActivityOverlayBase(MediaType.VIDEO, actions())

View File

@ -192,7 +192,7 @@ open class WebOverlayActivityBase(private val forceBasicAgent: Boolean) : KauBas
}
}
override fun openFileChooser(filePathCallback: ValueCallback<Array<Uri>>, fileChooserParams: WebChromeClient.FileChooserParams) {
override fun openFileChooser(filePathCallback: ValueCallback<Array<Uri>?>, fileChooserParams: WebChromeClient.FileChooserParams) {
openMediaPicker(filePathCallback, fileChooserParams)
}

View File

@ -5,10 +5,8 @@ import android.content.Intent
import android.net.Uri
import android.webkit.ValueCallback
import android.webkit.WebChromeClient
import ca.allanwang.kau.mediapicker.kauLaunchMediaPicker
import ca.allanwang.kau.mediapicker.kauOnMediaPickerResult
import com.pitchedapps.frost.activities.ImagePickerActivity
import com.pitchedapps.frost.activities.VideoPickerActivity
import ca.allanwang.kau.utils.string
import com.pitchedapps.frost.R
import com.pitchedapps.frost.utils.L
/**
@ -17,33 +15,32 @@ import com.pitchedapps.frost.utils.L
const val MEDIA_CHOOSER_RESULT = 67
interface FileChooserActivityContract {
fun openFileChooser(filePathCallback: ValueCallback<Array<Uri>>, fileChooserParams: WebChromeClient.FileChooserParams)
fun openFileChooser(filePathCallback: ValueCallback<Array<Uri>?>, fileChooserParams: WebChromeClient.FileChooserParams)
}
interface FileChooserContract {
var filePathCallback: ValueCallback<Array<Uri>>?
fun Activity.openMediaPicker(filePathCallback: ValueCallback<Array<Uri>>, fileChooserParams: WebChromeClient.FileChooserParams)
var filePathCallback: ValueCallback<Array<Uri>?>?
fun Activity.openMediaPicker(filePathCallback: ValueCallback<Array<Uri>?>, fileChooserParams: WebChromeClient.FileChooserParams)
fun Activity.onActivityResultWeb(requestCode: Int, resultCode: Int, intent: Intent?): Boolean
}
class FileChooserDelegate : FileChooserContract {
override var filePathCallback: ValueCallback<Array<Uri>>? = null
override var filePathCallback: ValueCallback<Array<Uri>?>? = null
override fun Activity.openMediaPicker(filePathCallback: ValueCallback<Array<Uri>>, fileChooserParams: WebChromeClient.FileChooserParams) {
override fun Activity.openMediaPicker(filePathCallback: ValueCallback<Array<Uri>?>, fileChooserParams: WebChromeClient.FileChooserParams) {
this@FileChooserDelegate.filePathCallback = filePathCallback
val isVideo = fileChooserParams.acceptTypes.firstOrNull() == "video/*"
kauLaunchMediaPicker(if (isVideo) VideoPickerActivity::class.java else ImagePickerActivity::class.java, MEDIA_CHOOSER_RESULT)
val intent = Intent()
intent.type = fileChooserParams.acceptTypes.firstOrNull()
intent.action = Intent.ACTION_GET_CONTENT
startActivityForResult(Intent.createChooser(intent, string(R.string.pick_image)), MEDIA_CHOOSER_RESULT)
}
override fun Activity.onActivityResultWeb(requestCode: Int, resultCode: Int, intent: Intent?): Boolean {
L.d("FileChooser On activity results web $requestCode")
if (requestCode != MEDIA_CHOOSER_RESULT) return false
val results = kauOnMediaPickerResult(resultCode, intent).map { it.uri }.toTypedArray()
L.i("FileChooser result ${results.contentToString()}")
//proper path content://com.android.providers.media.documents/document/image%3A36341
L.d("FileChooser Callback received; ${filePathCallback != null}")
filePathCallback?.onReceiveValue(results)
val data = intent?.data
filePathCallback?.onReceiveValue(if (data != null) arrayOf(data) else null)
filePathCallback = null
return true
}

View File

@ -8,6 +8,8 @@ import android.os.Environment
import android.webkit.URLUtil
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.dbflow.loadFbCookie
@ -20,14 +22,12 @@ fun Context.frostDownload(url: String, userAgent: String, contentDisposition: St
L.d("Received download request", "Download $url")
kauRequestPermissions(PERMISSION_WRITE_EXTERNAL_STORAGE) { granted, _ ->
if (!granted) return@kauRequestPermissions
val request = DownloadManager.Request(Uri.parse(url))
request.setMimeType(mimeType)
val cookie = loadFbCookie(Prefs.userId) ?: return@kauRequestPermissions
request.addRequestHeader("cookie", cookie.cookie)
request.addRequestHeader("User-Agent", userAgent)
request.setDescription("Downloading file...")
request.setDescription(string(R.string.downloading))
request.setTitle(URLUtil.guessFileName(url, contentDisposition, mimeType))
request.allowScanningByMediaScanner()
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)

View File

@ -69,7 +69,7 @@ class FrostChromeClient(webCore: FrostWebViewCore) : WebChromeClient() {
progressObservable.onNext(newProgress)
}
override fun onShowFileChooser(webView: WebView, filePathCallback: ValueCallback<Array<Uri>>, fileChooserParams: FileChooserParams): Boolean {
override fun onShowFileChooser(webView: WebView, filePathCallback: ValueCallback<Array<Uri>?>, fileChooserParams: FileChooserParams): Boolean {
activityContract?.openFileChooser(filePathCallback, fileChooserParams) ?: webView.frostSnackbar(R.string.file_chooser_not_found)
return activityContract != null
}

View File

@ -1,5 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="pick_image">Pick Image</string>
<string name="downloading">Downloading…</string>
<string name="image_download_success">Image downloaded</string>
<string name="image_download_fail">Image failed to download</string>
<string name="image_share_failed">Failed to share image</string>