diff --git a/app/build.gradle b/app/build.gradle index 5110973..52953b0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -153,22 +153,22 @@ android { } dependencies { - def nav_version = "2.2.1" - def room_version = "2.2.6" - def work_version = '2.3.4' - def paging_version = "2.1.2" + def nav_version = "2.3.5" + def room_version = "2.3.0" + def work_version = '2.5.0' + def paging_version = "3.0.0" implementation fileTree(dir: 'libs', include: ['*.jar']) implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.appcompat:appcompat:1.3.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.gridlayout:gridlayout:1.0.0' implementation "com.google.android.material:material:1.3.0" - implementation 'androidx.fragment:fragment-ktx:1.3.2' + implementation 'androidx.fragment:fragment-ktx:1.3.4' - implementation "android.arch.navigation:navigation-fragment-ktx:$nav_version" - implementation "android.arch.navigation:navigation-ui:$nav_version" + implementation "androidx.navigation:navigation-fragment-ktx:$nav_version" + implementation "androidx.navigation:navigation-ui:$nav_version" implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' implementation "androidx.room:room-runtime:$room_version" @@ -178,12 +178,12 @@ dependencies { implementation "androidx.paging:paging-runtime:$paging_version" - implementation "android.arch.work:work-runtime:$work_version" - implementation "android.arch.work:work-runtime-ktx:$work_version" + implementation "androidx.work:work-runtime:$work_version" + implementation "androidx.work:work-runtime-ktx:$work_version" androidTestImplementation "android.arch.work:work-testing:$work_version" - implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.1' - implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.1' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.3' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.3' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test:runner:1.3.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6962ca5..c7fa026 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ @@ -92,6 +93,7 @@ android:name=".ui.manipulation.AnnoyActivity" /> - + - + @@ -138,6 +140,7 @@ android:exported="false" /> - + @@ -160,6 +163,7 @@ @@ -169,6 +173,7 @@ @@ -181,6 +186,7 @@ diff --git a/app/src/main/java/io/timelimit/android/integration/platform/android/AndroidIntegration.kt b/app/src/main/java/io/timelimit/android/integration/platform/android/AndroidIntegration.kt index 1d1b623..894e72b 100644 --- a/app/src/main/java/io/timelimit/android/integration/platform/android/AndroidIntegration.kt +++ b/app/src/main/java/io/timelimit/android/integration/platform/android/AndroidIntegration.kt @@ -381,7 +381,7 @@ class AndroidIntegration(context: Context): PlatformIntegration(maximumProtectio context, PendingIntentIds.REVOKE_TEMPORARILY_ALLOWED, BackgroundActionService.prepareRevokeTemporarilyAllowed(context), - PendingIntent.FLAG_UPDATE_CURRENT + PendingIntentIds.PENDING_INTENT_FLAGS ) val notification = NotificationCompat.Builder(context, NotificationChannels.APP_STATUS) diff --git a/app/src/main/java/io/timelimit/android/integration/platform/android/BackgroundActionService.kt b/app/src/main/java/io/timelimit/android/integration/platform/android/BackgroundActionService.kt index 03f6ebc..d458f22 100644 --- a/app/src/main/java/io/timelimit/android/integration/platform/android/BackgroundActionService.kt +++ b/app/src/main/java/io/timelimit/android/integration/platform/android/BackgroundActionService.kt @@ -56,7 +56,7 @@ class BackgroundActionService: Service() { context, PendingIntentIds.OPEN_MAIN_APP, Intent(context, MainActivity::class.java), - PendingIntent.FLAG_UPDATE_CURRENT + PendingIntentIds.PENDING_INTENT_FLAGS ) fun getSyncNotificationsPendingIntent(context: Context) = PendingIntent.getService( @@ -64,7 +64,7 @@ class BackgroundActionService: Service() { PendingIntentIds.SYNC_NOTIFICATIONS, Intent(context, BackgroundActionService::class.java) .putExtra(ACTION, ACTION_UPDATE_NOTIFICATION), - PendingIntent.FLAG_UPDATE_CURRENT + PendingIntentIds.PENDING_INTENT_FLAGS ) } diff --git a/app/src/main/java/io/timelimit/android/integration/platform/android/BackgroundService.kt b/app/src/main/java/io/timelimit/android/integration/platform/android/BackgroundService.kt index 2a25a90..3ce6d37 100644 --- a/app/src/main/java/io/timelimit/android/integration/platform/android/BackgroundService.kt +++ b/app/src/main/java/io/timelimit/android/integration/platform/android/BackgroundService.kt @@ -92,7 +92,7 @@ class BackgroundService: Service() { context, PendingIntentIds.SWITCH_TO_DEFAULT_USER, BackgroundActionService.prepareSwitchToDefaultUser(context), - PendingIntent.FLAG_UPDATE_CURRENT + PendingIntentIds.PENDING_INTENT_FLAGS ) ).build() ) diff --git a/app/src/main/java/io/timelimit/android/integration/platform/android/Notification.kt b/app/src/main/java/io/timelimit/android/integration/platform/android/Notification.kt index f591af3..c56e522 100644 --- a/app/src/main/java/io/timelimit/android/integration/platform/android/Notification.kt +++ b/app/src/main/java/io/timelimit/android/integration/platform/android/Notification.kt @@ -17,6 +17,7 @@ package io.timelimit.android.integration.platform.android import android.app.NotificationChannel import android.app.NotificationManager +import android.app.PendingIntent import android.content.Context import android.os.Build import androidx.core.app.NotificationCompat @@ -153,4 +154,10 @@ object PendingIntentIds { const val UPDATE_STATUS = 5 const val OPEN_UPDATER = 6 val DYNAMIC_NOTIFICATION_RANGE = 100..10000 + + val PENDING_INTENT_FLAGS = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE + } else { + PendingIntent.FLAG_UPDATE_CURRENT + } } diff --git a/app/src/main/java/io/timelimit/android/logic/SuspendAppsLogic.kt b/app/src/main/java/io/timelimit/android/logic/SuspendAppsLogic.kt index dfaeb00..62b5f44 100644 --- a/app/src/main/java/io/timelimit/android/logic/SuspendAppsLogic.kt +++ b/app/src/main/java/io/timelimit/android/logic/SuspendAppsLogic.kt @@ -139,7 +139,7 @@ class SuspendAppsLogic(private val appLogic: AppLogic): Observer { } } while (didModify) - categoryHandlings.minBy { it.dependsOnMaxTime }?.let { + categoryHandlings.minByOrNull { it.dependsOnMaxTime }?.let { scheduleUpdate((it.dependsOnMaxTime - realTime.timeInMillis)) } diff --git a/app/src/main/java/io/timelimit/android/logic/UsedTimeUpdateHelper.kt b/app/src/main/java/io/timelimit/android/logic/UsedTimeUpdateHelper.kt index 52d634a..a935fd0 100644 --- a/app/src/main/java/io/timelimit/android/logic/UsedTimeUpdateHelper.kt +++ b/app/src/main/java/io/timelimit/android/logic/UsedTimeUpdateHelper.kt @@ -58,7 +58,7 @@ class UsedTimeUpdateHelper (private val appLogic: AppLogic) { val newIds = handlings.map { it.createdWithCategoryRelatedData.category.id }.toSet() val oldIds = categoryIds - maxTimeToAdd = handlings.minBy { it.maxTimeToAdd }?.maxTimeToAdd ?: Long.MAX_VALUE + maxTimeToAdd = handlings.minByOrNull { it.maxTimeToAdd }?.maxTimeToAdd ?: Long.MAX_VALUE categoryIds = newIds if (lastCategoryHandlings.size != handlings.size) { diff --git a/app/src/main/java/io/timelimit/android/logic/blockingreason/CategoryItselfHandling.kt b/app/src/main/java/io/timelimit/android/logic/blockingreason/CategoryItselfHandling.kt index bbbfe2a..78c9513 100644 --- a/app/src/main/java/io/timelimit/android/logic/blockingreason/CategoryItselfHandling.kt +++ b/app/src/main/java/io/timelimit/android/logic/blockingreason/CategoryItselfHandling.kt @@ -167,7 +167,7 @@ data class CategoryItselfHandling ( val missingNetworkTimeForRules = categoryRelatedData.rules.isNotEmpty() val okByTimeLimitRules = regularRelatedRules.isEmpty() || (remainingTime != null && remainingTime.hasRemainingTime) - val dependsOnMaxTimeByMinuteOfDay = (allRelatedRules.minBy { it.endMinuteOfDay }?.endMinuteOfDay ?: Int.MAX_VALUE).coerceAtMost( + val dependsOnMaxTimeByMinuteOfDay = (allRelatedRules.minByOrNull { it.endMinuteOfDay }?.endMinuteOfDay ?: Int.MAX_VALUE).coerceAtMost( categoryRelatedData.rules .filter { // related to today @@ -175,7 +175,7 @@ data class CategoryItselfHandling ( // will be applied later at this day it.startMinuteOfDay > minuteInWeek % MinuteOfDay.LENGTH } - .minBy { it.startMinuteOfDay }?.startMinuteOfDay ?: Int.MAX_VALUE + .minByOrNull { it.startMinuteOfDay }?.startMinuteOfDay ?: Int.MAX_VALUE ).coerceAtMost(dependsOnMaxMinuteOfDayByBlockedTimeAreas) // this must depend on the current day to invalidate day dependent values like the extra time val dependsOnMaxTimeByRules = if (dependsOnMaxTimeByMinuteOfDay <= MinuteOfDay.MAX) { @@ -200,7 +200,7 @@ data class CategoryItselfHandling ( categoryRelatedData.durations.map { it.lastUsage + it.maxSessionDuration - it.lastSessionDuration } ) .filter { it > timeInMillis } - .min() ?: Long.MAX_VALUE + .minOrNull() ?: Long.MAX_VALUE val okBySessionDurationLimits = remainingSessionDuration == null || remainingSessionDuration > 0 val okByCurrentDevice = assumeCurrentDevice || (remainingTime == null && remainingSessionDuration == null) diff --git a/app/src/main/java/io/timelimit/android/ui/update/InstallUpdateDialogModel.kt b/app/src/main/java/io/timelimit/android/ui/update/InstallUpdateDialogModel.kt index f4c862b..b1b5a9f 100644 --- a/app/src/main/java/io/timelimit/android/ui/update/InstallUpdateDialogModel.kt +++ b/app/src/main/java/io/timelimit/android/ui/update/InstallUpdateDialogModel.kt @@ -158,7 +158,7 @@ class InstallUpdateDialogModel(application: Application): AndroidViewModel(appli application, PendingIntentIds.UPDATE_STATUS, Intent(action).setPackage(BuildConfig.APPLICATION_ID), - 0 + PendingIntentIds.PENDING_INTENT_FLAGS ).intentSender ) diff --git a/app/src/main/java/io/timelimit/android/update/UpdateUtil.kt b/app/src/main/java/io/timelimit/android/update/UpdateUtil.kt index 44fd9a7..fb23510 100644 --- a/app/src/main/java/io/timelimit/android/update/UpdateUtil.kt +++ b/app/src/main/java/io/timelimit/android/update/UpdateUtil.kt @@ -86,7 +86,7 @@ object UpdateUtil { context, PendingIntentIds.OPEN_UPDATER, Intent(context, UpdateActivity::class.java), - PendingIntent.FLAG_UPDATE_CURRENT + PendingIntentIds.PENDING_INTENT_FLAGS ) notificationManager.notify( diff --git a/build.gradle b/build.gradle index f18f594..80d23ae 100644 --- a/build.gradle +++ b/build.gradle @@ -17,13 +17,13 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = '1.4.32' + ext.kotlin_version = '1.5.10' repositories { google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:4.1.3' + classpath 'com.android.tools.build:gradle:4.2.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index beb662f..61a9dc7 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -2,5 +2,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip -distributionSha256Sum=23e7d37e9bb4f8dabb8a3ea7fdee9dd0428b9b1a71d298aefd65b11dccea220f +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip +distributionSha256Sum=3239b5ed86c3838a37d983ac100573f64c1f3fd8e1eb6c89fa5f9529b5ec091d