Skip to content

Commit

Permalink
Merge pull request #2 from nasduck/dev
Browse files Browse the repository at this point in the history
1.1.0
  • Loading branch information
DONGChuan authored Jan 4, 2019
2 parents 5657837 + 3150b21 commit fc6e688
Show file tree
Hide file tree
Showing 8 changed files with 108 additions and 70 deletions.
22 changes: 13 additions & 9 deletions app/src/main/java/com/nasduck/duckPermissionDemo/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
public class MainActivity extends AppCompatActivity {

private final static int AUDIO_RECORD_CODE = 1;
private final static int ACCESS_FINE_LOCATION_CODE = 2;

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

switch (requestCode) {
case AUDIO_RECORD_CODE:
case DuckPermission.RESULT_CODE_RECORD_AUDIO:
if (DuckPermission.getInstance(this).result(grantResults)) {
Toast.makeText(this, "Granted", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "Denied", Toast.LENGTH_SHORT).show();
}
break;
case ACCESS_FINE_LOCATION_CODE:
case DuckPermission.RESULT_CODE_ACCESS_FINE_LOCATION:
if (DuckPermission.getInstance(this).result(grantResults)) {
Toast.makeText(this, "Granted", Toast.LENGTH_SHORT).show();
} else {
Expand All @@ -43,19 +42,24 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis

public void onAudioRecordClick(View view) {
if (DuckPermission.getInstance(this)
.setResultCode(AUDIO_RECORD_CODE)
.requestAudioRecord()
.request()) {
.requestAudioRecord()) {
Toast.makeText(this, "Already granted audio record permission", Toast.LENGTH_SHORT).show();
}
}

public void onAccessFineLocationClick(View view) {
if (DuckPermission.getInstance(this)
.setResultCode(ACCESS_FINE_LOCATION_CODE)
.requestAccessFineLocation()
.request()) {
.requestAccessFineLocation()) {
Toast.makeText(this, "Already granted access fine location permission", Toast.LENGTH_SHORT).show();
}
}

public void onXXXXClick(View view) {
if (DuckPermission.getInstance(this)
.addAudioRecord()
.setResultCode(AUDIO_RECORD_CODE)
.request()) {
Toast.makeText(this, "Already granted audio record permission", Toast.LENGTH_SHORT).show();
}
}
}
2 changes: 1 addition & 1 deletion duckpermission/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ android {
minSdkVersion 14
targetSdkVersion 28
versionCode 1
versionName "1.0.0"
versionName "1.1.0"

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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,18 @@
import android.os.Build;
import android.support.v4.app.ActivityCompat;

import com.nasduck.duckpermission.result.IDuckPermissionResult;
import com.nasduck.duckpermission.result.RequestPermissionsResultNothing;
import com.nasduck.duckpermission.util.PermissionUtils;

import java.util.ArrayList;
import java.util.List;

public class DuckPermission {

public final static int DUCK_PERMISSION_RESULT_CODE = 999;
public final static int RESULT_CODE_RECORD_AUDIO = -999;
public final static int RESULT_CODE_ACCESS_FINE_LOCATION = -998;

private static DuckPermission DEFAULT;

Expand Down Expand Up @@ -42,21 +48,26 @@ public boolean result(int[] grantResults) {
}

public boolean request() {
return request(mResultCode);
}

public boolean request(int resultCode) {
// If below 6.0, no need to request
if(Build.VERSION.SDK_INT < 23){
return true;
}

// Filter Permissions not granted yet
List<String> deniedPermissionList =
PermissionFilter.getDeniedPermissionList(mActivity, mPermissionList);
List<String> deniedPermissions =
PermissionUtils.filterDeniedPermissions(mActivity, mPermissionList);

if(deniedPermissionList.size() == 0) {
if(deniedPermissions.size() == 0) {
return true;
}

String[] deniedPermissionArray = deniedPermissionList.toArray(new String[deniedPermissionList.size()]);
ActivityCompat.requestPermissions(mActivity, deniedPermissionArray, mResultCode);
// Request Permissions
String[] deniedPermissionArray = deniedPermissions.toArray(new String[deniedPermissions.size()]);
ActivityCompat.requestPermissions(mActivity, deniedPermissionArray, resultCode);

return false;
}
Expand Down Expand Up @@ -89,18 +100,30 @@ public void removeAllPermissions() {
this.mPermissionList = new ArrayList<>();
}

public DuckPermission requestPermissions(List<String> permissions) {
public DuckPermission addPermissions(List<String> permissions) {
this.mPermissionList.addAll(permissions);
return this;
}

public DuckPermission requestAudioRecord() {
public DuckPermission addAudioRecord() {
this.mPermissionList.add(Manifest.permission.RECORD_AUDIO);
return this;
}

public DuckPermission requestAccessFineLocation() {
public DuckPermission addAccessFineLocation() {
this.mPermissionList.add(Manifest.permission.ACCESS_FINE_LOCATION);
return this;
}

//

public Boolean requestAudioRecord() {
this.addAudioRecord();
return request(RESULT_CODE_RECORD_AUDIO);
}

public Boolean requestAccessFineLocation() {
this.addAccessFineLocation();
return request(RESULT_CODE_ACCESS_FINE_LOCATION);
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,10 +1,18 @@
package com.nasduck.duckpermission;
package com.nasduck.duckpermission.result;

import android.app.Activity;
import android.support.annotation.NonNull;

public interface IDuckPermissionResult {

/**
*
*
* @param activity
* @param permissions
* @param grantResults
* @return True if all permissions are granted
*/
boolean onPermissionsResult(Activity activity, @NonNull String[] permissions, @NonNull int[] grantResults);

}
Original file line number Diff line number Diff line change
@@ -1,32 +1,29 @@
package com.nasduck.duckpermission;
package com.nasduck.duckpermission.result;

import android.app.Activity;
import android.content.pm.PackageManager;
import android.support.annotation.NonNull;

import com.nasduck.duckpermission.SetPermissions;
import com.nasduck.duckpermission.util.PermissionUtils;

import java.util.ArrayList;
import java.util.List;

/**
* 如果授权失败,引导用户进行应用授权
* Guide users to grant permissions again if not granted
*/
public class RequestPermissionsResultGuide implements IDuckPermissionResult {

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

List<String> deniedPermissionList = new ArrayList<>();

for (int i = 0; i < grantResults.length; i++){
if(grantResults[i] == PackageManager.PERMISSION_DENIED){
deniedPermissionList.add(permissions[i]);
}
}
List<String> deniedPermissions = PermissionUtils.filterDeniedPermissions(permissions, grantResults);

if (deniedPermissionList.size() == 0) {
if (deniedPermissions.size() == 0) {
return true;
} else {
String name = PermissionUtils.getInstance().getPermissionNames(deniedPermissionList);
String name = PermissionUtils.getInstance().getPermissionNames(deniedPermissions);
SetPermissions.openAppDetails(activity, name);
return false;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package com.nasduck.duckpermission;
package com.nasduck.duckpermission.result;

import android.app.Activity;
import android.content.pm.PackageManager;
import android.support.annotation.NonNull;

/**
* 如果授权失败,不做任何处理
* Do nothing if not granted
*/
public class RequestPermissionsResultNothing implements IDuckPermissionResult {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,51 @@
package com.nasduck.duckpermission;
package com.nasduck.duckpermission.util;

import android.content.Context;
import android.content.pm.PackageManager;
import android.support.v4.content.ContextCompat;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class PermissionUtils {

public static List<String> filterDeniedPermissions(Context context, List<String> permissions) {
List<String> deniedPermissions = new ArrayList<>();

for (String permission : permissions) {
if (ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_DENIED) {
deniedPermissions.add(permission);
}
}

return deniedPermissions;
}

public static List<String> filterDeniedPermissions(Context context, String[] permissions) {
List<String> deniedPermissions = new ArrayList<>();

for (String permission : permissions) {
if (ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_DENIED) {
deniedPermissions.add(permission);
}
}

return deniedPermissions;
}

public static List<String> filterDeniedPermissions(String[] permissions, int[] grantResults) {
List<String> deniedPermissions = new ArrayList<>();

for (int i = 0; i < grantResults.length; i++) {
if(grantResults[i] == PackageManager.PERMISSION_DENIED) {
deniedPermissions.add(permissions[i]);
}
}

return deniedPermissions;
}

private static PermissionUtils permissionUtils;
public static PermissionUtils getInstance(){
if(permissionUtils == null){
Expand All @@ -15,7 +55,7 @@ public static PermissionUtils getInstance(){
}

private HashMap<String,String> permissions;
public HashMap<String,String> getPermissions(){
public HashMap<String,String> getPermissions() {
if(permissions == null){
permissions = new HashMap<>();
initPermissions();
Expand Down Expand Up @@ -60,14 +100,15 @@ private void initPermissions(){
permissions.put("android.permission.READ_CELL_BROADCASTS","--短信");
}

public String getPermissionNames(List<String> permission){
public String getPermissionNames(List<String> permission) {
if(permission==null || permission.size()==0){
return "\n";
}
StringBuilder sb = new StringBuilder();
List<String> list = new ArrayList<>();

HashMap<String, String> permissions = getPermissions();

for(int i=0; i<permission.size(); i++){
String name = permissions.get(permission.get(i));
if(name != null && !list.contains(name)) {
Expand Down

0 comments on commit fc6e688

Please sign in to comment.