From b6a2151bdfac00c813f9c148fa7021af08cefc2e Mon Sep 17 00:00:00 2001 From: Kanahia Date: Sat, 21 Oct 2023 02:32:20 +0530 Subject: [PATCH] Fixed Grey empty screen at Upload wizard caption step after denying files permission --- .../nrw/commons/upload/UploadActivity.java | 32 ++++++++++-- .../nrw/commons/utils/PermissionUtils.java | 50 +++++++++++++------ app/src/main/res/values/strings.xml | 1 + 3 files changed, 65 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.java b/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.java index 06706df8a..e5a21afbe 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.java @@ -2,6 +2,7 @@ package fr.free.nrw.commons.upload; import static fr.free.nrw.commons.contributions.ContributionController.ACTION_INTERNAL_UPLOADS; import static fr.free.nrw.commons.utils.PermissionUtils.PERMISSIONS_STORAGE; +import static fr.free.nrw.commons.utils.PermissionUtils.checkPermissionsAndPerformAction; import static fr.free.nrw.commons.wikidata.WikidataConstants.PLACE_OBJECT; import static fr.free.nrw.commons.wikidata.WikidataConstants.SELECTED_NEARBY_PLACE; import static fr.free.nrw.commons.wikidata.WikidataConstants.SELECTED_NEARBY_PLACE_CATEGORY; @@ -19,11 +20,13 @@ import android.os.Build.VERSION_CODES; import android.os.Bundle; import android.provider.Settings; import android.util.DisplayMetrics; +import android.util.Log; import android.view.View; import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; +import android.widget.Toast; import androidx.annotation.NonNull; import androidx.cardview.widget.CardView; import androidx.fragment.app.Fragment; @@ -143,6 +146,7 @@ public class UploadActivity extends BaseActivity implements UploadContract.View, */ public static HashMap nearbyPopupAnswers; + public boolean hasAllPermissions = true; @SuppressLint("CheckResult") @Override protected void onCreate(Bundle savedInstanceState) { @@ -166,7 +170,6 @@ public class UploadActivity extends BaseActivity implements UploadContract.View, } locationManager.requestLocationUpdatesFromProvider(LocationManager.GPS_PROVIDER); locationManager.requestLocationUpdatesFromProvider(LocationManager.NETWORK_PROVIDER); - checkStoragePermissions(); } private void init() { @@ -224,6 +227,11 @@ public class UploadActivity extends BaseActivity implements UploadContract.View, return sessionManager.isUserLoggedIn(); } + @Override + protected void onStart() { + super.onStart(); + checkStoragePermissions(); + } @Override protected void onResume() { super.onResume(); @@ -232,6 +240,7 @@ public class UploadActivity extends BaseActivity implements UploadContract.View, askUserToLogIn(); } checkBlockStatus(); + checkStoragePermissions(); } /** @@ -252,13 +261,28 @@ public class UploadActivity extends BaseActivity implements UploadContract.View, true))); } - private void checkStoragePermissions() { + public void checkStoragePermissions() { final boolean hasAllPermissions = PermissionUtils.hasPermission(this, PERMISSIONS_STORAGE); if (hasAllPermissions) { receiveSharedItems(); - } else if (VERSION.SDK_INT >= VERSION_CODES.M) { - requestPermissions(PERMISSIONS_STORAGE, RequestCodes.STORAGE); + cvContainerTopCard.setVisibility(View.VISIBLE); + } else{ + cvContainerTopCard.setVisibility(View.INVISIBLE); + if(this.hasAllPermissions){ + checkPermissionsAndPerformAction(this, + () -> { + cvContainerTopCard.setVisibility(View.VISIBLE); + this.receiveSharedItems(); + },() -> { + this.hasAllPermissions = true; + this.checkStoragePermissions(); + }, + R.string.storage_permission_title, + R.string.write_storage_permission_rationale_for_image_share, + PERMISSIONS_STORAGE); + } } + this.hasAllPermissions = hasAllPermissions ; } @Override diff --git a/app/src/main/java/fr/free/nrw/commons/utils/PermissionUtils.java b/app/src/main/java/fr/free/nrw/commons/utils/PermissionUtils.java index 9cacf7461..f74918b2b 100644 --- a/app/src/main/java/fr/free/nrw/commons/utils/PermissionUtils.java +++ b/app/src/main/java/fr/free/nrw/commons/utils/PermissionUtils.java @@ -7,18 +7,17 @@ import android.content.pm.PackageManager; import android.net.Uri; import android.os.Build; import android.provider.Settings; - +import android.widget.Toast; import androidx.annotation.StringRes; import androidx.core.content.ContextCompat; - import com.karumi.dexter.Dexter; import com.karumi.dexter.MultiplePermissionsReport; import com.karumi.dexter.PermissionToken; import com.karumi.dexter.listener.PermissionRequest; import com.karumi.dexter.listener.multi.MultiplePermissionsListener; - import fr.free.nrw.commons.CommonsApplication; import fr.free.nrw.commons.R; +import fr.free.nrw.commons.upload.UploadActivity; import java.util.List; @@ -83,14 +82,14 @@ public class PermissionUtils { *

* Sample usage: *

- * PermissionUtils.checkPermissionsAndPerformAction(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE, - * () -> initiateCameraUpload(activity), R.string.storage_permission_title, - * R.string.write_storage_permission_rationale); + * PermissionUtils.checkPermissionsAndPerformAction(activity, + * Manifest.permission.WRITE_EXTERNAL_STORAGE, () -> initiateCameraUpload(activity), + * R.string.storage_permission_title, R.string.write_storage_permission_rationale); *

* If you don't want the permission rationale to be shown then use: *

- * PermissionUtils.checkPermissionsAndPerformAction(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE, - * () -> initiateCameraUpload(activity), - 1, -1); + * PermissionUtils.checkPermissionsAndPerformAction(activity, + * Manifest.permission.WRITE_EXTERNAL_STORAGE, () -> initiateCameraUpload(activity), - 1, -1); * * @param activity activity requesting permissions * @param permissions the permissions array being requests @@ -113,8 +112,9 @@ public class PermissionUtils { *

* Sample usage: *

- * PermissionUtils.checkPermissionsAndPerformAction(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE, - * () -> initiateCameraUpload(activity), () -> showMessage(), R.string.storage_permission_title, + * PermissionUtils.checkPermissionsAndPerformAction(activity, + * Manifest.permission.WRITE_EXTERNAL_STORAGE, () -> initiateCameraUpload(activity), () -> + * showMessage(), R.string.storage_permission_title, * R.string.write_storage_permission_rationale); * * @param activity activity requesting permissions @@ -138,11 +138,18 @@ public class PermissionUtils { return; } if (report.isAnyPermissionPermanentlyDenied()) { - // permission is denied permanently, we will show user a dialog message. + // permission is denied permanently, we will show user a dialog message. DialogUtil.showAlertDialog(activity, activity.getString(rationaleTitle), activity.getString(rationaleMessage), activity.getString(R.string.navigation_item_settings), null, - () -> askUserToManuallyEnablePermissionFromSettings(activity), null); + () -> { + askUserToManuallyEnablePermissionFromSettings(activity); + if (activity instanceof UploadActivity) { + ((UploadActivity) activity).hasAllPermissions = true; + } + ; + }, null, null, + !(activity instanceof UploadActivity)); } else { if (null != onPermissionDenied) { onPermissionDenied.run(); @@ -161,8 +168,23 @@ public class PermissionUtils { activity.getString(rationaleMessage), activity.getString(android.R.string.ok), activity.getString(android.R.string.cancel), - token::continuePermissionRequest, - token::cancelPermissionRequest, + () -> { + if (activity instanceof UploadActivity) { + ((UploadActivity) activity).hasAllPermissions = true; + } + token.continuePermissionRequest(); + } + , + () -> { + Toast.makeText(activity.getApplicationContext(), + R.string.permissions_are_required_for_functionality, + Toast.LENGTH_LONG) + .show(); + token.cancelPermissionRequest(); + if (activity instanceof UploadActivity) { + activity.finish(); + } + }, null, false); } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 85bb19bdc..9ab5599ff 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -777,6 +777,7 @@ Upload your first media by tapping on the add button. The coordinates are not the exact coordinates, but the person who uploaded this picture thinks they are close enough. Storage Permissions Denied Unable to share this item + Permissions are required for functionality %d image selected %d images selected