PermissifyConfig.java
5.0 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
package com.xdy.commonlibrary.permission;
import android.content.Context;
import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import com.xdy.commonlibrary.R;
import java.util.HashMap;
/**
* Config for Permissify Library
*/
public class PermissifyConfig {
private static PermissifyConfig sInstance;
private PermissionCallOptions defaultPermissionCallOptions;
private HashMap<String, DialogText> defaultTextForPermissions;
private DialogText permissionTextFallback;
private AlertDialogFactory rationaleDialogFactory;
private AlertDialogFactory denyDialogFactory;
static PermissifyConfig get() {
if (sInstance == null) {
throw new RuntimeException("Permissify is not initialized");
}
return sInstance;
}
private PermissifyConfig() {
}
/**
* Builder for creating PermissifyConfig instance
*/
public static class Builder {
private PermissifyConfig instance = new PermissifyConfig();
/**
* Sets options that are used by default when requesting for permission
*
* @param callOptions
*/
public Builder withDefaultPermissionCallOptions(PermissionCallOptions callOptions) {
instance.defaultPermissionCallOptions = callOptions;
return this;
}
/**
* Sets map that matches every permission group {@link android.Manifest.permission_group} that is used in the app with texts that is used in dialogs
*/
public Builder withDefaultTextForPermissions(HashMap<String, DialogText> wording) {
instance.defaultTextForPermissions = wording;
return this;
}
/**
* Sets dialog texts that will be used in case no match in map {@link #withDefaultTextForPermissions}
*/
public Builder withPermissionTextFallback(DialogText dialogText) {
instance.permissionTextFallback = dialogText;
return this;
}
/**
* Sets custom AlertDialogFactory that can be used to customize Rationale dialog
*/
public Builder withDialogRationaleDialogFactory(AlertDialogFactory factory) {
instance.rationaleDialogFactory = factory;
return this;
}
/**
* Sets custom AlertDialogFactory that can be used to customize Deny dialog
*/
public Builder withDenyDialogFactory(AlertDialogFactory factory) {
instance.denyDialogFactory = factory;
return this;
}
/**
* Builds instance of PermissifyConfig
*/
public PermissifyConfig build() {
if (instance.denyDialogFactory == null) {
instance.denyDialogFactory = PermissionDeniedInfoDialogFragment.getDefaultDialogFactory();
}
if (instance.rationaleDialogFactory == null) {
instance.rationaleDialogFactory = PermissionRationaleDialogFragment.getDefaultDialogFactory();
}
if (instance.defaultPermissionCallOptions == null) {
instance.defaultPermissionCallOptions = new PermissionCallOptions.Builder()
.withDefaultDenyDialog(true)
.withDefaultRationaleDialog(true)
.build();
}
if (instance.permissionTextFallback == null) {
instance.permissionTextFallback = new DialogText(R.string.permissify_no_text_fallback, R.string.permissify_no_text_fallback);
}
return instance;
}
}
/**
* Initializes Permissify config
*
* @param permissifyConfig - instance of PermissifyConfig that is returned from {@link Builder}
*/
public static void initDefault(PermissifyConfig permissifyConfig) {
sInstance = permissifyConfig;
}
PermissionCallOptions getDefaultPermissionCallOptions() {
return defaultPermissionCallOptions;
}
DialogText getPermissionTextFallback() {
return permissionTextFallback;
}
HashMap<String, DialogText> getDefaultTextForPermissions() {
return defaultTextForPermissions;
}
AlertDialogFactory getRationaleDialogFactory() {
return rationaleDialogFactory;
}
AlertDialogFactory getDenyDialogFactory() {
return denyDialogFactory;
}
/**
* Class that produces instances of AlertDialogs that are used as a content for Rationale & Deny dialogs {@link com.holidaycheck.permissify.DialogText}
*/
public interface AlertDialogFactory {
/**
* Creates alert dialogs
*
* @param context - app context
* @param dialogMsg - message that is related with requested permission
* @param onClickListener - listener that should be attaches to dialog buttons
* @return - custom AlertDialog
*/
AlertDialog createDialog(Context context, String dialogMsg, DialogInterface.OnClickListener onClickListener);
}
}