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 +}