From 98bb23921929a2d15dd2cf6e2c40082277f14c43 Mon Sep 17 00:00:00 2001 From: Dmitriy Grigorev Date: Mon, 15 Oct 2018 16:22:38 +0300 Subject: [PATCH 1/2] Added Camera mode to Config for using Back and Front --- .../com/miguelbcr/ui/rx_paparazzo2/entities/Config.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/rx_paparazzo/src/main/java/com/miguelbcr/ui/rx_paparazzo2/entities/Config.java b/rx_paparazzo/src/main/java/com/miguelbcr/ui/rx_paparazzo2/entities/Config.java index 3220b31..adc4d1e 100644 --- a/rx_paparazzo/src/main/java/com/miguelbcr/ui/rx_paparazzo2/entities/Config.java +++ b/rx_paparazzo/src/main/java/com/miguelbcr/ui/rx_paparazzo2/entities/Config.java @@ -44,6 +44,7 @@ public class Config { private String fileProviderAuthority; private String fileProviderDirectory; + private CameraMode cameraMode; public Config() { this.size = new ScreenSize(); @@ -58,6 +59,7 @@ public Config() { this.fileProviderAuthority = null; this.fileProviderDirectory = null; this.maximumFileSize = NO_FILESIZE_LIMIT; + this.cameraMode = CameraMode.BACK; } public void setMaximumFileSize(long maximumFileSize) { @@ -182,4 +184,11 @@ public String getFileProviderDirectory() { return fileProviderDirectory; } + public CameraMode getCameraMode() { + return cameraMode; + } + + public void setCameraMode(CameraMode cameraMode) { + this.cameraMode = cameraMode; + } } From bd0df25c2d6c08b0f831b139922e32500adca863 Mon Sep 17 00:00:00 2001 From: Dmitriy Grigorev Date: Mon, 15 Oct 2018 17:10:35 +0300 Subject: [PATCH 2/2] Added Camera mode switching --- README.md | 10 +++++++++- app/src/main/AndroidManifest.xml | 2 ++ .../sample/activities/SampleActivity.java | 15 +++++++++++++-- .../sample/fragments/SampleFragment.java | 13 ++++++++++++- app/src/main/res/layout/sample_layout.xml | 8 ++++++++ .../miguelbcr/ui/rx_paparazzo2/RxPaparazzo.java | 6 ++++++ .../ui/rx_paparazzo2/entities/CameraMode.java | 9 +++++++++ .../ui/rx_paparazzo2/interactors/TakePhoto.java | 14 +++++++++++++- 8 files changed, 72 insertions(+), 5 deletions(-) create mode 100644 rx_paparazzo/src/main/java/com/miguelbcr/ui/rx_paparazzo2/entities/CameraMode.java diff --git a/README.md b/README.md index 8284b4e..367070c 100644 --- a/README.md +++ b/README.md @@ -210,7 +210,15 @@ RxPaparazzo.multiple(activityOrFragment) .size(new ScreenSize()) .usingGallery() ``` - + +### Camera mode +Switching camera for front or back. By default back set +```java +RxPaparazzo.single(activityOrFragment) + .setCameraMode(CameraMode.FRONT) + .usingCamera() +``` + ### Cropping support for image. This feature is available thanks to the amazing library [uCrop](https://github.com/Yalantis/uCrop) authored by [Yalantis](https://github.com/Yalantis) group. diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b9c758f..4fe3127 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,6 +3,8 @@ package="com.miguelbcr.ui.rx_paparazzo2.sample"> + + fileDataList; private Size size; + private boolean isFrontCameraMode = false; @Override protected void onCreate(Bundle savedInstanceState) { @@ -66,7 +69,7 @@ protected void onSaveInstanceState(Bundle outState) { } private void configureToolbar() { - Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); getSupportActionBar().setTitle(R.string.app_name); } @@ -74,7 +77,7 @@ private void configureToolbar() { private void initViews() { LinearLayoutManager layoutManager = new LinearLayoutManager(this); layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); - recyclerView = (RecyclerView) findViewById(R.id.rv_images); + recyclerView = findViewById(R.id.rv_images); recyclerView.setHasFixedSize(true); recyclerView.setLayoutManager(layoutManager); @@ -88,6 +91,8 @@ private void initViews() { .setOnClickListener(v -> pickupMultipleTypesFile()); findViewById(R.id.fab_pickup_multiple_types_files) .setOnClickListener(v -> pickupMultipleTypesFiles()); + ((Switch)findViewById(R.id.switch_camera_mode)) + .setOnCheckedChangeListener((buttonView, isChecked) -> switchCameraMode(isChecked)); loadImages(); } @@ -96,6 +101,7 @@ private void captureImage() { CustomMaxSize size = new CustomMaxSize(512); Observable> takeOnePhoto = pickSingle(null, size) + .setCameraMode(isFrontCameraMode ? CameraMode.FRONT : CameraMode.BACK) .usingCamera(); processSingle(takeOnePhoto); @@ -108,6 +114,7 @@ private void captureImageWithCrop() { OriginalSize size = new OriginalSize(); Observable> takePhotoAndCrop = pickSingle(options, size) + .setCameraMode(isFrontCameraMode ? CameraMode.FRONT : CameraMode.BACK) .usingCamera(); processSingle(takePhotoAndCrop); @@ -252,6 +259,10 @@ private void loadImages() { recyclerView.setAdapter(new ImagesAdapter(fileDataList)); } + private void switchCameraMode(boolean isChecked) { + this.isFrontCameraMode = isChecked; + } + @Override public List getFileDatas() { return fileDataList; diff --git a/app/src/main/java/com/miguelbcr/ui/rx_paparazzo2/sample/fragments/SampleFragment.java b/app/src/main/java/com/miguelbcr/ui/rx_paparazzo2/sample/fragments/SampleFragment.java index ca8268a..048f0ff 100644 --- a/app/src/main/java/com/miguelbcr/ui/rx_paparazzo2/sample/fragments/SampleFragment.java +++ b/app/src/main/java/com/miguelbcr/ui/rx_paparazzo2/sample/fragments/SampleFragment.java @@ -8,9 +8,11 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Switch; import android.widget.Toast; import com.miguelbcr.ui.rx_paparazzo2.RxPaparazzo; +import com.miguelbcr.ui.rx_paparazzo2.entities.CameraMode; import com.miguelbcr.ui.rx_paparazzo2.entities.FileData; import com.miguelbcr.ui.rx_paparazzo2.entities.Response; import com.miguelbcr.ui.rx_paparazzo2.entities.size.CustomMaxSize; @@ -37,6 +39,7 @@ public class SampleFragment extends Fragment implements Testable { private RecyclerView recyclerView; private ArrayList fileDataList; private Size size; + private boolean isFrontCameraMode = false; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -72,7 +75,7 @@ private void initViews() { LinearLayoutManager layoutManager = new LinearLayoutManager(getContext()); layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); - recyclerView = (RecyclerView) view.findViewById(R.id.rv_images); + recyclerView = view.findViewById(R.id.rv_images); recyclerView.setHasFixedSize(true); recyclerView.setLayoutManager(layoutManager); @@ -86,6 +89,8 @@ private void initViews() { .setOnClickListener(v -> pickupMultipleTypesFile()); view.findViewById(R.id.fab_pickup_multiple_types_files) .setOnClickListener(v -> pickupMultipleTypesFiles()); + ((Switch)view.findViewById(R.id.switch_camera_mode)) + .setOnCheckedChangeListener((buttonView, isChecked) -> switchCameraMode(isChecked)); loadImages(); } @@ -94,6 +99,7 @@ private void captureImage() { SmallSize size = new SmallSize(); Observable> takeOnePhoto = pickSingle(null, size) + .setCameraMode(isFrontCameraMode ? CameraMode.FRONT : CameraMode.BACK) .usingCamera(); processSingle(takeOnePhoto); @@ -108,6 +114,7 @@ private void captureImageWithCrop() { OriginalSize size = new OriginalSize(); Observable> takePhotoAndCrop = pickSingle(options, size) + .setCameraMode(isFrontCameraMode ? CameraMode.FRONT : CameraMode.BACK) .usingCamera(); processSingle(takePhotoAndCrop); @@ -251,6 +258,10 @@ private void loadImages(List fileDataList) { recyclerView.setAdapter(new ImagesAdapter(fileDataList)); } + private void switchCameraMode(boolean isChecked) { + this.isFrontCameraMode = isChecked; + } + @Override public List getFileDatas() { return fileDataList; diff --git a/app/src/main/res/layout/sample_layout.xml b/app/src/main/res/layout/sample_layout.xml index 3bc649e..3ba3ffe 100644 --- a/app/src/main/res/layout/sample_layout.xml +++ b/app/src/main/res/layout/sample_layout.xml @@ -159,6 +159,14 @@ android:layout_weight="1"/> + + revokeFileReadWritePermissions(final TargetUi targetUi, final Uri uri) { return new Function() { - @Override public Uri apply(Intent data) throws Exception { + @Override public Uri apply(Intent data) { PermissionUtil.revokeFileReadWritePermissions(targetUi, uri); return uri; @@ -94,6 +96,16 @@ private Intent getIntentCamera(Uri uri) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); + if (CameraMode.FRONT.equals(config.getCameraMode())) { + intent.putExtra("android.intent.extras.CAMERA_FACING", android.hardware.Camera.CameraInfo.CAMERA_FACING_FRONT); + intent.putExtra("android.intent.extras.LENS_FACING_FRONT", 1); + intent.putExtra("android.intent.extra.USE_FRONT_CAMERA", true); + } else { + intent.putExtra("android.intent.extras.CAMERA_FACING", Camera.CameraInfo.CAMERA_FACING_BACK); + intent.putExtra("android.intent.extras.LENS_FACING_FRONT", 0); + intent.putExtra("android.intent.extra.USE_FRONT_CAMERA", false); + } + return PermissionUtil.requestReadWritePermission(targetUi, intent, uri); }