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

Commit

Permalink
Add new builder API and support customizing rationale dialog theme (#180
Browse files Browse the repository at this point in the history
)
  • Loading branch information
SUPERCILEX authored and samtstern committed Dec 6, 2017
1 parent 8538725 commit 49b6867
Show file tree
Hide file tree
Showing 13 changed files with 453 additions and 84 deletions.
12 changes: 12 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,18 @@ private void methodRequiresTwoPermission() {
}
```

Or for finer control over the rationale dialog, use a `PermissionRequest`:

```java
EasyPermissions.requestPermissions(
new PermissionRequest.Builder(this, RC_CAMERA_AND_LOCATION, perms)
.setRationale(R.string.camera_and_location_rationale)
.setPositiveButtonText(R.string.rationale_ask_ok)
.setNegativeButtonText(R.string.rationale_ask_cancel)
.setTheme(R.style.my_fancy_style)
.build());
```

Optionally, for a finer control, you can have your `Activity` / `Fragment` implement
the `PermissionCallbacks` interface.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,19 +16,21 @@
import pub.devrel.easypermissions.EasyPermissions;

/**
* Created in {@link R.layout#activity_main}
* Created in {@link R.layout#activity_main}
*/
public class MainFragment extends Fragment implements EasyPermissions.PermissionCallbacks {

private static final String TAG = "MainFragment";
private static final int RC_SMS_PERM = 122;

@Override
public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);

// Create view
View v = inflater.inflate(R.layout.fragment_main, container);
View v = inflater.inflate(R.layout.fragment_main, container);

// Button click listener
v.findViewById(R.id.button_sms).setOnClickListener(new View.OnClickListener() {
Expand All @@ -42,7 +44,9 @@ public void onClick(View v) {
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
public void onRequestPermissionsResult(int requestCode,
@NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);

// EasyPermissions handles the request result.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,41 +90,50 @@ public static boolean hasPermissions(@NonNull Context context,
}

/**
* Request permissions from an Activity with standard OK/Cancel buttons.
* Request a set of permissions, showing a rationale if the system requests it.
*
* @see #requestPermissions(Activity, String, int, int, int, String...)
* @param host requesting context.
* @param rationale a message explaining why the application needs this set of permissions;
* will be displayed if the user rejects the request the first time.
* @param requestCode request code to track this request, must be < 256.
* @param perms a set of permissions to be requested.
* @see Manifest.permission
*/
public static void requestPermissions(
@NonNull Activity host, @NonNull String rationale,
int requestCode, @Size(min = 1) @NonNull String... perms) {
requestPermissions(host, rationale, android.R.string.ok, android.R.string.cancel,
requestCode, perms);
requestPermissions(
new PermissionRequest.Builder(host, requestCode, perms)
.setRationale(rationale)
.build());
}

/**
* Request permissions from a Support Fragment with standard OK/Cancel buttons.
*
* @see #requestPermissions(Activity, String, int, int, int, String...)
* @see #requestPermissions(Activity, String, int, String...)
*/
public static void requestPermissions(
@NonNull Fragment host, @NonNull String rationale,
int requestCode, @Size(min = 1) @NonNull String... perms) {

requestPermissions(host, rationale, android.R.string.ok, android.R.string.cancel,
requestCode, perms);
requestPermissions(
new PermissionRequest.Builder(host, requestCode, perms)
.setRationale(rationale)
.build());
}

/**
* Request permissions from a standard Fragment with standard OK/Cancel buttons.
*
* @see #requestPermissions(Activity, String, int, int, int, String...)
* @see #requestPermissions(Activity, String, int, String...)
*/
public static void requestPermissions(
@NonNull android.app.Fragment host, @NonNull String rationale,
int requestCode, @Size(min = 1) @NonNull String... perms) {

requestPermissions(host, rationale, android.R.string.ok, android.R.string.cancel,
requestCode, perms);
requestPermissions(
new PermissionRequest.Builder(host, requestCode, perms)
.setRationale(rationale)
.build());
}

/**
Expand All @@ -138,56 +147,80 @@ public static void requestPermissions(
* @param requestCode request code to track this request, must be < 256.
* @param perms a set of permissions to be requested.
* @see Manifest.permission
* @deprecated use {@link #requestPermissions(PermissionRequest)} instead
*/
@Deprecated
public static void requestPermissions(
@NonNull Activity host, @NonNull String rationale,
@StringRes int positiveButton, @StringRes int negativeButton,
int requestCode, @Size(min = 1) @NonNull String... perms) {
requestPermissions(PermissionHelper.newInstance(host), rationale,
positiveButton, negativeButton,
requestCode, perms);
requestPermissions(
new PermissionRequest.Builder(host, requestCode, perms)
.setRationale(rationale)
.setPositiveButtonText(positiveButton)
.setNegativeButtonText(negativeButton)
.build());
}

/**
* Request permissions from a Support Fragment.
*
* @see #requestPermissions(Activity, String, int, int, int, String...)
* @deprecated use {@link #requestPermissions(PermissionRequest)} instead
*/
@Deprecated
public static void requestPermissions(
@NonNull Fragment host, @NonNull String rationale,
@StringRes int positiveButton, @StringRes int negativeButton,
int requestCode, @Size(min = 1) @NonNull String... perms) {
requestPermissions(PermissionHelper.newInstance(host), rationale,
positiveButton, negativeButton,
requestCode, perms);
requestPermissions(
new PermissionRequest.Builder(host, requestCode, perms)
.setRationale(rationale)
.setPositiveButtonText(positiveButton)
.setNegativeButtonText(negativeButton)
.build());
}

/**
* @see #requestPermissions(Activity, String, int, int, int, String...)
* @deprecated use {@link #requestPermissions(PermissionRequest)} instead
*/
@Deprecated
public static void requestPermissions(
@NonNull android.app.Fragment host, @NonNull String rationale,
@StringRes int positiveButton, @StringRes int negativeButton,
int requestCode, @Size(min = 1) @NonNull String... perms) {
requestPermissions(PermissionHelper.newInstance(host), rationale,
positiveButton, negativeButton,
requestCode, perms);
requestPermissions(
new PermissionRequest.Builder(host, requestCode, perms)
.setRationale(rationale)
.setPositiveButtonText(positiveButton)
.setNegativeButtonText(negativeButton)
.build());
}

private static void requestPermissions(
@NonNull PermissionHelper helper, @NonNull String rationale,
@StringRes int positiveButton, @StringRes int negativeButton,
int requestCode, @Size(min = 1) @NonNull String... perms) {
/**
* Request a set of permissions.
*
* @param request the permission request
* @see PermissionRequest
*/
public static void requestPermissions(PermissionRequest request) {

// Check for permissions before dispatching the request
if (hasPermissions(helper.getContext(), perms)) {
notifyAlreadyHasPermissions(helper.getHost(), requestCode, perms);
if (hasPermissions(request.getHelper().getContext(), request.getPerms())) {
notifyAlreadyHasPermissions(
request.getHelper().getHost(), request.getRequestCode(), request.getPerms());
return;
}

// Request permissions
helper.requestPermissions(rationale, positiveButton,
negativeButton, requestCode, perms);
request.getHelper().requestPermissions(
request.getRationale(),
request.getPositiveButtonText(),
request.getNegativeButtonText(),
request.getTheme(),
request.getRequestCode(),
request.getPerms());
}

/**
Expand Down
Loading

0 comments on commit 49b6867

Please sign in to comment.