From 191186a474108813cfd72b546b57e63454696488 Mon Sep 17 00:00:00 2001 From: Arin Modi Date: Mon, 30 Jan 2023 19:11:41 +0530 Subject: [PATCH] =?UTF-8?q?Fix=20#5104:=20popup=20shown=20when=20tapping?= =?UTF-8?q?=20an=20already=20uploaded=20image=20in=20Medi=E2=80=A6=20(#512?= =?UTF-8?q?7)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix #5104: popup shown when tapping an already uploaded image in Media Details * Small Changes * JavaDoc Changes * Javadoc Changes * Coding Standards Changes --- .../commons/media/MediaDetailFragment.java | 37 +++++++++++++++++-- .../nrw/commons/media/ZoomableActivity.kt | 32 ++++++++++++---- 2 files changed, 59 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java index 2a930bdfc..3e0d59ebd 100644 --- a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java @@ -11,6 +11,9 @@ import static fr.free.nrw.commons.description.EditDescriptionConstants.UPDATED_W import static fr.free.nrw.commons.description.EditDescriptionConstants.WIKITEXT; import static fr.free.nrw.commons.upload.mediaDetails.UploadMediaDetailFragment.LAST_LOCATION; import static fr.free.nrw.commons.utils.LangCodeUtils.getLocalizedResources; + +import android.Manifest; +import android.Manifest.permission; import android.annotation.SuppressLint; import android.app.AlertDialog; import android.content.Context; @@ -81,6 +84,7 @@ import fr.free.nrw.commons.ui.widget.HtmlTextView; import fr.free.nrw.commons.upload.categories.UploadCategoriesFragment; import fr.free.nrw.commons.upload.depicts.DepictsFragment; import fr.free.nrw.commons.upload.UploadMediaDetail; +import fr.free.nrw.commons.utils.PermissionUtils; import fr.free.nrw.commons.utils.ViewUtilWrapper; import io.reactivex.Single; import io.reactivex.android.schedulers.AndroidSchedulers; @@ -356,11 +360,38 @@ public class MediaDetailFragment extends CommonsDaggerSupportFragment implements } @OnClick(R.id.mediaDetailImageViewSpacer) - public void launchZoomActivity(View view) { + public void launchZoomActivity(final View view) { + final boolean permission = PermissionUtils. + hasPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE); + + if (permission) { + launchZoomActivityAfterPermissionCheck(view); + } + else { + PermissionUtils.checkPermissionsAndPerformAction(getActivity(), + Manifest.permission.READ_EXTERNAL_STORAGE, + () -> { + launchZoomActivityAfterPermissionCheck(view); + }, + R.string.storage_permission_title, + R.string.read_storage_permission_rationale + ); + } + } + + /** + * launch zoom acitivity after permission check + * @param view as ImageView + */ + private void launchZoomActivityAfterPermissionCheck(final View view) { if (media.getImageUrl() != null) { - Context ctx = view.getContext(); + final Context ctx = view.getContext(); + final Intent zoomableIntent = new Intent(ctx, ZoomableActivity.class); + zoomableIntent.setData(Uri.parse(media.getImageUrl())); + zoomableIntent.putExtra( + ZoomableActivity.ZoomableActivityConstants.ORIGIN, "MediaDetails"); ctx.startActivity( - new Intent(ctx, ZoomableActivity.class).setData(Uri.parse(media.getImageUrl())) + zoomableIntent ); } } diff --git a/app/src/main/java/fr/free/nrw/commons/media/ZoomableActivity.kt b/app/src/main/java/fr/free/nrw/commons/media/ZoomableActivity.kt index 41f37d1a6..a679f908d 100644 --- a/app/src/main/java/fr/free/nrw/commons/media/ZoomableActivity.kt +++ b/app/src/main/java/fr/free/nrw/commons/media/ZoomableActivity.kt @@ -163,13 +163,22 @@ class ZoomableActivity : BaseActivity() { handleResult(it) } - if(prefs.getBoolean(CustomSelectorConstants.FULL_SCREEN_MODE_FIRST_LUNCH, true)) { - // show welcome dialog on first launch - showWelcomeDialog() - prefs.edit().putBoolean( - CustomSelectorConstants.FULL_SCREEN_MODE_FIRST_LUNCH, - false - ).apply() + val origin = intent.getStringExtra(ZoomableActivityConstants.ORIGIN); + + /** + * If origin is "null" it means that ZoomableActivity was created by the custom picker + * (rather than by MediaDetailsFragment) so we need to show the first time popup in + * full screen mode if needed. + */ + if (origin == null) { + if (prefs.getBoolean(CustomSelectorConstants.FULL_SCREEN_MODE_FIRST_LUNCH, true)) { + // show welcome dialog on first launch + showWelcomeDialog() + prefs.edit().putBoolean( + CustomSelectorConstants.FULL_SCREEN_MODE_FIRST_LUNCH, + false + ).apply() + } } } @@ -650,4 +659,13 @@ class ZoomableActivity : BaseActivity() { scope.cancel() super.onDestroy() } + + object ZoomableActivityConstants { + /** + * Key for Accessing Intent Data Named "Origin", The value indicates what fragment + * ZoomableActivity was created by. It is null if ZoomableActivity was created by + * the custom picker. + */ + const val ORIGIN = "Origin"; + } } \ No newline at end of file