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