Skip to content

Commit 296b2ab

Browse files
committed
Updated README.md
1 parent 59351f3 commit 296b2ab

File tree

1 file changed

+110
-3
lines changed

1 file changed

+110
-3
lines changed

README.md

Lines changed: 110 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,110 @@
1-
[![Build Status](https://travis-ci.org/greysonp/permiso.svg?branch=master)](https://travis-ci.org/greysonp/permiso)
2-
# Permiso
3-
An Android library that makes dealing with the Android Marshmallow permission system a bit easier.
1+
Permiso [![Build Status](https://travis-ci.org/greysonp/permiso.svg?branch=master)](https://travis-ci.org/greysonp/permiso)
2+
=======
3+
4+
Permiso is an Android library that makes requesting runtime permissions a whole lot easier.
5+
6+
Have you seen the [docs](http://developer.android.com/training/permissions/requesting.html) for how to request runtime permissions? Who wants to do *that* every time you request a permission? Let's clean this up!
7+
8+
Features
9+
--------
10+
* Localizes permission requests so you can handle everything using a simple callback mechanism.
11+
* Can easily make permission requests outside of the context of an Activity.
12+
* Simplifies showing the user your rationale for requesting a permission.
13+
* Can request multiple permissions at once.
14+
* Merges simultaneous requests for the same permission into a single request.
15+
16+
Usage
17+
-----
18+
If your Activity subclasses ```PermisoActivity```, requesting a permission is as simple as:
19+
20+
```java
21+
Permiso.getInstance().requestPermissions(new Permiso.IOnPermissionResult() {
22+
@Override
23+
public void onPermissionResult(Permiso.ResultSet resultSet) {
24+
if (resultSet.areAllPermissionsGranted()) {
25+
// Permission granted!
26+
} else {
27+
// Permission denied.
28+
}
29+
}
30+
31+
@Override
32+
public void onRationaleRequested(Permiso.IOnRationaleProvided callback, String... permissions) {
33+
Permiso.getInstance().showRationaleInDialog("Title", "Message", null, callback);
34+
}
35+
}, Manifest.permission.READ_EXTERNAL_STORAGE);
36+
```
37+
38+
### Requesting Multiple Permissions
39+
Requesting multiple permissions at once is just as easy.
40+
41+
```java
42+
Permiso.getInstance().requestPermissions(new Permiso.IOnPermissionResult() {
43+
@Override
44+
public void onPermissionResult(Permiso.ResultSet resultSet) {
45+
if (resultSet.isPermissionGranted(Manifest.permission.READ_CONTACTS)) {
46+
// Contact permission granted!
47+
}
48+
if (resultSet.isPermissionGranted(Manifest.permission.READ_CALENDAR)) {
49+
// Calendar permission granted!
50+
}
51+
}
52+
53+
@Override
54+
public void onRationaleRequested(Permiso.IOnRationaleProvided callback, String... permissions) {
55+
Permiso.getInstance().showRationaleInDialog("Title", "Message", null, callback);
56+
}
57+
}, Manifest.permission.READ_CONTACTS, Manifest.permission.READ_CALENDAR);
58+
```
59+
60+
Gradle
61+
------
62+
```java
63+
dependencies {
64+
compile 'com.greysonparrelli.permiso:permiso:0.1.0'
65+
}
66+
```
67+
68+
FAQ
69+
---
70+
**I don't want my Activity to subclass ```PermisoActivity```. Do I have to?**
71+
72+
Of course not! Permiso requires very little boilerplate, and therefore ```PermisoActivity``` does very little. If you don't want to subclass ```PermisoActivity```, all you have to do is make sure you do the two following things:
73+
74+
* In ```onCreate()```, invoke ```Permiso.getInstance().setActivity(this)```.
75+
* Forward the results of ```Activity.onRequestPermissionsResult()``` to ```Permiso.getInstance().onRequestPermissionResult()```.
76+
77+
Here's an example:
78+
79+
```java
80+
@Override
81+
protected void onCreate(Bundle savedInstanceState) {
82+
super.onCreate(savedInstanceState);
83+
Permiso.getInstance().setActivity(this);
84+
}
85+
86+
@Override
87+
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
88+
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
89+
Permiso.getInstance().onRequestPermissionResult(requestCode, permissions, grantResults);
90+
}
91+
```
92+
93+
**I don't want to show any rationale for my permissions.**
94+
95+
According to the Android Guidelines you probably should, but there's no hard requirement. If you don't want to show a rationale, simply invoke the callback and do nothing else:
96+
97+
```java
98+
@Override
99+
public void onRationaleRequested(Permiso.IOnRationaleProvided callback, String... permissions) {
100+
callback.onRationaleProvided();
101+
}
102+
```
103+
104+
**I want to do some complicated logic with the results of my permission request, but the ResultSet doesn't let me.**
105+
106+
Fear not! The ```ResultSet``` object has a method called ```toMap()```, which will give you back a mapping of permissions -> booleans that you can iterate over to your heart's content.
107+
108+
**What do you mean when you say that Permiso merges simultaneous requests for the same permission into a single request?**
109+
110+
If you request the same permission in two places simultaneously, Permiso will automatically merge them into one request. You might think this is a rare scenario, but before you know it, you have master and detail fragments that both need access to the user's contacts, and now you have to manage your permissions so their simultaneous requests don't cause two separate pop-ups! Don't worry, Permiso handles this for you.

0 commit comments

Comments
 (0)