mirror of https://github.com/tasks/tasks
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
2.8 KiB
Java
84 lines
2.8 KiB
Java
package org.tasks.preferences;
|
|
|
|
import android.Manifest;
|
|
|
|
import static com.todoroo.andlib.utility.AndroidUtilities.atLeastJellybean;
|
|
|
|
public abstract class PermissionRequestor {
|
|
public static final int REQUEST_FILE_WRITE = 50;
|
|
public static final int REQUEST_CALENDAR = 51;
|
|
public static final int REQUEST_MIC = 52;
|
|
public static final int REQUEST_ACCOUNTS = 53;
|
|
public static final int REQUEST_LOCATION = 54;
|
|
public static final int REQUEST_CONTACTS = 55;
|
|
|
|
private final PermissionChecker permissionChecker;
|
|
|
|
PermissionRequestor(PermissionChecker permissionChecker) {
|
|
this.permissionChecker = permissionChecker;
|
|
}
|
|
|
|
public boolean requestMic() {
|
|
if (permissionChecker.canAccessMic()) {
|
|
return true;
|
|
}
|
|
requestPermission(Manifest.permission.RECORD_AUDIO, REQUEST_MIC);
|
|
return false;
|
|
}
|
|
|
|
public boolean requestFileWritePermission() {
|
|
if (permissionChecker.canWriteToExternalStorage()) {
|
|
return true;
|
|
}
|
|
requestPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE, REQUEST_FILE_WRITE);
|
|
return false;
|
|
}
|
|
|
|
public boolean requestCalendarPermissions() {
|
|
return requestCalendarPermissions(REQUEST_CALENDAR);
|
|
}
|
|
|
|
public boolean requestCalendarPermissions(int requestCode) {
|
|
if (permissionChecker.canAccessCalendars()) {
|
|
return true;
|
|
}
|
|
requestPermissions(
|
|
new String[]{Manifest.permission.READ_CALENDAR, Manifest.permission.WRITE_CALENDAR},
|
|
requestCode);
|
|
return false;
|
|
}
|
|
|
|
public boolean requestAccountPermissions() {
|
|
if (permissionChecker.canAccessAccounts()) {
|
|
return true;
|
|
}
|
|
requestPermission(Manifest.permission.GET_ACCOUNTS, REQUEST_ACCOUNTS);
|
|
return false;
|
|
}
|
|
|
|
public boolean requestFineLocation() {
|
|
if (permissionChecker.canAccessLocation()) {
|
|
return true;
|
|
}
|
|
requestPermission(Manifest.permission.ACCESS_FINE_LOCATION, REQUEST_LOCATION);
|
|
return false;
|
|
}
|
|
|
|
public boolean requestMissedCallPermissions() {
|
|
if (permissionChecker.canAccessMissedCallPermissions()) {
|
|
return true;
|
|
}
|
|
String[] permissions = atLeastJellybean()
|
|
? new String[]{Manifest.permission.READ_CONTACTS, Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_CALL_LOG}
|
|
: new String[]{Manifest.permission.READ_CONTACTS, Manifest.permission.READ_PHONE_STATE};
|
|
requestPermissions(permissions, REQUEST_CONTACTS);
|
|
return false;
|
|
}
|
|
|
|
private void requestPermission(String permission, int rc) {
|
|
requestPermissions(new String[] {permission}, rc);
|
|
}
|
|
|
|
protected abstract void requestPermissions(String[] permissions, int requestCode);
|
|
}
|