Skip to content

Commit fc6e688

Browse files
authored
Merge pull request #2 from nasduck/dev
1.1.0
2 parents 5657837 + 3150b21 commit fc6e688

File tree

8 files changed

+108
-70
lines changed

8 files changed

+108
-70
lines changed

app/src/main/java/com/nasduck/duckPermissionDemo/MainActivity.java

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
public class MainActivity extends AppCompatActivity {
1212

1313
private final static int AUDIO_RECORD_CODE = 1;
14-
private final static int ACCESS_FINE_LOCATION_CODE = 2;
1514

1615
@Override
1716
protected void onCreate(Bundle savedInstanceState) {
@@ -24,14 +23,14 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis
2423
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
2524

2625
switch (requestCode) {
27-
case AUDIO_RECORD_CODE:
26+
case DuckPermission.RESULT_CODE_RECORD_AUDIO:
2827
if (DuckPermission.getInstance(this).result(grantResults)) {
2928
Toast.makeText(this, "Granted", Toast.LENGTH_SHORT).show();
3029
} else {
3130
Toast.makeText(this, "Denied", Toast.LENGTH_SHORT).show();
3231
}
3332
break;
34-
case ACCESS_FINE_LOCATION_CODE:
33+
case DuckPermission.RESULT_CODE_ACCESS_FINE_LOCATION:
3534
if (DuckPermission.getInstance(this).result(grantResults)) {
3635
Toast.makeText(this, "Granted", Toast.LENGTH_SHORT).show();
3736
} else {
@@ -43,19 +42,24 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis
4342

4443
public void onAudioRecordClick(View view) {
4544
if (DuckPermission.getInstance(this)
46-
.setResultCode(AUDIO_RECORD_CODE)
47-
.requestAudioRecord()
48-
.request()) {
45+
.requestAudioRecord()) {
4946
Toast.makeText(this, "Already granted audio record permission", Toast.LENGTH_SHORT).show();
5047
}
5148
}
5249

5350
public void onAccessFineLocationClick(View view) {
5451
if (DuckPermission.getInstance(this)
55-
.setResultCode(ACCESS_FINE_LOCATION_CODE)
56-
.requestAccessFineLocation()
57-
.request()) {
52+
.requestAccessFineLocation()) {
5853
Toast.makeText(this, "Already granted access fine location permission", Toast.LENGTH_SHORT).show();
5954
}
6055
}
56+
57+
public void onXXXXClick(View view) {
58+
if (DuckPermission.getInstance(this)
59+
.addAudioRecord()
60+
.setResultCode(AUDIO_RECORD_CODE)
61+
.request()) {
62+
Toast.makeText(this, "Already granted audio record permission", Toast.LENGTH_SHORT).show();
63+
}
64+
}
6165
}

duckpermission/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ android {
1010
minSdkVersion 14
1111
targetSdkVersion 28
1212
versionCode 1
13-
versionName "1.0.0"
13+
versionName "1.1.0"
1414

1515
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
1616

duckpermission/src/main/java/com/nasduck/duckpermission/DuckPermission.java

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,18 @@
55
import android.os.Build;
66
import android.support.v4.app.ActivityCompat;
77

8+
import com.nasduck.duckpermission.result.IDuckPermissionResult;
9+
import com.nasduck.duckpermission.result.RequestPermissionsResultNothing;
10+
import com.nasduck.duckpermission.util.PermissionUtils;
11+
812
import java.util.ArrayList;
913
import java.util.List;
1014

1115
public class DuckPermission {
1216

1317
public final static int DUCK_PERMISSION_RESULT_CODE = 999;
18+
public final static int RESULT_CODE_RECORD_AUDIO = -999;
19+
public final static int RESULT_CODE_ACCESS_FINE_LOCATION = -998;
1420

1521
private static DuckPermission DEFAULT;
1622

@@ -42,21 +48,26 @@ public boolean result(int[] grantResults) {
4248
}
4349

4450
public boolean request() {
51+
return request(mResultCode);
52+
}
53+
54+
public boolean request(int resultCode) {
4555
// If below 6.0, no need to request
4656
if(Build.VERSION.SDK_INT < 23){
4757
return true;
4858
}
4959

5060
// Filter Permissions not granted yet
51-
List<String> deniedPermissionList =
52-
PermissionFilter.getDeniedPermissionList(mActivity, mPermissionList);
61+
List<String> deniedPermissions =
62+
PermissionUtils.filterDeniedPermissions(mActivity, mPermissionList);
5363

54-
if(deniedPermissionList.size() == 0) {
64+
if(deniedPermissions.size() == 0) {
5565
return true;
5666
}
5767

58-
String[] deniedPermissionArray = deniedPermissionList.toArray(new String[deniedPermissionList.size()]);
59-
ActivityCompat.requestPermissions(mActivity, deniedPermissionArray, mResultCode);
68+
// Request Permissions
69+
String[] deniedPermissionArray = deniedPermissions.toArray(new String[deniedPermissions.size()]);
70+
ActivityCompat.requestPermissions(mActivity, deniedPermissionArray, resultCode);
6071

6172
return false;
6273
}
@@ -89,18 +100,30 @@ public void removeAllPermissions() {
89100
this.mPermissionList = new ArrayList<>();
90101
}
91102

92-
public DuckPermission requestPermissions(List<String> permissions) {
103+
public DuckPermission addPermissions(List<String> permissions) {
93104
this.mPermissionList.addAll(permissions);
94105
return this;
95106
}
96107

97-
public DuckPermission requestAudioRecord() {
108+
public DuckPermission addAudioRecord() {
98109
this.mPermissionList.add(Manifest.permission.RECORD_AUDIO);
99110
return this;
100111
}
101112

102-
public DuckPermission requestAccessFineLocation() {
113+
public DuckPermission addAccessFineLocation() {
103114
this.mPermissionList.add(Manifest.permission.ACCESS_FINE_LOCATION);
104115
return this;
105116
}
117+
118+
//
119+
120+
public Boolean requestAudioRecord() {
121+
this.addAudioRecord();
122+
return request(RESULT_CODE_RECORD_AUDIO);
123+
}
124+
125+
public Boolean requestAccessFineLocation() {
126+
this.addAccessFineLocation();
127+
return request(RESULT_CODE_ACCESS_FINE_LOCATION);
128+
}
106129
}

duckpermission/src/main/java/com/nasduck/duckpermission/PermissionFilter.java

Lines changed: 0 additions & 35 deletions
This file was deleted.
Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,18 @@
1-
package com.nasduck.duckpermission;
1+
package com.nasduck.duckpermission.result;
22

33
import android.app.Activity;
44
import android.support.annotation.NonNull;
55

66
public interface IDuckPermissionResult {
77

8+
/**
9+
*
10+
*
11+
* @param activity
12+
* @param permissions
13+
* @param grantResults
14+
* @return True if all permissions are granted
15+
*/
816
boolean onPermissionsResult(Activity activity, @NonNull String[] permissions, @NonNull int[] grantResults);
917

1018
}

duckpermission/src/main/java/com/nasduck/duckpermission/RequestPermissionsResultGuide.java renamed to duckpermission/src/main/java/com/nasduck/duckpermission/result/RequestPermissionsResultGuide.java

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,29 @@
1-
package com.nasduck.duckpermission;
1+
package com.nasduck.duckpermission.result;
22

33
import android.app.Activity;
44
import android.content.pm.PackageManager;
55
import android.support.annotation.NonNull;
66

7+
import com.nasduck.duckpermission.SetPermissions;
8+
import com.nasduck.duckpermission.util.PermissionUtils;
9+
710
import java.util.ArrayList;
811
import java.util.List;
912

1013
/**
11-
* 如果授权失败,引导用户进行应用授权
14+
* Guide users to grant permissions again if not granted
1215
*/
1316
public class RequestPermissionsResultGuide implements IDuckPermissionResult {
1417

1518
@Override
1619
public boolean onPermissionsResult(Activity activity, @NonNull String[] permissions, @NonNull int[] grantResults) {
1720

18-
List<String> deniedPermissionList = new ArrayList<>();
19-
20-
for (int i = 0; i < grantResults.length; i++){
21-
if(grantResults[i] == PackageManager.PERMISSION_DENIED){
22-
deniedPermissionList.add(permissions[i]);
23-
}
24-
}
21+
List<String> deniedPermissions = PermissionUtils.filterDeniedPermissions(permissions, grantResults);
2522

26-
if (deniedPermissionList.size() == 0) {
23+
if (deniedPermissions.size() == 0) {
2724
return true;
2825
} else {
29-
String name = PermissionUtils.getInstance().getPermissionNames(deniedPermissionList);
26+
String name = PermissionUtils.getInstance().getPermissionNames(deniedPermissions);
3027
SetPermissions.openAppDetails(activity, name);
3128
return false;
3229
}

duckpermission/src/main/java/com/nasduck/duckpermission/RequestPermissionsResultNothing.java renamed to duckpermission/src/main/java/com/nasduck/duckpermission/result/RequestPermissionsResultNothing.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
package com.nasduck.duckpermission;
1+
package com.nasduck.duckpermission.result;
22

33
import android.app.Activity;
44
import android.content.pm.PackageManager;
55
import android.support.annotation.NonNull;
66

77
/**
8-
* 如果授权失败,不做任何处理
8+
* Do nothing if not granted
99
*/
1010
public class RequestPermissionsResultNothing implements IDuckPermissionResult {
1111

duckpermission/src/main/java/com/nasduck/duckpermission/PermissionUtils.java renamed to duckpermission/src/main/java/com/nasduck/duckpermission/util/PermissionUtils.java

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,51 @@
1-
package com.nasduck.duckpermission;
1+
package com.nasduck.duckpermission.util;
2+
3+
import android.content.Context;
4+
import android.content.pm.PackageManager;
5+
import android.support.v4.content.ContextCompat;
26

37
import java.util.ArrayList;
48
import java.util.HashMap;
59
import java.util.List;
610

711
public class PermissionUtils {
812

13+
public static List<String> filterDeniedPermissions(Context context, List<String> permissions) {
14+
List<String> deniedPermissions = new ArrayList<>();
15+
16+
for (String permission : permissions) {
17+
if (ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_DENIED) {
18+
deniedPermissions.add(permission);
19+
}
20+
}
21+
22+
return deniedPermissions;
23+
}
24+
25+
public static List<String> filterDeniedPermissions(Context context, String[] permissions) {
26+
List<String> deniedPermissions = new ArrayList<>();
27+
28+
for (String permission : permissions) {
29+
if (ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_DENIED) {
30+
deniedPermissions.add(permission);
31+
}
32+
}
33+
34+
return deniedPermissions;
35+
}
36+
37+
public static List<String> filterDeniedPermissions(String[] permissions, int[] grantResults) {
38+
List<String> deniedPermissions = new ArrayList<>();
39+
40+
for (int i = 0; i < grantResults.length; i++) {
41+
if(grantResults[i] == PackageManager.PERMISSION_DENIED) {
42+
deniedPermissions.add(permissions[i]);
43+
}
44+
}
45+
46+
return deniedPermissions;
47+
}
48+
949
private static PermissionUtils permissionUtils;
1050
public static PermissionUtils getInstance(){
1151
if(permissionUtils == null){
@@ -15,7 +55,7 @@ public static PermissionUtils getInstance(){
1555
}
1656

1757
private HashMap<String,String> permissions;
18-
public HashMap<String,String> getPermissions(){
58+
public HashMap<String,String> getPermissions() {
1959
if(permissions == null){
2060
permissions = new HashMap<>();
2161
initPermissions();
@@ -60,14 +100,15 @@ private void initPermissions(){
60100
permissions.put("android.permission.READ_CELL_BROADCASTS","--短信");
61101
}
62102

63-
public String getPermissionNames(List<String> permission){
103+
public String getPermissionNames(List<String> permission) {
64104
if(permission==null || permission.size()==0){
65105
return "\n";
66106
}
67107
StringBuilder sb = new StringBuilder();
68108
List<String> list = new ArrayList<>();
69109

70110
HashMap<String, String> permissions = getPermissions();
111+
71112
for(int i=0; i<permission.size(); i++){
72113
String name = permissions.get(permission.get(i));
73114
if(name != null && !list.contains(name)) {

0 commit comments

Comments
 (0)