From af8a5c355a35a857f382cc037274a44cdca71c29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Gerber?= Date: Sun, 13 Mar 2022 18:35:03 +0100 Subject: [PATCH] Create video edit activity For now, it just launches a video player --- app/src/main/AndroidManifest.xml | 1 + .../app/postCreation/PostCreationActivity.kt | 24 ++++-- .../photoEdit/PhotoEditActivity.kt | 11 +-- .../photoEdit/VideoEditActivity.kt | 85 +++++++++++++++++++ .../main/res/layout/activity_video_edit.xml | 14 +++ 5 files changed, 119 insertions(+), 16 deletions(-) create mode 100644 app/src/main/java/org/pixeldroid/app/postCreation/photoEdit/VideoEditActivity.kt create mode 100644 app/src/main/res/layout/activity_video_edit.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index cfcdb8c7..db9e0481 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -33,6 +33,7 @@ android:screenOrientation="sensorPortrait" tools:ignore="LockedOrientationActivity" /> + = registerForActivityResult(ActivityResultContracts.StartActivityForResult()){ result: ActivityResult? -> if (result?.resultCode == Activity.RESULT_OK && result.data != null) { - val position: Int = result.data!!.getIntExtra(PhotoEditActivity.PICTURE_POSITION, 0) + val position: Int = result.data!!.getIntExtra(PICTURE_POSITION, 0) photoData.getOrNull(position)?.apply { - imageUri = result.data!!.getStringExtra(PhotoEditActivity.PICTURE_URI)!!.toUri() + imageUri = result.data!!.getStringExtra(PICTURE_URI)!!.toUri() val (imageSize, imageVideo) = imageUri.getSizeAndVideoValidate() size = imageSize video = imageVideo @@ -447,15 +453,15 @@ class PostCreationActivity : BaseActivity() { } private fun edit(position: Int) { - if(photoData[position].video){ - AlertDialog.Builder(this).apply { - setMessage(R.string.video_edit_not_yet_supported) - setNegativeButton(android.R.string.ok) { _, _ -> } - }.show() + if (photoData[position].video){ + val intent = Intent(this, VideoEditActivity::class.java) + .putExtra(PICTURE_URI, photoData[position].imageUri) + .putExtra(PICTURE_POSITION, position) + editResultContract.launch(intent) } else { val intent = Intent(this, PhotoEditActivity::class.java) - .putExtra(PhotoEditActivity.PICTURE_URI, photoData[position].imageUri) - .putExtra(PhotoEditActivity.PICTURE_POSITION, position) + .putExtra(PICTURE_URI, photoData[position].imageUri) + .putExtra(PICTURE_POSITION, position) editResultContract.launch(intent) } } diff --git a/app/src/main/java/org/pixeldroid/app/postCreation/photoEdit/PhotoEditActivity.kt b/app/src/main/java/org/pixeldroid/app/postCreation/photoEdit/PhotoEditActivity.kt index d32789f9..5e75a2d2 100644 --- a/app/src/main/java/org/pixeldroid/app/postCreation/photoEdit/PhotoEditActivity.kt +++ b/app/src/main/java/org/pixeldroid/app/postCreation/photoEdit/PhotoEditActivity.kt @@ -73,9 +73,6 @@ class PhotoEditActivity : BaseActivity() { } companion object{ - internal const val PICTURE_URI = "picture_uri" - internal const val PICTURE_POSITION = "picture_position" - private var executor: ExecutorService = newSingleThreadExecutor() private var future: Future<*>? = null @@ -99,8 +96,8 @@ class PhotoEditActivity : BaseActivity() { supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setHomeButtonEnabled(true) - initialUri = intent.getParcelableExtra(PICTURE_URI) - picturePosition = intent.getIntExtra(PICTURE_POSITION, 0) + initialUri = intent.getParcelableExtra(PostCreationActivity.PICTURE_URI) + picturePosition = intent.getIntExtra(PostCreationActivity.PICTURE_POSITION, 0) imageUri = initialUri // Crop button on-click listener @@ -345,8 +342,8 @@ class PhotoEditActivity : BaseActivity() { private fun sendBackImage(file: String) { val intent = Intent(this, PostCreationActivity::class.java) .apply { - putExtra(PICTURE_URI, file) - putExtra(PICTURE_POSITION, picturePosition) + putExtra(PostCreationActivity.PICTURE_URI, file) + putExtra(PostCreationActivity.PICTURE_POSITION, picturePosition) addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT) } 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..379e1e39 --- /dev/null +++ b/app/src/main/java/org/pixeldroid/app/postCreation/photoEdit/VideoEditActivity.kt @@ -0,0 +1,85 @@ +package org.pixeldroid.app.postCreation.photoEdit + +import android.content.pm.ActivityInfo +import android.media.AudioManager +import android.net.Uri +import android.os.Bundle +import androidx.core.net.toUri +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat +import androidx.core.view.WindowInsetsControllerCompat +import androidx.media.AudioAttributesCompat +import androidx.media2.common.MediaMetadata +import androidx.media2.common.UriMediaItem +import androidx.media2.player.MediaPlayer +import com.bumptech.glide.Glide +import org.pixeldroid.app.R +import org.pixeldroid.app.databinding.ActivityVideoEditBinding +import org.pixeldroid.app.postCreation.PostCreationActivity +import org.pixeldroid.app.posts.MediaViewerActivity +import org.pixeldroid.app.utils.BaseActivity + + +class VideoEditActivity : BaseActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val binding = ActivityVideoEditBinding.inflate(layoutInflater) + + setContentView(binding.root) + + supportActionBar?.setDisplayHomeAsUpEnabled(true) + supportActionBar?.setTitle(R.string.edit) + + val videoUri: Uri? = intent.getParcelableExtra(PostCreationActivity.PICTURE_URI) + val videoPosition: Int = intent.getIntExtra(PostCreationActivity.PICTURE_POSITION, 0) + + val description: String? = intent.getStringExtra(MediaViewerActivity.VIDEO_DESCRIPTION_TAG) + + val mediaItem: UriMediaItem = UriMediaItem.Builder(videoUri!!).build() // TODO: remove !! + mediaItem.metadata = MediaMetadata.Builder() + .putString(MediaMetadata.METADATA_KEY_TITLE, description ?: "") + .build() + + val mediaPlayer = MediaPlayer(this) + mediaPlayer.setMediaItem(mediaItem) + + binding.videoView.mediaControlView?.setOnFullScreenListener{ view, fullscreen -> + val windowInsetsController = ViewCompat.getWindowInsetsController(window.decorView) + if (!fullscreen) { + // Configure the behavior of the hidden system bars + windowInsetsController?.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE + // Hide both the status bar and the navigation bar + windowInsetsController?.show(WindowInsetsCompat.Type.systemBars()) + supportActionBar?.show() + requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED + } else { + // Configure the behavior of the hidden system bars + windowInsetsController?.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE + // Hide both the status bar and the navigation bar + windowInsetsController?.hide(WindowInsetsCompat.Type.systemBars()) + + requestedOrientation = + if (mediaPlayer.videoSize.height < mediaPlayer.videoSize.width) { + ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE + } else { + ActivityInfo.SCREEN_ORIENTATION_PORTRAIT + } + supportActionBar?.hide() + } + } + + // Configure audio + mediaPlayer.setAudioAttributes( + AudioAttributesCompat.Builder() + .setLegacyStreamType(AudioManager.STREAM_MUSIC) + .setUsage(AudioAttributesCompat.USAGE_MEDIA) + .setContentType(AudioAttributesCompat.CONTENT_TYPE_MOVIE) + .build() + ) + + mediaPlayer.prepare() + + binding.videoView.setPlayer(mediaPlayer) + + } +} \ 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..a3d34446 --- /dev/null +++ b/app/src/main/res/layout/activity_video_edit.xml @@ -0,0 +1,14 @@ + + + + + + \ No newline at end of file