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

Commit bb9e269

Browse files
committed
Remove code smell
1 parent 83091d6 commit bb9e269

File tree

6 files changed

+49
-39
lines changed

6 files changed

+49
-39
lines changed

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

Lines changed: 22 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,8 @@
2121
import android.content.pm.PackageManager;
2222
import android.os.Build;
2323
import android.support.annotation.NonNull;
24-
import android.support.annotation.RequiresApi;
2524
import android.support.annotation.StringRes;
2625
import android.support.v4.app.ActivityCompat;
27-
import android.support.v4.app.Fragment;
2826
import android.support.v4.content.ContextCompat;
2927
import android.util.Log;
3028

@@ -63,7 +61,7 @@ public interface PermissionCallbacks extends ActivityCompat.OnRequestPermissions
6361
* yet granted.
6462
* @see Manifest.permission
6563
*/
66-
public static boolean hasPermissions(@NonNull Context context, @NonNull String... perms) {
64+
public static boolean hasPermissions(Context context, @NonNull String... perms) {
6765
// Always return true for SDK < M, let the system deal with the permissions
6866
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
6967
Log.w(TAG, "hasPermissions: API version < M, returning true by default");
@@ -72,6 +70,12 @@ public static boolean hasPermissions(@NonNull Context context, @NonNull String..
7270
return true;
7371
}
7472

73+
// Null context may be passed if we have detected Low API (less than M) so getting
74+
// to this point with a null context should not be possible.
75+
if (context == null) {
76+
throw new IllegalArgumentException("Can't check permissions for null context");
77+
}
78+
7579
for (String perm : perms) {
7680
if (ContextCompat.checkSelfPermission(context, perm)
7781
!= PackageManager.PERMISSION_GRANTED) {
@@ -91,7 +95,14 @@ public static void requestPermissions(@NonNull Object host,
9195
@NonNull String rationale,
9296
int requestCode,
9397
@NonNull String... perms) {
94-
PermissionHelper.getInstance(host).requestPermissions(rationale, requestCode, 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);
95106
}
96107

97108
/**
@@ -106,21 +117,24 @@ public static void requestPermissions(@NonNull Object host,
106117
* @param perms a set of permissions to be requested.
107118
* @see Manifest.permission
108119
*/
109-
@RequiresApi(api = Build.VERSION_CODES.HONEYCOMB)
110120
public static void requestPermissions(@NonNull Object host,
111121
@NonNull String rationale,
112122
@StringRes int positiveButton,
113123
@StringRes int negativeButton,
114124
int requestCode,
115125
@NonNull String... perms) {
116126

117-
// Check for permissions before dispatching
118-
if (hasPermissions(getContext(host), perms)) {
127+
// Get a permission helper for the calling object
128+
PermissionHelper helper = PermissionHelper.getInstance(host);
129+
130+
// Check for permissions before dispatching the request
131+
if (hasPermissions(helper.getContext(), perms)) {
119132
notifyAlreadyHasPermissions(host, requestCode, perms);
120133
return;
121134
}
122135

123-
PermissionHelper.getInstance(host).requestPermissions(rationale, positiveButton,
136+
// Request permissions
137+
helper.requestPermissions(rationale, positiveButton,
124138
negativeButton, requestCode, perms);
125139
}
126140

@@ -225,26 +239,6 @@ public static boolean somePermissionDenied(@NonNull Object host, @NonNull String
225239
return PermissionHelper.getInstance(host).somePermissionDenied(perms);
226240
}
227241

228-
/**
229-
* Get an {@link Context} from an object that could be an Activity or Fragment.
230-
*/
231-
@NonNull
232-
@RequiresApi(api = Build.VERSION_CODES.HONEYCOMB)
233-
private static Context getContext(@NonNull Object object) {
234-
// TODO(samstern): I'd really like to remove this method so that there is no
235-
// type-checking in this class but LowApiPermissionHelper stops me
236-
// since it can't provide a Context for its host.
237-
if (object instanceof Activity) {
238-
return ((Activity) object);
239-
} else if (object instanceof Fragment) {
240-
return ((Fragment) object).getActivity();
241-
} else if (object instanceof android.app.Fragment) {
242-
return ((android.app.Fragment) object).getActivity();
243-
} else {
244-
throw new IllegalArgumentException("Cannot get context from object: " + object);
245-
}
246-
}
247-
248242
/**
249243
* Run permission callbacks on an object that requested permissions but already has them
250244
* by simulating {@link PackageManager#PERMISSION_GRANTED}.

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import android.annotation.SuppressLint;
44
import android.app.Activity;
5+
import android.content.Context;
56
import android.support.annotation.NonNull;
67
import android.support.annotation.StringRes;
78
import android.support.v4.app.ActivityCompat;
@@ -40,4 +41,9 @@ public void requestPermissions(@NonNull String rationale,
4041
public boolean shouldShowRequestPermissionRationale(@NonNull String perm) {
4142
return ActivityCompat.shouldShowRequestPermissionRationale(getHost(), perm);
4243
}
44+
45+
@Override
46+
public Context getContext() {
47+
return getHost();
48+
}
4349
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import android.annotation.SuppressLint;
44
import android.app.Fragment;
5+
import android.content.Context;
56
import android.support.annotation.NonNull;
67
import android.support.annotation.StringRes;
78

@@ -39,4 +40,10 @@ public void requestPermissions(@NonNull String rationale,
3940
public boolean shouldShowRequestPermissionRationale(@NonNull String perm) {
4041
return getHost().shouldShowRequestPermissionRationale(perm);
4142
}
43+
44+
@Override
45+
@SuppressLint("NewApi")
46+
public Context getContext() {
47+
return getHost().getActivity();
48+
}
4249
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,9 @@ public void requestPermissions(@NonNull String rationale,
2727
public boolean shouldShowRequestPermissionRationale(@NonNull String perm) {
2828
return false;
2929
}
30+
31+
@Override
32+
public Context getContext() {
33+
return null;
34+
}
3035
}

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

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package pub.devrel.easypermissions.helper;
22

33
import android.app.Activity;
4+
import android.content.Context;
45
import android.os.Build;
56
import android.support.annotation.NonNull;
67
import android.support.annotation.RequiresApi;
@@ -48,17 +49,6 @@ public PermissionHelper(@NonNull T host) {
4849
this.mHost = host;
4950
}
5051

51-
public void requestPermissions(@NonNull String rationale,
52-
int requestCode,
53-
@NonNull String... perms) {
54-
// Use default Android OK and Cancel strings
55-
requestPermissions(rationale,
56-
android.R.string.ok,
57-
android.R.string.cancel,
58-
requestCode,
59-
perms);
60-
}
61-
6252
public boolean shouldShowRationale(@NonNull String[] perms) {
6353
for (String perm : perms) {
6454
if (shouldShowRequestPermissionRationale(perm)) {
@@ -98,6 +88,8 @@ public abstract void requestPermissions(@NonNull String rationale,
9888

9989
public abstract boolean shouldShowRequestPermissionRationale(@NonNull String perm);
10090

91+
public abstract Context getContext();
92+
10193
// ============================================================================
10294
// Protected methods
10395
// ============================================================================

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package pub.devrel.easypermissions.helper;
22

33
import android.annotation.SuppressLint;
4+
import android.content.Context;
45
import android.support.annotation.NonNull;
56
import android.support.annotation.StringRes;
67
import android.support.v4.app.Fragment;
@@ -37,4 +38,9 @@ public void requestPermissions(@NonNull String rationale,
3738
public boolean shouldShowRequestPermissionRationale(@NonNull String perm) {
3839
return getHost().shouldShowRequestPermissionRationale(perm);
3940
}
41+
42+
@Override
43+
public Context getContext() {
44+
return getHost().getActivity();
45+
}
4046
}

0 commit comments

Comments
 (0)