mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-29 13:53:54 +01:00
Merge 2.10 with master & Fixed merge conflicts (#2844)
This commit is contained in:
parent
02ad3b2dc8
commit
08a555c095
18 changed files with 172 additions and 113 deletions
|
|
@ -10,6 +10,6 @@ public class FragmentUtils {
|
|||
* @return
|
||||
*/
|
||||
public static boolean isFragmentUIActive(Fragment fragment) {
|
||||
return fragment.getActivity() != null && fragment.isAdded() && !fragment.isDetached() && !fragment.isRemoving();
|
||||
return fragment!=null && fragment.getActivity() != null && fragment.isAdded() && !fragment.isDetached() && !fragment.isRemoving();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,6 @@ import com.karumi.dexter.listener.PermissionDeniedResponse;
|
|||
import com.karumi.dexter.listener.PermissionGrantedResponse;
|
||||
import com.karumi.dexter.listener.PermissionRequest;
|
||||
import com.karumi.dexter.listener.single.BasePermissionListener;
|
||||
|
||||
import fr.free.nrw.commons.CommonsApplication;
|
||||
import fr.free.nrw.commons.R;
|
||||
|
||||
|
|
@ -64,42 +63,68 @@ public class PermissionUtils {
|
|||
* @param rationaleTitle rationale title to be displayed when permission was denied
|
||||
* @param rationaleMessage rationale message to be displayed when permission was denied
|
||||
*/
|
||||
public static void checkPermissionsAndPerformAction(Activity activity,
|
||||
String permission,
|
||||
Runnable onPermissionGranted,
|
||||
@StringRes int rationaleTitle,
|
||||
@StringRes int rationaleMessage) {
|
||||
Dexter.withActivity(activity)
|
||||
.withPermission(permission)
|
||||
.withListener(new BasePermissionListener() {
|
||||
@Override
|
||||
public void onPermissionGranted(PermissionGrantedResponse response) {
|
||||
onPermissionGranted.run();
|
||||
}
|
||||
public static void checkPermissionsAndPerformAction(Activity activity, String permission,
|
||||
Runnable onPermissionGranted, @StringRes int rationaleTitle,
|
||||
@StringRes int rationaleMessage) {
|
||||
checkPermissionsAndPerformAction(activity, permission, onPermissionGranted, null,
|
||||
rationaleTitle, rationaleMessage);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPermissionDenied(PermissionDeniedResponse response) {
|
||||
if (response.isPermanentlyDenied()) {
|
||||
DialogUtil.showAlertDialog(activity,
|
||||
activity.getString(rationaleTitle),
|
||||
activity.getString(rationaleMessage),
|
||||
activity.getString(R.string.navigation_item_settings),
|
||||
null,
|
||||
() -> askUserToManuallyEnablePermissionFromSettings(activity),
|
||||
null);
|
||||
/**
|
||||
* Checks for a particular permission and runs the corresponding runnables to perform an action when the permission is granted/denied
|
||||
* Also, it shows a rationale if needed
|
||||
*
|
||||
* Sample usage:
|
||||
*
|
||||
* 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
|
||||
* @param permission the permission being requests
|
||||
* @param onPermissionGranted the runnable to be executed when the permission is granted
|
||||
* @param onPermissionDenied the runnable to be executed when the permission is denied(but not permanently)
|
||||
* @param rationaleTitle rationale title to be displayed when permission was denied
|
||||
* @param rationaleMessage rationale message to be displayed when permission was denied
|
||||
*/
|
||||
|
||||
public static void checkPermissionsAndPerformAction(Activity activity, String permission,
|
||||
Runnable onPermissionGranted, Runnable onPermissionDenied, @StringRes int rationaleTitle,
|
||||
@StringRes int rationaleMessage) {
|
||||
Dexter.withActivity(activity)
|
||||
.withPermission(permission)
|
||||
.withListener(new BasePermissionListener() {
|
||||
@Override public void onPermissionGranted(PermissionGrantedResponse response) {
|
||||
onPermissionGranted.run();
|
||||
}
|
||||
|
||||
@Override public void onPermissionDenied(PermissionDeniedResponse response) {
|
||||
if (response.isPermanentlyDenied()) {
|
||||
DialogUtil.showAlertDialog(activity, activity.getString(rationaleTitle),
|
||||
activity.getString(rationaleMessage),
|
||||
activity.getString(R.string.navigation_item_settings), null,
|
||||
() -> askUserToManuallyEnablePermissionFromSettings(activity), null);
|
||||
} else {
|
||||
if (null != onPermissionDenied) {
|
||||
onPermissionDenied.run();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPermissionRationaleShouldBeShown(PermissionRequest permission, PermissionToken token) {
|
||||
DialogUtil.showAlertDialog(activity,
|
||||
activity.getString(rationaleTitle),
|
||||
activity.getString(rationaleMessage),
|
||||
activity.getString(android.R.string.ok),
|
||||
activity.getString(android.R.string.cancel),
|
||||
token::continuePermissionRequest,
|
||||
token::cancelPermissionRequest);
|
||||
}
|
||||
}).check();
|
||||
@Override
|
||||
public void onPermissionRationaleShouldBeShown(PermissionRequest permission,
|
||||
PermissionToken token) {
|
||||
DialogUtil.showAlertDialog(activity, activity.getString(rationaleTitle),
|
||||
activity.getString(rationaleMessage),
|
||||
activity.getString(android.R.string.ok),
|
||||
activity.getString(android.R.string.cancel),
|
||||
token::continuePermissionRequest, token::cancelPermissionRequest);
|
||||
}
|
||||
})
|
||||
.check();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import android.view.Display;
|
|||
import android.view.View;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
import android.widget.Toast;
|
||||
import timber.log.Timber;
|
||||
|
||||
import com.google.android.material.snackbar.Snackbar;
|
||||
|
||||
|
|
@ -22,7 +23,13 @@ public class ViewUtil {
|
|||
return;
|
||||
}
|
||||
|
||||
ExecutorUtils.uiExecutor().execute(() -> Snackbar.make(view, messageResourceId, Snackbar.LENGTH_SHORT).show());
|
||||
ExecutorUtils.uiExecutor().execute(() -> {
|
||||
try {
|
||||
Snackbar.make(view, messageResourceId, Snackbar.LENGTH_SHORT).show();
|
||||
}catch (IllegalStateException e){
|
||||
Timber.e(e.getMessage());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static void showLongToast(Context context, String text) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue