clean up libs and fix AOSP build
This commit is contained in:
parent
206affee00
commit
78ef0caea7
17 changed files with 88 additions and 53 deletions
|
@ -26,7 +26,8 @@ android_app {
|
||||||
"com.google.android.material_material",
|
"com.google.android.material_material",
|
||||||
"kotlinx-coroutines-android",
|
"kotlinx-coroutines-android",
|
||||||
"kotlinx-coroutines-core",
|
"kotlinx-coroutines-core",
|
||||||
// storage backup lib
|
// our own gradle module libs
|
||||||
|
"seedvault-lib-core",
|
||||||
"seedvault-lib-storage",
|
"seedvault-lib-storage",
|
||||||
// koin
|
// koin
|
||||||
"seedvault-lib-koin-core-jvm", // did not manage to add this as transitive dependency
|
"seedvault-lib-koin-core-jvm", // did not manage to add this as transitive dependency
|
||||||
|
@ -36,7 +37,6 @@ android_app {
|
||||||
// WebDAV
|
// WebDAV
|
||||||
"seedvault-lib-dav4jvm",
|
"seedvault-lib-dav4jvm",
|
||||||
"seedvault-lib-okhttp",
|
"seedvault-lib-okhttp",
|
||||||
"seedvault-lib-okio",
|
|
||||||
],
|
],
|
||||||
manifest: "app/src/main/AndroidManifest.xml",
|
manifest: "app/src/main/AndroidManifest.xml",
|
||||||
|
|
||||||
|
|
|
@ -20,13 +20,13 @@ import android.os.UserManager
|
||||||
import androidx.work.ExistingPeriodicWorkPolicy.UPDATE
|
import androidx.work.ExistingPeriodicWorkPolicy.UPDATE
|
||||||
import androidx.work.WorkManager
|
import androidx.work.WorkManager
|
||||||
import com.google.android.material.color.DynamicColors
|
import com.google.android.material.color.DynamicColors
|
||||||
|
import com.stevesoltys.seedvault.backend.BackendManager
|
||||||
|
import com.stevesoltys.seedvault.backend.saf.storagePluginModuleSaf
|
||||||
|
import com.stevesoltys.seedvault.backend.webdav.storagePluginModuleWebDav
|
||||||
import com.stevesoltys.seedvault.crypto.cryptoModule
|
import com.stevesoltys.seedvault.crypto.cryptoModule
|
||||||
import com.stevesoltys.seedvault.header.headerModule
|
import com.stevesoltys.seedvault.header.headerModule
|
||||||
import com.stevesoltys.seedvault.metadata.MetadataManager
|
import com.stevesoltys.seedvault.metadata.MetadataManager
|
||||||
import com.stevesoltys.seedvault.metadata.metadataModule
|
import com.stevesoltys.seedvault.metadata.metadataModule
|
||||||
import com.stevesoltys.seedvault.backend.BackendManager
|
|
||||||
import com.stevesoltys.seedvault.backend.saf.storagePluginModuleSaf
|
|
||||||
import com.stevesoltys.seedvault.backend.webdav.storagePluginModuleWebDav
|
|
||||||
import com.stevesoltys.seedvault.restore.install.installModule
|
import com.stevesoltys.seedvault.restore.install.installModule
|
||||||
import com.stevesoltys.seedvault.restore.restoreUiModule
|
import com.stevesoltys.seedvault.restore.restoreUiModule
|
||||||
import com.stevesoltys.seedvault.settings.AppListRetriever
|
import com.stevesoltys.seedvault.settings.AppListRetriever
|
||||||
|
@ -63,7 +63,14 @@ open class App : Application() {
|
||||||
single { SettingsManager(this@App) }
|
single { SettingsManager(this@App) }
|
||||||
single { BackupNotificationManager(this@App) }
|
single { BackupNotificationManager(this@App) }
|
||||||
single { BackendManager(this@App, get(), get()) }
|
single { BackendManager(this@App, get(), get()) }
|
||||||
single { BackendFactory(this@App) }
|
single {
|
||||||
|
BackendFactory {
|
||||||
|
// uses context of the device's main user to be able to access USB storage
|
||||||
|
this@App.applicationContext.getStorageContext {
|
||||||
|
get<SettingsManager>().getSafProperties()?.isUsb == true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
single { BackupStateManager(this@App) }
|
single { BackupStateManager(this@App) }
|
||||||
single { Clock() }
|
single { Clock() }
|
||||||
factory<IBackupManager> { IBackupManager.Stub.asInterface(getService(BACKUP_SERVICE)) }
|
factory<IBackupManager> { IBackupManager.Stub.asInterface(getService(BACKUP_SERVICE)) }
|
||||||
|
@ -215,6 +222,10 @@ fun <T> permitDiskReads(func: () -> T): T {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hack to allow other profiles access to USB backend.
|
||||||
|
* @return the context of the device's main user, so use with great care!
|
||||||
|
*/
|
||||||
@Suppress("MissingPermission")
|
@Suppress("MissingPermission")
|
||||||
fun Context.getStorageContext(isUsbStorage: () -> Boolean): Context {
|
fun Context.getStorageContext(isUsbStorage: () -> Boolean): Context {
|
||||||
if (checkSelfPermission(INTERACT_ACROSS_USERS_FULL) == PERMISSION_GRANTED && isUsbStorage()) {
|
if (checkSelfPermission(INTERACT_ACROSS_USERS_FULL) == PERMISSION_GRANTED && isUsbStorage()) {
|
||||||
|
|
35
core/Android.bp
Normal file
35
core/Android.bp
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
//
|
||||||
|
// SPDX-FileCopyrightText: 2021 The Calyx Institute
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
//
|
||||||
|
|
||||||
|
android_library {
|
||||||
|
name: "seedvault-lib-core",
|
||||||
|
sdk_version: "current",
|
||||||
|
srcs: [
|
||||||
|
"src/main/java/**/*.kt",
|
||||||
|
"src/main/java/**/*.java",
|
||||||
|
],
|
||||||
|
exclude_srcs: [
|
||||||
|
"src/main/java/org/calyxos/seedvault/core/backends/BackendTest.kt",
|
||||||
|
],
|
||||||
|
static_libs: [
|
||||||
|
"androidx.core_core-ktx",
|
||||||
|
"androidx.documentfile_documentfile",
|
||||||
|
"kotlinx-coroutines-android",
|
||||||
|
"kotlinx-coroutines-core",
|
||||||
|
"seedvault-lib-kotlin-logging-jvm",
|
||||||
|
"seedvault-lib-slf4j-api",
|
||||||
|
// WebDAV
|
||||||
|
"seedvault-lib-dav4jvm",
|
||||||
|
"seedvault-lib-okhttp",
|
||||||
|
"okio-lib",
|
||||||
|
],
|
||||||
|
manifest: "src/main/AndroidManifest.xml",
|
||||||
|
optimize: {
|
||||||
|
enabled: false,
|
||||||
|
},
|
||||||
|
kotlincflags: [
|
||||||
|
"-opt-in=kotlin.RequiresOptIn",
|
||||||
|
],
|
||||||
|
}
|
|
@ -36,17 +36,17 @@ android {
|
||||||
dependencies {
|
dependencies {
|
||||||
val aospLibs: FileTree by rootProject.extra
|
val aospLibs: FileTree by rootProject.extra
|
||||||
compileOnly(aospLibs)
|
compileOnly(aospLibs)
|
||||||
compileOnly("org.ogce:xpp3:1.1.6")
|
|
||||||
compileOnly(kotlin("test"))
|
compileOnly(kotlin("test"))
|
||||||
implementation(libs.bundles.kotlin)
|
implementation(libs.bundles.kotlin)
|
||||||
implementation(libs.bundles.coroutines)
|
implementation(libs.bundles.coroutines)
|
||||||
implementation(libs.androidx.documentfile)
|
implementation(libs.androidx.documentfile)
|
||||||
implementation(libs.androidx.core.ktx)
|
implementation(libs.androidx.core.ktx)
|
||||||
// implementation(fileTree("${rootProject.rootDir}/libs/dav4jvm").include("okio-jvm-3.7.0.jar"))
|
|
||||||
implementation(fileTree("${rootProject.rootDir}/libs/dav4jvm").include("*.jar"))
|
implementation(fileTree("${rootProject.rootDir}/libs/dav4jvm").include("*.jar"))
|
||||||
implementation("io.github.oshai:kotlin-logging-jvm:6.0.3")
|
implementation(libs.squareup.okio)
|
||||||
implementation("org.slf4j:slf4j-simple:2.0.3")
|
implementation(libs.kotlin.logging)
|
||||||
|
implementation(libs.slf4j.api)
|
||||||
|
|
||||||
testImplementation(kotlin("test"))
|
testImplementation(kotlin("test"))
|
||||||
testImplementation("org.ogce:xpp3:1.1.6")
|
testImplementation("org.ogce:xpp3:1.1.6")
|
||||||
|
testImplementation("org.slf4j:slf4j-simple:2.0.3")
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
SPDX-FileCopyrightText: 2021 The Calyx Institute
|
SPDX-FileCopyrightText: 2021 The Calyx Institute
|
||||||
SPDX-License-Identifier: Apache-2.0
|
SPDX-License-Identifier: Apache-2.0
|
||||||
-->
|
-->
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
package="org.calyxos.seedvault.core">
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||||
</manifest>
|
</manifest>
|
||||||
|
|
|
@ -1,24 +0,0 @@
|
||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: 2024 The Calyx Institute
|
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.calyxos.seedvault.core
|
|
||||||
|
|
||||||
import android.Manifest.permission.INTERACT_ACROSS_USERS_FULL
|
|
||||||
import android.content.Context
|
|
||||||
import android.content.pm.PackageManager.PERMISSION_GRANTED
|
|
||||||
import android.os.UserManager
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Hack to allow other profiles access to USB backend.
|
|
||||||
* @return the context of the device's main user, so use with great care!
|
|
||||||
*/
|
|
||||||
@Suppress("MissingPermission")
|
|
||||||
public fun Context.getBackendContext(isUsbStorage: () -> Boolean): Context {
|
|
||||||
if (checkSelfPermission(INTERACT_ACROSS_USERS_FULL) == PERMISSION_GRANTED && isUsbStorage()) {
|
|
||||||
UserManager.get(this).getProfileParent(user)
|
|
||||||
?.let { parent -> return createContextAsUser(parent, 0) }
|
|
||||||
}
|
|
||||||
return this
|
|
||||||
}
|
|
|
@ -12,8 +12,10 @@ import org.calyxos.seedvault.core.backends.webdav.WebDavBackend
|
||||||
import org.calyxos.seedvault.core.backends.webdav.WebDavConfig
|
import org.calyxos.seedvault.core.backends.webdav.WebDavConfig
|
||||||
|
|
||||||
public class BackendFactory(
|
public class BackendFactory(
|
||||||
private val context: Context,
|
private val contextGetter: () -> Context,
|
||||||
) {
|
) {
|
||||||
public fun createSafBackend(config: SafProperties): Backend = SafBackend(context, config)
|
public fun createSafBackend(config: SafProperties): Backend =
|
||||||
|
SafBackend(contextGetter(), config)
|
||||||
|
|
||||||
public fun createWebDavBackend(config: WebDavConfig): Backend = WebDavBackend(config)
|
public fun createWebDavBackend(config: WebDavConfig): Backend = WebDavBackend(config)
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,10 +5,10 @@
|
||||||
|
|
||||||
package org.calyxos.seedvault.core.backends
|
package org.calyxos.seedvault.core.backends
|
||||||
|
|
||||||
import android.annotation.WorkerThread
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.net.ConnectivityManager
|
import android.net.ConnectivityManager
|
||||||
import android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET
|
import android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET
|
||||||
|
import androidx.annotation.WorkerThread
|
||||||
import at.bitfire.dav4jvm.exception.HttpException
|
import at.bitfire.dav4jvm.exception.HttpException
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,6 @@ import org.calyxos.seedvault.core.backends.FileHandle
|
||||||
import org.calyxos.seedvault.core.backends.FileInfo
|
import org.calyxos.seedvault.core.backends.FileInfo
|
||||||
import org.calyxos.seedvault.core.backends.LegacyAppBackupFile
|
import org.calyxos.seedvault.core.backends.LegacyAppBackupFile
|
||||||
import org.calyxos.seedvault.core.backends.TopLevelFolder
|
import org.calyxos.seedvault.core.backends.TopLevelFolder
|
||||||
import org.calyxos.seedvault.core.getBackendContext
|
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.io.InputStream
|
import java.io.InputStream
|
||||||
import java.io.OutputStream
|
import java.io.OutputStream
|
||||||
|
@ -41,17 +40,13 @@ internal const val ROOT_ID_DEVICE = "primary"
|
||||||
private const val DEBUG_LOG = true
|
private const val DEBUG_LOG = true
|
||||||
|
|
||||||
public class SafBackend(
|
public class SafBackend(
|
||||||
private val appContext: Context,
|
private val context: Context,
|
||||||
private val safProperties: SafProperties,
|
private val safProperties: SafProperties,
|
||||||
root: String = DIRECTORY_ROOT,
|
root: String = DIRECTORY_ROOT,
|
||||||
) : Backend {
|
) : Backend {
|
||||||
|
|
||||||
private val log = KotlinLogging.logger {}
|
private val log = KotlinLogging.logger {}
|
||||||
|
|
||||||
/**
|
|
||||||
* Attention: This context might be from a different user. Use with care.
|
|
||||||
*/
|
|
||||||
private val context: Context get() = appContext.getBackendContext { safProperties.isUsb }
|
|
||||||
private val cache = DocumentFileCache(context, safProperties.getDocumentFile(context), root)
|
private val cache = DocumentFileCache(context, safProperties.getDocumentFile(context), root)
|
||||||
|
|
||||||
override suspend fun test(): Boolean {
|
override suspend fun test(): Boolean {
|
||||||
|
|
|
@ -40,6 +40,10 @@ dokka = "1.9.20" # Dokka has no releases after 1.9.20
|
||||||
# Lint versions
|
# Lint versions
|
||||||
lint-rules = { strictly = "0.1.0" }
|
lint-rules = { strictly = "0.1.0" }
|
||||||
|
|
||||||
|
# Logging libs (check versions at /libs)
|
||||||
|
logging = { strictly = "6.0.3" }
|
||||||
|
slf4j-api = { strictly = "2.0.16" }
|
||||||
|
|
||||||
# Google versions
|
# Google versions
|
||||||
# https://android.googlesource.com/platform/external/protobuf/+/refs/tags/android-15.0.0_r1/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" }
|
protobuf = { strictly = "3.21.12" }
|
||||||
|
@ -74,6 +78,9 @@ androidx-documentfile = { strictly = "1.1.0-alpha01" } # 1.1.0-alpha02 in AOSP b
|
||||||
# https://android.googlesource.com/platform/prebuilts/sdk/+/android-15.0.0_r1/current/androidx/m2repository/androidx/work/work-runtime-ktx?autodive=0
|
# 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" }
|
androidx-work-runtime = { strictly = "2.10.0-alpha02" }
|
||||||
|
|
||||||
|
# https://android.googlesource.com/platform/external/okio/+/refs/tags/android-14.0.0_r53/CHANGELOG.md
|
||||||
|
squareup-okio = { strictly = "3.7.0" }
|
||||||
|
|
||||||
[libraries]
|
[libraries]
|
||||||
# Kotlin standard dependencies
|
# Kotlin standard dependencies
|
||||||
kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlin" }
|
kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlin" }
|
||||||
|
@ -105,6 +112,10 @@ androidx-documentfile = { module = "androidx.documentfile:documentfile", version
|
||||||
androidx-work-runtime-ktx = { module = "androidx.work:work-runtime-ktx", version.ref = "androidx-work-runtime" }
|
androidx-work-runtime-ktx = { module = "androidx.work:work-runtime-ktx", version.ref = "androidx-work-runtime" }
|
||||||
androidx-room-runtime = { module = "androidx.room:room-runtime", version.ref = "room" }
|
androidx-room-runtime = { module = "androidx.room:room-runtime", version.ref = "room" }
|
||||||
|
|
||||||
|
squareup-okio = { module= "com.squareup.okio:okio", version.ref = "squareup-okio" }
|
||||||
|
kotlin-logging = { module = "io.github.oshai:kotlin-logging-jvm", version.ref = "logging" }
|
||||||
|
slf4j-api = { module = "org.slf4j:slf4j-api", version.ref = "slf4j-api" }
|
||||||
|
|
||||||
[bundles]
|
[bundles]
|
||||||
kotlin = ["kotlin-stdlib", "kotlin-stdlib-jdk8", "kotlin-stdlib-common"]
|
kotlin = ["kotlin-stdlib", "kotlin-stdlib-jdk8", "kotlin-stdlib-common"]
|
||||||
coroutines = ["kotlinx-coroutines-core-jvm", "kotlinx-coroutines-android"]
|
coroutines = ["kotlinx-coroutines-core-jvm", "kotlinx-coroutines-android"]
|
||||||
|
|
|
@ -8,3 +8,15 @@ java_import {
|
||||||
jars: ["kotlin-bip39-jvm-1.0.6.jar"],
|
jars: ["kotlin-bip39-jvm-1.0.6.jar"],
|
||||||
sdk_version: "current",
|
sdk_version: "current",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
java_import {
|
||||||
|
name: "seedvault-lib-kotlin-logging-jvm",
|
||||||
|
jars: ["kotlin-logging-jvm-6.0.3.jar"],
|
||||||
|
sdk_version: "current",
|
||||||
|
}
|
||||||
|
|
||||||
|
java_import {
|
||||||
|
name: "seedvault-lib-slf4j-api",
|
||||||
|
jars: ["slf4j-api-2.0.16.jar"],
|
||||||
|
sdk_version: "current",
|
||||||
|
}
|
||||||
|
|
|
@ -14,9 +14,3 @@ java_import {
|
||||||
jars: ["okhttp-4.12.0.jar"],
|
jars: ["okhttp-4.12.0.jar"],
|
||||||
sdk_version: "current",
|
sdk_version: "current",
|
||||||
}
|
}
|
||||||
|
|
||||||
java_import {
|
|
||||||
name: "seedvault-lib-okio",
|
|
||||||
jars: ["okio-jvm-3.7.0.jar"],
|
|
||||||
sdk_version: "current",
|
|
||||||
}
|
|
||||||
|
|
Binary file not shown.
BIN
libs/kotlin-logging-jvm-6.0.3.jar
Normal file
BIN
libs/kotlin-logging-jvm-6.0.3.jar
Normal file
Binary file not shown.
BIN
libs/slf4j-api-2.0.16.jar
Normal file
BIN
libs/slf4j-api-2.0.16.jar
Normal file
Binary file not shown.
|
@ -19,6 +19,7 @@ android_library {
|
||||||
local_include_dirs: ["src/main/proto"],
|
local_include_dirs: ["src/main/proto"],
|
||||||
},
|
},
|
||||||
static_libs: [
|
static_libs: [
|
||||||
|
"seedvault-lib-core",
|
||||||
"seedvault-lib-tink-android",
|
"seedvault-lib-tink-android",
|
||||||
"libprotobuf-java-lite",
|
"libprotobuf-java-lite",
|
||||||
"androidx.core_core-ktx",
|
"androidx.core_core-ktx",
|
||||||
|
|
|
@ -94,9 +94,6 @@ dependencies {
|
||||||
implementation(libs.androidx.room.runtime)
|
implementation(libs.androidx.room.runtime)
|
||||||
implementation(libs.google.protobuf.javalite)
|
implementation(libs.google.protobuf.javalite)
|
||||||
implementation(libs.google.tink.android)
|
implementation(libs.google.tink.android)
|
||||||
// TODO include via gradle and AOSP
|
|
||||||
// https://android.googlesource.com/platform/external/okio/+/refs/tags/android-14.0.0_r53/CHANGELOG.md
|
|
||||||
implementation(fileTree("${rootProject.rootDir}/libs/dav4jvm").include("okio-jvm-3.7.0.jar"))
|
|
||||||
|
|
||||||
ksp(group = "androidx.room", name = "room-compiler", version = libs.versions.room.get())
|
ksp(group = "androidx.room", name = "room-compiler", version = libs.versions.room.get())
|
||||||
lintChecks(libs.thirdegg.lint.rules)
|
lintChecks(libs.thirdegg.lint.rules)
|
||||||
|
|
Loading…
Reference in a new issue