Fixed Grey empty screen at Upload wizard caption step after denying files permission

This commit is contained in:
Kanahia 2023-10-21 02:32:20 +05:30
parent f7164d0b78
commit b6a2151bdf
3 changed files with 65 additions and 18 deletions

View file

@ -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<Place,Boolean> 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

View file

@ -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 {
* <p>
* Sample usage:
* <p>
* 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);
* <p>
* If you don't want the permission rationale to be shown then use:
* <p>
* 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 {
* <p>
* Sample usage:
* <p>
* 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);
}

View file

@ -777,6 +777,7 @@ Upload your first media by tapping on the add button.</string>
<string name="similar_coordinate_description_auto_set">The coordinates are not the exact coordinates, but the person who uploaded this picture thinks they are close enough.</string>
<string name="storage_permissions_denied">Storage Permissions Denied</string>
<string name="unable_to_share_upload_item">Unable to share this item</string>
<string name="permissions_are_required_for_functionality">Permissions are required for functionality</string>
<plurals name="custom_picker_images_selected_title_appendix">
<item quantity="one">%d image selected</item>
<item quantity="other">%d images selected</item>