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.
tasks/app/src/main/java/org/tasks/preferences/PermissionRequestor.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);
}