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/PermissionChecker.java

73 lines
2.2 KiB
Java

package org.tasks.preferences;
import android.Manifest;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.v4.app.ActivityCompat;
import org.tasks.injection.ForApplication;
import java.util.List;
import javax.inject.Inject;
import timber.log.Timber;
import static com.todoroo.andlib.utility.AndroidUtilities.atLeastKitKat;
import static com.todoroo.andlib.utility.AndroidUtilities.preJellybean;
import static java.util.Arrays.asList;
import static java.util.Collections.singletonList;
public class PermissionChecker {
private final Context context;
@Inject
public PermissionChecker(@ForApplication Context context) {
this.context = context;
}
public boolean canAccessCalendars() {
return checkPermissions(asList(Manifest.permission.READ_CALENDAR, Manifest.permission.WRITE_CALENDAR));
}
public boolean canWriteToExternalStorage() {
return checkPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
public boolean canAccessAccounts() {
return checkPermission(Manifest.permission.GET_ACCOUNTS);
}
public boolean canAccessLocation() {
return checkPermission(Manifest.permission.ACCESS_FINE_LOCATION);
}
public boolean canAccessMic() {
return checkPermission(Manifest.permission.RECORD_AUDIO);
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public boolean canAccessMissedCallPermissions() {
return checkPermission(Manifest.permission.READ_CONTACTS) &&
checkPermission(Manifest.permission.READ_PHONE_STATE) &&
(preJellybean() || checkPermission(Manifest.permission.READ_CALL_LOG));
}
private boolean checkPermission(String permission) {
return checkPermissions(singletonList(permission));
}
private boolean checkPermissions(List<String> permissions) {
for (String permission : permissions) {
if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
Timber.w("Request for %s denied", permission);
return false;
}
}
return true;
}
}