mirror of https://github.com/tasks/tasks
Support Android Marshmallow permission changes
parent
2181132b7a
commit
65492648c4
@ -1,23 +0,0 @@
|
||||
package com.todoroo.astrid.gcal;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
|
||||
import org.tasks.BuildConfig;
|
||||
import org.tasks.injection.InjectingBroadcastReceiver;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
public class CalendarStartupReceiver extends InjectingBroadcastReceiver {
|
||||
|
||||
public static final String BROADCAST_RESCHEDULE_CAL_ALARMS = BuildConfig.APPLICATION_ID + ".SCHEDULE_CAL_REMINDERS"; //$NON-NLS-1$
|
||||
|
||||
@Inject CalendarAlarmScheduler calendarAlarmScheduler;
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
super.onReceive(context, intent);
|
||||
|
||||
calendarAlarmScheduler.scheduleCalendarAlarms(context, false);
|
||||
}
|
||||
}
|
@ -0,0 +1,67 @@
|
||||
package org.tasks.preferences;
|
||||
|
||||
import android.Manifest;
|
||||
import android.content.Context;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.support.v4.app.ActivityCompat;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.tasks.injection.ForApplication;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import static java.util.Arrays.asList;
|
||||
|
||||
public class PermissionChecker {
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(PermissionChecker.class);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
public boolean canAccessMissedCallPermissions() {
|
||||
return checkPermission(Manifest.permission.READ_CONTACTS) &&
|
||||
checkPermission(Manifest.permission.READ_PHONE_STATE);
|
||||
}
|
||||
|
||||
private boolean checkPermission(String permission) {
|
||||
return checkPermissions(asList(permission));
|
||||
}
|
||||
|
||||
private boolean checkPermissions(List<String> permissions) {
|
||||
for (String permission : permissions) {
|
||||
if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
|
||||
log.warn("Request for {} denied", permission);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
@ -0,0 +1,84 @@
|
||||
package org.tasks.preferences;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.Activity;
|
||||
import android.support.v4.app.ActivityCompat;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
public 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 Activity activity;
|
||||
private final PermissionChecker permissionChecker;
|
||||
|
||||
@Inject
|
||||
public PermissionRequestor(Activity activity, PermissionChecker permissionChecker) {
|
||||
this.activity = activity;
|
||||
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() {
|
||||
if (permissionChecker.canAccessCalendars()) {
|
||||
return true;
|
||||
}
|
||||
requestPermissions(
|
||||
new String[]{Manifest.permission.READ_CALENDAR, Manifest.permission.WRITE_CALENDAR},
|
||||
REQUEST_CALENDAR);
|
||||
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;
|
||||
}
|
||||
requestPermissions(new String[]{Manifest.permission.READ_CONTACTS, Manifest.permission.READ_PHONE_STATE}, REQUEST_CONTACTS);
|
||||
return false;
|
||||
}
|
||||
|
||||
private void requestPermission(String permission, int rc) {
|
||||
requestPermissions(new String[] {permission}, rc);
|
||||
}
|
||||
|
||||
private void requestPermissions(String[] permissions, int rc) {
|
||||
ActivityCompat.requestPermissions(activity, permissions, rc);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue