Skip to content

Commit e916709

Browse files
committed
Add gesture to zoom in camera view
1 parent a215fe2 commit e916709

File tree

1 file changed

+21
-3
lines changed

1 file changed

+21
-3
lines changed

vector/src/main/java/im/vector/app/features/attachments/camera/AttachmentsCameraFragment.kt

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,12 @@ import android.os.Build
2525
import android.os.Bundle
2626
import android.view.LayoutInflater
2727
import android.view.MenuItem
28+
import android.view.ScaleGestureDetector
2829
import android.view.View
2930
import android.view.ViewGroup
3031
import android.widget.Toast
3132
import androidx.activity.result.contract.ActivityResultContracts
33+
import androidx.camera.core.Camera
3234
import androidx.camera.core.CameraSelector
3335
import androidx.camera.core.ImageCapture
3436
import androidx.camera.core.ImageCaptureException
@@ -70,9 +72,17 @@ class AttachmentsCameraFragment :
7072
private var videoCapture: VideoCapture<Recorder>? = null
7173
private var recording: Recording? = null
7274

73-
75+
private lateinit var camera: Camera
7476
private lateinit var cameraExecutor: ExecutorService
7577

78+
private val gestureListener = object : ScaleGestureDetector.SimpleOnScaleGestureListener() {
79+
override fun onScale(detector: ScaleGestureDetector): Boolean {
80+
val scale = camera.cameraInfo.zoomState.value!!.zoomRatio * detector.scaleFactor
81+
camera.cameraControl.setZoomRatio(scale)
82+
return true
83+
}
84+
}
85+
7686
private val requestPermissionLauncher = registerForActivityResult(
7787
ActivityResultContracts.RequestMultiplePermissions()
7888
) {
@@ -86,6 +96,7 @@ class AttachmentsCameraFragment :
8696
}
8797
}
8898

99+
@SuppressLint("ClickableViewAccessibility")
89100
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
90101
super.onViewCreated(view, savedInstanceState)
91102
authority = context?.packageName + ".fileProvider"
@@ -111,7 +122,12 @@ class AttachmentsCameraFragment :
111122
views.attachmentsCameraFlip.debouncedClicks {
112123
changeLensFacing()
113124
}
125+
val scaleGestureDetector = ScaleGestureDetector(context, gestureListener)
114126

127+
views.root.setOnTouchListener { _, event ->
128+
scaleGestureDetector.onTouchEvent(event)
129+
return@setOnTouchListener true
130+
}
115131
cameraExecutor = Executors.newSingleThreadExecutor()
116132
}
117133

@@ -292,7 +308,9 @@ class AttachmentsCameraFragment :
292308
it.setSurfaceProvider(views.viewFinder.surfaceProvider)
293309
}
294310

295-
imageCapture = ImageCapture.Builder().build()
311+
imageCapture = ImageCapture.Builder()
312+
.setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
313+
.build()
296314

297315
val recorder = Recorder.Builder()
298316
.setQualitySelector(QualitySelector.from(Quality.HIGHEST))
@@ -304,7 +322,7 @@ class AttachmentsCameraFragment :
304322
cameraProvider.unbindAll()
305323

306324
// Bind use cases to camera
307-
cameraProvider.bindToLifecycle(
325+
camera = cameraProvider.bindToLifecycle(
308326
this, cameraSelector, preview, imageCapture, videoCapture
309327
)
310328
} catch (exc: Exception) {

0 commit comments

Comments
 (0)