Skip to content

Commit 4635ed7

Browse files
committed
优化框架内部的代码逻辑、注释、文档
优化框架内部类名、字段、方法的命名 将权限接口中获取权限的类型修改成权限的请求通道 优化在低版本的 MIUI 下请求读取应用列表权限的逻辑
1 parent 3964c9f commit 4635ed7

File tree

98 files changed

+687
-642
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

98 files changed

+687
-642
lines changed

README-en.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ android {
5858
}
5959
6060
dependencies {
61+
// Device compatibility framework:https://github.com/getActivity/DeviceCompat
62+
implementation 'com.github.getActivity:DeviceCompat:1.0'
6163
// Permission request framework:https://github.com/getActivity/XXPermissions
6264
implementation 'com.github.getActivity:XXPermissions:26.2'
6365
}

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ android {
6464
}
6565
6666
dependencies {
67+
// 设备兼容框架:https://github.com/getActivity/DeviceCompat
68+
implementation 'com.github.getActivity:DeviceCompat:1.0'
6769
// 权限请求框架:https://github.com/getActivity/XXPermissions
6870
implementation 'com.github.getActivity:XXPermissions:26.2'
6971
}

app/src/main/java/com/hjq/permissions/demo/WindowLifecycleManager.java

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -88,22 +88,34 @@ private WindowLifecycleCallbacks(@NonNull Activity activity) {
8888
public abstract void onWindowDismiss();
8989

9090
@Override
91-
public final void onActivityCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) {}
91+
public final void onActivityCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) {
92+
// default implementation ignored
93+
}
9294

9395
@Override
94-
public final void onActivityStarted(@NonNull Activity activity) {}
96+
public final void onActivityStarted(@NonNull Activity activity) {
97+
// default implementation ignored
98+
}
9599

96100
@Override
97-
public final void onActivityResumed(@NonNull Activity activity) {}
101+
public final void onActivityResumed(@NonNull Activity activity) {
102+
// default implementation ignored
103+
}
98104

99105
@Override
100-
public final void onActivityPaused(@NonNull Activity activity) {}
106+
public final void onActivityPaused(@NonNull Activity activity) {
107+
// default implementation ignored
108+
}
101109

102110
@Override
103-
public final void onActivityStopped(@NonNull Activity activity) {}
111+
public final void onActivityStopped(@NonNull Activity activity) {
112+
// default implementation ignored
113+
}
104114

105115
@Override
106-
public final void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle outState) {}
116+
public final void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle outState) {
117+
// default implementation ignored
118+
}
107119

