Skip to content
This repository was archived by the owner on Oct 3, 2024. It is now read-only.

Commit c23c84f

Browse files
committed
Bring back typing, kill all casting!
1 parent bb9e269 commit c23c84f

File tree

2 files changed

+154
-56
lines changed

2 files changed

+154
-56
lines changed

easypermissions/src/main/java/pub/devrel/easypermissions/EasyPermissions.java

Lines changed: 130 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import android.support.annotation.NonNull;
2424
import android.support.annotation.StringRes;
2525
import android.support.v4.app.ActivityCompat;
26+
import android.support.v4.app.Fragment;
2627
import android.support.v4.content.ContextCompat;
2728
import android.util.Log;
2829

@@ -87,28 +88,44 @@ public static boolean hasPermissions(Context context, @NonNull String... perms)
8788
}
8889

8990
/**
90-
* Request a set of permissions, showing a rationale if the system requests it.
91-
*
92-
* @see #requestPermissions(Object, String, int, int, int, String...)
91+
* Request permissions from an Activity with standard OK/Cancel buttons.
92+
* @see #requestPermissions(Activity, String, int, int, int, String...)
9393
*/
94-
public static void requestPermissions(@NonNull Object host,
95-
@NonNull String rationale,
96-
int requestCode,
97-
@NonNull String... perms) {
98-
99-
// Use default Android 'OK' and 'Cancel' buttons
100-
requestPermissions(host,
101-
rationale,
102-
android.R.string.ok,
103-
android.R.string.cancel,
104-
requestCode,
105-
perms);
94+
public static void requestPermissions(
95+
@NonNull Activity host, @NonNull String rationale,
96+
int requestCode, @NonNull String... perms) {
97+
requestPermissions(host, rationale, android.R.string.ok, android.R.string.cancel,
98+
requestCode, perms);
99+
}
100+
101+
/**
102+
* Request permissions from a Support Fragment with standard OK/Cancel buttons.
103+
* @see #requestPermissions(Activity, String, int, int, int, String...)
104+
*/
105+
public static void requestPermissions(
106+
@NonNull Fragment host, @NonNull String rationale,
107+
int requestCode, @NonNull String... perms) {
108+
109+
requestPermissions(host, rationale, android.R.string.ok, android.R.string.cancel,
110+
requestCode, perms);
111+
}
112+
113+
/**
114+
* Request permissions from a standard Fragment with standard OK/Cancel buttons.
115+
* @see #requestPermissions(Activity, String, int, int, int, String...)
116+
*/
117+
public static void requestPermissions(
118+
@NonNull android.app.Fragment host, @NonNull String rationale,
119+
int requestCode, @NonNull String... perms) {
120+
121+
requestPermissions(host, rationale, android.R.string.ok, android.R.string.cancel,
122+
requestCode, perms);
106123
}
107124

108125
/**
109126
* Request a set of permissions, showing rationale if the system requests it.
110127
*
111-
* @param host {@link Object} requesting permissions.
128+
* @param host requesting context.
112129
* @param rationale a message explaining why the application needs this set of permissions,
113130
* will be displayed if the user rejects the request the first time.
114131
* @param positiveButton custom text for positive button
@@ -117,19 +134,48 @@ public static void requestPermissions(@NonNull Object host,
117134
* @param perms a set of permissions to be requested.
118135
* @see Manifest.permission
119136
*/
120-
public static void requestPermissions(@NonNull Object host,
121-
@NonNull String rationale,
122-
@StringRes int positiveButton,
123-
@StringRes int negativeButton,
124-
int requestCode,
125-
@NonNull String... perms) {
137+
public static void requestPermissions(
138+
@NonNull Activity host, @NonNull String rationale,
139+
@StringRes int positiveButton, @StringRes int negativeButton,
140+
int requestCode, @NonNull String... perms) {
141+
requestPermissions(PermissionHelper.newInstance(host), rationale,
142+
positiveButton, negativeButton,
143+
requestCode, perms);
144+
}
126145

127-
// Get a permission helper for the calling object
128-
PermissionHelper helper = PermissionHelper.getInstance(host);
146+
/**
147+
* Request permissions from a Support Fragment.
148+
* @see #requestPermissions(Activity, String, int, int, int, String...)
149+
*/
150+
public static void requestPermissions(
151+
@NonNull Fragment host, @NonNull String rationale,
152+
@StringRes int positiveButton, @StringRes int negativeButton,
153+
int requestCode, @NonNull String... perms) {
154+
requestPermissions(PermissionHelper.newInstance(host), rationale,
155+
positiveButton, negativeButton,
156+
requestCode, perms);
157+
}
158+
159+
/**
160+
* @see #requestPermissions(Activity, String, int, int, int, String...)
161+
*/
162+
public static void requestPermissions(
163+
@NonNull android.app.Fragment host, @NonNull String rationale,
164+
@StringRes int positiveButton, @StringRes int negativeButton,
165+
int requestCode, @NonNull String... perms) {
166+
requestPermissions(PermissionHelper.newInstance(host), rationale,
167+
positiveButton, negativeButton,
168+
requestCode, perms);
169+
}
170+
171+
private static void requestPermissions(
172+
@NonNull PermissionHelper helper, @NonNull String rationale,
173+
@StringRes int positiveButton, @StringRes int negativeButton,
174+
int requestCode, @NonNull String... perms) {
129175

130176
// Check for permissions before dispatching the request
131177
if (hasPermissions(helper.getContext(), perms)) {
132-
notifyAlreadyHasPermissions(host, requestCode, perms);
178+
notifyAlreadyHasPermissions(helper.getHost(), requestCode, perms);
133179
return;
134180
}
135181

@@ -196,47 +242,90 @@ public static void onRequestPermissionsResult(int requestCode,
196242
* Check if at least one permission in the list of denied permissions has been permanently
197243
* denied (user clicked "Never ask again").
198244
*
199-
* @param host {@link Object} requesting permissions.
245+
* @param host context requesting permissions.
200246
* @param deniedPermissions list of denied permissions, usually from {@link
201247
* PermissionCallbacks#onPermissionsDenied(int, List)}
202248
* @return {@code true} if at least one permission in the list was permanently denied.
203249
*/
204-
public static boolean somePermissionPermanentlyDenied(@NonNull Object host,
250+
public static boolean somePermissionPermanentlyDenied(@NonNull Activity host,
205251
@NonNull List<String> deniedPermissions) {
206-
return PermissionHelper.getInstance(host)
252+
return PermissionHelper.newInstance(host)
253+
.somePermissionPermanentlyDenied(deniedPermissions);
254+
}
255+
256+
/**
257+
* @see #somePermissionPermanentlyDenied(Activity, List).
258+
*/
259+
public static boolean somePermissionPermanentlyDenied(@NonNull Fragment host,
260+
@NonNull List<String> deniedPermissions) {
261+
return PermissionHelper.newInstance(host)
262+
.somePermissionPermanentlyDenied(deniedPermissions);
263+
}
264+
265+
/**
266+
* @see #somePermissionPermanentlyDenied(Activity, List).
267+
*/
268+
public static boolean somePermissionPermanentlyDenied(@NonNull android.app.Fragment host,
269+
@NonNull List<String> deniedPermissions) {
270+
return PermissionHelper.newInstance(host)
207271
.somePermissionPermanentlyDenied(deniedPermissions);
208272
}
209273

210274
/**
211275
* Check if a permission has been permanently denied (user clicked "Never ask again").
212276
*
213-
* @param host {@link Object} requesting permissions.
277+
* @param host context requesting permissions.
214278
* @param deniedPermission denied permission.
215279
* @return {@code true} if the permissions has been permanently denied.
216280
*/
217-
public static boolean permissionPermanentlyDenied(@NonNull Object host,
281+
public static boolean permissionPermanentlyDenied(@NonNull Activity host,
218282
@NonNull String deniedPermission) {
219-
return PermissionHelper.getInstance(host)
220-
.permissionPermanentlyDenied(deniedPermission);
283+
return PermissionHelper.newInstance(host).permissionPermanentlyDenied(deniedPermission);
221284
}
222285

223286
/**
224-
* @param object Activity or Fragment
225-
* @return true if the user has previously denied any of the {@code perms} and we should show a
226-
* rationale, false otherwise.
287+
* @see #permissionPermanentlyDenied(Activity, String).
288+
*/
289+
public static boolean permissionPermanentlyDenied(@NonNull Fragment host,
290+
@NonNull String deniedPermission) {
291+
return PermissionHelper.newInstance(host).permissionPermanentlyDenied(deniedPermission);
292+
}
293+
294+
/**
295+
* @see #permissionPermanentlyDenied(Activity, String).
227296
*/
228-
private static boolean shouldShowRationale(@NonNull Object object, @NonNull String[] perms) {
229-
return PermissionHelper.getInstance(object).shouldShowRationale(perms);
297+
public static boolean permissionPermanentlyDenied(@NonNull android.app.Fragment host,
298+
@NonNull String deniedPermission) {
299+
return PermissionHelper.newInstance(host).permissionPermanentlyDenied(deniedPermission);
230300
}
231301

232302
/**
233-
* @param host {@link Object} requesting permissions.
234-
* @param perms Array of permissions
303+
* See if some denied permission has been permanently denied.
304+
*
305+
* @param host requesting context.
306+
* @param perms array of permissions.
235307
* @return true if the user has previously denied any of the {@code perms} and we should show a
236308
* rationale, false otherwise.
237309
*/
238-
public static boolean somePermissionDenied(@NonNull Object host, @NonNull String[] perms) {
239-
return PermissionHelper.getInstance(host).somePermissionDenied(perms);
310+
public static boolean somePermissionDenied(@NonNull Activity host,
311+
@NonNull String[] perms) {
312+
return PermissionHelper.newInstance(host).somePermissionDenied(perms);
313+
}
314+
315+
/**
316+
* @see #somePermissionDenied(Activity, String[])
317+
*/
318+
public static boolean somePermissionDenied(@NonNull Fragment host,
319+
@NonNull String[] perms) {
320+
return PermissionHelper.newInstance(host).somePermissionDenied(perms);
321+
}
322+
323+
/**
324+
* @see #somePermissionDenied(Activity, String[])
325+
*/
326+
public static boolean somePermissionDenied(@NonNull android.app.Fragment host,
327+
@NonNull String[] perms) {
328+
return PermissionHelper.newInstance(host).somePermissionDenied(perms);
240329
}
241330

242331
/**

easypermissions/src/main/java/pub/devrel/easypermissions/helper/PermissionHelper.java

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,21 +24,30 @@ public abstract class PermissionHelper<T> {
2424
private T mHost;
2525

2626
@NonNull
27-
public static PermissionHelper getInstance(Object host) {
28-
// If the API version is < M, just return an PermissionsHelper that does not do anything.
27+
public static PermissionHelper newInstance(Activity host) {
2928
if (Build.VERSION.SDK_INT < 23) {
3029
return new LowApiPermissionsHelper(host);
3130
}
3231

33-
if (host instanceof Activity) {
34-
return new ActivityPermissionHelper((Activity) host);
35-
} else if (host instanceof Fragment) {
36-
return new SupportFragmentPermissionHelper((Fragment) host);
37-
} else if (host instanceof android.app.Fragment) {
38-
return new FrameworkFragmentPermissionHelper((android.app.Fragment) host);
39-
} else {
40-
throw new IllegalArgumentException("Host object must be an Activity or Fragment");
32+
return new ActivityPermissionHelper(host);
33+
}
34+
35+
@NonNull
36+
public static PermissionHelper newInstance(Fragment host) {
37+
if (Build.VERSION.SDK_INT < 23) {
38+
return new LowApiPermissionsHelper(host);
4139
}
40+
41+
return new SupportFragmentPermissionHelper(host);
42+
}
43+
44+
@NonNull
45+
public static PermissionHelper newInstance(android.app.Fragment host) {
46+
if (Build.VERSION.SDK_INT < 23) {
47+
return new LowApiPermissionsHelper(host);
48+
}
49+
50+
return new FrameworkFragmentPermissionHelper(host);
4251
}
4352

4453
// ============================================================================
@@ -76,6 +85,11 @@ public boolean somePermissionDenied(@NonNull String[] perms) {
7685
return shouldShowRationale(perms);
7786
}
7887

88+
@NonNull
89+
public T getHost() {
90+
return mHost;
91+
}
92+
7993
// ============================================================================
8094
// Public abstract methods
8195
// ============================================================================
@@ -110,9 +124,4 @@ protected void showRationaleDialogFragment(@NonNull android.app.FragmentManager
110124
.show(fragmentManager, RationaleDialogFragment.TAG);
111125
}
112126

113-
@NonNull
114-
protected T getHost() {
115-
return mHost;
116-
}
117-
118127
}

0 commit comments

Comments
 (0)