|
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