diff --git a/CHANGELOG.md b/CHANGELOG.md
index 15a433ec2..b2910b9b5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -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
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index a9ba1cfdc..734d2c4ab 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -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
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b353dd7d2..2a8046a37 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -13,6 +13,7 @@
+
= 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");
diff --git a/app/src/main/java/org/tasks/preferences/ActivityPermissionRequestor.java b/app/src/main/java/org/tasks/preferences/ActivityPermissionRequestor.java
index 2e968f7de..75a467d8b 100644
--- a/app/src/main/java/org/tasks/preferences/ActivityPermissionRequestor.java
+++ b/app/src/main/java/org/tasks/preferences/ActivityPermissionRequestor.java
@@ -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);
}
}
diff --git a/app/src/main/java/org/tasks/preferences/FragmentPermissionRequestor.java b/app/src/main/java/org/tasks/preferences/FragmentPermissionRequestor.java
index 4fc1be5f5..5f4445db7 100644
--- a/app/src/main/java/org/tasks/preferences/FragmentPermissionRequestor.java
+++ b/app/src/main/java/org/tasks/preferences/FragmentPermissionRequestor.java
@@ -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);
}
}
diff --git a/app/src/main/java/org/tasks/preferences/PermissionChecker.java b/app/src/main/java/org/tasks/preferences/PermissionChecker.java
index 5d213171d..49c741bbc 100644
--- a/app/src/main/java/org/tasks/preferences/PermissionChecker.java
+++ b/app/src/main/java/org/tasks/preferences/PermissionChecker.java
@@ -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 permissions) {
+ private boolean checkPermissions(String... permissions) {
for (String permission : permissions) {
if (ActivityCompat.checkSelfPermission(context, permission)
!= PackageManager.PERMISSION_GRANTED) {
diff --git a/app/src/main/java/org/tasks/preferences/PermissionRequestor.java b/app/src/main/java/org/tasks/preferences/PermissionRequestor.java
index 71698560c..8a64d2dd3 100644
--- a/app/src/main/java/org/tasks/preferences/PermissionRequestor.java
+++ b/app/src/main/java/org/tasks/preferences/PermissionRequestor.java
@@ -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);
}