That fuck shit the fascists are using
at master 93 lines 3.6 kB view raw
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}