diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 01c44ddc7..ccafac29d 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -60,8 +60,8 @@ android {
applicationId = "org.tasks"
versionCode = 111007
versionName = "11.10.2"
- targetSdkVersion(Versions.targetSdk)
- minSdkVersion(Versions.minSdk)
+ targetSdk = Versions.targetSdk
+ minSdk = Versions.minSdk
testInstrumentationRunner = "org.tasks.TestRunner"
kapt {
diff --git a/app/src/googleplay/java/org/tasks/location/LocationServiceGooglePlay.kt b/app/src/googleplay/java/org/tasks/location/LocationServiceGooglePlay.kt
index c0753659a..2ab0313c6 100644
--- a/app/src/googleplay/java/org/tasks/location/LocationServiceGooglePlay.kt
+++ b/app/src/googleplay/java/org/tasks/location/LocationServiceGooglePlay.kt
@@ -44,7 +44,10 @@ class LocationServiceGooglePlay @Inject constructor(
context,
0,
Intent(context, GoogleGeofenceTransitionIntentService.Broadcast::class.java),
- /*PendingIntent.FLAG_MUTABLE or */PendingIntent.FLAG_UPDATE_CURRENT
+ if (atLeastS())
+ PendingIntent.FLAG_MUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
+ else
+ PendingIntent.FLAG_UPDATE_CURRENT
)
)
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c80b30bfe..428b8773a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -10,6 +10,7 @@
+
diff --git a/app/src/main/java/com/todoroo/andlib/utility/AndroidUtilities.java b/app/src/main/java/com/todoroo/andlib/utility/AndroidUtilities.java
index 0dde045e1..b8958dbc2 100644
--- a/app/src/main/java/com/todoroo/andlib/utility/AndroidUtilities.java
+++ b/app/src/main/java/com/todoroo/andlib/utility/AndroidUtilities.java
@@ -159,6 +159,10 @@ public class AndroidUtilities {
return VERSION.SDK_INT >= VERSION_CODES.R;
}
+ public static boolean atLeastS() {
+ return VERSION.SDK_INT >= VERSION_CODES.S;
+ }
+
public static void assertMainThread() {
if (BuildConfig.DEBUG && !isMainThread()) {
throw new IllegalStateException("Should be called from main thread");
diff --git a/app/src/main/java/com/todoroo/astrid/gcal/CalendarReminderActivity.java b/app/src/main/java/com/todoroo/astrid/gcal/CalendarReminderActivity.java
index 415bea411..fcf9aa140 100644
--- a/app/src/main/java/com/todoroo/astrid/gcal/CalendarReminderActivity.java
+++ b/app/src/main/java/com/todoroo/astrid/gcal/CalendarReminderActivity.java
@@ -7,10 +7,10 @@ import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
+
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.activity.MainActivity;
-import dagger.hilt.android.AndroidEntryPoint;
-import javax.inject.Inject;
+
import org.tasks.R;
import org.tasks.dialogs.DialogBuilder;
import org.tasks.injection.ThemedInjectingAppCompatActivity;
@@ -20,6 +20,10 @@ import org.tasks.scheduling.AlarmManager;
import org.tasks.scheduling.CalendarNotificationIntentService;
import org.tasks.themes.ThemeAccent;
+import javax.inject.Inject;
+
+import dagger.hilt.android.AndroidEntryPoint;
+
@AndroidEntryPoint
public class CalendarReminderActivity extends ThemedInjectingAppCompatActivity {
@@ -152,8 +156,12 @@ public class CalendarReminderActivity extends ThemedInjectingAppCompatActivity {
Uri.parse(CalendarNotificationIntentService.URI_PREFIX_POSTPONE + "://" + eventId));
PendingIntent pendingIntent =
- PendingIntent.getBroadcast(
- this, CalendarAlarmReceiver.REQUEST_CODE_CAL_REMINDER, eventAlarm, 0);
+ PendingIntent.getBroadcast(
+ this,
+ CalendarAlarmReceiver.REQUEST_CODE_CAL_REMINDER,
+ eventAlarm,
+ PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT
+ );
alarmManager.cancel(pendingIntent);
diff --git a/app/src/main/java/com/todoroo/astrid/timers/TimerPlugin.kt b/app/src/main/java/com/todoroo/astrid/timers/TimerPlugin.kt
index 6c852cb66..ff3a5ea86 100644
--- a/app/src/main/java/com/todoroo/astrid/timers/TimerPlugin.kt
+++ b/app/src/main/java/com/todoroo/astrid/timers/TimerPlugin.kt
@@ -65,7 +65,12 @@ class TimerPlugin @Inject constructor(
} else {
val filter = createFilter(context)
val notifyIntent = TaskIntents.getTaskListIntent(context, filter)
- val pendingIntent = PendingIntent.getActivity(context, Constants.NOTIFICATION_TIMER, notifyIntent, 0)
+ val pendingIntent = PendingIntent.getActivity(
+ context,
+ Constants.NOTIFICATION_TIMER,
+ notifyIntent,
+ PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
+ )
val r = context.resources
val appName = r.getString(R.string.app_name)
val text = r.getString(
diff --git a/app/src/main/java/org/tasks/location/LocationServiceAndroid.kt b/app/src/main/java/org/tasks/location/LocationServiceAndroid.kt
index f0d988c61..d55a92279 100644
--- a/app/src/main/java/org/tasks/location/LocationServiceAndroid.kt
+++ b/app/src/main/java/org/tasks/location/LocationServiceAndroid.kt
@@ -6,6 +6,7 @@ import android.content.Context
import android.content.Intent
import android.location.Location
import android.net.Uri
+import com.todoroo.andlib.utility.AndroidUtilities.atLeastS
import dagger.hilt.android.qualifiers.ApplicationContext
import org.tasks.data.MergedGeofence
import org.tasks.data.Place
@@ -51,13 +52,16 @@ class LocationServiceAndroid @Inject constructor(
}
private fun createPendingIntent(place: Long) =
- PendingIntent.getBroadcast(
- context,
- 0,
- Intent(context, AndroidGeofenceTransitionIntentService.Broadcast::class.java)
- .setData(Uri.parse("tasks://geofence/$place")),
- /*PendingIntent.FLAG_MUTABLE or */PendingIntent.FLAG_UPDATE_CURRENT
- )
+ PendingIntent.getBroadcast(
+ context,
+ 0,
+ Intent(context, AndroidGeofenceTransitionIntentService.Broadcast::class.java)
+ .setData(Uri.parse("tasks://geofence/$place")),
+ if (atLeastS())
+ PendingIntent.FLAG_MUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
+ else
+ PendingIntent.FLAG_UPDATE_CURRENT
+ )
companion object {
private val TWO_MINUTES = TimeUnit.MINUTES.toMillis(2)
diff --git a/app/src/main/java/org/tasks/widget/TasksWidget.kt b/app/src/main/java/org/tasks/widget/TasksWidget.kt
index def94e8c7..86435cbbb 100644
--- a/app/src/main/java/org/tasks/widget/TasksWidget.kt
+++ b/app/src/main/java/org/tasks/widget/TasksWidget.kt
@@ -11,6 +11,7 @@ import android.view.View
import android.widget.RemoteViews
import androidx.annotation.ColorInt
import androidx.core.graphics.ColorUtils
+import com.todoroo.andlib.utility.AndroidUtilities.atLeastS
import com.todoroo.astrid.api.Filter
import dagger.hilt.android.AndroidEntryPoint
import dagger.hilt.android.qualifiers.ApplicationContext
@@ -151,12 +152,15 @@ class TasksWidget : AppWidgetProvider() {
}
private fun getPendingIntentTemplate(context: Context): PendingIntent =
- PendingIntent.getActivity(
- context,
- 0,
- Intent(context, WidgetClickActivity::class.java),
- /*PendingIntent.FLAG_MUTABLE or */PendingIntent.FLAG_UPDATE_CURRENT
- )
+ PendingIntent.getActivity(
+ context,
+ 0,
+ Intent(context, WidgetClickActivity::class.java),
+ if (atLeastS())
+ PendingIntent.FLAG_MUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
+ else
+ PendingIntent.FLAG_UPDATE_CURRENT
+ )
private fun getOpenListIntent(context: Context, filter: Filter, widgetId: Int): PendingIntent {
val intent = TaskIntents.getTaskListIntent(context, filter)
diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt
index 8e679496f..cecf4c119 100644
--- a/buildSrc/src/main/kotlin/Versions.kt
+++ b/buildSrc/src/main/kotlin/Versions.kt
@@ -1,7 +1,7 @@
object Versions {
const val kotlin = "1.5.21"
const val compileSdk = 31
- const val targetSdk = 30
+ const val targetSdk = 31
const val minSdk = 24
const val work = "2.7.0-beta01"
const val leakcanary = "2.7"
@@ -19,4 +19,4 @@ object Versions {
const val lifecycle = "2.3.0"
const val markwon = "4.6.2"
const val compose = "1.0.2"
-}
\ No newline at end of file
+}