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

Commit 49b6867

Browse files
SUPERCILEXsamtstern
authored andcommitted
Add new builder API and support customizing rationale dialog theme (#180)
1 parent 8538725 commit 49b6867

File tree

13 files changed

+453
-84
lines changed

13 files changed

+453
-84
lines changed

README.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,18 @@ private void methodRequiresTwoPermission() {
7070
}
7171
```
7272

73+
Or for finer control over the rationale dialog, use a `PermissionRequest`:
74+
75+
```java
76+
EasyPermissions.requestPermissions(
77+
new PermissionRequest.Builder(this, RC_CAMERA_AND_LOCATION, perms)
78+
.setRationale(R.string.camera_and_location_rationale)
79+
.setPositiveButtonText(R.string.rationale_ask_ok)
80+
.setNegativeButtonText(R.string.rationale_ask_cancel)
81+
.setTheme(R.style.my_fancy_style)
82+
.build());
83+
```
84+
7385
Optionally, for a finer control, you can have your `Activity` / `Fragment` implement
7486
the `PermissionCallbacks` interface.
7587

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,21 @@
1616
import pub.devrel.easypermissions.EasyPermissions;
1717

1818
/**
19-
* Created in {@link R.layout#activity_main}
19+
* Created in {@link R.layout#activity_main}
2020
*/
2121
public class MainFragment extends Fragment implements EasyPermissions.PermissionCallbacks {
2222

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

2626
@Override
27-
public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
27+
public View onCreateView(LayoutInflater inflater,
28+
ViewGroup container,
29+
Bundle savedInstanceState) {
2830
super.onCreateView(inflater, container, savedInstanceState);
2931

3032
// Create view
31-
View v = inflater.inflate(R.layout.fragment_main, container);
33+
View v = inflater.inflate(R.layout.fragment_main, container);
3234

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

4446
@Override
45-
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
47+
public void onRequestPermissionsResult(int requestCode,
48+
@NonNull String[] permissions,
49+
@NonNull int[] grantResults) {
4650
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
4751

4852
// EasyPermissions handles the request result.

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

Lines changed: 62 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -90,41 +90,50 @@ public static boolean hasPermissions(@NonNull Context context,
9090
}
9191

9292
/**
93-
* Request permissions from an Activity with standard OK/Cancel buttons.
93+
* Request a set of permissions, showing a rationale if the system requests it.
9494
*
95-
* @see #requestPermissions(Activity, String, int, int, int, String...)
95+
* @param host requesting context.
96+
* @param rationale a message explaining why the application needs this set of permissions;
97+
* will be displayed if the user rejects the request the first time.
98+
* @param requestCode request code to track this request, must be < 256.
99+
* @param perms a set of permissions to be requested.
100+
* @see Manifest.permission
96101
*/
97102
public static void requestPermissions(
98103
@NonNull Activity host, @NonNull String rationale,
99104
int requestCode, @Size(min = 1) @NonNull String... perms) {
100-
requestPermissions(host, rationale, android.R.string.ok, android.R.string.cancel,
101-
requestCode, perms);
105+
requestPermissions(
106+
new PermissionRequest.Builder(host, requestCode, perms)
107+
.setRationale(rationale)
108+
.build());
102109
}
103110

104111
/**
105112
* Request permissions from a Support Fragment with standard OK/Cancel buttons.
106113
*
107-
* @see #requestPermissions(Activity, String, int, int, int, String...)
114+
* @see #requestPermissions(Activity, String, int, String...)
108115
*/
109116
public static void requestPermissions(
110117
@NonNull Fragment host, @NonNull String rationale,
111118
int requestCode, @Size(min = 1) @NonNull String... perms) {
112-
113-
requestPermissions(host, rationale, android.R.string.ok, android.R.string.cancel,
114-
requestCode, perms);
119+
requestPermissions(
120+
new PermissionRequest.Builder(host, requestCode, perms)
121+
.setRationale(rationale)
122+
.build());
115123
}
116124

117125
/**
118126
* Request permissions from a standard Fragment with standard OK/Cancel buttons.
119127
*
120-
* @see #requestPermissions(Activity, String, int, int, int, String...)
128+
* @see #requestPermissions(Activity, String, int, String...)
121129
*/
122130
public static void requestPermissions(
123131
@NonNull android.app.Fragment host, @NonNull String rationale,
124132
int requestCode, @Size(min = 1) @NonNull String... perms) {
125-
126-
requestPermissions(host, rationale, android.R.string.ok, android.R.string.cancel,
127-
requestCode, perms);
133+
requestPermissions(
134+
new PermissionRequest.Builder(host, requestCode, perms)
135+
.setRationale(rationale)
136+
.build());
128137
}
129138

130139
/**
@@ -138,56 +147,80 @@ public static void requestPermissions(
138147
* @param requestCode request code to track this request, must be < 256.
139148
* @param perms a set of permissions to be requested.
140149
* @see Manifest.permission
150+
* @deprecated use {@link #requestPermissions(PermissionRequest)} instead
141151
*/
152+
@Deprecated
142153
public static void requestPermissions(
143154
@NonNull Activity host, @NonNull String rationale,
144155
@StringRes int positiveButton, @StringRes int negativeButton,
145156
int requestCode, @Size(min = 1) @NonNull String... perms) {
146-
requestPermissions(PermissionHelper.newInstance(host), rationale,
147-
positiveButton, negativeButton,
148-
requestCode, perms);
157+
requestPermissions(
158+
new PermissionRequest.Builder(host, requestCode, perms)
159+
.setRationale(rationale)
160+
.setPositiveButtonText(positiveButton)
161+
.setNegativeButtonText(negativeButton)
162+
.build());
149163
}
150164

151165
/**
152166
* Request permissions from a Support Fragment.
153167
*
154168
* @see #requestPermissions(Activity, String, int, int, int, String...)
169+
* @deprecated use {@link #requestPermissions(PermissionRequest)} instead
155170
*/
171+
@Deprecated
156172
public static void requestPermissions(
157173
@NonNull Fragment host, @NonNull String rationale,
158174
@StringRes int positiveButton, @StringRes int negativeButton,
159175
int requestCode, @Size(min = 1) @NonNull String... perms) {
160-
requestPermissions(PermissionHelper.newInstance(host), rationale,
161-
positiveButton, negativeButton,
162-
requestCode, perms);
176+
requestPermissions(
177+
new PermissionRequest.Builder(host, requestCode, perms)
178+
.setRationale(rationale)
179+
.setPositiveButtonText(positiveButton)
180+
.setNegativeButtonText(negativeButton)
181+
.build());
163182
}
164183

165184
/**
166185
* @see #requestPermissions(Activity, String, int, int, int, String...)
186+
* @deprecated use {@link #requestPermissions(PermissionRequest)} instead
167187
*/
188+
@Deprecated
168189
public static void requestPermissions(
169190
@NonNull android.app.Fragment host, @NonNull String rationale,
170191
@StringRes int positiveButton, @StringRes int negativeButton,
171192
int requestCode, @Size(min = 1) @NonNull String... perms) {
172-
requestPermissions(PermissionHelper.newInstance(host), rationale,
173-
positiveButton, negativeButton,
174-
requestCode, perms);
193+
requestPermissions(
194+
new PermissionRequest.Builder(host, requestCode, perms)
195+
.setRationale(rationale)
196+
.setPositiveButtonText(positiveButton)
197+
.setNegativeButtonText(negativeButton)
198+
.build());
175199
}
176200

177-
private static void requestPermissions(
178-
@NonNull PermissionHelper helper, @NonNull String rationale,
179-
@StringRes int positiveButton, @StringRes int negativeButton,
180-
int requestCode, @Size(min = 1) @NonNull String... perms) {
201+
/**
202+
* Request a set of permissions.
203+
*
204+
* @param request the permission request
205+
* @see PermissionRequest
206+
*/
207+
public static void requestPermissions(PermissionRequest request) {
181208

182209
// Check for permissions before dispatching the request
183-
if (hasPermissions(helper.getContext(), perms)) {
184-
notifyAlreadyHasPermissions(helper.getHost(), requestCode, perms);
210+
if (hasPermissions(request.getHelper().getContext(), request.getPerms())) {
211+
notifyAlreadyHasPermissions(
212+
request.getHelper().getHost(), request.getRequestCode(), request.getPerms());
185213
return;
186214
}
187215

188216
// Request permissions
189-
helper.requestPermissions(rationale, positiveButton,
190-
negativeButton, requestCode, perms);
217+
request.getHelper().requestPermissions(
218+
request.getRationale(),
219+
request.getPositiveButtonText(),
220+
request.getNegativeButtonText(),
221+
request.getTheme(),
222+
request.getRequestCode(),
223+
request.getPerms());
191224
}
192225

193226
/**

0 commit comments

Comments
 (0)