108120
@Override
109121
public final void onActivityDestroyed(@NonNull Activity activity) {

app/src/main/java/com/hjq/permissions/demo/permission/PermissionConverter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ public static List<String> getNickNameListByPermissions(@NonNull Context context
217217
for (IPermission permission : permissions) {
218218
// 如果当前设置了过滤高版本权限,并且这个权限是高版本系统才出现的权限,则不继续往下执行
219219
// 避免出现在低版本上面执行拒绝权限后,连带高版本的名称也一起显示出来,但是在低版本上面是没有这个权限的
220-
if (filterHighVersionPermissions && permission.getFromAndroidVersion() > Build.VERSION.SDK_INT) {
220+
if (filterHighVersionPermissions && permission.getFromAndroidVersion(context) > Build.VERSION.SDK_INT) {
221221
continue;
222222
}
223223
String permissionName = getNickNameByPermission(context, permission);
@@ -304,7 +304,7 @@ public static String getDescriptionByPermission(@NonNull Context context, @NonNu
304304
@Nullable
305305
public static Integer getPermissionNickNameStringId(@NonNull Context context, @NonNull IPermission permission) {
306306
String permissionName = permission.getPermissionName();
307-
String permissionGroup = permission.getPermissionGroup();
307+
String permissionGroup = permission.getPermissionGroup(context);
308308
Integer permissionNameStringId = PERMISSION_NAME_MAP.get(permissionName);
309309
if (permissionNameStringId != null && permissionNameStringId > 0) {
310310
return permissionNameStringId;

app/src/main/java/com/hjq/permissions/demo/permission/PermissionDescription.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ private void showDialog(@NonNull Activity activity, @Nullable String dialogTitle
144144
if (activity.isFinishing() || activity.isDestroyed()) {
145145
return;
146146
}
147-
// 另外这里需要判断 Activity 的类型来申请权限,这是因为只有 AppCompatActivity 才能调用 Support 包的 AlertDialog 来显示,否则会出现报错
147+
// 另外这里需要判断 Activity 的类型来申请权限,这是因为只有 AppCompatActivity 才能调用 Support 库的 AlertDialog 来显示,否则会出现报错
148148
// java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity
149149
// 为什么不直接用 App 包 AlertDialog 来显示,而是两套规则?因为 App 包 AlertDialog 是系统自带的类,不同 Android 版本展现的样式可能不太一样
150150
// 如果这个 Android 版本比较低,那么这个对话框的样式就会变得很丑,准确来讲也不能说丑,而是当时系统的 UI 设计就是那样,它只是跟随系统的样式而已

app/src/main/java/com/hjq/permissions/demo/permission/PermissionInterceptor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public void onResult(@NonNull List<IPermission> grantedList, @NonNull List<IPerm
9393
});
9494
};
9595

96-
// 另外这里需要判断 Activity 的类型来申请权限,这是因为只有 AppCompatActivity 才能调用 Support 包的 AlertDialog 来显示,否则会出现报错
96+
// 另外这里需要判断 Activity 的类型来申请权限,这是因为只有 AppCompatActivity 才能调用 Support 库的 AlertDialog 来显示,否则会出现报错
9797
// java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity
9898
// 为什么不直接用 App 包 AlertDialog 来显示,而是两套规则?因为 App 包 AlertDialog 是系统自带的类,不同 Android 版本展现的样式可能不太一样
9999
// 如果这个 Android 版本比较低,那么这个对话框的样式就会变得很丑,准确来讲也不能说丑,而是当时系统的 UI 设计就是那样,它只是跟随系统的样式而已
@@ -131,7 +131,7 @@ private String generatePermissionHint(@NonNull Activity activity, @NonNull List<
131131
int deniedSensorsPermissionCount = 0;
132132
int deniedHealthPermissionCount = 0;
133133
for (IPermission deniedPermission : deniedList) {
134-
String permissionGroup = deniedPermission.getPermissionGroup();
134+
String permissionGroup = deniedPermission.getPermissionGroup(activity);
135135
if (TextUtils.isEmpty(permissionGroup)) {
136136
continue;
137137
}

library/src/main/java/com/hjq/permissions/OnPermissionInterceptor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import android.support.annotation.NonNull;
55
import android.support.annotation.Nullable;
66
import com.hjq.permissions.fragment.factory.PermissionFragmentFactory;
7-
import com.hjq.permissions.core.RequestPermissionLogicPresenter;
7+
import com.hjq.permissions.core.PermissionRequestMainLogic;
88
import com.hjq.permissions.permission.base.IPermission;
99
import java.util.List;
1010

@@ -62,7 +62,7 @@ default void dispatchPermissionRequest(@NonNull Activity activity,
6262
@NonNull PermissionFragmentFactory<?, ?> fragmentFactory,
6363
@NonNull OnPermissionDescription permissionDescription,
6464
@Nullable OnPermissionCallback callback) {
65-
new RequestPermissionLogicPresenter(activity, requestList, fragmentFactory, this, permissionDescription, callback)
65+
new PermissionRequestMainLogic(activity, requestList, fragmentFactory, this, permissionDescription, callback)
6666
.request();
6767
}
6868
}

library/src/main/java/com/hjq/permissions/XXPermissions.java

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import com.hjq.permissions.fragment.factory.PermissionFragmentFactoryByApp;
1212
import com.hjq.permissions.fragment.factory.PermissionFragmentFactoryBySupport;
1313
import com.hjq.permissions.manifest.AndroidManifestParser;
14-
import com.hjq.permissions.permission.PermissionType;
14+
import com.hjq.permissions.permission.PermissionChannel;
1515
import com.hjq.permissions.permission.base.IPermission;
1616
import com.hjq.permissions.start.StartActivityAgent;
1717
import com.hjq.permissions.tools.PermissionApi;
@@ -125,7 +125,7 @@ public static OnPermissionDescription getPermissionDescription() {
125125
@Nullable
126126
private Fragment mAppFragment;
127127

128-
/** Support 包下的 Fragment 对象 */
128+
/** Support 库中的 Fragment 对象 */
129129
@Nullable
130130
private android.support.v4.app.Fragment mSupportFragment;
131131

@@ -262,24 +262,25 @@ public void request(@Nullable OnPermissionCallback callback) {
262262
// 判断要申请的权限是否都授予了
263263
if (PermissionApi.isGrantedPermissions(context, requestList)) {
264264
// 如果是的话,就不申请权限,而是通知权限申请成功
265-
permissionInterceptor.onRequestPermissionEnd(activity, true, requestList,
266-
requestList, new ArrayList<>(), callback);
265+
permissionInterceptor.onRequestPermissionEnd(activity, true, requestList, requestList, new ArrayList<>(), callback);
267266
return;
268267
}
269268

270-
// 检查 App 包下的 Fragment 是不是不可用
271-
if (appFragment != null && PermissionUtils.isFragmentUnavailable(appFragment)) {
272-
return;
273-
}
274-
275-
// 检查 Support 包下的 Fragment 是不是不可用
276-
if (supportFragment != null && PermissionUtils.isFragmentUnavailable(supportFragment)) {
277-
return;
269+
final PermissionFragmentFactory<?, ?> fragmentFactory;
270+
if (supportFragment != null) {
271+
if (PermissionUtils.isFragmentUnavailable(supportFragment)) {
272+
return;
273+
}
274+
fragmentFactory = generatePermissionFragmentFactory(activity, supportFragment);
275+
} else if (appFragment != null) {
276+
if (PermissionUtils.isFragmentUnavailable(appFragment)) {
277+
return;
278+
}
279+
fragmentFactory = generatePermissionFragmentFactory(activity, appFragment);
280+
} else {
281+
fragmentFactory = generatePermissionFragmentFactory(activity);
278282
}
279283

280-
// 创建 Fragment 工厂
281-
final PermissionFragmentFactory<?, ?> fragmentFactory = generatePermissionFragmentFactory(activity, supportFragment, appFragment);
282-
283284
// 申请没有授予过的权限
284285
permissionInterceptor.onRequestPermissionStart(activity, requestList, fragmentFactory, permissionDescription, callback);
285286
}
@@ -450,7 +451,7 @@ public static void startPermissionActivity(@NonNull Activity activity,
450451
return;
451452
}
452453
PermissionFragmentFactory<?, ?> fragmentFactory = generatePermissionFragmentFactory(activity);
453-
fragmentFactory.createAndCommitFragment(permissions, PermissionType.SPECIAL, () -> {
454+
fragmentFactory.createAndCommitFragment(permissions, PermissionChannel.START_ACTIVITY_FOR_RESULT, () -> {
454455
if (PermissionUtils.isActivityUnavailable(activity)) {
455456
return;
456457
}
@@ -513,7 +514,7 @@ public static void startPermissionActivity(@NonNull Fragment appFragment,
513514
return;
514515
}
515516
PermissionFragmentFactory<?, ?> fragmentFactory = generatePermissionFragmentFactory(activity, appFragment);
516-
fragmentFactory.createAndCommitFragment(permissions, PermissionType.SPECIAL, () -> {
517+
fragmentFactory.createAndCommitFragment(permissions, PermissionChannel.START_ACTIVITY_FOR_RESULT, () -> {
517518
if (PermissionUtils.isActivityUnavailable(activity) || PermissionUtils.isFragmentUnavailable(appFragment)) {
518519
return;
519520
}
@@ -576,7 +577,7 @@ public static void startPermissionActivity(@NonNull android.support.v4.app.Fragm
576577
return;
577578
}
578579
PermissionFragmentFactory<?, ?> fragmentFactory = generatePermissionFragmentFactory(activity, supportFragment);
579-
fragmentFactory.createAndCommitFragment(permissions, PermissionType.SPECIAL, () -> {
580+
fragmentFactory.createAndCommitFragment(permissions, PermissionChannel.START_ACTIVITY_FOR_RESULT, () -> {
580581
if (PermissionUtils.isActivityUnavailable(activity) || PermissionUtils.isFragmentUnavailable(supportFragment)) {
581582
return;
582583
}
@@ -587,23 +588,26 @@ public static void startPermissionActivity(@NonNull android.support.v4.app.Fragm
587588
/**
588589
* 创建 Fragment 工厂
589590
*/
591+
@NonNull
590592
private static PermissionFragmentFactory<?, ?> generatePermissionFragmentFactory(@NonNull Activity activity) {
591593
return generatePermissionFragmentFactory(activity, null, null);
592594
}
593595

596+
@NonNull
594597
private static PermissionFragmentFactory<?, ?> generatePermissionFragmentFactory(@NonNull Activity activity,
595-
@Nullable android.support.v4.app.Fragment supportFragment) {
598+
@Nullable android.support.v4.app.Fragment supportFragment) {
596599
return generatePermissionFragmentFactory(activity, supportFragment, null);
597600
}
598601

602+
@NonNull
599603
private static PermissionFragmentFactory<?, ?> generatePermissionFragmentFactory(@NonNull Activity activity,
600-
@Nullable Fragment appFragment) {
604+
@Nullable Fragment appFragment) {
601605
return generatePermissionFragmentFactory(activity, null, appFragment);
602606
}
603607

604608
private static PermissionFragmentFactory<?, ?> generatePermissionFragmentFactory(@NonNull Activity activity,
605-
@Nullable android.support.v4.app.Fragment supportFragment,
606-
@Nullable Fragment appFragment) {
609+
@Nullable android.support.v4.app.Fragment supportFragment,
610+
@Nullable Fragment appFragment) {
607611
final PermissionFragmentFactory<?, ?> fragmentFactory;
608612
if (supportFragment != null) {
609613
fragmentFactory = new PermissionFragmentFactoryBySupport(supportFragment.getActivity(), supportFragment.getChildFragmentManager());

library/src/main/java/com/hjq/permissions/core/OnPermissionFlowCallback.java renamed to library/src/main/java/com/hjq/permissions/core/OnPermissionFragmentCallback.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,16 @@
44
* author : Android 轮子哥
55
* github : https://github.com/getActivity/XXPermissions
66
* time : 2025/05/30
7-
* desc : 权限请求流程回调
7+
* desc : 权限 Fragment 回调
88
*/
9-
public interface OnPermissionFlowCallback {
9+
public interface OnPermissionFragmentCallback {
1010

1111
/**
1212
* 权限请求时回调
1313
*/
14-
default void onRequestPermissionNow() {}
14+
default void onRequestPermissionNow() {
15+
// default implementation ignored
16+
}
1517

1618
/**
1719
* 权限请求完成回调
@@ -21,5 +23,7 @@ default void onRequestPermissionNow() {}
2123
/**
2224
* 权限请求异常回调
2325
*/
24-
default void onRequestPermissionAnomaly() {}
26+
default void onRequestPermissionAnomaly() {
27+
// default implementation ignored
28+
}
2529
}

0 commit comments

Comments
 (0)