diff --git a/app/libs/android.jar b/app/libs/android.jar index 66649a87..4aa6dfa5 100644 Binary files a/app/libs/android.jar and b/app/libs/android.jar differ diff --git a/app/libs/libcore.jar b/app/libs/libcore.jar index a43e54f3..b555d822 100644 Binary files a/app/libs/libcore.jar and b/app/libs/libcore.jar differ diff --git a/app/src/test/java/com/stevesoltys/seedvault/metadata/MetadataManagerTest.kt b/app/src/test/java/com/stevesoltys/seedvault/metadata/MetadataManagerTest.kt index f049a827..fc289249 100644 --- a/app/src/test/java/com/stevesoltys/seedvault/metadata/MetadataManagerTest.kt +++ b/app/src/test/java/com/stevesoltys/seedvault/metadata/MetadataManagerTest.kt @@ -57,6 +57,7 @@ import kotlin.random.Random @Suppress("DEPRECATION") @RunWith(AndroidJUnit4::class) @Config( + sdk = [34], // TODO: Drop once robolectric supports 35 application = TestApp::class ) class MetadataManagerTest { @@ -342,7 +343,7 @@ class MetadataManagerTest { @Test fun `test onPackageBackedUp()`() { - packageInfo.applicationInfo.flags = FLAG_SYSTEM + packageInfo.applicationInfo!!.flags = FLAG_SYSTEM val updatedMetadata = initialMetadata.copy( time = time, packageMetadataMap = PackageMetadataMap() // otherwise this isn't copied, but referenced diff --git a/app/src/test/java/com/stevesoltys/seedvault/plugins/saf/DocumentFileTest.kt b/app/src/test/java/com/stevesoltys/seedvault/plugins/saf/DocumentFileTest.kt index 2aead4e6..b29e82ce 100644 --- a/app/src/test/java/com/stevesoltys/seedvault/plugins/saf/DocumentFileTest.kt +++ b/app/src/test/java/com/stevesoltys/seedvault/plugins/saf/DocumentFileTest.kt @@ -24,6 +24,7 @@ import org.robolectric.annotation.Config @RunWith(AndroidJUnit4::class) @Config( + sdk = [34], // TODO: Drop once robolectric supports 35 application = TestApp::class ) internal class DocumentFileTest { diff --git a/app/src/test/java/com/stevesoltys/seedvault/plugins/webdav/WebDavStoragePluginTest.kt b/app/src/test/java/com/stevesoltys/seedvault/plugins/webdav/WebDavStoragePluginTest.kt index 8472fe5a..c5389a4a 100644 --- a/app/src/test/java/com/stevesoltys/seedvault/plugins/webdav/WebDavStoragePluginTest.kt +++ b/app/src/test/java/com/stevesoltys/seedvault/plugins/webdav/WebDavStoragePluginTest.kt @@ -28,6 +28,7 @@ import kotlin.random.Random @RunWith(AndroidJUnit4::class) @Config( + sdk = [34], // TODO: Drop once robolectric supports 35 application = TestApp::class ) internal class WebDavStoragePluginTest : TransportTest() { diff --git a/app/src/test/java/com/stevesoltys/seedvault/restore/AppSelectionManagerTest.kt b/app/src/test/java/com/stevesoltys/seedvault/restore/AppSelectionManagerTest.kt index 5333c1f9..d6c85b57 100644 --- a/app/src/test/java/com/stevesoltys/seedvault/restore/AppSelectionManagerTest.kt +++ b/app/src/test/java/com/stevesoltys/seedvault/restore/AppSelectionManagerTest.kt @@ -35,12 +35,16 @@ import org.junit.jupiter.api.Assertions.assertNull import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Assertions.fail import org.junit.runner.RunWith +import org.robolectric.annotation.Config import java.io.ByteArrayInputStream import java.io.IOException import kotlin.random.Random @RunWith(AndroidJUnit4::class) @OptIn(ExperimentalCoroutinesApi::class) +@Config( + sdk = [34] // TODO: Drop once robolectric supports 35 +) internal class AppSelectionManagerTest : TransportTest() { private val storagePluginManager: StoragePluginManager = mockk() diff --git a/app/src/test/java/com/stevesoltys/seedvault/restore/install/ApkBackupRestoreTest.kt b/app/src/test/java/com/stevesoltys/seedvault/restore/install/ApkBackupRestoreTest.kt index e1c7ed81..12c5761c 100644 --- a/app/src/test/java/com/stevesoltys/seedvault/restore/install/ApkBackupRestoreTest.kt +++ b/app/src/test/java/com/stevesoltys/seedvault/restore/install/ApkBackupRestoreTest.kt @@ -118,12 +118,12 @@ internal class ApkBackupRestoreTest : TransportTest() { fun `test backup and restore with a split`(@TempDir tmpDir: Path) = runBlocking { val apkBytes = byteArrayOf(0x04, 0x05, 0x06) val tmpFile = File(tmpDir.toAbsolutePath().toString()) - packageInfo.applicationInfo.sourceDir = File(tmpFile, "test.apk").apply { + packageInfo.applicationInfo!!.sourceDir = File(tmpFile, "test.apk").apply { assertTrue(createNewFile()) writeBytes(apkBytes) }.absolutePath packageInfo.splitNames = arrayOf(splitName) - packageInfo.applicationInfo.splitSourceDirs = arrayOf(File(tmpFile, "split.apk").apply { + packageInfo.applicationInfo!!.splitSourceDirs = arrayOf(File(tmpFile, "split.apk").apply { assertTrue(createNewFile()) writeBytes(splitBytes) }.absolutePath) @@ -167,7 +167,7 @@ internal class ApkBackupRestoreTest : TransportTest() { coEvery { storagePlugin.getInputStream(token, name) } returns inputStream every { pm.getPackageArchiveInfo(capture(apkPath), any()) } returns packageInfo every { applicationInfo.loadIcon(pm) } returns icon - every { pm.getApplicationLabel(packageInfo.applicationInfo) } returns appName + every { pm.getApplicationLabel(packageInfo.applicationInfo!!) } returns appName every { splitCompatChecker.isCompatible(metadata.deviceName, listOf(splitName)) } returns true diff --git a/app/src/test/java/com/stevesoltys/seedvault/restore/install/ApkRestoreTest.kt b/app/src/test/java/com/stevesoltys/seedvault/restore/install/ApkRestoreTest.kt index adccad1b..808723d2 100644 --- a/app/src/test/java/com/stevesoltys/seedvault/restore/install/ApkRestoreTest.kt +++ b/app/src/test/java/com/stevesoltys/seedvault/restore/install/ApkRestoreTest.kt @@ -281,7 +281,7 @@ internal class ApkRestoreTest : TransportTest() { } returns apkInputStream every { pm.getPackageArchiveInfo(any(), any()) } returns packageInfo every { applicationInfo.loadIcon(pm) } returns icon - every { pm.getApplicationLabel(packageInfo.applicationInfo) } returns appName + every { pm.getApplicationLabel(packageInfo.applicationInfo!!) } returns appName coEvery { apkInstaller.install(match { it.size == 1 }, packageName, installerName, any()) } returns installResult @@ -706,7 +706,7 @@ internal class ApkRestoreTest : TransportTest() { coEvery { storagePlugin.getInputStream(token, name) } returns apkInputStream every { pm.getPackageArchiveInfo(any(), any()) } returns packageInfo every { applicationInfo.loadIcon(pm) } returns icon - every { pm.getApplicationLabel(packageInfo.applicationInfo) } returns appName + every { pm.getApplicationLabel(packageInfo.applicationInfo!!) } returns appName } private suspend fun TurbineTestContext.assertQueuedFailFinished() { diff --git a/app/src/test/java/com/stevesoltys/seedvault/restore/install/DeviceInfoTest.kt b/app/src/test/java/com/stevesoltys/seedvault/restore/install/DeviceInfoTest.kt index 66d36c78..ce9f5fa9 100644 --- a/app/src/test/java/com/stevesoltys/seedvault/restore/install/DeviceInfoTest.kt +++ b/app/src/test/java/com/stevesoltys/seedvault/restore/install/DeviceInfoTest.kt @@ -27,6 +27,7 @@ import kotlin.random.Random @RunWith(AndroidJUnit4::class) @Config( + sdk = [34], // TODO: Drop once robolectric supports 35 application = TestApp::class ) internal class DeviceInfoTest { diff --git a/app/src/test/java/com/stevesoltys/seedvault/worker/ApkBackupTest.kt b/app/src/test/java/com/stevesoltys/seedvault/worker/ApkBackupTest.kt index 2159ff32..facc4d42 100644 --- a/app/src/test/java/com/stevesoltys/seedvault/worker/ApkBackupTest.kt +++ b/app/src/test/java/com/stevesoltys/seedvault/worker/ApkBackupTest.kt @@ -82,7 +82,7 @@ internal class ApkBackupTest : BackupTest() { @Test fun `does not back up test-only apps`() = runBlocking { - packageInfo.applicationInfo.flags = FLAG_TEST_ONLY + packageInfo.applicationInfo!!.flags = FLAG_TEST_ONLY every { settingsManager.isBackupEnabled(any()) } returns true every { settingsManager.backupApks() } returns true @@ -91,7 +91,7 @@ internal class ApkBackupTest : BackupTest() { @Test fun `does not back up system apps`() = runBlocking { - packageInfo.applicationInfo.flags = FLAG_SYSTEM + packageInfo.applicationInfo!!.flags = FLAG_SYSTEM every { settingsManager.isBackupEnabled(any()) } returns true every { settingsManager.backupApks() } returns true @@ -100,7 +100,7 @@ internal class ApkBackupTest : BackupTest() { @Test fun `does not back up the same version`() = runBlocking { - packageInfo.applicationInfo.flags = FLAG_UPDATED_SYSTEM_APP + packageInfo.applicationInfo!!.flags = FLAG_UPDATED_SYSTEM_APP val packageMetadata = packageMetadata.copy( version = packageInfo.longVersionCode ) @@ -112,7 +112,7 @@ internal class ApkBackupTest : BackupTest() { @Test fun `does back up the same version when signatures changes`() { - packageInfo.applicationInfo.sourceDir = "/tmp/doesNotExist" + packageInfo.applicationInfo!!.sourceDir = "/tmp/doesNotExist" expectChecks() @@ -140,7 +140,7 @@ internal class ApkBackupTest : BackupTest() { fun `test successful APK backup`(@TempDir tmpDir: Path) = runBlocking { val apkBytes = byteArrayOf(0x04, 0x05, 0x06) val tmpFile = File(tmpDir.toAbsolutePath().toString()) - packageInfo.applicationInfo.sourceDir = File(tmpFile, "test.apk").apply { + packageInfo.applicationInfo!!.sourceDir = File(tmpFile, "test.apk").apply { assertTrue(createNewFile()) writeBytes(apkBytes) }.absolutePath @@ -174,7 +174,7 @@ internal class ApkBackupTest : BackupTest() { // create base APK val apkBytes = byteArrayOf(0x04, 0x05, 0x06) // not random because of hash val tmpFile = File(tmpDir.toAbsolutePath().toString()) - packageInfo.applicationInfo.sourceDir = File(tmpFile, "test.apk").apply { + packageInfo.applicationInfo!!.sourceDir = File(tmpFile, "test.apk").apply { assertTrue(createNewFile()) writeBytes(apkBytes) }.absolutePath @@ -187,7 +187,7 @@ internal class ApkBackupTest : BackupTest() { val split1Sha256 = "ZqZ1cVH47lXbEncWx-Pc4L6AdLZOIO2lQuXB5GypxB4" val split2Bytes = byteArrayOf(0x01, 0x02, 0x03) val split2Sha256 = "A5BYxvLAy0ksUzsKTRTvd8wPeKvMztUofYShogEc-4E" - packageInfo.applicationInfo.splitSourceDirs = arrayOf( + packageInfo.applicationInfo!!.splitSourceDirs = arrayOf( File(tmpFile, "test-$split1Name.apk").apply { assertTrue(createNewFile()) writeBytes(split1Bytes) diff --git a/contactsbackup/libs/com.android.vcard.jar b/contactsbackup/libs/com.android.vcard.jar index bd4da8b6..9e744a96 100644 Binary files a/contactsbackup/libs/com.android.vcard.jar and b/contactsbackup/libs/com.android.vcard.jar differ diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index da7bff75..5e1efe7a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,14 +5,14 @@ [versions] # Gradle plugin versions -androidGradlePlugin = "8.5.1" +androidGradlePlugin = "8.6.0" protobufPlugin = "0.9.4" ktlint = "11.5.0" # Android SDK versions -compileSdk = "34" +compileSdk = "35" minSdk = "34" -targetSdk = "34" +targetSdk = "35" # Test versions junit4 = "4.13.2" @@ -31,47 +31,48 @@ espresso = "3.4.0" # 1.8.10 Android 14 # 1.9.0 Android 14 (QPR2) # 1.9.22 Android 14 (QPR3) -# Check: https://android.googlesource.com/platform/external/kotlinc/+/refs/tags/android-14.0.0_r53/build.txt -kotlin = { strictly = "1.9.22" } -ksp = "1.9.22-1.0.17" # Keep in match with kotlin version +# 1.9.23 Android 15 +# Check: https://android.googlesource.com/platform/external/kotlinc/+/refs/tags/android-15.0.0_r1/build.txt +kotlin = { strictly = "1.9.23" } +ksp = "1.9.23-1.0.20" # Keep in match with kotlin version dokka = "1.9.20" # Dokka has no releases after 1.9.20 # Lint versions lint-rules = { strictly = "0.1.0" } # Google versions -# https://android.googlesource.com/platform/external/protobuf/+/refs/tags/android-14.0.0_r53/java/pom.xml#7 +# https://android.googlesource.com/platform/external/protobuf/+/refs/tags/android-15.0.0_r1/java/pom.xml#7 protobuf = { strictly = "3.21.12" } -# https://android.googlesource.com/platform/prebuilts/sdk/+/refs/tags/android-14.0.0_r53/current/extras/material-design-x/Android.bp#15 -material = { strictly = "1.7.0-alpha03" } +# https://android.googlesource.com/platform/prebuilts/sdk/+/refs/tags/android-15.0.0_r1/current/extras/material-design-x/Android.bp#7 +material = { strictly = "1.11.0" } # careful with upgrading tink, so old backups continue to be decryptable # https://github.com/tink-crypto/tink-java/releases tink = { strictly = "1.10.0" } # Coroutines versions -# https://android.googlesource.com/platform/external/kotlinx.coroutines/+/refs/tags/android-14.0.0_r53/CHANGES.md +# https://android.googlesource.com/platform/external/kotlinx.coroutines/+/refs/tags/android-15.0.0_r1/CHANGES.md coroutines = { strictly = "1.7.3" } # AOSP has 1.7.2 but several libs require 1.7.3 # AndroidX versions -# https://android.googlesource.com/platform/prebuilts/sdk/+/android-14.0.0_r53/current/androidx/m2repository/androidx/room/room-ktx?autodive=0 -room = { strictly = "2.7.0-alpha01" } -# https://android.googlesource.com/platform/prebuilts/sdk/+/android-14.0.0_r53/current/androidx/m2repository/androidx/core/core-ktx?autodive=0 -androidx-core = { strictly = "1.13.0-beta01" } -# https://android.googlesource.com/platform/prebuilts/sdk/+/android-14.0.0_r53/current/androidx/m2repository/androidx/fragment/fragment-ktx?autodive=0 -androidx-fragment = { strictly = "1.7.0-beta01" } -# https://android.googlesource.com/platform/prebuilts/sdk/+/android-14.0.0_r53/current/androidx/m2repository/androidx/activity/activity-ktx?autodive=0 -androidx-activity = { strictly = "1.9.0-alpha03" } +# https://android.googlesource.com/platform/prebuilts/sdk/+/android-15.0.0_r1/current/androidx/m2repository/androidx/room/room-ktx?autodive=0 +room = { strictly = "2.7.0-alpha03" } +# https://android.googlesource.com/platform/prebuilts/sdk/+/android-15.0.0_r1/current/androidx/m2repository/androidx/core/core-ktx?autodive=0 +androidx-core = { strictly = "1.14.0-alpha01" } +# https://android.googlesource.com/platform/prebuilts/sdk/+/android-15.0.0_r1/current/androidx/m2repository/androidx/fragment/fragment-ktx?autodive=0 +androidx-fragment = { strictly = "1.8.0-rc01" } +# https://android.googlesource.com/platform/prebuilts/sdk/+/android-15.0.0_r1/current/androidx/m2repository/androidx/activity/activity-ktx?autodive=0 +androidx-activity = { strictly = "1.9.2" } # 1.10.0-alpha01 in AOSP but has compile SDK version issues # https://android.googlesource.com/platform/prebuilts/sdk/+/android-14.0.0_r29/current/androidx/m2repository/androidx/preference/preference?autodive=0 androidx-preference = { strictly = "1.2.0-alpha01" } # 1.3.0-alpha01 in AOSP but isn't released -# https://android.googlesource.com/platform/prebuilts/sdk/+/android-14.0.0_r53/current/androidx/m2repository/androidx/lifecycle/lifecycle-viewmodel-ktx?autodive=0 -androidx-lifecycle-viewmodel-ktx = { strictly = "2.8.0-alpha02" } -androidx-lifecycle-livedata-ktx = { strictly = "2.8.0-alpha02" } -# https://android.googlesource.com/platform/prebuilts/sdk/+/android-14.0.0_r53/current/androidx/m2repository/androidx/constraintlayout/constraintlayout?autodive=0 +# https://android.googlesource.com/platform/prebuilts/sdk/+/android-15.0.0_r1/current/androidx/m2repository/androidx/lifecycle/lifecycle-viewmodel-ktx?autodive=0 +androidx-lifecycle-viewmodel-ktx = { strictly = "2.9.0-alpha01" } +androidx-lifecycle-livedata-ktx = { strictly = "2.9.0-alpha01" } +# https://android.googlesource.com/platform/prebuilts/sdk/+/android-15.0.0_r1/current/androidx/m2repository/androidx/constraintlayout/constraintlayout?autodive=0 androidx-constraintlayout = { strictly = "2.2.0-alpha13" } -# https://android.googlesource.com/platform/prebuilts/sdk/+/android-14.0.0_r53/current/androidx/m2repository/androidx/documentfile/documentfile?autodive=0 +# https://android.googlesource.com/platform/prebuilts/sdk/+/android-15.0.0_r1/current/androidx/m2repository/androidx/documentfile/documentfile?autodive=0 androidx-documentfile = { strictly = "1.1.0-alpha01" } # 1.1.0-alpha02 in AOSP but isn't released -# https://android.googlesource.com/platform/prebuilts/sdk/+/android-14.0.0_r53/current/androidx/m2repository/androidx/work/work-runtime-ktx?autodive=0 -androidx-work-runtime = { strictly = "2.10.0-alpha01" } +# https://android.googlesource.com/platform/prebuilts/sdk/+/android-15.0.0_r1/current/androidx/m2repository/androidx/work/work-runtime-ktx?autodive=0 +androidx-work-runtime = { strictly = "2.10.0-alpha02" } [libraries] # Kotlin standard dependencies diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 2c352119..a4b76b95 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 4573db85..44a3ef75 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,8 +1,8 @@ -#Thu May 30 09:49:42 IST 2024 +#Mon Sep 09 11:23:59 IST 2024 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionSha256Sum=d725d707bfabd4dfdc958c624003b3c80accc03f7037b5122c4b1d0ef15cecab -distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip +distributionSha256Sum=5b9c5eb3f9fc2c94abaea57d90bd78747ca117ddbbf96c859d3741181a12bf2a +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME