Bläddra i källkod

提交1.0.9版本,完善弹窗配置,优化注解方法,去除注解多余配置

yanyi 5 år sedan
förälder
incheckning
f56050ca22

+ 2 - 1
README.md

@@ -5,11 +5,12 @@
 
 module 下添加
 
-     implementation 'com.yanyi.benyanyi:permissionlib:1.0.8'
+     implementation 'com.yanyi.benyanyi:permissionlib:1.0.9'
 
 具体使用查看[wiki](https://github.com/BenYanYi/BasePermission/wiki)
 
 ### 版本更新
+* 2019-07-18更新(1.0.9) 优化拒绝权限通知弹窗,添加注解配置弹窗方法,优化注解方法,去除多余配置
 * 2019-06-26更新(1.0.8) 删除重复方法
 * 2019-06-12更新(1.0.7) 优化方法,规范方法,修改包名,以便所有开源库统一包名
 * 2019-05-30更新(1.0.6) 优化注解调用方法

+ 22 - 11
app/src/main/java/com/yanyi/basepermission/MainActivity.java

@@ -9,10 +9,10 @@ import android.util.Log;
 import com.benyanyi.permissionlib.PermissionBind;
 import com.benyanyi.permissionlib.PermissionDialogInfo;
 import com.benyanyi.permissionlib.annotation.GetPermissionComplete;
+import com.benyanyi.permissionlib.annotation.GetPermissionDialogInfo;
 import com.benyanyi.permissionlib.annotation.GetPermissionFailure;
 import com.benyanyi.permissionlib.annotation.GetPermissionSuccess;
 import com.benyanyi.permissionlib.annotation.GetPermissions;
-import com.benyanyi.permissionlib.msg.FailureMsg;
 
 /**
  * @author myLove
@@ -20,7 +20,7 @@ import com.benyanyi.permissionlib.msg.FailureMsg;
  * @email ben@yanyi.red
  * @overview
  */
-@GetPermissions(permissionCode = 1, value = {Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.READ_PHONE_STATE})
+@GetPermissions({Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.READ_PHONE_STATE})
 public class MainActivity extends AppCompatActivity {
 
     @Override
@@ -30,19 +30,30 @@ public class MainActivity extends AppCompatActivity {
         PermissionBind.request(this, this);
     }
 
-    @GetPermissionSuccess(1)
-    private void success(int permissionCode) {
-        log(permissionCode);
+    @GetPermissionSuccess
+    private void success() {
+        log("成功");
     }
 
-    @GetPermissionFailure(1)
-    private void failure(FailureMsg failureMsg) {
-        log(failureMsg);
+    @GetPermissionFailure
+    private void failure(String[] failureMsg) {
+        StringBuilder s = new StringBuilder();
+        for (String str : failureMsg) {
+            s.append(str);
+        }
+        log(s.toString());
+    }
+
+    @GetPermissionComplete
+    private void complete() {
+        log("aaa");
     }
 
-    @GetPermissionComplete(1)
-    private void complete(int permissionCode) {
-        log(permissionCode);
+    @GetPermissionDialogInfo
+    private PermissionDialogInfo setPermissionDialogInfo(PermissionDialogInfo dialogInfo) {
+        dialogInfo.isShow = true;
+        dialogInfo.title = "哈哈哈";
+        return dialogInfo;
     }
 
     private void log(Object object) {

+ 1 - 1
app/src/main/java/com/yanyi/basepermission/PermissionUtil.java

@@ -24,7 +24,7 @@ public class PermissionUtil {
         PermissionBind.request(activity, this);
     }
 
-    @GetPermissionSuccess({0, 1, 2})
+    @GetPermissionSuccess()
     private void success(int permissionCode) {
         log(permissionCode);
     }

+ 1 - 1
permissionlib/bintrayUpload.gradle

@@ -7,7 +7,7 @@ def siteUrl = 'http://www.yanyis.space/yanyi/basepermission' // 项目主页。
 def gitUrl = 'http://www.yanyis.space/yanyi/basepermission.git' // Git仓库的url。
 
 group = "com.yanyi.benyanyi"// 唯一包名,比如compile 'com.ansen.http:okhttpencapsulation:1.0.1'中的com.ansen.http就是这里配置的。
-version = "1.0.8"//项目引用的版本号,比如compile 'com.ansen.http:okhttpencapsulation:1.0.1'中的1.0.1就是这里配置的。
+version = "1.0.9"//项目引用的版本号,比如compile 'com.ansen.http:okhttpencapsulation:1.0.1'中的1.0.1就是这里配置的。
 install {
     repositories.mavenInstaller {
         // This generates POM.xml with proper parameters

+ 73 - 81
permissionlib/src/main/java/com/benyanyi/permissionlib/PermissionBind.java

@@ -3,6 +3,7 @@ package com.benyanyi.permissionlib;
 import android.app.Activity;
 
 import com.benyanyi.permissionlib.annotation.GetPermissionComplete;
+import com.benyanyi.permissionlib.annotation.GetPermissionDialogInfo;
 import com.benyanyi.permissionlib.annotation.GetPermissionFailure;
 import com.benyanyi.permissionlib.annotation.GetPermissions;
 import com.benyanyi.permissionlib.annotation.GetPermissionSuccess;
@@ -18,12 +19,12 @@ import java.lang.reflect.Method;
  */
 public final class PermissionBind {
     private static PermissionBind instance;
-    private PermissionHelper permissionHelper;
+    private PermissionConfig permissionConfig;
     private Object object;
 
     private PermissionBind(Activity activity, Object object) {
         this.object = object;
-        this.permissionHelper = PermissionHelper.getInstance(activity);
+        this.permissionConfig = PermissionHelper.getInstance(activity);
         initPermission();
     }
 
@@ -46,15 +47,48 @@ public final class PermissionBind {
             String[] value = annotation.value();
             if (value.length > 0) {
                 this.setPermissions(value);
-                PermissionDialogInfo info = new PermissionDialogInfo();
-                info.isShow = false;
-                this.setPermissionDialogInfo(info);
+                this.setPermissionDialogInfo(annotationDialogInfo());
                 this.annotationCallBack();
-                this.hasPermission(annotation.permissionCode());
+                this.hasPermission();
             }
         }
     }
 
+    /**
+     * 设置权限dialog
+     */
+    private PermissionDialogInfo annotationDialogInfo() {
+        PermissionDialogInfo dialogInfo = new PermissionDialogInfo();
+        Method[] methods = this.object.getClass().getDeclaredMethods();
+        for (Method method : methods) {
+            GetPermissionDialogInfo permissionDialogInfo = method.getAnnotation(GetPermissionDialogInfo.class);
+            if (permissionDialogInfo != null && method.getReturnType().getSimpleName().equals("PermissionDialogInfo")) {
+                Class<?>[] parameterTypes = method.getParameterTypes();
+                String i1 = "PermissionDialogInfo";
+                if (parameterTypes.length == 1) {
+                    boolean boo1 = parameterTypes[0].getSimpleName().equals(i1);
+                    try {
+                        method.setAccessible(true);
+                        if (boo1) {
+                            Object invoke = method.invoke(this.object, dialogInfo);
+                            if (invoke instanceof PermissionDialogInfo) {
+                                return (PermissionDialogInfo) invoke;
+                            } else {
+                                dialogInfo.isShow = false;
+                                return dialogInfo;
+                            }
+                        }
+                    } catch (Exception e) {
+                        dialogInfo.isShow = false;
+                        return dialogInfo;
+                    }
+                }
+            }
+        }
+        dialogInfo.isShow = false;
+        return dialogInfo;
+    }
+
     /**
      * 权限申请结果回调注解处理
      */
@@ -62,51 +96,34 @@ public final class PermissionBind {
         this.setPermissionCallBack(new PermissionCallBack() {
             @Override
             public void onPermissionSuccess(int permissionCode) {
-                annotationSuccess(permissionCode);
+                annotationSuccess();
             }
 
             @Override
             public void onPermissionFailure(FailureMsg failureMsg) {
-                annotationFailure(failureMsg);
+                annotationFailure(failureMsg.getFailurePermissions());
             }
 
             @Override
             public void onPermissionComplete(int permissionCode) {
-                annotationComplete(permissionCode);
+                annotationComplete();
             }
         });
     }
 
     /**
      * 权限获取成功处理注解
-     *
-     * @param permissionCode
      */
-    private void annotationSuccess(int permissionCode) {
+    private void annotationSuccess() {
         Method[] methods = this.object.getClass().getDeclaredMethods();
         for (Method method : methods) {
             GetPermissionSuccess permissionSuccess = method.getAnnotation(GetPermissionSuccess.class);
             if (permissionSuccess != null) {
-                int[] values = permissionSuccess.value();
-                if (values.length > 0) {
-                    for (int value : values) {
-                        if (value == permissionCode) {
-                            Class<?>[] parameterTypes = method.getParameterTypes();
-                            String i1 = "Integer";
-                            String i2 = "int";
-                            boolean boo1 = parameterTypes != null && parameterTypes.length == 1
-                                    && (parameterTypes[0].getSimpleName().equals(i1)
-                                    || parameterTypes[0].getSimpleName().equals(i2));
-                            if (boo1) {
-                                method.setAccessible(true);
-                                try {
-                                    method.invoke(this.object, permissionCode);
-                                } catch (Exception e) {
-                                    e.printStackTrace();
-                                }
-                            }
-                        }
-                    }
+                method.setAccessible(true);
+                try {
+                    method.invoke(this.object);
+                } catch (Exception e) {
+                    e.printStackTrace();
                 }
             }
         }
@@ -115,90 +132,65 @@ public final class PermissionBind {
 
     /**
      * 权限未全部获取成功注解处理
-     *
-     * @param failureMsg
      */
-    private void annotationFailure(FailureMsg failureMsg) {
+    private void annotationFailure(String[] failurePermissions) {
         Method[] methods = this.object.getClass().getDeclaredMethods();
         for (Method method : methods) {
             GetPermissionFailure permissionFailure = method.getAnnotation(GetPermissionFailure.class);
             if (permissionFailure != null) {
-                int[] values = permissionFailure.value();
-                if (values.length > 0) {
-                    for (int value : values) {
-                        if (value == failureMsg.getPermissionCode()) {
-                            Class<?>[] parameterTypes = method.getParameterTypes();
-                            String str1 = "FailureMsg";
-                            if (parameterTypes != null && parameterTypes.length == 1
-                                    && parameterTypes[0].getSimpleName().equals(str1)) {
-                                method.setAccessible(true);
-                                try {
-                                    method.invoke(this.object, failureMsg);
-                                } catch (Exception e) {
-                                    e.printStackTrace();
-                                }
+                Class<?>[] parameterTypes = method.getParameterTypes();
+                String str1 = "String[]";
+                if (parameterTypes != null) {
+                    for (Class<?> aClass : parameterTypes) {
+                        if (aClass.getSimpleName().equals(str1)) {
+                            method.setAccessible(true);
+                            try {
+                                method.invoke(this.object, (Object) failurePermissions);
+                            } catch (Exception e) {
+                                e.printStackTrace();
                             }
                         }
                     }
                 }
-
             }
         }
     }
 
     /**
      * 权限请求完成后注解处理
-     *
-     * @param permissionCode
      */
-    private void annotationComplete(int permissionCode) {
+    private void annotationComplete() {
         Method[] methods = this.object.getClass().getDeclaredMethods();
         for (Method method : methods) {
             GetPermissionComplete permissionComplete = method.getAnnotation(GetPermissionComplete.class);
             if (permissionComplete != null) {
-                int[] values = permissionComplete.value();
-                if (values.length > 0) {
-                    for (int value : values) {
-                        if (value == permissionCode) {
-                            Class<?>[] parameterTypes = method.getParameterTypes();
-                            String i1 = "Integer";
-                            String i2 = "int";
-                            boolean boo = parameterTypes != null && parameterTypes.length == 1
-                                    && (parameterTypes[0].getSimpleName().equals(i1)
-                                    || parameterTypes[0].getSimpleName().equals(i2));
-                            if (boo) {
-                                method.setAccessible(true);
-                                try {
-                                    method.invoke(this.object, permissionCode);
-                                } catch (Exception e) {
-                                    e.printStackTrace();
-                                }
-                            }
-                        }
-                    }
+                method.setAccessible(true);
+                try {
+                    method.invoke(this.object);
+                } catch (Exception e) {
+                    e.printStackTrace();
                 }
             }
         }
     }
 
-
     private void setPermissions(String... permissions) {
-        this.permissionHelper.setPermissions(permissions);
+        this.permissionConfig.setPermissions(permissions);
     }
 
     private void setPermissionDialogInfo(PermissionDialogInfo info) {
-        this.permissionHelper.setPermissionDialogInfo(info);
+        this.permissionConfig.setPermissionDialogInfo(info);
     }
 
     private void setPermissionCallBack(PermissionCallBack callBack) {
-        this.permissionHelper.setPermissionCallBack(callBack);
+        this.permissionConfig.setPermissionCallBack(callBack);
     }
 
-    private void hasPermission(int permissionCode) {
-        this.permissionHelper.hasPermission(permissionCode);
+    private void hasPermission() {
+        this.permissionConfig.hasPermission(0x100);
     }
 
-    public PermissionHelper getPermissionHelper() {
-        return this.permissionHelper;
+    public PermissionConfig getPermissionConfig() {
+        return this.permissionConfig;
     }
 }

+ 21 - 5
permissionlib/src/main/java/com/benyanyi/permissionlib/PermissionConfig.java

@@ -21,27 +21,43 @@ public interface PermissionConfig {
      * @param info 弹窗信息
      * @return 当前
      */
-    PermissionConfig setDialogInfo(PermissionDialogInfo info);
+    PermissionConfig setPermissionDialogInfo(PermissionDialogInfo info);
+
+    /**
+     * 权限获取回调
+     *
+     * @param permissionCallBack
+     */
+    PermissionConfig setPermissionCallBack(PermissionCallBack permissionCallBack);
 
     /**
      * 判断权限是否需要请求
      */
-    void hasPermission();
+    void hasPermission(int permissionCode);
 
     /**
      * 判断权限是否需要请求
      *
      * @param callBack 回调
      */
-    void hasPermission(PermissionCallBack callBack);
+    void hasPermission(int permissionCode, PermissionCallBack callBack);
+
+    /**
+     * 判断权限是否需要请求
+     *
+     * @param callBack    回调
+     * @param permissions 权限
+     */
+    void hasPermission(int permissionCode, PermissionCallBack callBack, String... permissions);
 
     /**
      * 判断权限是否需要请求
      *
+     * @param info        弹窗配置
      * @param callBack    回调
      * @param permissions 权限
      */
-    void hasPermission(PermissionCallBack callBack, String... permissions);
+    void hasPermission(int permissionCode, PermissionDialogInfo info, String... permissions);
 
     /**
      * 判断权限是否需要请求
@@ -50,6 +66,6 @@ public interface PermissionConfig {
      * @param callBack    回调
      * @param permissions 权限
      */
-    void hasPermission(PermissionDialogInfo info, PermissionCallBack callBack, String... permissions);
+    void hasPermission(int permissionCode, PermissionDialogInfo info, PermissionCallBack callBack, String... permissions);
 
 }

+ 4 - 2
permissionlib/src/main/java/com/benyanyi/permissionlib/PermissionDialogInfo.java

@@ -1,5 +1,7 @@
 package com.benyanyi.permissionlib;
 
+import android.content.DialogInterface;
+
 /**
  * @author myLove
  * @date 2018-06-09 10:02
@@ -24,7 +26,7 @@ public final class PermissionDialogInfo {
          * @param failurePermissions
          */
         @Override
-        void onClick(String[] failurePermissions);
+        void onClick(DialogInterface dialog, String[] failurePermissions);
     }
 
     public interface NegativeClick extends PermissionDialogOnClick {
@@ -34,7 +36,7 @@ public final class PermissionDialogInfo {
          * @param failurePermissions
          */
         @Override
-        void onClick(String[] failurePermissions);
+        void onClick(DialogInterface dialog, String[] failurePermissions);
     }
 
 }

+ 3 - 1
permissionlib/src/main/java/com/benyanyi/permissionlib/PermissionDialogOnClick.java

@@ -1,5 +1,7 @@
 package com.benyanyi.permissionlib;
 
+import android.content.DialogInterface;
+
 /**
  * @author YanYi
  * @date 2019/5/24 14:20
@@ -12,5 +14,5 @@ interface PermissionDialogOnClick {
      *
      * @param failurePermissions
      */
-    void onClick(String[] failurePermissions);
+    void onClick(DialogInterface dialog, String[] failurePermissions);
 }

+ 10 - 5
permissionlib/src/main/java/com/benyanyi/permissionlib/PermissionFragment.java

@@ -131,9 +131,9 @@ public final class PermissionFragment extends Fragment {
             @Override
             public void onClick(DialogInterface dialog, int which) {
                 if (positiveClick != null) {
-                    positiveClick.onClick(PermissionFragment.this.oList.toArray(new String[0]));
-                    dialog.dismiss();
+                    positiveClick.onClick(dialog, PermissionFragment.this.oList.toArray(new String[0]));
                 } else {
+                    dialog.dismiss();
                     requestPermission(code2);
                 }
             }
@@ -142,11 +142,16 @@ public final class PermissionFragment extends Fragment {
             @Override
             public void onClick(DialogInterface dialog, int which) {
                 if (negativeClick != null) {
-                    negativeClick.onClick(PermissionFragment.this.oList.toArray(new String[0]));
-                    dialog.dismiss();
+                    negativeClick.onClick(dialog, PermissionFragment.this.oList.toArray(new String[0]));
                 } else {
-                    getActivity().finish();
                     dialog.dismiss();
+                    if (callBack != null) {
+                        FailureMsg failureMsg = new FailureMsg();
+                        failureMsg.setFailurePermissions(PermissionFragment.this.oList.toArray(new String[0]));
+                        failureMsg.setPermissionCode(permissionCode);
+                        callBack.onPermissionFailure(failureMsg);
+                        callBack.onPermissionComplete(permissionCode);
+                    }
                 }
             }
         });

+ 9 - 10
permissionlib/src/main/java/com/benyanyi/permissionlib/PermissionHelper.java

@@ -4,13 +4,13 @@ import android.app.Activity;
 import android.app.FragmentManager;
 
 /**
- * @author myLove
+ * @author YanYi
  * @date 2018-06-06 10:40
  * @email ben@yanyi.red
- * @overview
+ * @overview 权限获取帮助类
  */
-public class PermissionHelper {
-    private static PermissionHelper instance;
+public class PermissionHelper implements PermissionConfig {
+    private static PermissionConfig instance;
     private Activity mActivity;
 
     private String tag = "PermissionHelper";
@@ -22,10 +22,8 @@ public class PermissionHelper {
         permissionFragment = getFragment();
     }
 
-    public static PermissionHelper getInstance(Activity activity) {
-//        if (instance == null) {
+    public static PermissionConfig getInstance(Activity activity) {
         instance = new PermissionHelper(activity);
-//        }
         return instance;
     }
 
@@ -44,18 +42,19 @@ public class PermissionHelper {
         return fragment;
     }
 
-    public PermissionHelper setPermissions(String... permissions) {
+    public PermissionConfig setPermissions(String... permissions) {
         this.permissionFragment.setPermissions(permissions);
         return this;
     }
 
-    public PermissionHelper setPermissionDialogInfo(PermissionDialogInfo info) {
+    public PermissionConfig setPermissionDialogInfo(PermissionDialogInfo info) {
         this.permissionFragment.setInfo(info);
         return this;
     }
 
-    public void setPermissionCallBack(PermissionCallBack callBack) {
+    public PermissionConfig setPermissionCallBack(PermissionCallBack callBack) {
         this.permissionFragment.setCallBack(callBack);
+        return this;
     }
 
     public void hasPermission(int permissionCode) {

+ 1 - 1
permissionlib/src/main/java/com/benyanyi/permissionlib/PermissionType.java

@@ -3,7 +3,7 @@ package com.benyanyi.permissionlib;
 import android.Manifest;
 
 /**
- * @author myLove
+ * @author YanYi
  * @date 2018-06-06 11:25
  * @email ben@yanyi.red
  * @overview

+ 0 - 1
permissionlib/src/main/java/com/benyanyi/permissionlib/annotation/GetPermissionComplete.java

@@ -15,5 +15,4 @@ import java.lang.annotation.Target;
 @Retention(RetentionPolicy.RUNTIME)
 public @interface GetPermissionComplete {
 
-    int[] value() default {0};
 }

+ 1 - 2
permissionlib/src/main/java/com/benyanyi/permissionlib/annotation/SetPermissionDialogInfo.java → permissionlib/src/main/java/com/benyanyi/permissionlib/annotation/GetPermissionDialogInfo.java

@@ -13,6 +13,5 @@ import java.lang.annotation.Target;
  */
 @Target(ElementType.METHOD)
 @Retention(RetentionPolicy.RUNTIME)
-@interface SetPermissionDialogInfo {
-    int value() default 0;
+public @interface GetPermissionDialogInfo {
 }

+ 0 - 1
permissionlib/src/main/java/com/benyanyi/permissionlib/annotation/GetPermissionFailure.java

@@ -14,5 +14,4 @@ import java.lang.annotation.Target;
 @Target(ElementType.METHOD)
 @Retention(RetentionPolicy.RUNTIME)
 public @interface GetPermissionFailure {
-    int[] value() default {0};
 }

+ 0 - 1
permissionlib/src/main/java/com/benyanyi/permissionlib/annotation/GetPermissionSuccess.java

@@ -14,5 +14,4 @@ import java.lang.annotation.Target;
 @Target(ElementType.METHOD)
 @Retention(RetentionPolicy.RUNTIME)
 public @interface GetPermissionSuccess {
-    int[] value() default {0};
 }

+ 0 - 2
permissionlib/src/main/java/com/benyanyi/permissionlib/annotation/GetPermissions.java

@@ -14,7 +14,5 @@ import java.lang.annotation.Target;
 @Target(ElementType.TYPE)
 @Retention(RetentionPolicy.RUNTIME)
 public @interface GetPermissions {
-    int permissionCode() default 0;
-
     String[] value() default {""};
 }