Fix bug where all saved files were pngs
This commit is contained in:
parent
5c221e004d
commit
3c7f46d75a
@ -19,7 +19,6 @@ import androidx.activity.viewModels
|
|||||||
import androidx.core.net.toFile
|
import androidx.core.net.toFile
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
import androidx.core.os.HandlerCompat
|
import androidx.core.os.HandlerCompat
|
||||||
import androidx.core.widget.addTextChangedListener
|
|
||||||
import androidx.core.widget.doAfterTextChanged
|
import androidx.core.widget.doAfterTextChanged
|
||||||
import androidx.lifecycle.Lifecycle
|
import androidx.lifecycle.Lifecycle
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
@ -27,29 +26,20 @@ import androidx.lifecycle.repeatOnLifecycle
|
|||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.arthenica.ffmpegkit.*
|
import com.arthenica.ffmpegkit.*
|
||||||
import com.google.android.material.snackbar.Snackbar
|
import com.google.android.material.snackbar.Snackbar
|
||||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
|
||||||
import io.reactivex.rxjava3.disposables.Disposable
|
|
||||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
|
||||||
import kotlinx.coroutines.flow.collect
|
import kotlinx.coroutines.flow.collect
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import okhttp3.MultipartBody
|
|
||||||
import org.pixeldroid.app.MainActivity
|
|
||||||
import org.pixeldroid.app.R
|
import org.pixeldroid.app.R
|
||||||
import org.pixeldroid.app.databinding.ActivityPostCreationBinding
|
import org.pixeldroid.app.databinding.ActivityPostCreationBinding
|
||||||
import org.pixeldroid.app.postCreation.camera.CameraActivity
|
import org.pixeldroid.app.postCreation.camera.CameraActivity
|
||||||
import org.pixeldroid.app.postCreation.carousel.CarouselItem
|
import org.pixeldroid.app.postCreation.carousel.CarouselItem
|
||||||
import org.pixeldroid.app.postCreation.carousel.ImageCarousel
|
|
||||||
import org.pixeldroid.app.postCreation.photoEdit.PhotoEditActivity
|
import org.pixeldroid.app.postCreation.photoEdit.PhotoEditActivity
|
||||||
import org.pixeldroid.app.postCreation.photoEdit.VideoEditActivity
|
import org.pixeldroid.app.postCreation.photoEdit.VideoEditActivity
|
||||||
import org.pixeldroid.app.utils.BaseActivity
|
import org.pixeldroid.app.utils.BaseActivity
|
||||||
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.db.entities.UserDatabaseEntity
|
import org.pixeldroid.app.utils.db.entities.UserDatabaseEntity
|
||||||
import org.pixeldroid.app.utils.ffmpegSafeUri
|
import org.pixeldroid.app.utils.ffmpegSafeUri
|
||||||
import retrofit2.HttpException
|
import org.pixeldroid.app.utils.fileExtension
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.FileNotFoundException
|
|
||||||
import java.io.IOException
|
|
||||||
import java.io.OutputStream
|
import java.io.OutputStream
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.*
|
import java.util.*
|
||||||
@ -214,13 +204,13 @@ class PostCreationActivity : BaseActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun savePicture(button: View, currentPosition: Int) {
|
private fun savePicture(button: View, currentPosition: Int) {
|
||||||
val name = SimpleDateFormat("yyyy-MM-dd-HH-mm-ss-SSS", Locale.US)
|
val originalUri = model.getPhotoData().value!![currentPosition].imageUri
|
||||||
.format(System.currentTimeMillis()) + ".png"
|
|
||||||
val pair = getOutputFile(name)
|
val pair = getOutputFile(originalUri)
|
||||||
val outputStream: OutputStream = pair.first
|
val outputStream: OutputStream = pair.first
|
||||||
val path: String = pair.second
|
val path: String = pair.second
|
||||||
|
|
||||||
contentResolver.openInputStream(model.getPhotoData().value!![currentPosition].imageUri)!!.use { input ->
|
contentResolver.openInputStream(originalUri)!!.use { input ->
|
||||||
outputStream.use { output ->
|
outputStream.use { output ->
|
||||||
input.copyTo(output)
|
input.copyTo(output)
|
||||||
}
|
}
|
||||||
@ -246,20 +236,28 @@ class PostCreationActivity : BaseActivity() {
|
|||||||
).show()
|
).show()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getOutputFile(name: String): Pair<OutputStream, String> {
|
private fun getOutputFile(uri: Uri): Pair<OutputStream, String> {
|
||||||
|
val extension = uri.fileExtension(contentResolver)
|
||||||
|
|
||||||
|
val name = SimpleDateFormat("yyyy-MM-dd-HH-mm-ss-SSS", Locale.US)
|
||||||
|
.format(System.currentTimeMillis()) + ".$extension"
|
||||||
|
|
||||||
val outputStream: OutputStream
|
val outputStream: OutputStream
|
||||||
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 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, "image/png")
|
contentValues.put(MediaStore.MediaColumns.MIME_TYPE, type)
|
||||||
contentValues.put(
|
contentValues.put(
|
||||||
MediaStore.MediaColumns.RELATIVE_PATH,
|
MediaStore.MediaColumns.RELATIVE_PATH,
|
||||||
Environment.DIRECTORY_PICTURES
|
Environment.DIRECTORY_PICTURES
|
||||||
)
|
)
|
||||||
val imageUri: Uri =
|
val imageUri: Uri = resolver.insert(
|
||||||
resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues)!!
|
if (type?.startsWith("image") == true) MediaStore.Images.Media.EXTERNAL_CONTENT_URI
|
||||||
|
else MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
|
||||||
|
contentValues)!!
|
||||||
path = imageUri.toString()
|
path = imageUri.toString()
|
||||||
outputStream = resolver.openOutputStream(Objects.requireNonNull(imageUri))!!
|
outputStream = resolver.openOutputStream(Objects.requireNonNull(imageUri))!!
|
||||||
} else {
|
} else {
|
||||||
@ -327,11 +325,7 @@ class PostCreationActivity : BaseActivity() {
|
|||||||
val originalUri = model.getPhotoData().value!![position].imageUri
|
val originalUri = model.getPhotoData().value!![position].imageUri
|
||||||
|
|
||||||
// Having a meaningful suffix is necessary so that ffmpeg knows what to put in output
|
// Having a meaningful suffix is necessary so that ffmpeg knows what to put in output
|
||||||
val suffix = if(originalUri.scheme == "content") {
|
val suffix = originalUri.fileExtension(contentResolver)
|
||||||
contentResolver.getType(model.getPhotoData().value!![position].imageUri)?.takeLastWhile { it != '/' }
|
|
||||||
} else {
|
|
||||||
originalUri.toString().takeLastWhile { it != '/' }
|
|
||||||
}
|
|
||||||
val file = File.createTempFile("temp_video", ".$suffix")
|
val file = File.createTempFile("temp_video", ".$suffix")
|
||||||
//val file = File.createTempFile("temp_video", ".webm")
|
//val file = File.createTempFile("temp_video", ".webm")
|
||||||
model.trackTempFile(file)
|
model.trackTempFile(file)
|
||||||
|
@ -45,6 +45,13 @@ fun validDomain(domain: String?): Boolean {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun Uri.fileExtension(contentResolver: ContentResolver): String? {
|
||||||
|
return if (scheme == "content") {
|
||||||
|
contentResolver.getType(this)?.takeLastWhile { it != '/' }
|
||||||
|
} else {
|
||||||
|
toString().takeLastWhile { it != '/' }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
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…
x
Reference in New Issue
Block a user