From 8ce79f4195e97aa0680c1b145fdd540a75bb3057 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Fri, 6 Sep 2024 10:48:10 -0300 Subject: [PATCH] Add protobuf-kotlin-lite and use new builders --- Android.bp | 3 + app/build.gradle.kts | 6 + .../stevesoltys/seedvault/proto/SnapshotKt.kt | 933 ++++++++++++++++++ .../seedvault/worker/IconManagerTest.kt | 4 +- .../seedvault/metadata/Metadata.kt | 2 +- .../seedvault/transport/backup/BlobCreator.kt | 11 +- .../transport/backup/SnapshotCreator.kt | 60 +- .../stevesoltys/seedvault/worker/ApkBackup.kt | 25 +- .../restore/AppSelectionManagerTest.kt | 8 - .../restore/install/ApkBackupRestoreTest.kt | 41 +- .../restore/install/ApkRestoreTest.kt | 94 +- .../restore/install/ApkRestoreV1Test.kt | 3 - .../transport/SnapshotManagerTest.kt | 12 +- .../seedvault/transport/TransportTest.kt | 53 + .../transport/backup/KVBackupTest.kt | 3 +- .../restore/RestoreCoordinatorTest.kt | 1 - .../seedvault/worker/ApkBackupTest.kt | 28 +- libs/Android.bp | 6 + libs/protobuf-kotlin-lite-3.21.12.jar | Bin 0 -> 164848 bytes 19 files changed, 1112 insertions(+), 181 deletions(-) create mode 100644 app/build/generated/source/proto/debug/kotlin/com/stevesoltys/seedvault/proto/SnapshotKt.kt create mode 100644 libs/protobuf-kotlin-lite-3.21.12.jar diff --git a/Android.bp b/Android.bp index e5cfe7a0..3bd010f4 100644 --- a/Android.bp +++ b/Android.bp @@ -9,6 +9,8 @@ android_app { "app/src/main/java/**/*.kt", "app/src/main/java/**/*.java", "app/src/main/proto/*.proto", + // as of Android 15, there is no way to pass --kotlin_out to aprotoc compiler + "app/build/generated/source/proto/debug/kotlin/com/stevesoltys/seedvault/proto/*.kt", ], resource_dirs: [ "app/src/main/res", @@ -33,6 +35,7 @@ android_app { "kotlinx-coroutines-android", "kotlinx-coroutines-core", // app backup related libs + "seedvault-lib-protobuf-kotlin-lite", "seedvault-lib-kotlin-logging-jvm", "seedvault-lib-chunker", "seedvault-lib-zstd-jni", diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 22e6af61..db81278f 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -111,6 +111,9 @@ android { id("java") { option("lite") } + id("kotlin") { + option("lite") + } } } } @@ -177,6 +180,9 @@ dependencies { implementation(fileTree("${rootProject.rootDir}/libs/koin-android").include("*.jar")) implementation(fileTree("${rootProject.rootDir}/libs/koin-android").include("*.aar")) + implementation( + fileTree("${rootProject.rootDir}/libs").include("protobuf-kotlin-lite-3.21.12.jar") + ) implementation(fileTree("${rootProject.rootDir}/libs").include("seedvault-chunker-0.1.jar")) implementation(fileTree("${rootProject.rootDir}/libs").include("zstd-jni-1.5.6-5.aar")) implementation(fileTree("${rootProject.rootDir}/libs").include("kotlin-bip39-jvm-1.0.6.jar")) diff --git a/app/build/generated/source/proto/debug/kotlin/com/stevesoltys/seedvault/proto/SnapshotKt.kt b/app/build/generated/source/proto/debug/kotlin/com/stevesoltys/seedvault/proto/SnapshotKt.kt new file mode 100644 index 00000000..e9ec0f04 --- /dev/null +++ b/app/build/generated/source/proto/debug/kotlin/com/stevesoltys/seedvault/proto/SnapshotKt.kt @@ -0,0 +1,933 @@ +//Generated by the protocol buffer compiler. DO NOT EDIT! +// source: snapshot.proto + +package com.stevesoltys.seedvault.proto; + +@kotlin.jvm.JvmName("-initializesnapshot") +public inline fun snapshot(block: com.stevesoltys.seedvault.proto.SnapshotKt.Dsl.() -> kotlin.Unit): com.stevesoltys.seedvault.proto.Snapshot = + com.stevesoltys.seedvault.proto.SnapshotKt.Dsl._create(com.stevesoltys.seedvault.proto.Snapshot.newBuilder()).apply { block() }._build() +public object SnapshotKt { + @kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + @com.google.protobuf.kotlin.ProtoDslMarker + public class Dsl private constructor( + private val _builder: com.stevesoltys.seedvault.proto.Snapshot.Builder + ) { + public companion object { + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _create(builder: com.stevesoltys.seedvault.proto.Snapshot.Builder): Dsl = Dsl(builder) + } + + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _build(): com.stevesoltys.seedvault.proto.Snapshot = _builder.build() + + /** + * uint32 version = 1; + */ + public var version: kotlin.Int + @JvmName("getVersion") + get() = _builder.getVersion() + @JvmName("setVersion") + set(value) { + _builder.setVersion(value) + } + /** + * uint32 version = 1; + */ + public fun clearVersion() { + _builder.clearVersion() + } + + /** + * uint64 token = 2; + */ + public var token: kotlin.Long + @JvmName("getToken") + get() = _builder.getToken() + @JvmName("setToken") + set(value) { + _builder.setToken(value) + } + /** + * uint64 token = 2; + */ + public fun clearToken() { + _builder.clearToken() + } + + /** + * string name = 3; + */ + public var name: kotlin.String + @JvmName("getName") + get() = _builder.getName() + @JvmName("setName") + set(value) { + _builder.setName(value) + } + /** + * string name = 3; + */ + public fun clearName() { + _builder.clearName() + } + + /** + * string androidId = 4; + */ + public var androidId: kotlin.String + @JvmName("getAndroidId") + get() = _builder.getAndroidId() + @JvmName("setAndroidId") + set(value) { + _builder.setAndroidId(value) + } + /** + * string androidId = 4; + */ + public fun clearAndroidId() { + _builder.clearAndroidId() + } + + /** + * uint32 sdkInt = 5; + */ + public var sdkInt: kotlin.Int + @JvmName("getSdkInt") + get() = _builder.getSdkInt() + @JvmName("setSdkInt") + set(value) { + _builder.setSdkInt(value) + } + /** + * uint32 sdkInt = 5; + */ + public fun clearSdkInt() { + _builder.clearSdkInt() + } + + /** + * string androidIncremental = 6; + */ + public var androidIncremental: kotlin.String + @JvmName("getAndroidIncremental") + get() = _builder.getAndroidIncremental() + @JvmName("setAndroidIncremental") + set(value) { + _builder.setAndroidIncremental(value) + } + /** + * string androidIncremental = 6; + */ + public fun clearAndroidIncremental() { + _builder.clearAndroidIncremental() + } + + /** + * bool d2d = 7; + */ + public var d2D: kotlin.Boolean + @JvmName("getD2D") + get() = _builder.getD2D() + @JvmName("setD2D") + set(value) { + _builder.setD2D(value) + } + /** + * bool d2d = 7; + */ + public fun clearD2D() { + _builder.clearD2D() + } + + /** + * An uninstantiable, behaviorless type to represent the field in + * generics. + */ + @kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + public class AppsProxy private constructor() : com.google.protobuf.kotlin.DslProxy() + /** + * map<string, .com.stevesoltys.seedvault.proto.Snapshot.App> apps = 8; + */ + public val apps: com.google.protobuf.kotlin.DslMap + @kotlin.jvm.JvmSynthetic + @JvmName("getAppsMap") + get() = com.google.protobuf.kotlin.DslMap( + _builder.getAppsMap() + ) + /** + * map<string, .com.stevesoltys.seedvault.proto.Snapshot.App> apps = 8; + */ + @JvmName("putApps") + public fun com.google.protobuf.kotlin.DslMap + .put(key: kotlin.String, value: com.stevesoltys.seedvault.proto.Snapshot.App) { + _builder.putApps(key, value) + } + /** + * map<string, .com.stevesoltys.seedvault.proto.Snapshot.App> apps = 8; + */ + @kotlin.jvm.JvmSynthetic + @JvmName("setApps") + @Suppress("NOTHING_TO_INLINE") + public inline operator fun com.google.protobuf.kotlin.DslMap + .set(key: kotlin.String, value: com.stevesoltys.seedvault.proto.Snapshot.App) { + put(key, value) + } + /** + * map<string, .com.stevesoltys.seedvault.proto.Snapshot.App> apps = 8; + */ + @kotlin.jvm.JvmSynthetic + @JvmName("removeApps") + public fun com.google.protobuf.kotlin.DslMap + .remove(key: kotlin.String) { + _builder.removeApps(key) + } + /** + * map<string, .com.stevesoltys.seedvault.proto.Snapshot.App> apps = 8; + */ + @kotlin.jvm.JvmSynthetic + @JvmName("putAllApps") + public fun com.google.protobuf.kotlin.DslMap + .putAll(map: kotlin.collections.Map) { + _builder.putAllApps(map) + } + /** + * map<string, .com.stevesoltys.seedvault.proto.Snapshot.App> apps = 8; + */ + @kotlin.jvm.JvmSynthetic + @JvmName("clearApps") + public fun com.google.protobuf.kotlin.DslMap + .clear() { + _builder.clearApps() + } + + /** + * An uninstantiable, behaviorless type to represent the field in + * generics. + */ + @kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + public class IconChunkIdsProxy private constructor() : com.google.protobuf.kotlin.DslProxy() + /** + * repeated bytes iconChunkIds = 9; + */ + public val iconChunkIds: com.google.protobuf.kotlin.DslList + @kotlin.jvm.JvmSynthetic + get() = com.google.protobuf.kotlin.DslList( + _builder.getIconChunkIdsList() + ) + /** + * repeated bytes iconChunkIds = 9; + * @param value The iconChunkIds to add. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("addIconChunkIds") + public fun com.google.protobuf.kotlin.DslList.add(value: com.google.protobuf.ByteString) { + _builder.addIconChunkIds(value) + }/** + * repeated bytes iconChunkIds = 9; + * @param value The iconChunkIds to add. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("plusAssignIconChunkIds") + @Suppress("NOTHING_TO_INLINE") + public inline operator fun com.google.protobuf.kotlin.DslList.plusAssign(value: com.google.protobuf.ByteString) { + add(value) + }/** + * repeated bytes iconChunkIds = 9; + * @param values The iconChunkIds to add. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("addAllIconChunkIds") + public fun com.google.protobuf.kotlin.DslList.addAll(values: kotlin.collections.Iterable) { + _builder.addAllIconChunkIds(values) + }/** + * repeated bytes iconChunkIds = 9; + * @param values The iconChunkIds to add. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("plusAssignAllIconChunkIds") + @Suppress("NOTHING_TO_INLINE") + public inline operator fun com.google.protobuf.kotlin.DslList.plusAssign(values: kotlin.collections.Iterable) { + addAll(values) + }/** + * repeated bytes iconChunkIds = 9; + * @param index The index to set the value at. + * @param value The iconChunkIds to set. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("setIconChunkIds") + public operator fun com.google.protobuf.kotlin.DslList.set(index: kotlin.Int, value: com.google.protobuf.ByteString) { + _builder.setIconChunkIds(index, value) + }/** + * repeated bytes iconChunkIds = 9; + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("clearIconChunkIds") + public fun com.google.protobuf.kotlin.DslList.clear() { + _builder.clearIconChunkIds() + } + /** + * An uninstantiable, behaviorless type to represent the field in + * generics. + */ + @kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + public class BlobsProxy private constructor() : com.google.protobuf.kotlin.DslProxy() + /** + * map<string, .com.stevesoltys.seedvault.proto.Snapshot.Blob> blobs = 10; + */ + public val blobs: com.google.protobuf.kotlin.DslMap + @kotlin.jvm.JvmSynthetic + @JvmName("getBlobsMap") + get() = com.google.protobuf.kotlin.DslMap( + _builder.getBlobsMap() + ) + /** + * map<string, .com.stevesoltys.seedvault.proto.Snapshot.Blob> blobs = 10; + */ + @JvmName("putBlobs") + public fun com.google.protobuf.kotlin.DslMap + .put(key: kotlin.String, value: com.stevesoltys.seedvault.proto.Snapshot.Blob) { + _builder.putBlobs(key, value) + } + /** + * map<string, .com.stevesoltys.seedvault.proto.Snapshot.Blob> blobs = 10; + */ + @kotlin.jvm.JvmSynthetic + @JvmName("setBlobs") + @Suppress("NOTHING_TO_INLINE") + public inline operator fun com.google.protobuf.kotlin.DslMap + .set(key: kotlin.String, value: com.stevesoltys.seedvault.proto.Snapshot.Blob) { + put(key, value) + } + /** + * map<string, .com.stevesoltys.seedvault.proto.Snapshot.Blob> blobs = 10; + */ + @kotlin.jvm.JvmSynthetic + @JvmName("removeBlobs") + public fun com.google.protobuf.kotlin.DslMap + .remove(key: kotlin.String) { + _builder.removeBlobs(key) + } + /** + * map<string, .com.stevesoltys.seedvault.proto.Snapshot.Blob> blobs = 10; + */ + @kotlin.jvm.JvmSynthetic + @JvmName("putAllBlobs") + public fun com.google.protobuf.kotlin.DslMap + .putAll(map: kotlin.collections.Map) { + _builder.putAllBlobs(map) + } + /** + * map<string, .com.stevesoltys.seedvault.proto.Snapshot.Blob> blobs = 10; + */ + @kotlin.jvm.JvmSynthetic + @JvmName("clearBlobs") + public fun com.google.protobuf.kotlin.DslMap + .clear() { + _builder.clearBlobs() + } + } + @kotlin.jvm.JvmName("-initializeapp") + public inline fun app(block: com.stevesoltys.seedvault.proto.SnapshotKt.AppKt.Dsl.() -> kotlin.Unit): com.stevesoltys.seedvault.proto.Snapshot.App = + com.stevesoltys.seedvault.proto.SnapshotKt.AppKt.Dsl._create(com.stevesoltys.seedvault.proto.Snapshot.App.newBuilder()).apply { block() }._build() + public object AppKt { + @kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + @com.google.protobuf.kotlin.ProtoDslMarker + public class Dsl private constructor( + private val _builder: com.stevesoltys.seedvault.proto.Snapshot.App.Builder + ) { + public companion object { + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _create(builder: com.stevesoltys.seedvault.proto.Snapshot.App.Builder): Dsl = Dsl(builder) + } + + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _build(): com.stevesoltys.seedvault.proto.Snapshot.App = _builder.build() + + /** + * uint64 time = 1; + */ + public var time: kotlin.Long + @JvmName("getTime") + get() = _builder.getTime() + @JvmName("setTime") + set(value) { + _builder.setTime(value) + } + /** + * uint64 time = 1; + */ + public fun clearTime() { + _builder.clearTime() + } + + /** + * string state = 2; + */ + public var state: kotlin.String + @JvmName("getState") + get() = _builder.getState() + @JvmName("setState") + set(value) { + _builder.setState(value) + } + /** + * string state = 2; + */ + public fun clearState() { + _builder.clearState() + } + + /** + * .com.stevesoltys.seedvault.proto.Snapshot.BackupType type = 3; + */ + public var type: com.stevesoltys.seedvault.proto.Snapshot.BackupType + @JvmName("getType") + get() = _builder.getType() + @JvmName("setType") + set(value) { + _builder.setType(value) + } + /** + * .com.stevesoltys.seedvault.proto.Snapshot.BackupType type = 3; + */ + public fun clearType() { + _builder.clearType() + } + + /** + * string name = 4; + */ + public var name: kotlin.String + @JvmName("getName") + get() = _builder.getName() + @JvmName("setName") + set(value) { + _builder.setName(value) + } + /** + * string name = 4; + */ + public fun clearName() { + _builder.clearName() + } + + /** + * bool system = 5; + */ + public var system: kotlin.Boolean + @JvmName("getSystem") + get() = _builder.getSystem() + @JvmName("setSystem") + set(value) { + _builder.setSystem(value) + } + /** + * bool system = 5; + */ + public fun clearSystem() { + _builder.clearSystem() + } + + /** + * bool launchableSystemApp = 6; + */ + public var launchableSystemApp: kotlin.Boolean + @JvmName("getLaunchableSystemApp") + get() = _builder.getLaunchableSystemApp() + @JvmName("setLaunchableSystemApp") + set(value) { + _builder.setLaunchableSystemApp(value) + } + /** + * bool launchableSystemApp = 6; + */ + public fun clearLaunchableSystemApp() { + _builder.clearLaunchableSystemApp() + } + + /** + * An uninstantiable, behaviorless type to represent the field in + * generics. + */ + @kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + public class ChunkIdsProxy private constructor() : com.google.protobuf.kotlin.DslProxy() + /** + * repeated bytes chunkIds = 7; + */ + public val chunkIds: com.google.protobuf.kotlin.DslList + @kotlin.jvm.JvmSynthetic + get() = com.google.protobuf.kotlin.DslList( + _builder.getChunkIdsList() + ) + /** + * repeated bytes chunkIds = 7; + * @param value The chunkIds to add. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("addChunkIds") + public fun com.google.protobuf.kotlin.DslList.add(value: com.google.protobuf.ByteString) { + _builder.addChunkIds(value) + }/** + * repeated bytes chunkIds = 7; + * @param value The chunkIds to add. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("plusAssignChunkIds") + @Suppress("NOTHING_TO_INLINE") + public inline operator fun com.google.protobuf.kotlin.DslList.plusAssign(value: com.google.protobuf.ByteString) { + add(value) + }/** + * repeated bytes chunkIds = 7; + * @param values The chunkIds to add. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("addAllChunkIds") + public fun com.google.protobuf.kotlin.DslList.addAll(values: kotlin.collections.Iterable) { + _builder.addAllChunkIds(values) + }/** + * repeated bytes chunkIds = 7; + * @param values The chunkIds to add. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("plusAssignAllChunkIds") + @Suppress("NOTHING_TO_INLINE") + public inline operator fun com.google.protobuf.kotlin.DslList.plusAssign(values: kotlin.collections.Iterable) { + addAll(values) + }/** + * repeated bytes chunkIds = 7; + * @param index The index to set the value at. + * @param value The chunkIds to set. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("setChunkIds") + public operator fun com.google.protobuf.kotlin.DslList.set(index: kotlin.Int, value: com.google.protobuf.ByteString) { + _builder.setChunkIds(index, value) + }/** + * repeated bytes chunkIds = 7; + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("clearChunkIds") + public fun com.google.protobuf.kotlin.DslList.clear() { + _builder.clearChunkIds() + } + /** + * .com.stevesoltys.seedvault.proto.Snapshot.Apk apk = 8; + */ + public var apk: com.stevesoltys.seedvault.proto.Snapshot.Apk + @JvmName("getApk") + get() = _builder.getApk() + @JvmName("setApk") + set(value) { + _builder.setApk(value) + } + /** + * .com.stevesoltys.seedvault.proto.Snapshot.Apk apk = 8; + */ + public fun clearApk() { + _builder.clearApk() + } + /** + * .com.stevesoltys.seedvault.proto.Snapshot.Apk apk = 8; + * @return Whether the apk field is set. + */ + public fun hasApk(): kotlin.Boolean { + return _builder.hasApk() + } + } + } + @kotlin.jvm.JvmName("-initializeapk") + public inline fun apk(block: com.stevesoltys.seedvault.proto.SnapshotKt.ApkKt.Dsl.() -> kotlin.Unit): com.stevesoltys.seedvault.proto.Snapshot.Apk = + com.stevesoltys.seedvault.proto.SnapshotKt.ApkKt.Dsl._create(com.stevesoltys.seedvault.proto.Snapshot.Apk.newBuilder()).apply { block() }._build() + public object ApkKt { + @kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + @com.google.protobuf.kotlin.ProtoDslMarker + public class Dsl private constructor( + private val _builder: com.stevesoltys.seedvault.proto.Snapshot.Apk.Builder + ) { + public companion object { + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _create(builder: com.stevesoltys.seedvault.proto.Snapshot.Apk.Builder): Dsl = Dsl(builder) + } + + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _build(): com.stevesoltys.seedvault.proto.Snapshot.Apk = _builder.build() + + /** + *
+       **
+       * Attention: Has default value of 0
+       * 
+ * + * uint64 versionCode = 1; + */ + public var versionCode: kotlin.Long + @JvmName("getVersionCode") + get() = _builder.getVersionCode() + @JvmName("setVersionCode") + set(value) { + _builder.setVersionCode(value) + } + /** + *
+       **
+       * Attention: Has default value of 0
+       * 
+ * + * uint64 versionCode = 1; + */ + public fun clearVersionCode() { + _builder.clearVersionCode() + } + + /** + * string installer = 2; + */ + public var installer: kotlin.String + @JvmName("getInstaller") + get() = _builder.getInstaller() + @JvmName("setInstaller") + set(value) { + _builder.setInstaller(value) + } + /** + * string installer = 2; + */ + public fun clearInstaller() { + _builder.clearInstaller() + } + + /** + * An uninstantiable, behaviorless type to represent the field in + * generics. + */ + @kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + public class SignaturesProxy private constructor() : com.google.protobuf.kotlin.DslProxy() + /** + * repeated bytes signatures = 3; + */ + public val signatures: com.google.protobuf.kotlin.DslList + @kotlin.jvm.JvmSynthetic + get() = com.google.protobuf.kotlin.DslList( + _builder.getSignaturesList() + ) + /** + * repeated bytes signatures = 3; + * @param value The signatures to add. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("addSignatures") + public fun com.google.protobuf.kotlin.DslList.add(value: com.google.protobuf.ByteString) { + _builder.addSignatures(value) + }/** + * repeated bytes signatures = 3; + * @param value The signatures to add. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("plusAssignSignatures") + @Suppress("NOTHING_TO_INLINE") + public inline operator fun com.google.protobuf.kotlin.DslList.plusAssign(value: com.google.protobuf.ByteString) { + add(value) + }/** + * repeated bytes signatures = 3; + * @param values The signatures to add. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("addAllSignatures") + public fun com.google.protobuf.kotlin.DslList.addAll(values: kotlin.collections.Iterable) { + _builder.addAllSignatures(values) + }/** + * repeated bytes signatures = 3; + * @param values The signatures to add. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("plusAssignAllSignatures") + @Suppress("NOTHING_TO_INLINE") + public inline operator fun com.google.protobuf.kotlin.DslList.plusAssign(values: kotlin.collections.Iterable) { + addAll(values) + }/** + * repeated bytes signatures = 3; + * @param index The index to set the value at. + * @param value The signatures to set. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("setSignatures") + public operator fun com.google.protobuf.kotlin.DslList.set(index: kotlin.Int, value: com.google.protobuf.ByteString) { + _builder.setSignatures(index, value) + }/** + * repeated bytes signatures = 3; + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("clearSignatures") + public fun com.google.protobuf.kotlin.DslList.clear() { + _builder.clearSignatures() + } + /** + * An uninstantiable, behaviorless type to represent the field in + * generics. + */ + @kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + public class SplitsProxy private constructor() : com.google.protobuf.kotlin.DslProxy() + /** + * repeated .com.stevesoltys.seedvault.proto.Snapshot.Split splits = 4; + */ + public val splits: com.google.protobuf.kotlin.DslList + @kotlin.jvm.JvmSynthetic + get() = com.google.protobuf.kotlin.DslList( + _builder.getSplitsList() + ) + /** + * repeated .com.stevesoltys.seedvault.proto.Snapshot.Split splits = 4; + * @param value The splits to add. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("addSplits") + public fun com.google.protobuf.kotlin.DslList.add(value: com.stevesoltys.seedvault.proto.Snapshot.Split) { + _builder.addSplits(value) + } + /** + * repeated .com.stevesoltys.seedvault.proto.Snapshot.Split splits = 4; + * @param value The splits to add. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("plusAssignSplits") + @Suppress("NOTHING_TO_INLINE") + public inline operator fun com.google.protobuf.kotlin.DslList.plusAssign(value: com.stevesoltys.seedvault.proto.Snapshot.Split) { + add(value) + } + /** + * repeated .com.stevesoltys.seedvault.proto.Snapshot.Split splits = 4; + * @param values The splits to add. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("addAllSplits") + public fun com.google.protobuf.kotlin.DslList.addAll(values: kotlin.collections.Iterable) { + _builder.addAllSplits(values) + } + /** + * repeated .com.stevesoltys.seedvault.proto.Snapshot.Split splits = 4; + * @param values The splits to add. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("plusAssignAllSplits") + @Suppress("NOTHING_TO_INLINE") + public inline operator fun com.google.protobuf.kotlin.DslList.plusAssign(values: kotlin.collections.Iterable) { + addAll(values) + } + /** + * repeated .com.stevesoltys.seedvault.proto.Snapshot.Split splits = 4; + * @param index The index to set the value at. + * @param value The splits to set. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("setSplits") + public operator fun com.google.protobuf.kotlin.DslList.set(index: kotlin.Int, value: com.stevesoltys.seedvault.proto.Snapshot.Split) { + _builder.setSplits(index, value) + } + /** + * repeated .com.stevesoltys.seedvault.proto.Snapshot.Split splits = 4; + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("clearSplits") + public fun com.google.protobuf.kotlin.DslList.clear() { + _builder.clearSplits() + } + } + } + @kotlin.jvm.JvmName("-initializesplit") + public inline fun split(block: com.stevesoltys.seedvault.proto.SnapshotKt.SplitKt.Dsl.() -> kotlin.Unit): com.stevesoltys.seedvault.proto.Snapshot.Split = + com.stevesoltys.seedvault.proto.SnapshotKt.SplitKt.Dsl._create(com.stevesoltys.seedvault.proto.Snapshot.Split.newBuilder()).apply { block() }._build() + public object SplitKt { + @kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + @com.google.protobuf.kotlin.ProtoDslMarker + public class Dsl private constructor( + private val _builder: com.stevesoltys.seedvault.proto.Snapshot.Split.Builder + ) { + public companion object { + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _create(builder: com.stevesoltys.seedvault.proto.Snapshot.Split.Builder): Dsl = Dsl(builder) + } + + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _build(): com.stevesoltys.seedvault.proto.Snapshot.Split = _builder.build() + + /** + * string name = 1; + */ + public var name: kotlin.String + @JvmName("getName") + get() = _builder.getName() + @JvmName("setName") + set(value) { + _builder.setName(value) + } + /** + * string name = 1; + */ + public fun clearName() { + _builder.clearName() + } + + /** + * An uninstantiable, behaviorless type to represent the field in + * generics. + */ + @kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + public class ChunkIdsProxy private constructor() : com.google.protobuf.kotlin.DslProxy() + /** + * repeated bytes chunkIds = 2; + */ + public val chunkIds: com.google.protobuf.kotlin.DslList + @kotlin.jvm.JvmSynthetic + get() = com.google.protobuf.kotlin.DslList( + _builder.getChunkIdsList() + ) + /** + * repeated bytes chunkIds = 2; + * @param value The chunkIds to add. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("addChunkIds") + public fun com.google.protobuf.kotlin.DslList.add(value: com.google.protobuf.ByteString) { + _builder.addChunkIds(value) + }/** + * repeated bytes chunkIds = 2; + * @param value The chunkIds to add. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("plusAssignChunkIds") + @Suppress("NOTHING_TO_INLINE") + public inline operator fun com.google.protobuf.kotlin.DslList.plusAssign(value: com.google.protobuf.ByteString) { + add(value) + }/** + * repeated bytes chunkIds = 2; + * @param values The chunkIds to add. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("addAllChunkIds") + public fun com.google.protobuf.kotlin.DslList.addAll(values: kotlin.collections.Iterable) { + _builder.addAllChunkIds(values) + }/** + * repeated bytes chunkIds = 2; + * @param values The chunkIds to add. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("plusAssignAllChunkIds") + @Suppress("NOTHING_TO_INLINE") + public inline operator fun com.google.protobuf.kotlin.DslList.plusAssign(values: kotlin.collections.Iterable) { + addAll(values) + }/** + * repeated bytes chunkIds = 2; + * @param index The index to set the value at. + * @param value The chunkIds to set. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("setChunkIds") + public operator fun com.google.protobuf.kotlin.DslList.set(index: kotlin.Int, value: com.google.protobuf.ByteString) { + _builder.setChunkIds(index, value) + }/** + * repeated bytes chunkIds = 2; + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("clearChunkIds") + public fun com.google.protobuf.kotlin.DslList.clear() { + _builder.clearChunkIds() + }} + } + @kotlin.jvm.JvmName("-initializeblob") + public inline fun blob(block: com.stevesoltys.seedvault.proto.SnapshotKt.BlobKt.Dsl.() -> kotlin.Unit): com.stevesoltys.seedvault.proto.Snapshot.Blob = + com.stevesoltys.seedvault.proto.SnapshotKt.BlobKt.Dsl._create(com.stevesoltys.seedvault.proto.Snapshot.Blob.newBuilder()).apply { block() }._build() + public object BlobKt { + @kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + @com.google.protobuf.kotlin.ProtoDslMarker + public class Dsl private constructor( + private val _builder: com.stevesoltys.seedvault.proto.Snapshot.Blob.Builder + ) { + public companion object { + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _create(builder: com.stevesoltys.seedvault.proto.Snapshot.Blob.Builder): Dsl = Dsl(builder) + } + + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _build(): com.stevesoltys.seedvault.proto.Snapshot.Blob = _builder.build() + + /** + * bytes id = 1; + */ + public var id: com.google.protobuf.ByteString + @JvmName("getId") + get() = _builder.getId() + @JvmName("setId") + set(value) { + _builder.setId(value) + } + /** + * bytes id = 1; + */ + public fun clearId() { + _builder.clearId() + } + + /** + * uint32 length = 2; + */ + public var length: kotlin.Int + @JvmName("getLength") + get() = _builder.getLength() + @JvmName("setLength") + set(value) { + _builder.setLength(value) + } + /** + * uint32 length = 2; + */ + public fun clearLength() { + _builder.clearLength() + } + + /** + * uint32 uncompressedLength = 3; + */ + public var uncompressedLength: kotlin.Int + @JvmName("getUncompressedLength") + get() = _builder.getUncompressedLength() + @JvmName("setUncompressedLength") + set(value) { + _builder.setUncompressedLength(value) + } + /** + * uint32 uncompressedLength = 3; + */ + public fun clearUncompressedLength() { + _builder.clearUncompressedLength() + } + } + } +} +public inline fun com.stevesoltys.seedvault.proto.Snapshot.copy(block: com.stevesoltys.seedvault.proto.SnapshotKt.Dsl.() -> kotlin.Unit): com.stevesoltys.seedvault.proto.Snapshot = + com.stevesoltys.seedvault.proto.SnapshotKt.Dsl._create(this.toBuilder()).apply { block() }._build() + +public inline fun com.stevesoltys.seedvault.proto.Snapshot.App.copy(block: com.stevesoltys.seedvault.proto.SnapshotKt.AppKt.Dsl.() -> kotlin.Unit): com.stevesoltys.seedvault.proto.Snapshot.App = + com.stevesoltys.seedvault.proto.SnapshotKt.AppKt.Dsl._create(this.toBuilder()).apply { block() }._build() + +public val com.stevesoltys.seedvault.proto.Snapshot.AppOrBuilder.apkOrNull: com.stevesoltys.seedvault.proto.Snapshot.Apk? + get() = if (hasApk()) getApk() else null + +public inline fun com.stevesoltys.seedvault.proto.Snapshot.Apk.copy(block: com.stevesoltys.seedvault.proto.SnapshotKt.ApkKt.Dsl.() -> kotlin.Unit): com.stevesoltys.seedvault.proto.Snapshot.Apk = + com.stevesoltys.seedvault.proto.SnapshotKt.ApkKt.Dsl._create(this.toBuilder()).apply { block() }._build() + +public inline fun com.stevesoltys.seedvault.proto.Snapshot.Split.copy(block: com.stevesoltys.seedvault.proto.SnapshotKt.SplitKt.Dsl.() -> kotlin.Unit): com.stevesoltys.seedvault.proto.Snapshot.Split = + com.stevesoltys.seedvault.proto.SnapshotKt.SplitKt.Dsl._create(this.toBuilder()).apply { block() }._build() + +public inline fun com.stevesoltys.seedvault.proto.Snapshot.Blob.copy(block: com.stevesoltys.seedvault.proto.SnapshotKt.BlobKt.Dsl.() -> kotlin.Unit): com.stevesoltys.seedvault.proto.Snapshot.Blob = + com.stevesoltys.seedvault.proto.SnapshotKt.BlobKt.Dsl._create(this.toBuilder()).apply { block() }._build() + diff --git a/app/src/androidTest/java/com/stevesoltys/seedvault/worker/IconManagerTest.kt b/app/src/androidTest/java/com/stevesoltys/seedvault/worker/IconManagerTest.kt index a16413e3..aec46369 100644 --- a/app/src/androidTest/java/com/stevesoltys/seedvault/worker/IconManagerTest.kt +++ b/app/src/androidTest/java/com/stevesoltys/seedvault/worker/IconManagerTest.kt @@ -9,7 +9,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.MediumTest import androidx.test.platform.app.InstrumentationRegistry import com.google.protobuf.ByteString -import com.stevesoltys.seedvault.proto.Snapshot +import com.stevesoltys.seedvault.proto.SnapshotKt.blob import com.stevesoltys.seedvault.transport.backup.AppBackupManager import com.stevesoltys.seedvault.transport.backup.BackupData import com.stevesoltys.seedvault.transport.backup.BackupReceiver @@ -66,7 +66,7 @@ class IconManagerTest : KoinComponent { val chunkId = Random.nextBytes(32).toHexString() val chunkList = listOf(chunkId) val blobId = Random.nextBytes(32).toHexString() - val blob = Snapshot.Blob.newBuilder().setId(ByteString.fromHex(blobId)).build() + val blob = blob { id = ByteString.fromHex(blobId) } // upload icons and capture plaintext bytes coEvery { backupReceiver.addBytes(capture(output)) } just Runs diff --git a/app/src/main/java/com/stevesoltys/seedvault/metadata/Metadata.kt b/app/src/main/java/com/stevesoltys/seedvault/metadata/Metadata.kt index 4311dc8f..ccf3d6ca 100644 --- a/app/src/main/java/com/stevesoltys/seedvault/metadata/Metadata.kt +++ b/app/src/main/java/com/stevesoltys/seedvault/metadata/Metadata.kt @@ -115,7 +115,7 @@ data class PackageMetadata( system = app.system, isLaunchableSystemApp = app.launchableSystemApp, version = app.apk.versionCode, - installer = app.apk.installer, + installer = app.apk.installer.takeIf { it.isNotEmpty() }, baseApkChunkIds = run { val baseChunk = app.apk.splitsList.find { it.name == BASE_SPLIT } if (baseChunk == null || baseChunk.chunkIdsCount == 0) { diff --git a/app/src/main/java/com/stevesoltys/seedvault/transport/backup/BlobCreator.kt b/app/src/main/java/com/stevesoltys/seedvault/transport/backup/BlobCreator.kt index 1a86158b..59ebeefb 100644 --- a/app/src/main/java/com/stevesoltys/seedvault/transport/backup/BlobCreator.kt +++ b/app/src/main/java/com/stevesoltys/seedvault/transport/backup/BlobCreator.kt @@ -11,6 +11,7 @@ import com.stevesoltys.seedvault.backend.BackendManager import com.stevesoltys.seedvault.crypto.Crypto import com.stevesoltys.seedvault.header.VERSION import com.stevesoltys.seedvault.proto.Snapshot.Blob +import com.stevesoltys.seedvault.proto.SnapshotKt.blob import okio.Buffer import okio.buffer import okio.sink @@ -43,10 +44,10 @@ internal class BlobCreator( outputBuffer.flush() length } - return Blob.newBuilder() - .setId(ByteString.copyFrom(sha256ByteString.asByteBuffer())) - .setLength(size.toInt()) - .setUncompressedLength(chunk.length) - .build() + return blob { + id = ByteString.copyFrom(sha256ByteString.asByteBuffer()) + length = size.toInt() + uncompressedLength = chunk.length + } } } diff --git a/app/src/main/java/com/stevesoltys/seedvault/transport/backup/SnapshotCreator.kt b/app/src/main/java/com/stevesoltys/seedvault/transport/backup/SnapshotCreator.kt index b5151552..4c5ad3d6 100644 --- a/app/src/main/java/com/stevesoltys/seedvault/transport/backup/SnapshotCreator.kt +++ b/app/src/main/java/com/stevesoltys/seedvault/transport/backup/SnapshotCreator.kt @@ -15,6 +15,7 @@ import android.provider.Settings import android.provider.Settings.Secure.ANDROID_ID import com.google.protobuf.ByteString import com.stevesoltys.seedvault.Clock +import com.stevesoltys.seedvault.header.VERSION import com.stevesoltys.seedvault.metadata.BackupType import com.stevesoltys.seedvault.metadata.PackageState.APK_AND_DATA import com.stevesoltys.seedvault.proto.Snapshot @@ -22,6 +23,7 @@ import com.stevesoltys.seedvault.proto.Snapshot.Apk import com.stevesoltys.seedvault.proto.Snapshot.App import com.stevesoltys.seedvault.proto.Snapshot.Blob import com.stevesoltys.seedvault.settings.SettingsManager +import io.github.oshai.kotlinlogging.KotlinLogging import org.calyxos.seedvault.core.backends.AppBackupFileType import org.calyxos.seedvault.core.toHexString @@ -41,8 +43,8 @@ internal class SnapshotCreator( private val settingsManager: SettingsManager, ) { + private val log = KotlinLogging.logger { } private val snapshotBuilder = Snapshot.newBuilder() - .setToken(clock.time()) private val appBuilderMap = mutableMapOf() private val blobsMap = mutableMapOf() @@ -51,37 +53,41 @@ internal class SnapshotCreator( } fun onApkBackedUp( - packageName: String, + packageInfo: PackageInfo, apk: Apk, chunkMap: Map, ) { - val appBuilder = appBuilderMap.getOrPut(packageName) { + appBuilderMap.getOrPut(packageInfo.packageName) { App.newBuilder() + }.apply { + val label = packageInfo.applicationInfo?.loadLabel(context.packageManager) + if (label != null) name = label.toString() + setApk(apk) } - appBuilder.setApk(apk) blobsMap.putAll(chunkMap) } fun onPackageBackedUp( packageInfo: PackageInfo, - type: BackupType, + backupType: BackupType, backupData: BackupData, ) { val packageName = packageInfo.packageName - val builder = appBuilderMap.getOrPut(packageName) { - App.newBuilder() - } val isSystemApp = packageInfo.isSystemApp() val chunkIds = backupData.chunks.forProto() + appBuilderMap.getOrPut(packageName) { + App.newBuilder() + }.apply { + time = clock.time() + state = APK_AND_DATA.name // TODO review those states and their usefulness for snapshot + type = backupType.forSnapshot() + val label = packageInfo.applicationInfo?.loadLabel(context.packageManager) + if (label != null) name = label.toString() + system = isSystemApp + launchableSystemApp = isSystemApp && launchableSystemApps.contains(packageName) + addAllChunkIds(chunkIds) + } blobsMap.putAll(backupData.chunkMap) - builder - .setTime(clock.time()) - .setState(APK_AND_DATA.name) - .setType(type.forSnapshot()) - .setName(packageInfo.applicationInfo?.loadLabel(context.packageManager)?.toString()) - .setSystem(isSystemApp) - .setLaunchableSystemApp(isSystemApp && launchableSystemApps.contains(packageName)) - .addAllChunkIds(chunkIds) } fun onIconsBackedUp(backupData: BackupData) { @@ -90,6 +96,7 @@ internal class SnapshotCreator( } fun finalizeSnapshot(): Snapshot { + log.info { "finalizeSnapshot()" } val userName = getUserName() val deviceName = if (userName == null) { "${Build.MANUFACTURER} ${Build.MODEL}" @@ -98,16 +105,17 @@ internal class SnapshotCreator( } @SuppressLint("HardwareIds") - val androidId = Settings.Secure.getString(context.contentResolver, ANDROID_ID) - val snapshot = snapshotBuilder - .setName(deviceName) - .setAndroidId(androidId) - .setSdkInt(Build.VERSION.SDK_INT) - .setAndroidIncremental(Build.VERSION.INCREMENTAL) - .setD2D(settingsManager.d2dBackupsEnabled()) - .putAllApps(appBuilderMap.mapValues { it.value.build() }) - .putAllBlobs(blobsMap) - .build() + val snapshot = snapshotBuilder.apply { + version = VERSION.toInt() + token = clock.time() + name = deviceName + androidId = Settings.Secure.getString(context.contentResolver, ANDROID_ID) + sdkInt = Build.VERSION.SDK_INT + androidIncremental = Build.VERSION.INCREMENTAL + d2D = settingsManager.d2dBackupsEnabled() + putAllApps(appBuilderMap.mapValues { it.value.build() }) + putAllBlobs(this@SnapshotCreator.blobsMap) + }.build() appBuilderMap.clear() snapshotBuilder.clear() return snapshot diff --git a/app/src/main/java/com/stevesoltys/seedvault/worker/ApkBackup.kt b/app/src/main/java/com/stevesoltys/seedvault/worker/ApkBackup.kt index 898cb193..1d282982 100644 --- a/app/src/main/java/com/stevesoltys/seedvault/worker/ApkBackup.kt +++ b/app/src/main/java/com/stevesoltys/seedvault/worker/ApkBackup.kt @@ -14,6 +14,7 @@ import android.util.PackageUtils.computeSha256DigestBytes import com.stevesoltys.seedvault.MAGIC_PACKAGE_MANAGER import com.stevesoltys.seedvault.metadata.PackageMetadata import com.stevesoltys.seedvault.proto.Snapshot +import com.stevesoltys.seedvault.proto.SnapshotKt.split import com.stevesoltys.seedvault.settings.SettingsManager import com.stevesoltys.seedvault.transport.SnapshotManager import com.stevesoltys.seedvault.transport.backup.AppBackupManager @@ -108,10 +109,14 @@ internal class ApkBackup( } // builder for Apk object - val apkBuilder = Snapshot.Apk.newBuilder() - .setVersionCode(version) - .setInstaller(pm.getInstallSourceInfo(packageName).installingPackageName) - .addAllSignatures(signatures.forProto()) + val apkBuilder = Snapshot.Apk.newBuilder().apply { + versionCode = version + pm.getInstallSourceInfo(packageName).installingPackageName?.let { + // protobuf doesn't support null values + installer = it + } + addAllSignatures(signatures.forProto()) + } // get an InputStream for the APK val sourceDir = packageInfo.applicationInfo?.sourceDir ?: return @@ -121,9 +126,10 @@ internal class ApkBackup( } val backupData = backupReceiver.finalize() // store base split in builder - val baseSplit = Snapshot.Split.newBuilder() - .setName(BASE_SPLIT) - .addAllChunkIds(backupData.chunks.forProto()) + val baseSplit = split { + name = BASE_SPLIT + chunkIds.addAll(backupData.chunks.forProto()) + } apkBuilder .addSplits(baseSplit) val chunkMap = backupData.chunkMap.toMutableMap() @@ -134,9 +140,8 @@ internal class ApkBackup( } else { backupSplitApks(packageInfo, chunkMap) } - apkBuilder.addAllSplits(splits) - val apk = apkBuilder.build() - snapshotCreator.onApkBackedUp(packageName, apk, chunkMap) + val apk = apkBuilder.addAllSplits(splits).build() + snapshotCreator.onApkBackedUp(packageInfo, apk, chunkMap) Log.d(TAG, "Backed up new APK of $packageName with version ${packageInfo.versionName}.") } 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 1f00e1a8..3768f501 100644 --- a/app/src/test/java/com/stevesoltys/seedvault/restore/AppSelectionManagerTest.kt +++ b/app/src/test/java/com/stevesoltys/seedvault/restore/AppSelectionManagerTest.kt @@ -14,7 +14,6 @@ import com.stevesoltys.seedvault.getRandomString import com.stevesoltys.seedvault.metadata.BackupMetadata import com.stevesoltys.seedvault.metadata.PackageMetadata import com.stevesoltys.seedvault.metadata.PackageMetadataMap -import com.stevesoltys.seedvault.proto.Snapshot import com.stevesoltys.seedvault.transport.TransportTest import com.stevesoltys.seedvault.ui.PACKAGE_NAME_CONTACTS import com.stevesoltys.seedvault.ui.PACKAGE_NAME_SETTINGS @@ -29,7 +28,6 @@ import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.coroutines.test.runTest import org.calyxos.seedvault.core.backends.Backend import org.calyxos.seedvault.core.backends.LegacyAppBackupFile -import org.calyxos.seedvault.core.toHexString import org.junit.Test import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertFalse @@ -61,12 +59,6 @@ internal class AppSelectionManagerTest : TransportTest() { token = Random.nextLong(), salt = getRandomString(), ) - private val repoId = Random.nextBytes(32).toHexString() - private val snapshot = Snapshot.newBuilder() - .setToken(token) - .putApps(packageInfo.packageName, Snapshot.App.getDefaultInstance()) - .putAllBlobs(emptyMap()) - .build() private val appSelectionManager = AppSelectionManager( context = context, 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 1be5ab32..f613fbf8 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 @@ -14,13 +14,10 @@ import android.content.pm.Signature import android.graphics.drawable.Drawable import android.util.PackageUtils import app.cash.turbine.test -import com.google.protobuf.ByteString -import com.google.protobuf.ByteString.copyFromUtf8 import com.stevesoltys.seedvault.BackupStateManager import com.stevesoltys.seedvault.assertReadEquals import com.stevesoltys.seedvault.backend.BackendManager import com.stevesoltys.seedvault.backend.LegacyStoragePlugin -import com.stevesoltys.seedvault.decodeBase64 import com.stevesoltys.seedvault.getRandomString import com.stevesoltys.seedvault.metadata.PackageMetadata import com.stevesoltys.seedvault.metadata.PackageMetadataMap @@ -31,14 +28,12 @@ import com.stevesoltys.seedvault.restore.install.ApkInstallState.SUCCEEDED import com.stevesoltys.seedvault.transport.SnapshotManager import com.stevesoltys.seedvault.transport.TransportTest import com.stevesoltys.seedvault.transport.backup.AppBackupManager -import com.stevesoltys.seedvault.transport.backup.BackupData import com.stevesoltys.seedvault.transport.backup.BackupReceiver import com.stevesoltys.seedvault.transport.backup.SnapshotCreator import com.stevesoltys.seedvault.transport.backup.hexFromProto import com.stevesoltys.seedvault.transport.restore.Loader import com.stevesoltys.seedvault.transport.restore.RestorableBackup import com.stevesoltys.seedvault.worker.ApkBackup -import com.stevesoltys.seedvault.worker.BASE_SPLIT import io.mockk.Runs import io.mockk.coEvery import io.mockk.every @@ -46,11 +41,10 @@ import io.mockk.just import io.mockk.mockk import io.mockk.mockkStatic import io.mockk.slot -import kotlinx.coroutines.ExperimentalCoroutinesApi + import kotlinx.coroutines.runBlocking import org.calyxos.seedvault.core.backends.AppBackupFileType import org.calyxos.seedvault.core.backends.Backend -import org.calyxos.seedvault.core.toHexString import org.junit.jupiter.api.Assertions.assertArrayEquals import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertFalse @@ -64,9 +58,7 @@ import java.io.File import java.io.FileInputStream import java.io.InputStream import java.nio.file.Path -import kotlin.random.Random -@ExperimentalCoroutinesApi internal class ApkBackupRestoreTest : TransportTest() { private val pm: PackageManager = mockk() @@ -108,37 +100,6 @@ internal class ApkBackupRestoreTest : TransportTest() { private val signatureBytes = byteArrayOf(0x01, 0x02, 0x03) private val signatureHash = byteArrayOf(0x03, 0x02, 0x01) private val sigs = arrayOf(Signature(signatureBytes)) - private val packageName: String = packageInfo.packageName - private val splitName = getRandomString() - private val splitBytes = byteArrayOf(0x07, 0x08, 0x09) - private val apkChunkId = Random.nextBytes(32).toHexString() - private val splitChunkId = Random.nextBytes(32).toHexString() - private val apkBlob = - Snapshot.Blob.newBuilder().setId(ByteString.copyFrom(Random.nextBytes(32))).build() - private val splitBlob = - Snapshot.Blob.newBuilder().setId(ByteString.copyFrom(Random.nextBytes(32))).build() - private val apkBackupData = BackupData(listOf(apkChunkId), mapOf(apkChunkId to apkBlob)) - private val splitBackupData = BackupData(listOf(splitChunkId), mapOf(splitChunkId to splitBlob)) - private val chunkMap = apkBackupData.chunkMap + splitBackupData.chunkMap - private val baseSplit = Snapshot.Split.newBuilder().setName(BASE_SPLIT) - .addAllChunkIds(listOf(ByteString.fromHex(apkChunkId))).build() - private val apkSplit = Snapshot.Split.newBuilder().setName(splitName) - .addAllChunkIds(listOf(ByteString.fromHex(splitChunkId))).build() - private val apk = Snapshot.Apk.newBuilder() - .setVersionCode(packageInfo.longVersionCode - 1) - .setInstaller(getRandomString()) - .addAllSignatures(mutableListOf(copyFromUtf8("AwIB".decodeBase64()))) - .addSplits(baseSplit) - .addSplits(apkSplit) - .build() - private val app = Snapshot.App.newBuilder() - .setApk(apk) - .build() - private val snapshot = Snapshot.newBuilder() - .setToken(token) - .putApps(packageName, app) - .putAllBlobs(chunkMap) - .build() private val packageMetadataMap: PackageMetadataMap = hashMapOf(packageName to PackageMetadata.fromSnapshot(app)) private val installerName = apk.installer 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 93bceb56..9765c35f 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 @@ -17,19 +17,18 @@ import android.content.pm.PackageManager.NameNotFoundException import android.graphics.drawable.Drawable import app.cash.turbine.TurbineTestContext import app.cash.turbine.test -import com.google.protobuf.ByteString -import com.google.protobuf.ByteString.copyFromUtf8 +import com.google.protobuf.ByteString.copyFrom import com.google.protobuf.ByteString.fromHex import com.stevesoltys.seedvault.BackupStateManager import com.stevesoltys.seedvault.backend.BackendManager -import com.stevesoltys.seedvault.backend.LegacyStoragePlugin -import com.stevesoltys.seedvault.decodeBase64 import com.stevesoltys.seedvault.getRandomBase64 import com.stevesoltys.seedvault.getRandomString import com.stevesoltys.seedvault.metadata.ApkSplit import com.stevesoltys.seedvault.metadata.PackageMetadata import com.stevesoltys.seedvault.metadata.PackageMetadataMap -import com.stevesoltys.seedvault.proto.Snapshot +import com.stevesoltys.seedvault.proto.SnapshotKt.blob +import com.stevesoltys.seedvault.proto.SnapshotKt.split +import com.stevesoltys.seedvault.proto.copy import com.stevesoltys.seedvault.restore.RestorableBackup import com.stevesoltys.seedvault.restore.install.ApkInstallState.FAILED import com.stevesoltys.seedvault.restore.install.ApkInstallState.FAILED_SYSTEM_APP @@ -37,10 +36,8 @@ import com.stevesoltys.seedvault.restore.install.ApkInstallState.IN_PROGRESS import com.stevesoltys.seedvault.restore.install.ApkInstallState.QUEUED import com.stevesoltys.seedvault.restore.install.ApkInstallState.SUCCEEDED import com.stevesoltys.seedvault.transport.TransportTest -import com.stevesoltys.seedvault.transport.backup.BackupData import com.stevesoltys.seedvault.transport.backup.hexFromProto import com.stevesoltys.seedvault.transport.restore.Loader -import com.stevesoltys.seedvault.worker.BASE_SPLIT import io.mockk.Runs import io.mockk.coEvery import io.mockk.every @@ -48,7 +45,6 @@ import io.mockk.just import io.mockk.mockk import io.mockk.mockkStatic import io.mockk.verifyOrder -import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.runBlocking import org.calyxos.seedvault.core.backends.AppBackupFileType import org.calyxos.seedvault.core.backends.Backend @@ -66,7 +62,6 @@ import java.io.IOException import java.nio.file.Path import kotlin.random.Random -@ExperimentalCoroutinesApi internal class ApkRestoreTest : TransportTest() { private val pm: PackageManager = mockk() @@ -78,7 +73,6 @@ internal class ApkRestoreTest : TransportTest() { private val backendManager: BackendManager = mockk() private val loader: Loader = mockk() private val backend: Backend = mockk() - private val legacyStoragePlugin: LegacyStoragePlugin = mockk() private val splitCompatChecker: ApkSplitCompatibilityChecker = mockk() private val apkInstaller: ApkInstaller = mockk() private val installRestriction: InstallRestriction = mockk() @@ -89,8 +83,8 @@ internal class ApkRestoreTest : TransportTest() { backupStateManager = backupStateManager, backendManager = backendManager, loader = loader, - legacyStoragePlugin = legacyStoragePlugin, - crypto = crypto, + legacyStoragePlugin = mockk(), + crypto = mockk(), splitCompatChecker = splitCompatChecker, apkInstaller = apkInstaller, installRestriction = installRestriction, @@ -99,38 +93,24 @@ internal class ApkRestoreTest : TransportTest() { private val icon: Drawable = mockk() private val deviceName = metadata.deviceName - private val packageName = packageInfo.packageName private val apkBytes = byteArrayOf(0x04, 0x05, 0x06) private val apkInputStream = ByteArrayInputStream(apkBytes) private val appName = getRandomString() - private val repoId = Random.nextBytes(32).toHexString() - private val apkChunkId = Random.nextBytes(32).toHexString() - private val apkBlob = - Snapshot.Blob.newBuilder().setId(ByteString.copyFrom(Random.nextBytes(32))).build() - private val apkBlobHandle = AppBackupFileType.Blob(repoId, apkBlob.id.hexFromProto()) - private val apkBackupData = BackupData(listOf(apkChunkId), mapOf(apkChunkId to apkBlob)) - private val baseSplit = Snapshot.Split.newBuilder().setName(BASE_SPLIT) - .addAllChunkIds(listOf(fromHex(apkChunkId))).build() - private val apk = Snapshot.Apk.newBuilder() - .setVersionCode(packageInfo.longVersionCode - 1) - .setInstaller(getRandomString()) - .addAllSignatures(mutableListOf(copyFromUtf8("AwIB".decodeBase64()))) - .addSplits(baseSplit) - .build() - private val app = Snapshot.App.newBuilder() - .setApk(apk) - .build() - private val snapshot = Snapshot.newBuilder() - .setToken(token) - .putApps(packageName, app) - .putAllBlobs(apkBackupData.chunkMap) - .build() - private val packageMetadata = PackageMetadata.fromSnapshot(app) + private val appNoSplit = app.copy { // tests that need splits bring their own + this.apk = apk.copy { + splits.clear() + splits.add(baseSplit) + } + } + private val snapshotWithoutSplit = snapshot.copy { + apps[packageName] = appNoSplit + } + private val packageMetadata = PackageMetadata.fromSnapshot(appNoSplit) private val packageMetadataMap: PackageMetadataMap = hashMapOf(packageName to packageMetadata) private val installerName = packageMetadata.installer private val backup = RestorableBackup( repoId = repoId, - snapshot = snapshot, + snapshot = snapshotWithoutSplit, backupMetadata = metadata.copy(packageMetadataMap = packageMetadataMap), ) @@ -472,7 +452,7 @@ internal class ApkRestoreTest : TransportTest() { splits = listOf(split) ) val blobHandle = AppBackupFileType.Blob(repoId, splitBlobId) - val splitBlob = Snapshot.Blob.newBuilder().setId(fromHex(splitBlobId)).build() + val splitBlob = blob { id = fromHex(splitBlobId) } val snapshot = snapshot.toBuilder().putBlobs(splitChunkId, splitBlob).build() val backup = backup.copy(snapshot = snapshot) @@ -496,27 +476,31 @@ internal class ApkRestoreTest : TransportTest() { @Test fun `splits get installed along with base APK`(@TempDir tmpDir: Path) = runBlocking { // add one APK split to metadata - val split1Name = getRandomString() - val split2Name = getRandomString() val splitChunkId1 = Random.nextBytes(32).toHexString() val splitChunkId2 = Random.nextBytes(32).toHexString() - val apkSplit1 = Snapshot.Split.newBuilder().setName(split1Name) - .addAllChunkIds(listOf(fromHex(splitChunkId1))).build() - val apkSplit2 = Snapshot.Split.newBuilder().setName(split2Name) - .addAllChunkIds(listOf(fromHex(splitChunkId2))).build() - val splitBlob1 = - Snapshot.Blob.newBuilder().setId(ByteString.copyFrom(Random.nextBytes(32))).build() - val splitBlob2 = - Snapshot.Blob.newBuilder().setId(ByteString.copyFrom(Random.nextBytes(32))).build() - val apk = apk.toBuilder().addSplits(apkSplit1).addSplits(apkSplit2).build() - val app = app.toBuilder().setApk(apk).build() + val apkSplit1 = split { + name = getRandomString() + chunkIds.add(fromHex(splitChunkId1)) + } + val apkSplit2 = split { + name = getRandomString() + chunkIds.add(fromHex(splitChunkId2)) + } + val splitBlob1 = blob { id = copyFrom(Random.nextBytes(32)) } + val splitBlob2 = blob { id = copyFrom(Random.nextBytes(32)) } val blobMap = apkBackupData.chunkMap + mapOf(splitChunkId1 to splitBlob1) + mapOf(splitChunkId2 to splitBlob2) - val snapshot = snapshot.toBuilder() - .putApps(packageName, app) - .putAllBlobs(blobMap) - .build() + val app = appNoSplit.copy { + this.apk = apk.copy { + splits.clear() + splits.addAll(listOf(baseSplit, apkSplit1, apkSplit2)) + } + } + val snapshot = snapshotWithoutSplit.copy { + apps[packageName] = app + blobs.putAll(blobMap) + } packageMetadataMap[packageName] = PackageMetadata.fromSnapshot(app) val backup = backup.copy(snapshot = snapshot) @@ -528,7 +512,7 @@ internal class ApkRestoreTest : TransportTest() { cacheBaseApkAndGetInfo(tmpDir) every { - splitCompatChecker.isCompatible(deviceName, listOf(split1Name, split2Name)) + splitCompatChecker.isCompatible(deviceName, listOf(apkSplit1.name, apkSplit2.name)) } returns true // define bytes of splits and return them as stream (matches above hashes) diff --git a/app/src/test/java/com/stevesoltys/seedvault/restore/install/ApkRestoreV1Test.kt b/app/src/test/java/com/stevesoltys/seedvault/restore/install/ApkRestoreV1Test.kt index b04351be..3abfca1d 100644 --- a/app/src/test/java/com/stevesoltys/seedvault/restore/install/ApkRestoreV1Test.kt +++ b/app/src/test/java/com/stevesoltys/seedvault/restore/install/ApkRestoreV1Test.kt @@ -41,7 +41,6 @@ import io.mockk.just import io.mockk.mockk import io.mockk.mockkStatic import io.mockk.verifyOrder -import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.runBlocking import org.calyxos.seedvault.core.backends.Backend import org.calyxos.seedvault.core.backends.LegacyAppBackupFile @@ -57,7 +56,6 @@ import java.io.IOException import java.nio.file.Path import kotlin.random.Random -@ExperimentalCoroutinesApi @Suppress("DEPRECATION") internal class ApkRestoreV1Test : TransportTest() { @@ -91,7 +89,6 @@ internal class ApkRestoreV1Test : TransportTest() { private val icon: Drawable = mockk() private val deviceName = metadata.deviceName - private val packageName = packageInfo.packageName private val packageMetadata = PackageMetadata( time = Random.nextLong(), version = packageInfo.longVersionCode - 1, diff --git a/app/src/test/java/com/stevesoltys/seedvault/transport/SnapshotManagerTest.kt b/app/src/test/java/com/stevesoltys/seedvault/transport/SnapshotManagerTest.kt index e1a1652b..61b8cee7 100644 --- a/app/src/test/java/com/stevesoltys/seedvault/transport/SnapshotManagerTest.kt +++ b/app/src/test/java/com/stevesoltys/seedvault/transport/SnapshotManagerTest.kt @@ -6,8 +6,6 @@ package com.stevesoltys.seedvault.transport import com.stevesoltys.seedvault.backend.BackendManager -import com.stevesoltys.seedvault.crypto.Crypto -import com.stevesoltys.seedvault.getRandomString import com.stevesoltys.seedvault.proto.Snapshot import com.stevesoltys.seedvault.transport.restore.Loader import io.mockk.coEvery @@ -31,9 +29,8 @@ import java.io.OutputStream import java.security.MessageDigest import kotlin.random.Random -class SnapshotManagerTest { +internal class SnapshotManagerTest : TransportTest() { - private val crypto: Crypto = mockk() private val backendManager: BackendManager = mockk() private val backend: Backend = mockk() @@ -43,14 +40,7 @@ class SnapshotManagerTest { private val ad = Random.nextBytes(1) private val passThroughOutputStream = slot() private val passThroughInputStream = slot() - private val repoId = Random.nextBytes(32).toHexString() private val snapshotHandle = slot() - private val snapshot = Snapshot.newBuilder() - .setToken(Random.nextLong()) - .setName(getRandomString()) - .setSdkInt(Random.nextInt()) - .putAllBlobs(mapOf(getRandomString() to Snapshot.Blob.getDefaultInstance())) - .build() @Test fun `test saving and loading`() = runBlocking { diff --git a/app/src/test/java/com/stevesoltys/seedvault/transport/TransportTest.kt b/app/src/test/java/com/stevesoltys/seedvault/transport/TransportTest.kt index ee0e99d7..ef14a346 100644 --- a/app/src/test/java/com/stevesoltys/seedvault/transport/TransportTest.kt +++ b/app/src/test/java/com/stevesoltys/seedvault/transport/TransportTest.kt @@ -12,9 +12,12 @@ import android.content.pm.ApplicationInfo.FLAG_INSTALLED import android.content.pm.PackageInfo import android.content.pm.SigningInfo import android.util.Log +import com.google.protobuf.ByteString +import com.google.protobuf.ByteString.copyFromUtf8 import com.stevesoltys.seedvault.Clock import com.stevesoltys.seedvault.MAGIC_PACKAGE_MANAGER import com.stevesoltys.seedvault.crypto.Crypto +import com.stevesoltys.seedvault.decodeBase64 import com.stevesoltys.seedvault.getRandomBase64 import com.stevesoltys.seedvault.getRandomString import com.stevesoltys.seedvault.metadata.BackupMetadata @@ -23,12 +26,21 @@ import com.stevesoltys.seedvault.metadata.METADATA_SALT_SIZE import com.stevesoltys.seedvault.metadata.MetadataManager import com.stevesoltys.seedvault.metadata.PackageMetadata import com.stevesoltys.seedvault.metadata.PackageMetadataMap +import com.stevesoltys.seedvault.proto.SnapshotKt +import com.stevesoltys.seedvault.proto.SnapshotKt.blob +import com.stevesoltys.seedvault.proto.SnapshotKt.split +import com.stevesoltys.seedvault.proto.snapshot import com.stevesoltys.seedvault.settings.SettingsManager +import com.stevesoltys.seedvault.transport.backup.BackupData +import com.stevesoltys.seedvault.transport.backup.hexFromProto +import com.stevesoltys.seedvault.worker.BASE_SPLIT import io.mockk.every import io.mockk.mockk import io.mockk.mockkStatic import io.mockk.slot +import org.calyxos.seedvault.core.backends.AppBackupFileType import org.calyxos.seedvault.core.backends.LegacyAppBackupFile +import org.calyxos.seedvault.core.toHexString import org.junit.jupiter.api.TestInstance import org.junit.jupiter.api.TestInstance.Lifecycle.PER_METHOD import kotlin.random.Random @@ -53,6 +65,7 @@ internal abstract class TransportTest { applicationInfo = this@TransportTest.applicationInfo signingInfo = sigInfo } + protected val packageName: String = packageInfo.packageName protected val pmPackageInfo = PackageInfo().apply { packageName = MAGIC_PACKAGE_MANAGER } @@ -76,6 +89,46 @@ internal abstract class TransportTest { protected val storageProviderPackageName = getRandomString(23) protected val handle = LegacyAppBackupFile.Blob(token, name) + protected val repoId = Random.nextBytes(32).toHexString() + protected val splitName = getRandomString() + protected val splitBytes = byteArrayOf(0x07, 0x08, 0x09) + protected val apkChunkId = Random.nextBytes(32).toHexString() + protected val splitChunkId = Random.nextBytes(32).toHexString() + protected val apkBlob = blob { + id = ByteString.copyFrom(Random.nextBytes(32)) + } + protected val splitBlob = blob { + id = ByteString.copyFrom(Random.nextBytes(32)) + } + protected val apkBlobHandle = AppBackupFileType.Blob(repoId, apkBlob.id.hexFromProto()) + protected val apkBackupData = BackupData(listOf(apkChunkId), mapOf(apkChunkId to apkBlob)) + protected val splitBackupData = + BackupData(listOf(splitChunkId), mapOf(splitChunkId to splitBlob)) + protected val chunkMap = apkBackupData.chunkMap + splitBackupData.chunkMap + protected val baseSplit = split { + name = BASE_SPLIT + chunkIds.add(ByteString.fromHex(apkChunkId)) + } + protected val apkSplit = split { + name = splitName + chunkIds.add(ByteString.fromHex(splitChunkId)) + } + protected val apk = SnapshotKt.apk { + versionCode = packageInfo.longVersionCode - 1 + installer = getRandomString() + signatures.add(copyFromUtf8("AwIB".decodeBase64())) + splits.add(baseSplit) + splits.add(apkSplit) + } + protected val app = SnapshotKt.app { + apk = this@TransportTest.apk + } + protected val snapshot = snapshot { + token = this@TransportTest.token + apps[packageName] = app + blobs.putAll(chunkMap) + } + init { mockkStatic(Log::class) val logTagSlot = slot() diff --git a/app/src/test/java/com/stevesoltys/seedvault/transport/backup/KVBackupTest.kt b/app/src/test/java/com/stevesoltys/seedvault/transport/backup/KVBackupTest.kt index 422bf71d..5c83cee0 100644 --- a/app/src/test/java/com/stevesoltys/seedvault/transport/backup/KVBackupTest.kt +++ b/app/src/test/java/com/stevesoltys/seedvault/transport/backup/KVBackupTest.kt @@ -13,11 +13,11 @@ import android.app.backup.BackupTransport.TRANSPORT_ERROR import android.app.backup.BackupTransport.TRANSPORT_NON_INCREMENTAL_BACKUP_REQUIRED import android.app.backup.BackupTransport.TRANSPORT_OK import android.content.pm.PackageInfo +import com.stevesoltys.seedvault.backend.BackendManager import com.stevesoltys.seedvault.getRandomString import com.stevesoltys.seedvault.header.MAX_KEY_LENGTH_SIZE import com.stevesoltys.seedvault.header.VERSION import com.stevesoltys.seedvault.header.getADForKV -import com.stevesoltys.seedvault.backend.BackendManager import com.stevesoltys.seedvault.ui.notification.BackupNotificationManager import io.mockk.CapturingSlot import io.mockk.Runs @@ -55,7 +55,6 @@ internal class KVBackupTest : BackupTest() { private val db = mockk() private val backend = mockk() - private val packageName = packageInfo.packageName private val key = getRandomString(MAX_KEY_LENGTH_SIZE) private val dataValue = Random.nextBytes(23) private val dbBytes = Random.nextBytes(42) diff --git a/app/src/test/java/com/stevesoltys/seedvault/transport/restore/RestoreCoordinatorTest.kt b/app/src/test/java/com/stevesoltys/seedvault/transport/restore/RestoreCoordinatorTest.kt index f187ad00..23773189 100644 --- a/app/src/test/java/com/stevesoltys/seedvault/transport/restore/RestoreCoordinatorTest.kt +++ b/app/src/test/java/com/stevesoltys/seedvault/transport/restore/RestoreCoordinatorTest.kt @@ -73,7 +73,6 @@ internal class RestoreCoordinatorTest : TransportTest() { PackageInfo().apply { packageName = "@pm@" }, packageInfo ) - private val packageName = packageInfo.packageName private val storageName = getRandomString() init { 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 27ca16df..a2c012dc 100644 --- a/app/src/test/java/com/stevesoltys/seedvault/worker/ApkBackupTest.kt +++ b/app/src/test/java/com/stevesoltys/seedvault/worker/ApkBackupTest.kt @@ -13,10 +13,12 @@ import android.content.pm.PackageInfo import android.content.pm.PackageManager import android.content.pm.Signature import android.util.PackageUtils -import com.google.protobuf.ByteString +import com.google.protobuf.ByteString.copyFromUtf8 import com.stevesoltys.seedvault.MAGIC_PACKAGE_MANAGER import com.stevesoltys.seedvault.getRandomString import com.stevesoltys.seedvault.proto.Snapshot +import com.stevesoltys.seedvault.proto.SnapshotKt.app +import com.stevesoltys.seedvault.proto.copy import com.stevesoltys.seedvault.transport.SnapshotManager import com.stevesoltys.seedvault.transport.backup.AppBackupManager import com.stevesoltys.seedvault.transport.backup.BackupData @@ -56,14 +58,6 @@ internal class ApkBackupTest : BackupTest() { private val signatureBytes = byteArrayOf(0x01, 0x02, 0x03) private val signatureHash = byteArrayOf(0x03, 0x02, 0x01) private val sigs = arrayOf(Signature(signatureBytes)) - private val apk = Snapshot.Apk.newBuilder() - .setVersionCode(packageInfo.longVersionCode - 1) - .addSignatures(ByteString.copyFrom(signatureHash)) - .build() - private val snapshot = Snapshot.newBuilder() - .setToken(token) - .putApps(packageInfo.packageName, Snapshot.App.newBuilder().setApk(apk).build()) - .build() init { mockkStatic(PackageUtils::class) @@ -113,8 +107,8 @@ internal class ApkBackupTest : BackupTest() { @Test fun `does not back up the same version`() = runBlocking { packageInfo.applicationInfo!!.flags = FLAG_UPDATED_SYSTEM_APP - val apk = apk.toBuilder().setVersionCode(packageInfo.longVersionCode).build() - val app = Snapshot.App.newBuilder().setApk(apk).build() + val apk = apk.copy { versionCode = packageInfo.longVersionCode } + val app = app { this.apk = apk } expectChecks(snapshot.toBuilder().putApps(packageInfo.packageName, app).build()) apkBackup.backupApkIfNecessary(packageInfo) @@ -123,12 +117,12 @@ internal class ApkBackupTest : BackupTest() { @Test fun `does back up the same version when signatures changes`() { packageInfo.applicationInfo!!.sourceDir = "/tmp/doesNotExist" - val apk = apk.toBuilder() - .clearSignatures() - .addSignatures(ByteString.copyFromUtf8("foo")) - .setVersionCode(packageInfo.longVersionCode) - .build() - val app = Snapshot.App.newBuilder().setApk(apk).build() + val apk = apk.copy { + signatures.clear() + signatures.add(copyFromUtf8("foo")) + versionCode = packageInfo.longVersionCode + } + val app = app { this.apk = apk } expectChecks(snapshot.toBuilder().putApps(packageInfo.packageName, app).build()) every { pm.getInstallSourceInfo(packageInfo.packageName) diff --git a/libs/Android.bp b/libs/Android.bp index ae63f75a..957fd446 100644 --- a/libs/Android.bp +++ b/libs/Android.bp @@ -10,6 +10,12 @@ android_library_import { extract_jni: true, } +java_import { + name: "seedvault-lib-protobuf-kotlin-lite", + jars: ["protobuf-kotlin-lite-3.21.12.jar"], + sdk_version: "current", +} + java_import { name: "seedvault-lib-kotlin-bip39", jars: ["kotlin-bip39-jvm-1.0.6.jar"], diff --git a/libs/protobuf-kotlin-lite-3.21.12.jar b/libs/protobuf-kotlin-lite-3.21.12.jar new file mode 100644 index 0000000000000000000000000000000000000000..a16c4cab5f666f5f49e769443414497f6f4f80d8 GIT binary patch literal 164848 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