From fed45c298b0e78e4769ccf30b2f9a092d5a4de7c Mon Sep 17 00:00:00 2001 From: Captain Arepa Date: Fri, 17 May 2024 11:28:30 -0400 Subject: [PATCH] control commit --- .../cameraxtestappjava/MainActivity.java | 5 +- .../camera/CustomCamera.java | 104 +++++++++++------- .../main/res/layout/custom_camera_view.xml | 30 ++--- 3 files changed, 80 insertions(+), 59 deletions(-) diff --git a/app/src/main/java/com/example/cameraxtestappjava/MainActivity.java b/app/src/main/java/com/example/cameraxtestappjava/MainActivity.java index 2deeda8..bd1cf0b 100644 --- a/app/src/main/java/com/example/cameraxtestappjava/MainActivity.java +++ b/app/src/main/java/com/example/cameraxtestappjava/MainActivity.java @@ -3,6 +3,7 @@ package com.example.cameraxtestappjava; import android.content.ContentValues; import android.net.Uri; import android.os.Bundle; +import android.util.Log; import android.widget.Toast; import androidx.activity.EdgeToEdge; @@ -43,7 +44,9 @@ public class MainActivity extends AppCompatActivity { customCamera = new CustomCamera(this); customCamera.initCustomCamera(this, ContextCompat.getMainExecutor(this), this); - binding.scSegpassCameraView.takePictureBtn.setOnClickListener(v -> takePicture()); + Log.d("TAGTAG", "UEEEPA"); + + //binding.scSegpassCameraView.takePictureBtn.setOnClickListener(v -> takePicture()); ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> { Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); diff --git a/app/src/main/java/com/example/cameraxtestappjava/camera/CustomCamera.java b/app/src/main/java/com/example/cameraxtestappjava/camera/CustomCamera.java index 16ebb68..39267bc 100644 --- a/app/src/main/java/com/example/cameraxtestappjava/camera/CustomCamera.java +++ b/app/src/main/java/com/example/cameraxtestappjava/camera/CustomCamera.java @@ -2,11 +2,13 @@ package com.example.cameraxtestappjava.camera; import android.content.ContentValues; import android.content.Context; +import android.graphics.SurfaceTexture; import android.net.Uri; import android.os.Build; import android.provider.MediaStore; import android.util.AttributeSet; import android.util.Log; +import android.view.TextureView; import android.view.View; import android.widget.FrameLayout; @@ -27,7 +29,9 @@ import com.google.common.util.concurrent.ListenableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.Executor; -public class CustomCamera extends FrameLayout { +public class CustomCamera extends FrameLayout implements TextureView.SurfaceTextureListener { + + private final String TAG = this.getClass().getSimpleName(); // View private final View rootView; @@ -40,23 +44,22 @@ public class CustomCamera extends FrameLayout { private LifecycleOwner mLifecycleOwner; // Camera - private ProcessCameraProvider cameraProvider; - private ImageCapture imageCapture; - private ImageCapture.OutputFileOptions outputFileOptions; - private ListenableFuture cameraProviderFuture; - private ContentValues contentValues; - private String fileName; - private Uri tempFileUri; + private ProcessCameraProvider mCameraProvider; + private ImageCapture mImageCapture; + private ListenableFuture mCameraProviderFuture; + private Uri mTempFileUri; public CustomCamera(@NonNull Context context) { super(context); rootView = inflate(context, R.layout.custom_camera_view, this); + findIds(); } public CustomCamera(@NonNull Context context, @Nullable AttributeSet attrs) { super(context, attrs); // Aqui van los estilos y todo eso si se requiere rootView = inflate(context, R.layout.custom_camera_view, this); + findIds(); } public void initCustomCamera(@NonNull Context context, Executor executor, LifecycleOwner lifecycleOwner) { @@ -67,13 +70,12 @@ public class CustomCamera extends FrameLayout { } private void initComponents() { - findIds(); initializeCamera(); initializeListeners(); } private void findIds() { - cameraViewFinder = rootView.findViewById(R.id.pvViewfinder); + cameraViewFinder = rootView.findViewById(R.id.pvCameraViewFinder); takePictureBtn = rootView.findViewById(R.id.btnTakePicture); } @@ -83,51 +85,55 @@ public class CustomCamera extends FrameLayout { // El callback se tiene que implementar del lado de la aplicacion integradora public void capturePhoto(CustomCameraCallback callback) { - if (imageCapture == null) return; + if (mImageCapture == null) return; - fileName = System.currentTimeMillis() + ""; + String mFileName = System.currentTimeMillis() + ""; - outputFileOptions = getOutputFileOptions(fileName); + ImageCapture.OutputFileOptions mIutputFileOptions = getOutputFileOptions(mFileName); - imageCapture.takePicture(outputFileOptions, mExecutor, new ImageCapture.OnImageSavedCallback() { - @Override - public void onImageSaved(@NonNull ImageCapture.OutputFileResults outputFileResults) { - tempFileUri = outputFileResults.getSavedUri(); - callback.onPictureTakenSuccess("Image saved! " + tempFileUri); - //Toast.makeText(mContext, "Image saved! " + tempFileUri, Toast.LENGTH_LONG).show(); - } + try { + mImageCapture.takePicture(mIutputFileOptions, mExecutor, new ImageCapture.OnImageSavedCallback() { + @Override + public void onImageSaved(@NonNull ImageCapture.OutputFileResults outputFileResults) { + mTempFileUri = outputFileResults.getSavedUri(); + callback.onPictureTakenSuccess("Image saved! " + mTempFileUri); + //Toast.makeText(mContext, "Image saved! " + tempFileUri, Toast.LENGTH_LONG).show(); + } + + @Override + public void onError(@NonNull ImageCaptureException exception) { + callback.onPictureTakenFailError(exception.getMessage()); + //Toast.makeText(mContext, "Image Not Saved " + exception.getMessage(), Toast.LENGTH_LONG).show(); + } + }); + } catch (Exception e) { + callback.onPictureTakenFailError(e.getMessage()); + } - @Override - public void onError(@NonNull ImageCaptureException exception) { - callback.onPictureTakenFailError(exception.getMessage()); - //Toast.makeText(mContext, "Image Not Saved " + exception.getMessage(), Toast.LENGTH_LONG).show(); - } - }); } - @NonNull private ImageCapture.OutputFileOptions getOutputFileOptions(String name) { - contentValues = new ContentValues(); - contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, name); - contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "image/jpeg"); + ContentValues mContentValues = new ContentValues(); + mContentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, name); + mContentValues.put(MediaStore.MediaColumns.MIME_TYPE, "image/jpeg"); if (Build.VERSION.SDK_INT > Build.VERSION_CODES.P) { - contentValues.put(MediaStore.Images.Media.RELATIVE_PATH, "Pictures/CameraXTestApp"); + mContentValues.put(MediaStore.Images.Media.RELATIVE_PATH, "Pictures/CameraXTestApp"); } return new ImageCapture.OutputFileOptions.Builder( - mContext.getContentResolver(), MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues + mContext.getContentResolver(), MediaStore.Images.Media.EXTERNAL_CONTENT_URI, mContentValues ).build(); } private void initializeCamera() { - cameraProviderFuture = ProcessCameraProvider.getInstance(mContext); - cameraProviderFuture.addListener(() -> { + mCameraProviderFuture = ProcessCameraProvider.getInstance(mContext); + mCameraProviderFuture.addListener(() -> { try { - cameraProvider = cameraProviderFuture.get(); - startCustomCamera(cameraProvider); + mCameraProvider = mCameraProviderFuture.get(); + startCustomCamera(mCameraProvider); } catch (ExecutionException | InterruptedException e) { throw new RuntimeException(e); } @@ -142,15 +148,37 @@ public class CustomCamera extends FrameLayout { Preview preview = new Preview.Builder().build(); preview.setSurfaceProvider(cameraViewFinder.getSurfaceProvider()); - imageCapture = new ImageCapture.Builder().build(); + mImageCapture = new ImageCapture.Builder().build(); try { cameraProvider.unbindAll(); - cameraProvider.bindToLifecycle(mLifecycleOwner, cameraSelector, preview, imageCapture); + cameraProvider.bindToLifecycle(mLifecycleOwner, cameraSelector, preview, mImageCapture); } catch (Exception e) { e.printStackTrace(); } } + + // Surface Texture Listeners + + @Override + public void onSurfaceTextureAvailable(@NonNull SurfaceTexture surface, int width, int height) { + startCustomCamera(mCameraProvider); + } + + @Override + public void onSurfaceTextureSizeChanged(@NonNull SurfaceTexture surface, int width, int height) { + Log.d(TAG, "STUFF"); + } + + @Override + public boolean onSurfaceTextureDestroyed(@NonNull SurfaceTexture surface) { + return false; + } + + @Override + public void onSurfaceTextureUpdated(@NonNull SurfaceTexture surface) { + Log.d(TAG, "MORE STUFF"); + } } diff --git a/app/src/main/res/layout/custom_camera_view.xml b/app/src/main/res/layout/custom_camera_view.xml index 80c0922..3464672 100644 --- a/app/src/main/res/layout/custom_camera_view.xml +++ b/app/src/main/res/layout/custom_camera_view.xml @@ -1,36 +1,26 @@ - - - + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> - + android:orientation="horizontal"> - - - \ No newline at end of file +