From 0ec3691cac854129e6a0d5076a3bf485d63f9d81 Mon Sep 17 00:00:00 2001 From: Ammar Githam Date: Sun, 3 Jan 2021 20:29:41 +0900 Subject: [PATCH] Fix result from image edit always null --- .../imageedit/ImageEditFragment.java | 23 ++++++++++++++----- .../viewmodels/ImageEditViewModel.java | 2 +- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/awais/instagrabber/fragments/imageedit/ImageEditFragment.java b/app/src/main/java/awais/instagrabber/fragments/imageedit/ImageEditFragment.java index 7d782b38..4a2c4881 100644 --- a/app/src/main/java/awais/instagrabber/fragments/imageedit/ImageEditFragment.java +++ b/app/src/main/java/awais/instagrabber/fragments/imageedit/ImageEditFragment.java @@ -34,12 +34,14 @@ import com.yalantis.ucrop.UCropActivity; import com.yalantis.ucrop.UCropFragment; import com.yalantis.ucrop.UCropFragmentCallback; +import java.io.File; import java.util.List; import awais.instagrabber.R; import awais.instagrabber.databinding.FragmentImageEditBinding; import awais.instagrabber.fragments.imageedit.filters.filters.Filter; import awais.instagrabber.models.SavedImageEditState; +import awais.instagrabber.utils.AppExecutors; import awais.instagrabber.utils.Utils; import awais.instagrabber.viewmodels.ImageEditViewModel; @@ -173,20 +175,29 @@ public class ImageEditFragment extends Fragment { binding.cancel.setOnClickListener(v -> { viewModel.cancel(); final NavController navController = NavHostFragment.findNavController(this); + setNavControllerResult(navController, null); navController.navigateUp(); }); binding.done.setOnClickListener(v -> { final Context context = getContext(); if (context == null) return; - Utils.mediaScanFile(context, viewModel.getDestinationFile(), (path, uri) -> { - final NavBackStackEntry navBackStackEntry = NavHostFragment.findNavController(this).getPreviousBackStackEntry(); - if (navBackStackEntry == null) return; - final SavedStateHandle savedStateHandle = navBackStackEntry.getSavedStateHandle(); - savedStateHandle.set("result", uri); - }); + final Uri resultUri = viewModel.getResultUri().getValue(); + if (resultUri == null) return; + Utils.mediaScanFile(context, new File(resultUri.toString()), (path, uri) -> AppExecutors.getInstance().mainThread().execute(() -> { + final NavController navController = NavHostFragment.findNavController(this); + setNavControllerResult(navController, resultUri); + navController.navigateUp(); + })); }); } + private void setNavControllerResult(@NonNull final NavController navController, final Uri resultUri) { + final NavBackStackEntry navBackStackEntry = navController.getPreviousBackStackEntry(); + if (navBackStackEntry == null) return; + final SavedStateHandle savedStateHandle = navBackStackEntry.getSavedStateHandle(); + savedStateHandle.set("result", resultUri); + } + private void setupCropFragment() { final Context context = getContext(); if (context == null) return; diff --git a/app/src/main/java/awais/instagrabber/viewmodels/ImageEditViewModel.java b/app/src/main/java/awais/instagrabber/viewmodels/ImageEditViewModel.java index ab4f47cd..9707e092 100644 --- a/app/src/main/java/awais/instagrabber/viewmodels/ImageEditViewModel.java +++ b/app/src/main/java/awais/instagrabber/viewmodels/ImageEditViewModel.java @@ -148,7 +148,7 @@ public class ImageEditViewModel extends AndroidViewModel { gpuImage.setFilter(new GPUImageFilterGroup(list)); final Uri uri = cropDestinationUri != null ? cropDestinationUri : originalUri; gpuImage.setImage(uri); - gpuImage.saveToPictures(new File(destinationUri.toString()), false, uri1 -> setResultUri(uri)); + gpuImage.saveToPictures(new File(destinationUri.toString()), false, uri1 -> setResultUri(destinationUri)); }); return; }