From 77cd18c56032d34e89847efd98ebd78a669e29af Mon Sep 17 00:00:00 2001 From: parneet-guraya Date: Thu, 17 Oct 2024 19:30:56 +0530 Subject: [PATCH] refactor camera launcher Signed-off-by: parneet-guraya --- .../locations/BookmarkLocationsFragment.java | 5 +- .../contributions/ContributionController.java | 12 +++-- .../ContributionsListFragment.java | 4 +- .../nrw/commons/filepicker/FilePicker.java | 52 +++++++++---------- .../commons/nearby/PlaceAdapterDelegate.kt | 4 +- .../fragments/NearbyParentFragment.java | 4 +- .../commons/nearby/fragments/PlaceAdapter.kt | 4 +- .../commons/settings/SettingsFragment.java | 4 +- 8 files changed, 50 insertions(+), 39 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/locations/BookmarkLocationsFragment.java b/app/src/main/java/fr/free/nrw/commons/bookmarks/locations/BookmarkLocationsFragment.java index 9ebbf90fe..521f7df56 100644 --- a/app/src/main/java/fr/free/nrw/commons/bookmarks/locations/BookmarkLocationsFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/bookmarks/locations/BookmarkLocationsFragment.java @@ -37,7 +37,9 @@ public class BookmarkLocationsFragment extends DaggerFragment { private ActivityResultLauncher cameraPickLauncherForResult = registerForActivityResult(new StartActivityForResult(), result -> { - // TODO handle result from controller + contributionController.handleActivityResultWithCallback(requireActivity(),callbacks -> { + contributionController.onPictureReturnedFromCamera(result,requireActivity(),callbacks); + }); }); private ActivityResultLauncher galleryPickLauncherForResult = registerForActivityResult(new StartActivityForResult(), @@ -99,7 +101,6 @@ public class BookmarkLocationsFragment extends DaggerFragment { commonPlaceClickActions, inAppCameraLocationPermissionLauncher, galleryPickLauncherForResult, - //TODO[Parry] just a stub, make sure if this is actually the launcher we need!! cameraPickLauncherForResult ); diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionController.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionController.java index ecd441fc7..1bd17e749 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionController.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionController.java @@ -113,7 +113,7 @@ public class ContributionController { public void onLocationPermissionGranted() { if (!locationPermissionsHelper.isLocationAccessToAppsTurnedOn()) { showLocationOffDialog(activity, R.string.in_app_camera_needs_location, - R.string.in_app_camera_location_unavailable); + R.string.in_app_camera_location_unavailable, resultLauncher); } else { initiateCameraUpload(activity, resultLauncher); } @@ -138,9 +138,10 @@ public class ContributionController { * @param activity Activity reference * @param dialogTextResource Resource id of text to be shown in dialog * @param toastTextResource Resource id of text to be shown in toast + * @param resultLauncher */ private void showLocationOffDialog(Activity activity, int dialogTextResource, - int toastTextResource) { + int toastTextResource, ActivityResultLauncher resultLauncher) { DialogUtil .showAlertDialog(activity, activity.getString(R.string.ask_to_turn_location_on), @@ -151,8 +152,7 @@ public class ContributionController { () -> { Toast.makeText(activity, activity.getString(toastTextResource), Toast.LENGTH_LONG).show(); - //TODO [Parry] why do we need this call??? -// initiateCameraUpload(activity); + initiateCameraUpload(activity,resultLauncher); } ); } @@ -270,6 +270,10 @@ public class ContributionController { FilePicker.onPictureReturnedFromCustomSelector(result,activity,callbacks); } + public void onPictureReturnedFromCamera(ActivityResult result, Activity activity, @NonNull FilePicker.Callbacks callbacks) { + FilePicker.onPictureReturnedFromCamera(result,activity,callbacks); + } + /** * Attaches callback for file picker. */ diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java index 798fb0e0b..e8d862b52 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java @@ -114,7 +114,9 @@ public class ContributionsListFragment extends CommonsDaggerSupportFragment impl private ActivityResultLauncher cameraPickLauncherForResult = registerForActivityResult(new StartActivityForResult(), result -> { - // TODO handle result from controller + controller.handleActivityResultWithCallback(requireActivity(),callbacks -> { + controller.onPictureReturnedFromCamera(result,requireActivity(),callbacks); + }); }); private ActivityResultLauncher inAppCameraLocationPermissionLauncher = registerForActivityResult( diff --git a/app/src/main/java/fr/free/nrw/commons/filepicker/FilePicker.java b/app/src/main/java/fr/free/nrw/commons/filepicker/FilePicker.java index 592fc0ea7..d76ed195f 100644 --- a/app/src/main/java/fr/free/nrw/commons/filepicker/FilePicker.java +++ b/app/src/main/java/fr/free/nrw/commons/filepicker/FilePicker.java @@ -135,7 +135,6 @@ public class FilePicker implements Constants { */ public static void openCameraForImage(Activity activity, ActivityResultLauncher resultLauncher, int type) { Intent intent = createCameraForImageIntent(activity, type); - //TODO[Parry] we're not using the result anyways. // activity.startActivityForResult(intent, RequestCodes.TAKE_PICTURE); resultLauncher.launch(intent); } @@ -179,8 +178,7 @@ public class FilePicker implements Constants { } else if (requestCode == RequestCodes.PICK_PICTURE_FROM_CUSTOM_SELECTOR) { // onPictureReturnedFromCustomSelector(data, activity, callbacks); } else if (requestCode == RequestCodes.TAKE_PICTURE) { - //TODO[Parry] why handle the result , when not using it in the first place??? - onPictureReturnedFromCamera(activity, callbacks); +// onPictureReturnedFromCamera(activity, callbacks); } } else { if (requestCode == RequestCodes.PICK_PICTURE_FROM_DOCUMENTS) { @@ -337,36 +335,38 @@ public class FilePicker implements Constants { return files; } - private static void onPictureReturnedFromCamera(Activity activity, @NonNull FilePicker.Callbacks callbacks) { - try { - String lastImageUri = PreferenceManager.getDefaultSharedPreferences(activity).getString(KEY_PHOTO_URI, null); - if (!TextUtils.isEmpty(lastImageUri)) { - revokeWritePermission(activity, Uri.parse(lastImageUri)); - } - - UploadableFile photoFile = FilePicker.takenCameraPicture(activity); - List files = new ArrayList<>(); - files.add(photoFile); - - if (photoFile == null) { - Exception e = new IllegalStateException("Unable to get the picture returned from camera"); - callbacks.onImagePickerError(e, FilePicker.ImageSource.CAMERA_IMAGE, restoreType(activity)); - } else { - if (configuration(activity).shouldCopyTakenPhotosToPublicGalleryAppFolder()) { - PickedFiles.copyFilesInSeparateThread(activity, singleFileList(photoFile)); + public static void onPictureReturnedFromCamera(ActivityResult activityResult, Activity activity, @NonNull FilePicker.Callbacks callbacks) { + if(activityResult.getResultCode() == Activity.RESULT_OK){ + try { + String lastImageUri = PreferenceManager.getDefaultSharedPreferences(activity).getString(KEY_PHOTO_URI, null); + if (!TextUtils.isEmpty(lastImageUri)) { + revokeWritePermission(activity, Uri.parse(lastImageUri)); } - callbacks.onImagesPicked(files, FilePicker.ImageSource.CAMERA_IMAGE, restoreType(activity)); - } + UploadableFile photoFile = FilePicker.takenCameraPicture(activity); + List files = new ArrayList<>(); + files.add(photoFile); - PreferenceManager.getDefaultSharedPreferences(activity) + if (photoFile == null) { + Exception e = new IllegalStateException("Unable to get the picture returned from camera"); + callbacks.onImagePickerError(e, FilePicker.ImageSource.CAMERA_IMAGE, restoreType(activity)); + } else { + if (configuration(activity).shouldCopyTakenPhotosToPublicGalleryAppFolder()) { + PickedFiles.copyFilesInSeparateThread(activity, singleFileList(photoFile)); + } + + callbacks.onImagesPicked(files, FilePicker.ImageSource.CAMERA_IMAGE, restoreType(activity)); + } + + PreferenceManager.getDefaultSharedPreferences(activity) .edit() .remove(KEY_LAST_CAMERA_PHOTO) .remove(KEY_PHOTO_URI) .apply(); - } catch (Exception e) { - e.printStackTrace(); - callbacks.onImagePickerError(e, FilePicker.ImageSource.CAMERA_IMAGE, restoreType(activity)); + } catch (Exception e) { + e.printStackTrace(); + callbacks.onImagePickerError(e, FilePicker.ImageSource.CAMERA_IMAGE, restoreType(activity)); + } } } diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/PlaceAdapterDelegate.kt b/app/src/main/java/fr/free/nrw/commons/nearby/PlaceAdapterDelegate.kt index ed578aedf..5855a1c7c 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/PlaceAdapterDelegate.kt +++ b/app/src/main/java/fr/free/nrw/commons/nearby/PlaceAdapterDelegate.kt @@ -29,7 +29,7 @@ fun placeAdapterDelegate( onDirectionsClicked: (Place) -> Unit, onDirectionsLongPressed: () -> Boolean, inAppCameraLocationPermissionLauncher: ActivityResultLauncher>, - resultLauncher: ActivityResultLauncher, + cameraPickLauncherForResult: ActivityResultLauncher, galleryPickLauncherForResult: ActivityResultLauncher ) = adapterDelegateViewBinding({ layoutInflater, parent -> ItemPlaceBinding.inflate(layoutInflater, parent, false) @@ -47,7 +47,7 @@ fun placeAdapterDelegate( onItemClick?.invoke(item) } } - nearbyButtonLayout.cameraButton.setOnClickListener { onCameraClicked(item, inAppCameraLocationPermissionLauncher, resultLauncher) } + nearbyButtonLayout.cameraButton.setOnClickListener { onCameraClicked(item, inAppCameraLocationPermissionLauncher, cameraPickLauncherForResult) } nearbyButtonLayout.cameraButton.setOnLongClickListener { onCameraLongPressed() } nearbyButtonLayout.galleryButton.setOnClickListener { onGalleryClicked(item,galleryPickLauncherForResult) } diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyParentFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyParentFragment.java index f1a4a4540..e29b2be09 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyParentFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyParentFragment.java @@ -243,7 +243,9 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment private ActivityResultLauncher cameraPickLauncherForResult = registerForActivityResult(new StartActivityForResult(), result -> { - // TODO handle result from controller + controller.handleActivityResultWithCallback(requireActivity(),callbacks -> { + controller.onPictureReturnedFromCamera(result,requireActivity(),callbacks); + }); }); private ActivityResultLauncher inAppCameraLocationPermissionLauncher = registerForActivityResult( diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/fragments/PlaceAdapter.kt b/app/src/main/java/fr/free/nrw/commons/nearby/fragments/PlaceAdapter.kt index 4f99866dd..e5cc92667 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/fragments/PlaceAdapter.kt +++ b/app/src/main/java/fr/free/nrw/commons/nearby/fragments/PlaceAdapter.kt @@ -14,7 +14,7 @@ class PlaceAdapter( commonPlaceClickActions: CommonPlaceClickActions, inAppCameraLocationPermissionLauncher: ActivityResultLauncher>, galleryPickLauncherForResult: ActivityResultLauncher, - resultLauncherStub: ActivityResultLauncher + cameraPickLauncherForResult: ActivityResultLauncher ) : BaseDelegateAdapter( placeAdapterDelegate( bookmarkLocationsDao, @@ -30,7 +30,7 @@ class PlaceAdapter( commonPlaceClickActions.onDirectionsClicked(), commonPlaceClickActions.onDirectionsLongPressed(), inAppCameraLocationPermissionLauncher, - resultLauncherStub, + cameraPickLauncherForResult, galleryPickLauncherForResult ), areItemsTheSame = { oldItem, newItem -> oldItem.wikiDataEntityId == newItem.wikiDataEntityId }, diff --git a/app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.java b/app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.java index 39bbb0223..b352740a6 100644 --- a/app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.java @@ -89,7 +89,9 @@ public class SettingsFragment extends PreferenceFragmentCompat { private ActivityResultLauncher cameraPickLauncherForResult = registerForActivityResult(new StartActivityForResult(), result -> { - // TODO handle result from controller + contributionController.handleActivityResultWithCallback(requireActivity(),callbacks -> { + contributionController.onPictureReturnedFromCamera(result,requireActivity(),callbacks); + }); }); private ActivityResultLauncher inAppCameraLocationPermissionLauncher = registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), new ActivityResultCallback>() {