Add background location permission

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

@ -1,5 +1,11 @@
Change Log 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) ### 6.9 (2019-09-23)
* Synchronize tags with CalDAV * Synchronize tags with CalDAV

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

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

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

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

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

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

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

Loading…
Cancel
Save