From 43ac68f42bd73ab6bb40f9b2872e004e3259b040 Mon Sep 17 00:00:00 2001 From: Binondi Date: Sat, 14 Dec 2024 14:56:05 +0530 Subject: [PATCH] =?UTF-8?q?=E2=9A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 1 - .../adapters/ImagePreviewAdapter.kt | 83 +++++++++++++++++-- app/src/main/res/layout/viewpager_items.xml | 20 +++++ 3 files changed, 94 insertions(+), 10 deletions(-) create mode 100644 app/src/main/res/layout/viewpager_items.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c3abffd..a591442 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -58,7 +58,6 @@ android:exported="true" /> diff --git a/app/src/main/java/devs/org/calculator/adapters/ImagePreviewAdapter.kt b/app/src/main/java/devs/org/calculator/adapters/ImagePreviewAdapter.kt index 62559dd..b261c8b 100644 --- a/app/src/main/java/devs/org/calculator/adapters/ImagePreviewAdapter.kt +++ b/app/src/main/java/devs/org/calculator/adapters/ImagePreviewAdapter.kt @@ -1,33 +1,98 @@ package devs.org.calculator.adapters import android.content.Context +import android.net.Uri import android.view.LayoutInflater +import android.view.View import android.view.ViewGroup +import android.widget.MediaController import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide -import devs.org.calculator.databinding.ItemFileBinding +import devs.org.calculator.databinding.ViewpagerItemsBinding +import devs.org.calculator.utils.FileManager import java.io.File class ImagePreviewAdapter( private val context: Context, - private val images: List + private val images: List, + private var fileType: FileManager.FileType ) : RecyclerView.Adapter() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ImageViewHolder { - val binding = ItemFileBinding.inflate( - LayoutInflater.from(context), parent, false + val binding = ViewpagerItemsBinding.inflate(LayoutInflater.from(context), parent, false ) return ImageViewHolder(binding) } override fun onBindViewHolder(holder: ImageViewHolder, position: Int) { val imageUrl = images[position] - Glide.with(context) - .load(imageUrl) - .into(holder.binding.imageView) + holder.bind(imageUrl) + } override fun getItemCount(): Int = images.size - inner class ImageViewHolder(val binding: ItemFileBinding) : RecyclerView.ViewHolder(binding.root) -} \ No newline at end of file + inner class ImageViewHolder(val binding: ViewpagerItemsBinding) : RecyclerView.ViewHolder(binding.root) { + fun bind(file: File) { + when (fileType) { + FileManager.FileType.VIDEO -> { + binding.imageView.visibility = View.GONE + binding.videoView.visibility = View.VISIBLE + + // Set up the VideoView with the current video file + val videoUri = Uri.fromFile(file) + binding.videoView.setVideoURI(videoUri) + binding.videoView.start() + + // Create and attach MediaController + val mediaController = MediaController(context) + mediaController.setAnchorView(binding.videoView) + binding.videoView.setMediaController(mediaController) + + // Handle the "Next" button logic + mediaController.setPrevNextListeners( + { // Next button clicked + val nextPosition = (adapterPosition + 1) % images.size // Loop to start if last + playVideoAtPosition(nextPosition) + }, + { // Previous button clicked + val prevPosition = if (adapterPosition - 1 < 0) images.size - 1 else adapterPosition - 1 + playVideoAtPosition(prevPosition) + } + ) + + // Play next video automatically when the current one finishes + binding.videoView.setOnCompletionListener { + val nextPosition = (adapterPosition + 1) % images.size // Loop to start if last + playVideoAtPosition(nextPosition) + } + } + FileManager.FileType.IMAGE -> { + binding.imageView.visibility = View.VISIBLE + binding.videoView.visibility = View.GONE + Glide.with(context) + .load(file) + .into(binding.imageView) + } + FileManager.FileType.AUDIO -> { + // Handle audio if necessary + } + else -> { + // Handle other types if necessary + } + } + } + + private fun playVideoAtPosition(position: Int) { + val nextFile = images[position] + if (fileType == FileManager.FileType.VIDEO) { + val videoUri = Uri.fromFile(nextFile) + binding.videoView.setVideoURI(videoUri) + binding.videoView.start() + } + } + } + + + +} diff --git a/app/src/main/res/layout/viewpager_items.xml b/app/src/main/res/layout/viewpager_items.xml new file mode 100644 index 0000000..4e5bba3 --- /dev/null +++ b/app/src/main/res/layout/viewpager_items.xml @@ -0,0 +1,20 @@ + + + + + + + + \ No newline at end of file