diff --git a/app/build.gradle b/app/build.gradle
index d54e1eaf..e09ea30c 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -133,7 +133,7 @@ dependencies {
// Use the most recent version of CameraX
- def cameraX_version = '1.1.0-rc01'
+ def cameraX_version = '1.1.0-rc02'
implementation "androidx.camera:camera-core:$cameraX_version"
implementation "androidx.camera:camera-camera2:$cameraX_version"
// CameraX Lifecycle library
@@ -142,8 +142,6 @@ dependencies {
// CameraX View class
implementation "androidx.camera:camera-view:$cameraX_version"
- implementation 'com.davemorrissey.labs:subsampling-scale-image-view-androidx:3.10.0'
-
def room_version = "2.4.2"
implementation "androidx.room:room-runtime:$room_version"
kapt "androidx.room:room-compiler:$room_version"
@@ -155,6 +153,8 @@ dependencies {
* ----------------------------------------------------------
*/
+ implementation 'com.davemorrissey.labs:subsampling-scale-image-view-androidx:3.10.0'
+ implementation 'com.arthenica:ffmpeg-kit-full:4.5.1-1.LTS'
implementation 'com.google.android.material:material:1.6.1'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 4a3bdf48..89f1821d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -26,6 +26,11 @@
android:name=".posts.AlbumActivity"
android:exported="false"
android:theme="@style/AppTheme.ActionBar.Transparent"/>
+
+
}
- }.show()
- } else {
- val intent = Intent(this, PhotoEditActivity::class.java)
- .putExtra(PhotoEditActivity.PICTURE_URI, photoData[position].imageUri)
- .putExtra(PhotoEditActivity.PICTURE_POSITION, position)
- editResultContract.launch(intent)
- }
+ val intent = Intent(
+ this,
+ if(photoData[position].video) VideoEditActivity::class.java else PhotoEditActivity::class.java
+ )
+ .putExtra(PhotoEditActivity.PICTURE_URI, photoData[position].imageUri)
+ .putExtra(PhotoEditActivity.PICTURE_POSITION, position)
+
+ editResultContract.launch(intent)
+
}
}
\ No newline at end of file
diff --git a/app/src/main/java/org/pixeldroid/app/postCreation/photoEdit/VideoEditActivity.kt b/app/src/main/java/org/pixeldroid/app/postCreation/photoEdit/VideoEditActivity.kt
new file mode 100644
index 00000000..53c3240d
--- /dev/null
+++ b/app/src/main/java/org/pixeldroid/app/postCreation/photoEdit/VideoEditActivity.kt
@@ -0,0 +1,57 @@
+package org.pixeldroid.app.postCreation.photoEdit
+
+import android.net.Uri
+import android.os.Bundle
+import android.util.Log
+import androidx.core.net.toUri
+import com.arthenica.ffmpegkit.*
+import com.arthenica.ffmpegkit.MediaInformation.KEY_DURATION
+import com.bumptech.glide.Glide
+import org.pixeldroid.app.databinding.ActivityVideoEditBinding
+import org.pixeldroid.app.utils.BaseActivity
+import java.io.File
+
+
+class VideoEditActivity : BaseActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ val binding = ActivityVideoEditBinding.inflate(layoutInflater)
+
+ setContentView(binding.root)
+ val uri = intent.getParcelableExtra(PhotoEditActivity.PICTURE_URI) as Uri?
+ val videoPosition = intent.getIntExtra(PhotoEditActivity.PICTURE_POSITION, -1)
+
+ val inputVideoPath =if(uri.toString().startsWith("content://")) FFmpegKitConfig.getSafParameterForRead(this, uri) else uri.toString()
+ val inputVideoPath2 =if(uri.toString().startsWith("content://")) FFmpegKitConfig.getSafParameterForRead(this, uri) else uri.toString()
+ val mediaInformation: MediaInformation? = FFprobeKit.getMediaInformation(inputVideoPath).mediaInformation
+
+ val duration: Long? = mediaInformation?.getNumberProperty(KEY_DURATION)
+
+ val file = File.createTempFile("temp_img", ".png").toUri()
+
+ val outputImagePath =if(file.toString().startsWith("content://")) FFmpegKitConfig.getSafParameterForWrite(this, file) else file.toString()
+
+ val session = FFmpegKit.execute(
+ "-i $inputVideoPath2 -filter_complex \"select='not(mod(n,1000))',scale=240:-1,tile=layout=4x1\" -vframes 1 -q:v 2 -y $outputImagePath"
+ )
+ if (ReturnCode.isSuccess(session.returnCode)) {
+ Glide.with(this).load(file).into(binding.thumbnails)
+ // SUCCESS
+ } else if (ReturnCode.isCancel(session.returnCode)) {
+
+ // CANCEL
+ } else {
+
+ // FAILURE
+ Log.d("VideoEditActivity",
+ String.format("Command failed with state %s and rc %s.%s",
+ session.state,
+ session.returnCode,
+ session.failStackTrace))
+ }
+
+ }
+ companion object {
+ const val VIDEO_TAG = "VideoEditTag"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_video_edit.xml b/app/src/main/res/layout/activity_video_edit.xml
new file mode 100644
index 00000000..d7c9300f
--- /dev/null
+++ b/app/src/main/res/layout/activity_video_edit.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 885c39c2..0e756cb5 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -262,4 +262,5 @@ For more info about Pixelfed, you can check here: https://pixelfed.org"
Storage permission not granted, grant the permission in settings if you want to let PixelDroid show the thumbnail
Play video
Video editing is not yet supported
+ Reel showing thumbnails of the video you are editing
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index 5d5d8d52..c2731152 100644
--- a/build.gradle
+++ b/build.gradle
@@ -7,7 +7,7 @@ buildscript {
mavenCentral()
}
dependencies {
- classpath 'com.android.tools.build:gradle:7.1.3'
+ classpath 'com.android.tools.build:gradle:7.2.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 39b9af83..02b00d99 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
#Tue Jun 07 20:42:16 CEST 2022
distributionBase=GRADLE_USER_HOME
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME