diff --git a/app/build.gradle b/app/build.gradle
index 9e0328782..25c1699ff 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -187,6 +187,7 @@ dependencies {
ktlint "com.pinterest:ktlint:0.43.0"
implementation 'org.conscrypt:conscrypt-android:2.5.2'
+ implementation 'androidx.camera:camera-core:1.0.1'
implementation 'androidx.camera:camera-camera2:1.0.1'
implementation 'androidx.camera:camera-lifecycle:1.0.1'
implementation 'androidx.camera:camera-view:1.0.0-alpha28'
diff --git a/app/src/main/java/com/nextcloud/talk/activities/TakePhotoActivity.java b/app/src/main/java/com/nextcloud/talk/activities/TakePhotoActivity.java
index 9922234ff..a3a693b94 100644
--- a/app/src/main/java/com/nextcloud/talk/activities/TakePhotoActivity.java
+++ b/app/src/main/java/com/nextcloud/talk/activities/TakePhotoActivity.java
@@ -32,6 +32,7 @@ import android.util.DisplayMetrics;
import android.util.Log;
import android.util.Size;
import android.view.OrientationEventListener;
+import android.view.ScaleGestureDetector;
import android.view.Surface;
import android.view.View;
import android.widget.Toast;
@@ -52,6 +53,7 @@ import java.util.concurrent.ExecutionException;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
+import androidx.camera.core.AspectRatio;
import androidx.camera.core.Camera;
import androidx.camera.core.ImageCapture;
import androidx.camera.core.ImageCaptureException;
@@ -76,6 +78,9 @@ public class TakePhotoActivity extends AppCompatActivity {
private final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss", Locale.ROOT);
+ private Camera camera;
+ private boolean crop = false, lowres = false;
+
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -89,13 +94,12 @@ public class TakePhotoActivity extends AppCompatActivity {
cameraProviderFuture.addListener(() -> {
try {
final ProcessCameraProvider cameraProvider = cameraProviderFuture.get();
- final Preview preview = getPreview();
- final ImageCapture imageCapture = getImageCapture();
- final Camera camera = cameraProvider.bindToLifecycle(
+
+ camera = cameraProvider.bindToLifecycle(
this,
viewModel.getCameraSelector(),
- imageCapture,
- preview);
+ getImageCapture(false, false),
+ getPreview(false));
viewModel.getTorchToggleButtonImageResource()
.observe(
@@ -110,11 +114,11 @@ public class TakePhotoActivity extends AppCompatActivity {
binding.switchCamera.setOnClickListener((v) -> {
viewModel.toggleCameraSelector();
cameraProvider.unbindAll();
- cameraProvider.bindToLifecycle(
+ camera = cameraProvider.bindToLifecycle(
this,
viewModel.getCameraSelector(),
- imageCapture,
- preview);
+ getImageCapture(crop, lowres),
+ getPreview(crop));
});
binding.retake.setOnClickListener((v) -> {
Uri uri = (Uri) binding.photoPreview.getTag();
@@ -133,6 +137,22 @@ public class TakePhotoActivity extends AppCompatActivity {
finish();
});
+ ScaleGestureDetector mDetector =
+ new ScaleGestureDetector(this, new ScaleGestureDetector.SimpleOnScaleGestureListener(){
+ @Override
+ public boolean onScale(ScaleGestureDetector detector){
+ float ratio = camera.getCameraInfo().getZoomState().getValue().getZoomRatio();
+ float delta = detector.getScaleFactor();
+ camera.getCameraControl().setZoomRatio(ratio * delta);
+ return true;
+ }
+ });
+ binding.preview.setOnTouchListener((v, event) -> {
+ v.performClick();
+ mDetector.onTouchEvent(event);
+ return true;
+ });
+
// Enable enlarging the image more than default 3x maximumScale.
// Medium scale adapted to make double-tap behaviour more consistent.
binding.photoPreview.setMaximumScale(MAX_SCALE);
@@ -182,8 +202,12 @@ public class TakePhotoActivity extends AppCompatActivity {
binding.photoPreview.setVisibility(View.VISIBLE);
}
- private ImageCapture getImageCapture() {
- final ImageCapture imageCapture = new ImageCapture.Builder().setTargetResolution(new Size(1080, 1920)).build();
+ private ImageCapture getImageCapture(boolean crop, boolean lowres) {
+ final ImageCapture imageCapture;
+ if (lowres) imageCapture = new ImageCapture.Builder()
+ .setTargetResolution(new Size(crop ? 1080 : 1440, 1920)).build();
+ else imageCapture = new ImageCapture.Builder()
+ .setTargetAspectRatio(crop ? AspectRatio.RATIO_16_9 : AspectRatio.RATIO_4_3).build();
orientationEventListener = new OrientationEventListener(this) {
@Override
@@ -288,9 +312,11 @@ public class TakePhotoActivity extends AppCompatActivity {
return rotate;
}
- private Preview getPreview() {
- Preview preview = new Preview.Builder().build();
+ private Preview getPreview(boolean crop) {
+ Preview preview = new Preview.Builder()
+ .setTargetAspectRatio(crop ? AspectRatio.RATIO_16_9 : AspectRatio.RATIO_4_3).build();
preview.setSurfaceProvider(binding.preview.getSurfaceProvider());
+
return preview;
}
diff --git a/app/src/main/res/layout/activity_take_picture.xml b/app/src/main/res/layout/activity_take_picture.xml
index b3a9c7709..fd898ba12 100644
--- a/app/src/main/res/layout/activity_take_picture.xml
+++ b/app/src/main/res/layout/activity_take_picture.xml
@@ -32,14 +32,15 @@
+ android:layout_height="match_parent"
+ app:scaleType="fitCenter" />