From 7c4af5c53bfa8fdba069a262724af861ddb8fd72 Mon Sep 17 00:00:00 2001
From: ozcanalasalvar
Date: Fri, 2 Jun 2023 18:05:37 +0300
Subject: [PATCH] preview page add.
---
.../camerax/fragments/CameraFragment.kt | 12 ++-
.../camerax/fragments/PreviewFragment.kt | 93 +++++++++++++++++++
.../camerax/fragments/VideoFragment.kt | 10 +-
.../ozcanalasalvar/camerax/utils/MediaType.kt | 8 ++
app/src/main/res/drawable/back.xml | 5 +
app/src/main/res/layout/fragment_preview.xml | 63 +++++++++++++
app/src/main/res/navigation/nav_camera.xml | 7 ++
7 files changed, 196 insertions(+), 2 deletions(-)
create mode 100644 app/src/main/java/com/ozcanalasalvar/camerax/fragments/PreviewFragment.kt
create mode 100644 app/src/main/java/com/ozcanalasalvar/camerax/utils/MediaType.kt
create mode 100644 app/src/main/res/drawable/back.xml
create mode 100644 app/src/main/res/layout/fragment_preview.xml
diff --git a/app/src/main/java/com/ozcanalasalvar/camerax/fragments/CameraFragment.kt b/app/src/main/java/com/ozcanalasalvar/camerax/fragments/CameraFragment.kt
index ccab564..dcd448b 100644
--- a/app/src/main/java/com/ozcanalasalvar/camerax/fragments/CameraFragment.kt
+++ b/app/src/main/java/com/ozcanalasalvar/camerax/fragments/CameraFragment.kt
@@ -8,7 +8,6 @@ import android.os.Bundle
import android.os.CountDownTimer
import android.provider.MediaStore
import android.util.Log
-import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.MotionEvent
import android.view.ScaleGestureDetector
@@ -26,14 +25,17 @@ import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat
import androidx.core.view.updateLayoutParams
+import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope
+import androidx.navigation.Navigation.findNavController
import androidx.navigation.fragment.findNavController
import com.ozcanalasalvar.camerax.CameraVM
import com.ozcanalasalvar.camerax.R
import com.ozcanalasalvar.camerax.databinding.FragmentCameraBinding
import com.ozcanalasalvar.camerax.utils.DateFormats
import com.ozcanalasalvar.camerax.utils.DateFormatter
+import com.ozcanalasalvar.camerax.utils.MediaType
import com.ozcanalasalvar.camerax.utils.getAspectRationString
import com.ozcanalasalvar.camerax.utils.getDimensionRatioString
import kotlinx.coroutines.delay
@@ -370,6 +372,14 @@ class CameraFragment : Fragment() {
private fun showPreview(uri: Uri) {
binding.previewImage.setImageURI(uri)
binding.pnlPreview.visibility = View.VISIBLE
+
+
+ binding.pnlPreview.setOnClickListener {
+ val bundle = Bundle()
+ bundle.putString(ARG_PREVIEW_TYPE, MediaType.IMAGE)
+ bundle.putString(ARG_MEDIA_PATH, uri.toString())
+ findNavController().navigate(R.id.previewFragment, bundle)
+ }
}
diff --git a/app/src/main/java/com/ozcanalasalvar/camerax/fragments/PreviewFragment.kt b/app/src/main/java/com/ozcanalasalvar/camerax/fragments/PreviewFragment.kt
new file mode 100644
index 0000000..674f45a
--- /dev/null
+++ b/app/src/main/java/com/ozcanalasalvar/camerax/fragments/PreviewFragment.kt
@@ -0,0 +1,93 @@
+package com.ozcanalasalvar.camerax.fragments
+
+import android.content.pm.ActivityInfo
+import android.net.Uri
+import android.os.Bundle
+import androidx.fragment.app.Fragment
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.FrameLayout
+import android.widget.MediaController
+import androidx.navigation.fragment.findNavController
+import com.ozcanalasalvar.camerax.R
+import com.ozcanalasalvar.camerax.databinding.FragmentCameraBinding
+import com.ozcanalasalvar.camerax.databinding.FragmentPreviewBinding
+import com.ozcanalasalvar.camerax.utils.MediaType
+import java.io.File
+
+
+const val ARG_PREVIEW_TYPE = "previewType"
+const val ARG_MEDIA_PATH = "mediaPath"
+
+
+class PreviewFragment : Fragment() {
+
+
+ private lateinit var binding: FragmentPreviewBinding
+
+ private var mediaType: String? = null
+ private var mediaUri: Uri? = null
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
+ ): View {
+ binding = FragmentPreviewBinding.inflate(inflater, container, false)
+ return binding.root
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ arguments?.let {
+ mediaType = it.getString(ARG_PREVIEW_TYPE)
+ mediaUri = Uri.parse(it.getString(ARG_MEDIA_PATH))
+ }
+
+ requireActivity().requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LOCKED
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+
+ when (mediaType) {
+ MediaType.IMAGE -> {
+ binding.videoViewer.visibility = View.GONE
+ binding.controllerView.visibility = View.GONE
+ binding.ivPreview.visibility = View.VISIBLE
+ binding.ivPreview.setImageURI(mediaUri)
+ }
+
+ MediaType.VIDEO -> {
+ binding.videoViewer.visibility = View.VISIBLE
+ binding.controllerView.visibility = View.VISIBLE
+ binding.ivPreview.visibility = View.GONE
+ val mc = MediaController(requireContext())
+ val params: FrameLayout.LayoutParams = FrameLayout.LayoutParams(
+ FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT
+ )
+ params.bottomMargin = 200
+ mc.layoutParams = params
+
+
+ mc.setAnchorView(binding.controllerView)
+
+
+
+ binding.videoViewer.apply {
+ setVideoURI(mediaUri)
+ setMediaController(mc)
+ requestFocus()
+ }.start()
+ }
+ }
+
+ binding.ivBack.setOnClickListener {
+ findNavController().popBackStack()
+ }
+ }
+
+ override fun onDestroyView() {
+ super.onDestroyView()
+ requireActivity().requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR
+ }
+}
diff --git a/app/src/main/java/com/ozcanalasalvar/camerax/fragments/VideoFragment.kt b/app/src/main/java/com/ozcanalasalvar/camerax/fragments/VideoFragment.kt
index ff25fd1..ce09ce8 100644
--- a/app/src/main/java/com/ozcanalasalvar/camerax/fragments/VideoFragment.kt
+++ b/app/src/main/java/com/ozcanalasalvar/camerax/fragments/VideoFragment.kt
@@ -49,6 +49,7 @@ import com.ozcanalasalvar.camerax.utils.CameraConstant
import com.ozcanalasalvar.camerax.utils.DateFormats
import com.ozcanalasalvar.camerax.utils.DateFormatter
import com.ozcanalasalvar.camerax.utils.FileManager
+import com.ozcanalasalvar.camerax.utils.MediaType
import com.ozcanalasalvar.camerax.utils.getDimensionRatioString
import com.ozcanalasalvar.camerax.utils.getNameString
import kotlinx.coroutines.launch
@@ -436,11 +437,18 @@ class VideoFragment : Fragment() {
binding.previewImage.setImageBitmap(bitmapThumbnail);
+
+ binding.pnlPreview.setOnClickListener {
+ val bundle = Bundle()
+ bundle.putString(ARG_PREVIEW_TYPE, MediaType.VIDEO)
+ bundle.putString(ARG_MEDIA_PATH, uri.toString())
+ findNavController().navigate(R.id.previewFragment, bundle)
+ }
+
requireActivity().requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR
}
-
private fun aspectRatio(width: Int, height: Int): Int {
val previewRatio = max(width, height).toDouble() / min(width, height)
if (abs(previewRatio - CameraConstant.RATIO_4_3_VALUE) <= abs(previewRatio - CameraConstant.RATIO_16_9_VALUE)) {
diff --git a/app/src/main/java/com/ozcanalasalvar/camerax/utils/MediaType.kt b/app/src/main/java/com/ozcanalasalvar/camerax/utils/MediaType.kt
new file mode 100644
index 0000000..3fec475
--- /dev/null
+++ b/app/src/main/java/com/ozcanalasalvar/camerax/utils/MediaType.kt
@@ -0,0 +1,8 @@
+package com.ozcanalasalvar.camerax.utils
+
+class MediaType {
+ companion object {
+ const val VIDEO = "video"
+ const val IMAGE = "image"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/back.xml b/app/src/main/res/drawable/back.xml
new file mode 100644
index 0000000..a23629f
--- /dev/null
+++ b/app/src/main/res/drawable/back.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/layout/fragment_preview.xml b/app/src/main/res/layout/fragment_preview.xml
new file mode 100644
index 0000000..5733c1a
--- /dev/null
+++ b/app/src/main/res/layout/fragment_preview.xml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/navigation/nav_camera.xml b/app/src/main/res/navigation/nav_camera.xml
index 451f650..9b4b846 100644
--- a/app/src/main/res/navigation/nav_camera.xml
+++ b/app/src/main/res/navigation/nav_camera.xml
@@ -28,4 +28,11 @@
app:popUpTo="@+id/nav_camera"
app:popUpToInclusive="true" />
+
+
+
\ No newline at end of file