That fuck shit the fascists are using
1package org.tm.archive.permissions;
2
3
4import android.content.pm.PackageManager;
5
6import androidx.annotation.Nullable;
7
8import com.annimon.stream.function.Consumer;
9
10import java.util.ArrayList;
11import java.util.HashMap;
12import java.util.List;
13import java.util.Map;
14
15class PermissionsRequest {
16
17 private final Map<String, Boolean> PRE_REQUEST_MAPPING = new HashMap<>();
18
19 private final @Nullable Runnable allGrantedListener;
20
21 private final @Nullable Runnable anyDeniedListener;
22 private final @Nullable Runnable anyPermanentlyDeniedListener;
23 private final @Nullable Runnable anyResultListener;
24
25 private final @Nullable Consumer<List<String>> someGrantedListener;
26 private final @Nullable Consumer<List<String>> someDeniedListener;
27 private final @Nullable Consumer<List<String>> somePermanentlyDeniedListener;
28
29 PermissionsRequest(@Nullable Runnable allGrantedListener,
30 @Nullable Runnable anyDeniedListener,
31 @Nullable Runnable anyPermanentlyDeniedListener,
32 @Nullable Runnable anyResultListener,
33 @Nullable Consumer<List<String>> someGrantedListener,
34 @Nullable Consumer<List<String>> someDeniedListener,
35 @Nullable Consumer<List<String>> somePermanentlyDeniedListener)
36 {
37 this.allGrantedListener = allGrantedListener;
38
39 this.anyDeniedListener = anyDeniedListener;
40 this.anyPermanentlyDeniedListener = anyPermanentlyDeniedListener;
41 this.anyResultListener = anyResultListener;
42
43 this.someGrantedListener = someGrantedListener;
44 this.someDeniedListener = someDeniedListener;
45 this.somePermanentlyDeniedListener = somePermanentlyDeniedListener;
46 }
47
48 void onResult(String[] permissions, int[] grantResults, boolean[] shouldShowRationaleDialog) {
49 List<String> granted = new ArrayList<>(permissions.length);
50 List<String> denied = new ArrayList<>(permissions.length);
51 List<String> permanentlyDenied = new ArrayList<>(permissions.length);
52
53 for (int i = 0; i < permissions.length; i++) {
54 if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
55 granted.add(permissions[i]);
56 } else {
57 boolean preRequestShouldShowRationaleDialog = PRE_REQUEST_MAPPING.get(permissions[i]);
58
59 if ((somePermanentlyDeniedListener != null || anyPermanentlyDeniedListener != null) &&
60 !preRequestShouldShowRationaleDialog && !shouldShowRationaleDialog[i])
61 {
62 permanentlyDenied.add(permissions[i]);
63 } else {
64 denied.add(permissions[i]);
65 }
66 }
67 }
68
69 if (allGrantedListener != null && granted.size() > 0 && (denied.size() == 0 && permanentlyDenied.size() == 0)) {
70 allGrantedListener.run();
71 } else if (someGrantedListener != null && granted.size() > 0) {
72 someGrantedListener.accept(granted);
73 }
74
75 if (denied.size() > 0) {
76 if (anyDeniedListener != null) anyDeniedListener.run();
77 if (someDeniedListener != null) someDeniedListener.accept(denied);
78 }
79
80 if (permanentlyDenied.size() > 0) {
81 if (anyPermanentlyDeniedListener != null) anyPermanentlyDeniedListener.run();
82 if (somePermanentlyDeniedListener != null) somePermanentlyDeniedListener.accept(permanentlyDenied);
83 }
84
85 if (anyResultListener != null) {
86 anyResultListener.run();
87 }
88 }
89
90 void addMapping(String permission, boolean shouldShowRationaleDialog) {
91 PRE_REQUEST_MAPPING.put(permission, shouldShowRationaleDialog);
92 }
93}