From dad225196302f8791ca08c67e0de4863bd4c11f1 Mon Sep 17 00:00:00 2001 From: JSPark <48265129+pknujsp@users.noreply.github.com> Date: Fri, 2 Jun 2023 00:06:27 +0900 Subject: [PATCH] =?UTF-8?q?#91=20AI=EC=B9=B4=EB=A9=94=EB=9D=BC=20=ED=99=94?= =?UTF-8?q?=EB=A9=B4=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95=20=EC=99=84?= =?UTF-8?q?=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/res/drawable/baseline_add_24.xml | 5 ++ .../main/res/drawable/baseline_remove_24.xml | 5 ++ feature/camera/build.gradle.kts | 1 + .../imagedialog/DetectedImageFragment.kt | 66 +++++-------------- .../layout/fragment_detected_image_dialog.xml | 52 +++++++++++++-- .../camera/src/main/res/values/strings.xml | 3 + feature/camera/src/main/res/values/styles.xml | 9 +++ gradle/libs.versions.toml | 2 + settings.gradle.kts | 2 + 9 files changed, 90 insertions(+), 55 deletions(-) create mode 100644 core/ui/src/main/res/drawable/baseline_add_24.xml create mode 100644 core/ui/src/main/res/drawable/baseline_remove_24.xml create mode 100644 feature/camera/src/main/res/values/styles.xml diff --git a/core/ui/src/main/res/drawable/baseline_add_24.xml b/core/ui/src/main/res/drawable/baseline_add_24.xml new file mode 100644 index 000000000..89633bb12 --- /dev/null +++ b/core/ui/src/main/res/drawable/baseline_add_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/core/ui/src/main/res/drawable/baseline_remove_24.xml b/core/ui/src/main/res/drawable/baseline_remove_24.xml new file mode 100644 index 000000000..3e0b7768f --- /dev/null +++ b/core/ui/src/main/res/drawable/baseline_remove_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/feature/camera/build.gradle.kts b/feature/camera/build.gradle.kts index a679d4ac5..a57f97217 100644 --- a/feature/camera/build.gradle.kts +++ b/feature/camera/build.gradle.kts @@ -50,5 +50,6 @@ dependencies { implementation(libs.bundles.navigations) implementation(libs.bundles.lifecycles) implementation(libs.kotlinx.datetime) + implementation(libs.photo.view) } \ No newline at end of file diff --git a/feature/camera/src/main/java/com/android/mediproject/feature/camera/imagedialog/DetectedImageFragment.kt b/feature/camera/src/main/java/com/android/mediproject/feature/camera/imagedialog/DetectedImageFragment.kt index 391abddd3..cbfa973b6 100644 --- a/feature/camera/src/main/java/com/android/mediproject/feature/camera/imagedialog/DetectedImageFragment.kt +++ b/feature/camera/src/main/java/com/android/mediproject/feature/camera/imagedialog/DetectedImageFragment.kt @@ -1,23 +1,15 @@ package com.android.mediproject.feature.camera.imagedialog -import android.annotation.SuppressLint -import android.app.Dialog import android.os.Bundle import android.view.LayoutInflater -import android.view.ScaleGestureDetector -import android.view.ScaleGestureDetector.SimpleOnScaleGestureListener import android.view.View import android.view.ViewGroup -import android.view.Window import androidx.fragment.app.DialogFragment import androidx.fragment.app.activityViewModels -import com.android.mediproject.core.common.bindingadapter.GlideApp -import com.android.mediproject.core.common.viewmodel.UiState import com.android.mediproject.feature.camera.MedicinesDetectorViewModel +import com.android.mediproject.feature.camera.R import com.android.mediproject.feature.camera.databinding.FragmentDetectedImageDialogBinding import dagger.hilt.android.AndroidEntryPoint -import kotlinx.coroutines.flow.collectLatest -import repeatOnStarted @AndroidEntryPoint @@ -27,48 +19,26 @@ class DetectedImageFragment : DialogFragment() { private val medicinesDetectorViewModel by activityViewModels() - private lateinit var scaleGestureDetector: ScaleGestureDetector - - override fun onCreateDialog(savedInstanceState: Bundle?): Dialog = super.onCreateDialog(savedInstanceState).also { dialog -> - dialog.requestWindowFeature(Window.FEATURE_NO_TITLE) - dialog.setCanceledOnTouchOutside(false) - dialog.setCancelable(false) - } - - - @SuppressLint("ClickableViewAccessibility") override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.viewModel = medicinesDetectorViewModel - viewLifecycleOwner.repeatOnStarted { - medicinesDetectorViewModel.capturedImage.collectLatest { - when (it) { - is UiState.Success -> { - GlideApp.with(requireContext()).load(it.data).into(binding.imageView) - } - else -> { - - } - } - } - } binding.apply { - scaleGestureDetector = ScaleGestureDetector(requireContext(), object : SimpleOnScaleGestureListener() { - private var mScaleFactor = 1.0f - - override fun onScale(detector: ScaleGestureDetector): Boolean { - mScaleFactor *= scaleGestureDetector.scaleFactor - mScaleFactor = maxOf(0.1f, minOf(mScaleFactor, 10.0f)) - imageView.scaleX = mScaleFactor - imageView.scaleY = mScaleFactor - return true - } - }) - - imageView.setOnTouchListener { v, event -> - scaleGestureDetector.onTouchEvent(event) + viewModel = medicinesDetectorViewModel + backBtn.setOnClickListener { + dismiss() + } + imageView.minimumScale = 1.0f + imageView.maximumScale = 2.5f + zoomIn.setOnClickListener { + val scale = imageView.scale + 0.4f + if (scale <= imageView.maximumScale) imageView.setScale(scale, true) + else imageView.setScale(imageView.maximumScale, true) + } + zoomOut.setOnClickListener { + val scale = imageView.scale - 0.4f + if (scale >= imageView.minimumScale) imageView.setScale(scale, true) + else imageView.setScale(imageView.minimumScale, true) } } } @@ -79,9 +49,7 @@ class DetectedImageFragment : DialogFragment() { return binding.root } - override fun getView(): View { - return binding.root - } + override fun getTheme(): Int = R.style.DialogFullscreen override fun onDestroyView() { _binding = null diff --git a/feature/camera/src/main/res/layout/fragment_detected_image_dialog.xml b/feature/camera/src/main/res/layout/fragment_detected_image_dialog.xml index 3acb2d52e..371e70d28 100644 --- a/feature/camera/src/main/res/layout/fragment_detected_image_dialog.xml +++ b/feature/camera/src/main/res/layout/fragment_detected_image_dialog.xml @@ -10,19 +10,59 @@ - + android:layout_height="match_parent"> - - + + + + + + + + \ No newline at end of file diff --git a/feature/camera/src/main/res/values/strings.xml b/feature/camera/src/main/res/values/strings.xml index c4709551d..f3d39f1f1 100644 --- a/feature/camera/src/main/res/values/strings.xml +++ b/feature/camera/src/main/res/values/strings.xml @@ -14,5 +14,8 @@ AI를 초기화하는 중입니다. Processing... + 캡처된 이미지 + 축소 + 확대 \ No newline at end of file diff --git a/feature/camera/src/main/res/values/styles.xml b/feature/camera/src/main/res/values/styles.xml new file mode 100644 index 000000000..a7e3ce1e6 --- /dev/null +++ b/feature/camera/src/main/res/values/styles.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 2a2406743..d0e21ed04 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,6 +10,7 @@ ksp = "1.8.21-1.0.11" androidGradlePlugin = "8.0.1" androidDesugarJdkLibs = "2.0.3" +photoview = "2.3.0" # androidx androidXPagingCompose = "1.0.0-alpha19" @@ -218,6 +219,7 @@ okhttp-logginginterceptor = { module = "com.squareup.okhttp3:logging-interceptor glide-main = { module = "com.github.bumptech.glide:glide", version.ref = "glide" } glide-kapt = { module = "com.github.bumptech.glide:compiler", version.ref = "glide" } glide-kapt-arch = { module = "android.arch.lifecycle:compiler", version.ref = "androidArchLifecycle" } +photo-view = { module = "com.github.chrisbanes:PhotoView", version.ref = "photoview" } # lottie -------------------------------------------------------------------------------------------------------------- lottie = { module = "com.airbnb.android:lottie", version.ref = "lottie" } diff --git a/settings.gradle.kts b/settings.gradle.kts index c63ff9d05..c1aca6307 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -4,6 +4,7 @@ pluginManagement { google() mavenCentral() gradlePluginPortal() + maven { url = uri("https://www.jitpack.io") } } } @@ -12,6 +13,7 @@ dependencyResolutionManagement { repositories { google() mavenCentral() + maven { url = uri("https://www.jitpack.io") } } } enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")