@@ -25,10 +25,12 @@ import android.os.Build
25
25
import android.os.Bundle
26
26
import android.view.LayoutInflater
27
27
import android.view.MenuItem
28
+ import android.view.ScaleGestureDetector
28
29
import android.view.View
29
30
import android.view.ViewGroup
30
31
import android.widget.Toast
31
32
import androidx.activity.result.contract.ActivityResultContracts
33
+ import androidx.camera.core.Camera
32
34
import androidx.camera.core.CameraSelector
33
35
import androidx.camera.core.ImageCapture
34
36
import androidx.camera.core.ImageCaptureException
@@ -70,9 +72,17 @@ class AttachmentsCameraFragment :
70
72
private var videoCapture: VideoCapture <Recorder >? = null
71
73
private var recording: Recording ? = null
72
74
73
-
75
+ private lateinit var camera : Camera
74
76
private lateinit var cameraExecutor: ExecutorService
75
77
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
+
76
86
private val requestPermissionLauncher = registerForActivityResult(
77
87
ActivityResultContracts .RequestMultiplePermissions ()
78
88
) {
@@ -86,6 +96,7 @@ class AttachmentsCameraFragment :
86
96
}
87
97
}
88
98
99
+ @SuppressLint(" ClickableViewAccessibility" )
89
100
override fun onViewCreated (view : View , savedInstanceState : Bundle ? ) {
90
101
super .onViewCreated(view, savedInstanceState)
91
102
authority = context?.packageName + " .fileProvider"
@@ -111,7 +122,12 @@ class AttachmentsCameraFragment :
111
122
views.attachmentsCameraFlip.debouncedClicks {
112
123
changeLensFacing()
113
124
}
125
+ val scaleGestureDetector = ScaleGestureDetector (context, gestureListener)
114
126
127
+ views.root.setOnTouchListener { _, event ->
128
+ scaleGestureDetector.onTouchEvent(event)
129
+ return @setOnTouchListener true
130
+ }
115
131
cameraExecutor = Executors .newSingleThreadExecutor()
116
132
}
117
133
@@ -292,7 +308,9 @@ class AttachmentsCameraFragment :
292
308
it.setSurfaceProvider(views.viewFinder.surfaceProvider)
293
309
}
294
310
295
- imageCapture = ImageCapture .Builder ().build()
311
+ imageCapture = ImageCapture .Builder ()
312
+ .setCaptureMode(ImageCapture .CAPTURE_MODE_MINIMIZE_LATENCY )
313
+ .build()
296
314
297
315
val recorder = Recorder .Builder ()
298
316
.setQualitySelector(QualitySelector .from(Quality .HIGHEST ))
@@ -304,7 +322,7 @@ class AttachmentsCameraFragment :
304
322
cameraProvider.unbindAll()
305
323
306
324
// Bind use cases to camera
307
- cameraProvider.bindToLifecycle(
325
+ camera = cameraProvider.bindToLifecycle(
308
326
this , cameraSelector, preview, imageCapture, videoCapture
309
327
)
310
328
} catch (exc: Exception ) {
0 commit comments