|
7 | 7 | import android.provider.Settings;
|
8 | 8 | import android.support.annotation.StringRes;
|
9 | 9 | import android.support.v4.content.ContextCompat;
|
10 |
| - |
11 | 10 | import com.karumi.dexter.Dexter;
|
12 | 11 | import com.karumi.dexter.PermissionToken;
|
13 | 12 | import com.karumi.dexter.listener.PermissionDeniedResponse;
|
14 | 13 | import com.karumi.dexter.listener.PermissionGrantedResponse;
|
15 | 14 | import com.karumi.dexter.listener.PermissionRequest;
|
16 | 15 | import com.karumi.dexter.listener.single.BasePermissionListener;
|
17 |
| - |
18 | 16 | import fr.free.nrw.commons.CommonsApplication;
|
19 | 17 | import fr.free.nrw.commons.R;
|
20 | 18 |
|
@@ -64,42 +62,68 @@ public static boolean hasPermission(Activity activity, String permission) {
|
64 | 62 | * @param rationaleTitle rationale title to be displayed when permission was denied
|
65 | 63 | * @param rationaleMessage rationale message to be displayed when permission was denied
|
66 | 64 | */
|
67 |
| - public static void checkPermissionsAndPerformAction(Activity activity, |
68 |
| - String permission, |
69 |
| - Runnable onPermissionGranted, |
70 |
| - @StringRes int rationaleTitle, |
71 |
| - @StringRes int rationaleMessage) { |
| 65 | + public static void checkPermissionsAndPerformAction(Activity activity, String permission, |
| 66 | + Runnable onPermissionGranted, @StringRes int rationaleTitle, |
| 67 | + @StringRes int rationaleMessage) { |
| 68 | + checkPermissionsAndPerformAction(activity, permission, onPermissionGranted, null, |
| 69 | + rationaleTitle, rationaleMessage); |
| 70 | + } |
| 71 | + |
| 72 | + /** |
| 73 | + * Checks for a particular permission and runs the corresponding runnables to perform an action when the permission is granted/denied |
| 74 | + * Also, it shows a rationale if needed |
| 75 | + * |
| 76 | + * Sample usage: |
| 77 | + * |
| 78 | + * PermissionUtils.checkPermissionsAndPerformAction(activity, |
| 79 | + * Manifest.permission.WRITE_EXTERNAL_STORAGE, |
| 80 | + * () -> initiateCameraUpload(activity), |
| 81 | + * () -> showMessage(), |
| 82 | + * R.string.storage_permission_title, |
| 83 | + * R.string.write_storage_permission_rationale); |
| 84 | + * |
| 85 | + * |
| 86 | + * @param activity activity requesting permissions |
| 87 | + * @param permission the permission being requests |
| 88 | + * @param onPermissionGranted the runnable to be executed when the permission is granted |
| 89 | + * @param onPermissionDenied the runnable to be executed when the permission is denied(but not permanently) |
| 90 | + * @param rationaleTitle rationale title to be displayed when permission was denied |
| 91 | + * @param rationaleMessage rationale message to be displayed when permission was denied |
| 92 | + */ |
| 93 | + |
| 94 | + public static void checkPermissionsAndPerformAction(Activity activity, String permission, |
| 95 | + Runnable onPermissionGranted, Runnable onPermissionDenied, @StringRes int rationaleTitle, |
| 96 | + @StringRes int rationaleMessage) { |
72 | 97 | Dexter.withActivity(activity)
|
73 |
| - .withPermission(permission) |
74 |
| - .withListener(new BasePermissionListener() { |
75 |
| - @Override |
76 |
| - public void onPermissionGranted(PermissionGrantedResponse response) { |
77 |
| - onPermissionGranted.run(); |
78 |
| - } |
| 98 | + .withPermission(permission) |
| 99 | + .withListener(new BasePermissionListener() { |
| 100 | + @Override public void onPermissionGranted(PermissionGrantedResponse response) { |
| 101 | + onPermissionGranted.run(); |
| 102 | + } |
79 | 103 |
|
80 |
| - @Override |
81 |
| - public void onPermissionDenied(PermissionDeniedResponse response) { |
82 |
| - if (response.isPermanentlyDenied()) { |
83 |
| - DialogUtil.showAlertDialog(activity, |
84 |
| - activity.getString(rationaleTitle), |
85 |
| - activity.getString(rationaleMessage), |
86 |
| - activity.getString(R.string.navigation_item_settings), |
87 |
| - null, |
88 |
| - () -> askUserToManuallyEnablePermissionFromSettings(activity), |
89 |
| - null); |
| 104 | + @Override public void onPermissionDenied(PermissionDeniedResponse response) { |
| 105 | + if (response.isPermanentlyDenied()) { |
| 106 | + DialogUtil.showAlertDialog(activity, activity.getString(rationaleTitle), |
| 107 | + activity.getString(rationaleMessage), |
| 108 | + activity.getString(R.string.navigation_item_settings), null, |
| 109 | + () -> askUserToManuallyEnablePermissionFromSettings(activity), null); |
| 110 | + } else { |
| 111 | + if (null != onPermissionDenied) { |
| 112 | + onPermissionDenied.run(); |
90 | 113 | }
|
91 | 114 | }
|
| 115 | + } |
92 | 116 |
|
93 |
| - @Override |
94 |
| - public void onPermissionRationaleShouldBeShown(PermissionRequest permission, PermissionToken token) { |
95 |
| - DialogUtil.showAlertDialog(activity, |
96 |
| - activity.getString(rationaleTitle), |
97 |
| - activity.getString(rationaleMessage), |
98 |
| - activity.getString(android.R.string.ok), |
99 |
| - activity.getString(android.R.string.cancel), |
100 |
| - token::continuePermissionRequest, |
101 |
| - token::cancelPermissionRequest); |
102 |
| - } |
103 |
| - }).check(); |
| 117 | + @Override |
| 118 | + public void onPermissionRationaleShouldBeShown(PermissionRequest permission, |
| 119 | + PermissionToken token) { |
| 120 | + DialogUtil.showAlertDialog(activity, activity.getString(rationaleTitle), |
| 121 | + activity.getString(rationaleMessage), |
| 122 | + activity.getString(android.R.string.ok), |
| 123 | + activity.getString(android.R.string.cancel), |
| 124 | + token::continuePermissionRequest, token::cancelPermissionRequest); |
| 125 | + } |
| 126 | + }) |
| 127 | + .check(); |
104 | 128 | }
|
105 | 129 | }
|
0 commit comments