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

Commit 94b390e

Browse files
authored
Refactor helper classes to be much cleaner. (#127)
1 parent 8a93a8f commit 94b390e

13 files changed

+162
-112
lines changed

app/src/main/java/pub/devrel/easypermissions/sample/BasicActivity.java

+20-4
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,12 @@
55
import android.os.Bundle;
66
import android.support.annotation.NonNull;
77
import android.util.Log;
8+
import android.view.View;
9+
import android.widget.Toast;
810

911
import java.util.List;
1012

13+
import pub.devrel.easypermissions.AfterPermissionGranted;
1114
import pub.devrel.easypermissions.EasyPermissions;
1215

1316
/**
@@ -19,15 +22,18 @@ public class BasicActivity extends Activity implements EasyPermissions.Permissio
1922

2023
private static final String TAG = "BasicActivity";
2124

25+
private static final int RC_REQUEST_SMS = 1001;
26+
2227
@Override
2328
protected void onCreate(Bundle savedInstanceState) {
2429
super.onCreate(savedInstanceState);
2530
setContentView(R.layout.activity_basic);
2631

27-
findViewById(R.id.button_request).setOnClickListener(v -> {
28-
// Request SMS permission
29-
EasyPermissions.requestPermissions(BasicActivity.this, "NEED SMS PLZ", 1001,
30-
Manifest.permission.READ_SMS);
32+
findViewById(R.id.button_request).setOnClickListener(new View.OnClickListener() {
33+
@Override
34+
public void onClick(View v) {
35+
doSmsTask();
36+
}
3137
});
3238
}
3339

@@ -39,6 +45,16 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis
3945
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
4046
}
4147

48+
@AfterPermissionGranted(RC_REQUEST_SMS)
49+
public void doSmsTask() {
50+
String perm = Manifest.permission.READ_SMS;
51+
if (!EasyPermissions.hasPermissions(this, perm)) {
52+
EasyPermissions.requestPermissions(this, getString(R.string.rationale_sms),
53+
RC_REQUEST_SMS, perm);
54+
} else {
55+
Toast.makeText(this, "TODO: SMS Task", Toast.LENGTH_SHORT).show();
56+
}
57+
}
4258

4359
@Override
4460
public void onPermissionsGranted(int requestCode, List<String> perms) {

build.gradle

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
buildscript {
22
repositories {
33
jcenter()
4+
google()
45
}
56

67
dependencies {
7-
classpath 'com.android.tools.build:gradle:2.4.0-alpha7'
8+
classpath 'com.android.tools.build:gradle:3.0.0-alpha1'
89

910
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
1011
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
@@ -14,6 +15,7 @@ buildscript {
1415
allprojects {
1516
repositories {
1617
jcenter()
18+
google()
1719
}
1820
}
1921

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

+12-13
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
package pub.devrel.easypermissions;
22

3+
import android.app.Activity;
34
import android.app.Dialog;
45
import android.content.DialogInterface;
56
import android.os.Build;
67
import android.support.annotation.RequiresApi;
7-
import android.support.v4.app.ActivityCompat;
88
import android.support.v4.app.Fragment;
9-
import android.support.v4.app.FragmentActivity;
109

1110
import java.util.Arrays;
1211

12+
import pub.devrel.easypermissions.helper.PermissionHelper;
13+
1314
/**
1415
* Click listener for either {@link RationaleDialogFragment} or {@link RationaleDialogFragmentCompat}.
1516
*/
@@ -52,18 +53,16 @@ class RationaleDialogClickListener implements Dialog.OnClickListener {
5253
public void onClick(DialogInterface dialog, int which) {
5354
if (which == Dialog.BUTTON_POSITIVE) {
5455
if (mHost instanceof Fragment) {
55-
((Fragment) mHost).requestPermissions(mConfig.permissions, mConfig.requestCode);
56+
PermissionHelper.newInstance((Fragment) mHost).directRequestPermissions(
57+
mConfig.requestCode, mConfig.permissions);
5658
} else if (mHost instanceof android.app.Fragment) {
57-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
58-
((android.app.Fragment) mHost)
59-
.requestPermissions(mConfig.permissions, mConfig.requestCode);
60-
} else {
61-
throw new IllegalArgumentException(
62-
"Target SDK needs to be greater than 23 if caller is android.app.Fragment");
63-
}
64-
} else if (mHost instanceof FragmentActivity) {
65-
ActivityCompat.requestPermissions(
66-
(FragmentActivity) mHost, mConfig.permissions, mConfig.requestCode);
59+
PermissionHelper.newInstance((android.app.Fragment) mHost).directRequestPermissions(
60+
mConfig.requestCode, mConfig.permissions);
61+
} else if (mHost instanceof Activity) {
62+
PermissionHelper.newInstance((Activity) mHost).directRequestPermissions(
63+
mConfig.requestCode, mConfig.permissions);
64+
} else {
65+
throw new RuntimeException("Host must be an Activity or Fragment!");
6766
}
6867
} else {
6968
notifyPermissionDenied();

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

+8-18
Original file line numberDiff line numberDiff line change
@@ -2,39 +2,29 @@
22

33
import android.annotation.SuppressLint;
44
import android.app.Activity;
5+
import android.app.FragmentManager;
56
import android.content.Context;
67
import android.support.annotation.NonNull;
7-
import android.support.annotation.StringRes;
88
import android.support.v4.app.ActivityCompat;
99

1010
/**
1111
* Permissions helper for {@link Activity}.
1212
*/
13-
class ActivityPermissionHelper extends PermissionHelper<Activity> {
13+
class ActivityPermissionHelper extends BaseFrameworkPermissionsHelper<Activity> {
1414

1515
public ActivityPermissionHelper(Activity host) {
1616
super(host);
1717
}
1818

1919
@Override
2020
@SuppressLint("NewApi")
21-
public void requestPermissions(@NonNull String rationale,
22-
@StringRes int positiveButton,
23-
@StringRes int negativeButton,
24-
int requestCode,
25-
@NonNull String... perms) {
21+
public FragmentManager getFragmentManager() {
22+
return getHost().getFragmentManager();
23+
}
2624

27-
if (shouldShowRationale(perms)) {
28-
showRationaleDialogFragment(
29-
getHost().getFragmentManager(),
30-
rationale,
31-
positiveButton,
32-
negativeButton,
33-
requestCode,
34-
perms);
35-
} else {
36-
ActivityCompat.requestPermissions(getHost(), perms, requestCode);
37-
}
25+
@Override
26+
public void directRequestPermissions(int requestCode, @NonNull String... perms) {
27+
ActivityCompat.requestPermissions(getHost(), perms, requestCode);
3828
}
3929

4030
@Override
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package pub.devrel.easypermissions.helper;
2+
3+
import android.app.FragmentManager;
4+
import android.os.Build;
5+
import android.support.annotation.NonNull;
6+
import android.support.annotation.RequiresApi;
7+
8+
import pub.devrel.easypermissions.RationaleDialogFragment;
9+
10+
/**
11+
* Implementation of {@link PermissionHelper} for framework host classes.
12+
*/
13+
public abstract class BaseFrameworkPermissionsHelper<T> extends PermissionHelper<T> {
14+
15+
public BaseFrameworkPermissionsHelper(@NonNull T host) {
16+
super(host);
17+
}
18+
19+
public abstract FragmentManager getFragmentManager();
20+
21+
@Override
22+
@RequiresApi(api = Build.VERSION_CODES.HONEYCOMB)
23+
public void showRequestPermissionRationale(@NonNull String rationale,
24+
int positiveButton,
25+
int negativeButton,
26+
int requestCode,
27+
@NonNull String... perms) {
28+
RationaleDialogFragment
29+
.newInstance(positiveButton, negativeButton, rationale, requestCode, perms)
30+
.show(getFragmentManager(), RationaleDialogFragment.TAG);
31+
}
32+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package pub.devrel.easypermissions.helper;
2+
3+
import android.annotation.SuppressLint;
4+
import android.support.annotation.NonNull;
5+
import android.support.v4.app.FragmentManager;
6+
7+
import pub.devrel.easypermissions.RationaleDialogFragmentCompat;
8+
9+
/**
10+
* Implementation of {@link PermissionHelper} for Support Library host classes.
11+
*/
12+
public abstract class BaseSupportPermissionsHelper<T> extends PermissionHelper<T> {
13+
14+
public BaseSupportPermissionsHelper(@NonNull T host) {
15+
super(host);
16+
}
17+
18+
public abstract FragmentManager getSupportFragmentManager();
19+
20+
@Override
21+
@SuppressLint("NewApi")
22+
public void showRequestPermissionRationale(@NonNull String rationale,
23+
int positiveButton,
24+
int negativeButton,
25+
int requestCode,
26+
@NonNull String... perms) {
27+
RationaleDialogFragmentCompat
28+
.newInstance(positiveButton, negativeButton, rationale, requestCode, perms)
29+
.show(getSupportFragmentManager(), RationaleDialogFragmentCompat.TAG);
30+
}
31+
}

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

+12-18
Original file line numberDiff line numberDiff line change
@@ -2,37 +2,31 @@
22

33
import android.annotation.SuppressLint;
44
import android.app.Fragment;
5+
import android.app.FragmentManager;
56
import android.content.Context;
7+
import android.os.Build;
68
import android.support.annotation.NonNull;
7-
import android.support.annotation.StringRes;
9+
import android.support.annotation.RequiresApi;
810

911
/**
1012
* Permissions helper for {@link Fragment} from the framework.
1113
*/
12-
class FrameworkFragmentPermissionHelper extends PermissionHelper<Fragment> {
14+
class FrameworkFragmentPermissionHelper extends BaseFrameworkPermissionsHelper<Fragment> {
1315

1416
public FrameworkFragmentPermissionHelper(@NonNull Fragment host) {
1517
super(host);
1618
}
1719

1820
@Override
19-
@SuppressLint("NewApi")
20-
public void requestPermissions(@NonNull String rationale,
21-
@StringRes int positiveButton,
22-
@StringRes int negativeButton, int requestCode,
23-
@NonNull String... perms) {
21+
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
22+
public FragmentManager getFragmentManager() {
23+
return getHost().getChildFragmentManager();
24+
}
2425

25-
if (shouldShowRationale(perms)) {
26-
showRationaleDialogFragment(
27-
getHost().getChildFragmentManager(),
28-
rationale,
29-
positiveButton,
30-
negativeButton,
31-
requestCode,
32-
perms);
33-
} else {
34-
getHost().requestPermissions(perms, requestCode);
35-
}
26+
@Override
27+
@SuppressLint("NewApi")
28+
public void directRequestPermissions(int requestCode, @NonNull String... perms) {
29+
getHost().requestPermissions(perms, requestCode);
3630
}
3731

3832
@Override

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

+12-7
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package pub.devrel.easypermissions.helper;
22

3+
import android.annotation.SuppressLint;
34
import android.content.Context;
45
import android.support.annotation.NonNull;
5-
import android.support.annotation.StringRes;
66

77
/**
88
* Permissions helper for apps built against API < 23, which do not need runtime permissions.
@@ -14,12 +14,7 @@ public LowApiPermissionsHelper(@NonNull Object host) {
1414
}
1515

1616
@Override
17-
public void requestPermissions(@NonNull String rationale,
18-
@StringRes int positiveButton,
19-
@StringRes int negativeButton,
20-
int requestCode,
21-
@NonNull String... perms) {
22-
17+
public void directRequestPermissions(int requestCode, @NonNull String... perms) {
2318
throw new IllegalStateException("Should never be requesting permissions on API < 23!");
2419
}
2520

@@ -28,6 +23,16 @@ public boolean shouldShowRequestPermissionRationale(@NonNull String perm) {
2823
return false;
2924
}
3025

26+
@Override
27+
@SuppressLint("NewApi")
28+
public void showRequestPermissionRationale(@NonNull String rationale,
29+
int positiveButton,
30+
int negativeButton,
31+
int requestCode,
32+
@NonNull String... perms) {
33+
throw new IllegalStateException("Should never be requesting permissions on API < 23!");
34+
}
35+
3136
@Override
3237
public Context getContext() {
3338
return null;

0 commit comments

Comments
 (0)