Merge branch 'imageSaveFixes' into 'master'
Fix saving image with content link See merge request pixeldroid/PixelDroid!453
This commit is contained in:
commit
d700e92e78
|
@ -40,6 +40,7 @@ import org.pixeldroid.app.utils.db.entities.InstanceDatabaseEntity
|
||||||
import org.pixeldroid.app.utils.db.entities.UserDatabaseEntity
|
import org.pixeldroid.app.utils.db.entities.UserDatabaseEntity
|
||||||
import org.pixeldroid.app.utils.ffmpegSafeUri
|
import org.pixeldroid.app.utils.ffmpegSafeUri
|
||||||
import org.pixeldroid.app.utils.fileExtension
|
import org.pixeldroid.app.utils.fileExtension
|
||||||
|
import org.pixeldroid.app.utils.getMimeType
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.OutputStream
|
import java.io.OutputStream
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
|
@ -247,7 +248,7 @@ class PostCreationActivity : BaseThemedWithoutBarActivity() {
|
||||||
val path: String
|
val path: String
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||||
val resolver: ContentResolver = contentResolver
|
val resolver: ContentResolver = contentResolver
|
||||||
val type = resolver.getType(uri)
|
val type = uri.getMimeType(contentResolver)
|
||||||
val contentValues = ContentValues()
|
val contentValues = ContentValues()
|
||||||
contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, name)
|
contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, name)
|
||||||
contentValues.put(MediaStore.MediaColumns.MIME_TYPE, type)
|
contentValues.put(MediaStore.MediaColumns.MIME_TYPE, type)
|
||||||
|
@ -255,10 +256,10 @@ class PostCreationActivity : BaseThemedWithoutBarActivity() {
|
||||||
MediaStore.MediaColumns.RELATIVE_PATH,
|
MediaStore.MediaColumns.RELATIVE_PATH,
|
||||||
Environment.DIRECTORY_PICTURES
|
Environment.DIRECTORY_PICTURES
|
||||||
)
|
)
|
||||||
val imageUri: Uri = resolver.insert(
|
val store =
|
||||||
if (type?.startsWith("image") == true) MediaStore.Images.Media.EXTERNAL_CONTENT_URI
|
if (type.startsWith("video")) MediaStore.Video.Media.EXTERNAL_CONTENT_URI
|
||||||
else MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
|
else MediaStore.Images.Media.EXTERNAL_CONTENT_URI
|
||||||
contentValues)!!
|
val imageUri: Uri = resolver.insert(store, contentValues)!!
|
||||||
path = imageUri.toString()
|
path = imageUri.toString()
|
||||||
outputStream = resolver.openOutputStream(Objects.requireNonNull(imageUri))!!
|
outputStream = resolver.openOutputStream(Objects.requireNonNull(imageUri))!!
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -28,6 +28,7 @@ import org.pixeldroid.app.utils.PixelDroidApplication
|
||||||
import org.pixeldroid.app.utils.api.objects.Attachment
|
import org.pixeldroid.app.utils.api.objects.Attachment
|
||||||
import org.pixeldroid.app.utils.db.entities.InstanceDatabaseEntity
|
import org.pixeldroid.app.utils.db.entities.InstanceDatabaseEntity
|
||||||
import org.pixeldroid.app.utils.di.PixelfedAPIHolder
|
import org.pixeldroid.app.utils.di.PixelfedAPIHolder
|
||||||
|
import org.pixeldroid.app.utils.getMimeType
|
||||||
import retrofit2.HttpException
|
import retrofit2.HttpException
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.FileNotFoundException
|
import java.io.FileNotFoundException
|
||||||
|
@ -159,8 +160,8 @@ class PostCreationViewModel(application: Application, clipdata: ClipData? = null
|
||||||
}
|
}
|
||||||
|
|
||||||
val sizeInkBytes = ceil(size.toDouble() / 1000).toLong()
|
val sizeInkBytes = ceil(size.toDouble() / 1000).toLong()
|
||||||
val type = getApplication<PixelDroidApplication>().contentResolver.getType(uri)
|
val type = uri.getMimeType(getApplication<PixelDroidApplication>().contentResolver)
|
||||||
val isVideo = type?.startsWith("video/") == true
|
val isVideo = type.startsWith("video/")
|
||||||
|
|
||||||
if(isVideo && !instance!!.videoEnabled){
|
if(isVideo && !instance!!.videoEnabled){
|
||||||
_uiState.update { currentUiState ->
|
_uiState.update { currentUiState ->
|
||||||
|
|
|
@ -11,8 +11,8 @@ import android.net.Uri
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.provider.MediaStore
|
import android.provider.MediaStore
|
||||||
import android.util.DisplayMetrics
|
import android.util.DisplayMetrics
|
||||||
import android.util.TypedValue
|
|
||||||
import android.view.WindowManager
|
import android.view.WindowManager
|
||||||
|
import android.webkit.MimeTypeMap
|
||||||
import androidx.annotation.AttrRes
|
import androidx.annotation.AttrRes
|
||||||
import androidx.annotation.ColorInt
|
import androidx.annotation.ColorInt
|
||||||
import androidx.annotation.StyleRes
|
import androidx.annotation.StyleRes
|
||||||
|
@ -56,10 +56,19 @@ fun Uri.fileExtension(contentResolver: ContentResolver): String? {
|
||||||
return if (scheme == "content") {
|
return if (scheme == "content") {
|
||||||
contentResolver.getType(this)?.takeLastWhile { it != '/' }
|
contentResolver.getType(this)?.takeLastWhile { it != '/' }
|
||||||
} else {
|
} else {
|
||||||
toString().takeLastWhile { it != '/' }
|
MimeTypeMap.getFileExtensionFromUrl(toString()).ifEmpty { null }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun Uri.getMimeType(contentResolver: ContentResolver, fallback: String = "image/*"): String {
|
||||||
|
return if (scheme == "content") {
|
||||||
|
contentResolver.getType(this)
|
||||||
|
} else {
|
||||||
|
MimeTypeMap.getFileExtensionFromUrl(toString())
|
||||||
|
?.run { MimeTypeMap.getSingleton().getMimeTypeFromExtension(toLowerCase()) }
|
||||||
|
} ?: fallback
|
||||||
|
}
|
||||||
|
|
||||||
fun Context.displayDimensionsInPx(): Pair<Int, Int> {
|
fun Context.displayDimensionsInPx(): Pair<Int, Int> {
|
||||||
val windowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager
|
val windowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue