Add background location permission

pull/848/head 6.9.1
Alex Baker 5 years ago
parent b21a8f5f88
commit 19b7042469

@ -1,5 +1,11 @@
Change Log
---
### 6.9.1 (2019-10-09)
* Fix location reminders on Android 10
* Fix CalDAV time zone issue
* Update Simplified Chinese translations - @sr093906
### 6.9 (2019-09-23)
* Synchronize tags with CalDAV

@ -31,8 +31,8 @@ android {
defaultConfig {
testApplicationId = "org.tasks.test"
applicationId = "org.tasks"
versionCode = 613
versionName = "6.9"
versionCode = 614
versionName = "6.9.1"
targetSdkVersion(Versions.targetSdk)
minSdkVersion(Versions.minSdk)
multiDexEnabled = true

@ -13,6 +13,7 @@
<!-- maps and location based reminders -->
<!-- ********************************* -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-feature
android:name="android.hardware.location"

@ -166,6 +166,10 @@ public class AndroidUtilities {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.O;
}
public static boolean atLeastQ() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q;
}
public static void assertMainThread() {
if (BuildConfig.DEBUG && !isMainThread()) {
throw new IllegalStateException("Should be called from main thread");

@ -16,7 +16,7 @@ public class ActivityPermissionRequestor extends PermissionRequestor {
}
@Override
protected void requestPermissions(String[] permissions, int rc) {
protected void requestPermissions(int rc, String... permissions) {
ActivityCompat.requestPermissions(activity, permissions, rc);
}
}

@ -15,7 +15,7 @@ public class FragmentPermissionRequestor extends PermissionRequestor {
}
@Override
protected void requestPermissions(String[] permissions, int rc) {
protected void requestPermissions(int rc, String... permissions) {
fragment.requestPermissions(permissions, rc);
}
}

@ -1,14 +1,12 @@
package org.tasks.preferences;
import static com.todoroo.andlib.utility.AndroidUtilities.atLeastOreo;
import static java.util.Arrays.asList;
import static java.util.Collections.singletonList;
import static com.todoroo.andlib.utility.AndroidUtilities.atLeastQ;
import android.Manifest;
import android.Manifest.permission;
import android.content.Context;
import android.content.pm.PackageManager;
import androidx.core.app.ActivityCompat;
import java.util.List;
import javax.inject.Inject;
import org.tasks.injection.ForApplication;
import timber.log.Timber;
@ -23,27 +21,24 @@ public class PermissionChecker {
}
public boolean canAccessCalendars() {
return checkPermissions(
asList(Manifest.permission.READ_CALENDAR, Manifest.permission.WRITE_CALENDAR));
return checkPermissions(permission.READ_CALENDAR, permission.WRITE_CALENDAR);
}
public boolean canAccessAccounts() {
return atLeastOreo() || checkPermission(Manifest.permission.GET_ACCOUNTS);
return atLeastOreo() || checkPermissions(permission.GET_ACCOUNTS);
}
public boolean canAccessLocation() {
return checkPermission(Manifest.permission.ACCESS_FINE_LOCATION);
return atLeastQ()
? checkPermissions(permission.ACCESS_FINE_LOCATION, permission.ACCESS_BACKGROUND_LOCATION)
: checkPermissions(permission.ACCESS_FINE_LOCATION);
}
public boolean canAccessMic() {
return checkPermission(Manifest.permission.RECORD_AUDIO);
return checkPermissions(permission.RECORD_AUDIO);
}
private boolean checkPermission(String permission) {
return checkPermissions(singletonList(permission));
}
private boolean checkPermissions(List<String> permissions) {
private boolean checkPermissions(String... permissions) {
for (String permission : permissions) {
if (ActivityCompat.checkSelfPermission(context, permission)
!= PackageManager.PERMISSION_GRANTED) {

@ -1,6 +1,8 @@
package org.tasks.preferences;
import android.Manifest;
import static com.todoroo.andlib.utility.AndroidUtilities.atLeastQ;
import android.Manifest.permission;
public abstract class PermissionRequestor {
@ -17,7 +19,7 @@ public abstract class PermissionRequestor {
public void requestMic() {
if (!permissionChecker.canAccessMic()) {
requestPermission(Manifest.permission.RECORD_AUDIO, REQUEST_MIC);
requestPermissions(REQUEST_MIC, permission.RECORD_AUDIO);
}
}
@ -29,9 +31,7 @@ public abstract class PermissionRequestor {
if (permissionChecker.canAccessCalendars()) {
return true;
}
requestPermissions(
new String[] {Manifest.permission.READ_CALENDAR, Manifest.permission.WRITE_CALENDAR},
requestCode);
requestPermissions(requestCode, permission.READ_CALENDAR, permission.WRITE_CALENDAR);
return false;
}
@ -39,7 +39,7 @@ public abstract class PermissionRequestor {
if (permissionChecker.canAccessAccounts()) {
return true;
}
requestPermission(Manifest.permission.GET_ACCOUNTS, REQUEST_GOOGLE_ACCOUNTS);
requestPermissions(REQUEST_GOOGLE_ACCOUNTS, permission.GET_ACCOUNTS);
return false;
}
@ -47,13 +47,14 @@ public abstract class PermissionRequestor {
if (permissionChecker.canAccessLocation()) {
return true;
}
requestPermission(Manifest.permission.ACCESS_FINE_LOCATION, REQUEST_LOCATION);
if (atLeastQ()) {
requestPermissions(
REQUEST_LOCATION, permission.ACCESS_FINE_LOCATION, permission.ACCESS_BACKGROUND_LOCATION);
} else {
requestPermissions(REQUEST_LOCATION, permission.ACCESS_FINE_LOCATION);
}
return false;
}
private void requestPermission(String permission, int rc) {
requestPermissions(new String[] {permission}, rc);
}
protected abstract void requestPermissions(String[] permissions, int requestCode);
protected abstract void requestPermissions(int requestCode, String... permissions);
}

Loading…
Cancel
Save