diff --git a/app/build.gradle b/app/build.gradle index 2989617dd0..4096f2f61f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,7 +17,7 @@ apply from: '../gradle/scripts/checkstyle.gradle' apply from: '../gradle/scripts/testLogging.gradle' android { - compileSdkVersion 31 + compileSdkVersion 32 buildTypes { all { proguardFiles(file('../proguard').listFiles()) @@ -144,6 +144,8 @@ dependencies { implementation 'androidx.core:core-ktx:1.7.0' // Note: upgrading this and or androidx.appcompat:appcompat will break the toolbar implementation 'androidx.fragment:fragment-ktx:1.2.5' + // Note: fix for internal androidx libraries using outdated WorkManager causing a crash + implementation "androidx.work:work-runtime-ktx:2.7.1" // RxJava implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' @@ -179,7 +181,7 @@ dependencies { kapt 'com.google.dagger:dagger-compiler:2.28.3' // LeakCanary - debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.4' + debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.9.1' // DebugDatabase debugImplementation 'com.amitshekhar.android:debug-db:1.0.6' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0ee8fe69cd..d3ff5a74c6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -6,6 +6,7 @@ tools:ignore="UnusedAttribute"> + diff --git a/app/src/main/java/de/tum/in/tumcampusapp/component/notifications/NotificationScheduler.kt b/app/src/main/java/de/tum/in/tumcampusapp/component/notifications/NotificationScheduler.kt index 495c1e1414..74d0649e19 100644 --- a/app/src/main/java/de/tum/in/tumcampusapp/component/notifications/NotificationScheduler.kt +++ b/app/src/main/java/de/tum/in/tumcampusapp/component/notifications/NotificationScheduler.kt @@ -156,7 +156,7 @@ class NotificationScheduler @Inject constructor(private val context: Context) { putExtra(Const.KEY_NOTIFICATION, futureNotification.notification) } return PendingIntent.getBroadcast(context, - futureNotification.id, intent, PendingIntent.FLAG_CANCEL_CURRENT) + futureNotification.id, intent, PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_CANCEL_CURRENT) } /** @@ -171,7 +171,7 @@ class NotificationScheduler @Inject constructor(private val context: Context) { val intent = Intent(context, NotificationAlarmReceiver::class.java).apply { putExtra(Const.KEY_NOTIFICATION_TYPE_ID, type.id) } - return PendingIntent.getBroadcast(context, type.id, intent, PendingIntent.FLAG_CANCEL_CURRENT) + return PendingIntent.getBroadcast(context, type.id, intent, PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_CANCEL_CURRENT) } companion object { diff --git a/app/src/main/java/de/tum/in/tumcampusapp/component/other/general/UpdatePushNotification.kt b/app/src/main/java/de/tum/in/tumcampusapp/component/other/general/UpdatePushNotification.kt index 127082000e..937860bae9 100644 --- a/app/src/main/java/de/tum/in/tumcampusapp/component/other/general/UpdatePushNotification.kt +++ b/app/src/main/java/de/tum/in/tumcampusapp/component/other/general/UpdatePushNotification.kt @@ -55,7 +55,7 @@ class UpdatePushNotification( val sound = Uri.parse("android.resource://${appContext.packageName}/${R.raw.message}") val alarm = Intent(appContext, MainActivity::class.java) - val pending = PendingIntent.getActivity(appContext, 0, alarm, PendingIntent.FLAG_UPDATE_CURRENT) + val pending = PendingIntent.getActivity(appContext, 0, alarm, PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT) val description = if (info.description.isNotEmpty()) { info.description diff --git a/app/src/main/java/de/tum/in/tumcampusapp/component/tumui/calendar/widget/TimetableWidget.kt b/app/src/main/java/de/tum/in/tumcampusapp/component/tumui/calendar/widget/TimetableWidget.kt index 17ae2796cc..0cb3cd9941 100644 --- a/app/src/main/java/de/tum/in/tumcampusapp/component/tumui/calendar/widget/TimetableWidget.kt +++ b/app/src/main/java/de/tum/in/tumcampusapp/component/tumui/calendar/widget/TimetableWidget.kt @@ -30,7 +30,7 @@ class TimetableWidget : AppWidgetProvider() { override fun onDisabled(context: Context) { // Cancel alarm as the last widget has been removed val intent = Intent(context, TimetableWidget::class.java) - val sender = PendingIntent.getBroadcast(context, 0, intent, 0) + val sender = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_IMMUTABLE) val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager? if (alarmManager != null) { alarmManager.cancel(sender) @@ -66,7 +66,7 @@ class TimetableWidget : AppWidgetProvider() { val intent = Intent(context, TimetableWidget::class.java) intent.action = BROADCAST_UPDATE_TIMETABLE_WIDGETS - val pi = PendingIntent.getBroadcast(context, 0, intent, 0) + val pi = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_IMMUTABLE) val am = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager? if (am != null) { @@ -113,20 +113,20 @@ class TimetableWidget : AppWidgetProvider() { val configIntent = Intent(context, TimetableWidgetConfigureActivity::class.java) configIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId) val pendingConfigIntent = PendingIntent.getActivity( - context, appWidgetId, configIntent, PendingIntent.FLAG_UPDATE_CURRENT) + context, appWidgetId, configIntent, PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT) remoteViews.setOnClickPendingIntent(R.id.timetable_widget_setting, pendingConfigIntent) // Set up the calendar activity listeners val calendarIntent = Intent(context, CalendarActivity::class.java) val pendingCalendarIntent = PendingIntent.getActivity( - context, appWidgetId, calendarIntent, PendingIntent.FLAG_UPDATE_CURRENT) + context, appWidgetId, calendarIntent, PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT) remoteViews.setOnClickPendingIntent(R.id.timetable_widget_header, pendingCalendarIntent) // Set up the calendar intent used when the user taps an event val eventIntent = Intent(context, CalendarActivity::class.java) eventIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId) val eventPendingIntent = PendingIntent.getActivity( - context, appWidgetId, eventIntent, PendingIntent.FLAG_UPDATE_CURRENT) + context, appWidgetId, eventIntent, PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT) remoteViews.setPendingIntentTemplate(R.id.timetable_widget_listview, eventPendingIntent) // Set up the intent that starts the TimetableWidgetService, which will diff --git a/app/src/main/java/de/tum/in/tumcampusapp/component/tumui/grades/GradesNotificationProvider.kt b/app/src/main/java/de/tum/in/tumcampusapp/component/tumui/grades/GradesNotificationProvider.kt index 6ee3b8b13b..e9471148a6 100644 --- a/app/src/main/java/de/tum/in/tumcampusapp/component/tumui/grades/GradesNotificationProvider.kt +++ b/app/src/main/java/de/tum/in/tumcampusapp/component/tumui/grades/GradesNotificationProvider.kt @@ -32,11 +32,11 @@ class GradesNotificationProvider( R.plurals.new_grades_format_string, size, size, formattedNewGrades) val intent = GradesActivity.newIntent(context) - val pendingIntent = PendingIntent.getActivity(context, 0, intent, FLAG_UPDATE_CURRENT) + val pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_IMMUTABLE or FLAG_UPDATE_CURRENT) val deleteIntent = GradeNotificationDeleteReceiver.newIntent(context, newGrades) val deletePendingIntent = PendingIntent.getBroadcast( - context, DELETE_REQUEST_CODE, deleteIntent, PendingIntent.FLAG_UPDATE_CURRENT) + context, DELETE_REQUEST_CODE, deleteIntent, PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT) val notification = getNotificationBuilder() .setContentTitle(title) diff --git a/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/CafeteriaNotificationProvider.kt b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/CafeteriaNotificationProvider.kt index 06ac78b884..ecaaf5d66b 100644 --- a/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/CafeteriaNotificationProvider.kt +++ b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/cafeteria/CafeteriaNotificationProvider.kt @@ -59,7 +59,7 @@ class CafeteriaNotificationProvider(context: Context) : NotificationProvider(con } val pendingIntent = PendingIntent.getActivity( - context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT) + context, 0, intent, PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT) val summaryNotification = getNotificationBuilder() .setContentTitle(title) diff --git a/app/src/main/java/de/tum/in/tumcampusapp/component/ui/news/NewsNotificationProvider.kt b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/news/NewsNotificationProvider.kt index d37123d725..8765e0b494 100644 --- a/app/src/main/java/de/tum/in/tumcampusapp/component/ui/news/NewsNotificationProvider.kt +++ b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/news/NewsNotificationProvider.kt @@ -34,7 +34,7 @@ class NewsNotificationProvider( val intent = Intent(context, NewsActivity::class.java) val pendingIntent = PendingIntent.getActivity( - context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT) + context, 0, intent, PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT) val notification = getNotificationBuilder() .setContentTitle(summaryTitle) diff --git a/app/src/main/java/de/tum/in/tumcampusapp/component/ui/transportation/TransportNotificationProvider.kt b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/transportation/TransportNotificationProvider.kt index 9ee424c0aa..927c65d393 100644 --- a/app/src/main/java/de/tum/in/tumcampusapp/component/ui/transportation/TransportNotificationProvider.kt +++ b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/transportation/TransportNotificationProvider.kt @@ -35,7 +35,7 @@ class TransportNotificationProvider(context: Context) : NotificationProvider(con val intent = station.getIntent(context) val pendingIntent = PendingIntent.getActivity( - context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT) + context, 0, intent, PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT) val notification = getNotificationBuilder() .setContentTitle(title) diff --git a/app/src/main/java/de/tum/in/tumcampusapp/component/ui/transportation/widget/MVVWidget.kt b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/transportation/widget/MVVWidget.kt index 01c979c32c..51b81a366a 100644 --- a/app/src/main/java/de/tum/in/tumcampusapp/component/ui/transportation/widget/MVVWidget.kt +++ b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/transportation/widget/MVVWidget.kt @@ -56,7 +56,7 @@ class MVVWidget : AppWidgetProvider() { } val intent = Intent(context, MVVWidget::class.java) - val sender = PendingIntent.getBroadcast(context, 0, intent, 0) + val sender = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_IMMUTABLE) val alarmManager = context.alarmManager alarmManager.cancel(sender) if (autoReload) { @@ -114,7 +114,7 @@ class MVVWidget : AppWidgetProvider() { putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId) } val pendingIntent = PendingIntent.getActivity( - context, appWidgetId, configIntent, PendingIntent.FLAG_UPDATE_CURRENT) + context, appWidgetId, configIntent, PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT) remoteViews.setOnClickPendingIntent(R.id.mvv_widget_setting_button, pendingIntent) // Set up the reload functionality diff --git a/app/src/main/java/de/tum/in/tumcampusapp/service/GeofencingRegistrationService.kt b/app/src/main/java/de/tum/in/tumcampusapp/service/GeofencingRegistrationService.kt index a090fbbfc8..82e630a60d 100644 --- a/app/src/main/java/de/tum/in/tumcampusapp/service/GeofencingRegistrationService.kt +++ b/app/src/main/java/de/tum/in/tumcampusapp/service/GeofencingRegistrationService.kt @@ -45,7 +45,7 @@ class GeofencingRegistrationService : JobIntentService() { val request = intent.getParcelableExtra(Const.ADD_GEOFENCE_EXTRA) ?: return val geofenceIntent = Intent(this, GeofencingUpdateReceiver::class.java) val geofencePendingIntent = PendingIntent.getBroadcast( - this, 0, geofenceIntent, PendingIntent.FLAG_UPDATE_CURRENT) + this, 0, geofenceIntent, PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT) locationClient.addGeofences(request, geofencePendingIntent) Utils.log("Registered new Geofence") diff --git a/app/src/main/java/de/tum/in/tumcampusapp/service/ScanResultsAvailableReceiver.kt b/app/src/main/java/de/tum/in/tumcampusapp/service/ScanResultsAvailableReceiver.kt index de9e553be9..a3a2f34350 100644 --- a/app/src/main/java/de/tum/in/tumcampusapp/service/ScanResultsAvailableReceiver.kt +++ b/app/src/main/java/de/tum/in/tumcampusapp/service/ScanResultsAvailableReceiver.kt @@ -102,8 +102,8 @@ class ScanResultsAvailableReceiver : BroadcastReceiver() { val setupIntent = Intent(context, SetupEduroamActivity::class.java) val hideIntent = Intent(context, NeverShowAgainService::class.java) - val setupPendingIntent = PendingIntent.getActivity(context, 0, setupIntent, PendingIntent.FLAG_UPDATE_CURRENT) - val hidePendingIntent = PendingIntent.getService(context, 0, hideIntent, PendingIntent.FLAG_UPDATE_CURRENT) + val setupPendingIntent = PendingIntent.getActivity(context, 0, setupIntent, PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT) + val hidePendingIntent = PendingIntent.getService(context, 0, hideIntent, PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT) // Create FcmNotification using NotificationCompat.Builder val notification = NotificationCompat.Builder(context, Const.NOTIFICATION_CHANNEL_EDUROAM) diff --git a/app/src/main/java/de/tum/in/tumcampusapp/service/SilenceService.kt b/app/src/main/java/de/tum/in/tumcampusapp/service/SilenceService.kt index 548bc0eb3a..4330fc6b66 100644 --- a/app/src/main/java/de/tum/in/tumcampusapp/service/SilenceService.kt +++ b/app/src/main/java/de/tum/in/tumcampusapp/service/SilenceService.kt @@ -68,7 +68,7 @@ class SilenceService : JobIntentService() { val alarmManager = this.getSystemService(Context.ALARM_SERVICE) as AlarmManager val newIntent = Intent(this, SilenceService::class.java) - val pendingIntent = PendingIntent.getService(this, 0, newIntent, PendingIntent.FLAG_UPDATE_CURRENT) + val pendingIntent = PendingIntent.getService(this, 0, newIntent, PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT) val startTime = System.currentTimeMillis() var waitDuration = CHECK_INTERVAL.toLong()