Compare commits
68 commits
fm/wolfski
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 71a055987c | |||
| 844530404d | |||
| abec496305 | |||
| a01c0a78fb | |||
| cd625b4227 | |||
| fc02ce8646 | |||
| 2fdd459037 | |||
| 9dd321f07e | |||
| 061670848f | |||
| 575103ce98 | |||
| e243894a20 | |||
| 86d3432fb0 | |||
| 43ae716157 | |||
| 5033c171cb | |||
| 130697c2eb | |||
| 4cd75cfa26 | |||
| bfd4002dd1 | |||
| 1c77f21df3 | |||
| a8951827ba | |||
| e99ed2d394 | |||
| 924c90a9e0 | |||
| 1299034991 | |||
| 9c8fceb18c | |||
| b8d5d8a124 | |||
| 14a74ac43b | |||
| d9578ac405 | |||
| 4e62aad638 | |||
| b1b15b384b | |||
| c1559e2513 | |||
| 3bfb8cd779 | |||
| 439eea3ff8 | |||
| fc7eb94cc1 | |||
| 03ff22ea86 | |||
| 5b0703aec5 | |||
| 96538f3c7a | |||
| b54bcc148c | |||
| 0ca13e684f | |||
| 6d7df0fb19 | |||
| 321f2d41bb | |||
| 90e956b157 | |||
| 2b65ee7b53 | |||
| 60a0da13a2 | |||
| 5a0497c9ec | |||
| 6f430439a6 | |||
| 4b28b4f044 | |||
| 3b7249888f | |||
| e5bb4ec47f | |||
| 7a878b2d81 | |||
| b24c404cc8 | |||
| a6dd04f390 | |||
| 74033ee1da | |||
| 7e8e232d47 | |||
| c534ea75c2 | |||
| 6a02887dc9 | |||
| 0c94e8f910 | |||
| c07bb2ca1d | |||
| 0db05174b1 | |||
| 0fd0ec035d | |||
| 3da635b4cb | |||
| 27fd174aed | |||
| 2ea9301069 | |||
| 380c423376 | |||
| 4b89a73908 | |||
| 9be55c570a | |||
| f60a22e435 | |||
| 2be4e30826 | |||
| adbfe5d0e7 | |||
| de452448ba |
|
|
@ -1,3 +1,4 @@
|
|||
import com.android.build.api.artifact.SingleArtifact
|
||||
import com.android.build.api.dsl.ApplicationExtension
|
||||
import com.android.build.api.dsl.ProductFlavor
|
||||
import com.android.build.api.variant.FilterConfiguration
|
||||
|
|
@ -5,6 +6,7 @@ import com.google.protobuf.gradle.id
|
|||
import com.mikepenz.aboutlibraries.plugin.DuplicateMode
|
||||
import com.mikepenz.aboutlibraries.plugin.DuplicateRule
|
||||
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
||||
import java.io.File
|
||||
import java.util.Base64
|
||||
import java.util.Properties
|
||||
|
||||
|
|
@ -194,6 +196,7 @@ configure<ApplicationExtension> {
|
|||
sourceSets {
|
||||
getByName("main") {
|
||||
kotlin.directories += "$buildDir/generated/seerr_api/src/main/kotlin"
|
||||
kotlin.directories += "src/wolfskin/java"
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -224,6 +227,47 @@ androidComponents {
|
|||
"Wholphin-${variant.flavorName}-${variant.buildType}-${output.versionName.get()}-${output.versionCode.get()}$abi.apk"
|
||||
output.outputFileName = outputFileName
|
||||
}
|
||||
if (variant.name == "defaultDebug") {
|
||||
val packagedApks = variant.artifacts.get(SingleArtifact.APK)
|
||||
val artifactLoader = variant.artifacts.getBuiltArtifactsLoader()
|
||||
val aapt2 = sdkComponents.aapt2.flatMap { it.executable }
|
||||
val checkWolfskinBranding = tasks.register("checkWolfskinBranding") {
|
||||
inputs.dir(packagedApks)
|
||||
inputs.file(aapt2)
|
||||
doLast {
|
||||
val artifacts = checkNotNull(artifactLoader.load(packagedApks.get())) {
|
||||
"Packaged default/debug APK metadata was not found; branding is unverified"
|
||||
}.elements
|
||||
check(artifacts.isNotEmpty()) { "No default/debug APKs were found; branding is unverified" }
|
||||
val header = Regex("""^\s*resource 0x[\da-fA-F]+ (?:[^\s:]+:)?([^\s/]+)/([^\s]+)""")
|
||||
val visibleTypes = setOf("string", "plurals", "array")
|
||||
// Upstream legal attribution and its project URL must survive the branding cutover.
|
||||
val legalNames = setOf("wolfskin_upstream_credit", "wolfskin_upstream_url")
|
||||
val violations = sortedSetOf<String>()
|
||||
artifacts.forEach { artifact ->
|
||||
val dump = providers.exec {
|
||||
commandLine(aapt2.get().asFile, "dump", "resources", artifact.outputFile)
|
||||
}.standardOutput.asText.get()
|
||||
var currentName: String? = null
|
||||
var inspected = 0
|
||||
dump.lineSequence().forEach { line ->
|
||||
val resource = header.find(line)
|
||||
if (resource != null) {
|
||||
currentName = resource.groupValues[2].takeIf { resource.groupValues[1] in visibleTypes }
|
||||
if (currentName != null) inspected++
|
||||
} else if (currentName != null && currentName !in legalNames && line.contains("Wholphin", ignoreCase = true)) {
|
||||
violations += "${File(artifact.outputFile).name}:$currentName"
|
||||
}
|
||||
}
|
||||
check(inspected > 0) { "No packaged string resources were decoded; branding is unverified" }
|
||||
logger.lifecycle("Inspected $inspected string/plural/array resources in ${File(artifact.outputFile).name}")
|
||||
}
|
||||
check(violations.isEmpty()) { "User-visible upstream branding remains: ${violations.joinToString()}" }
|
||||
logger.lifecycle("Wolfskin branding check passed (${artifacts.size} packaged debug APKs; legal attribution preserved)")
|
||||
}
|
||||
}
|
||||
tasks.matching { it.name == "assembleDefaultDebug" }.configureEach { dependsOn(checkWolfskinBranding) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -288,6 +332,8 @@ tasks.named("preBuild") {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(":wolfskin-design"))
|
||||
implementation(project(":conductarr-client"))
|
||||
implementation(libs.androidx.core.ktx)
|
||||
implementation(libs.androidx.appcompat)
|
||||
implementation(platform(libs.androidx.compose.bom))
|
||||
|
|
@ -406,8 +452,18 @@ dependencies {
|
|||
testImplementation(libs.robolectric)
|
||||
testImplementation(libs.hilt.android.testing)
|
||||
testImplementation(libs.androidx.compose.ui.test.junit4)
|
||||
testImplementation("io.github.takahirom.roborazzi:roborazzi:1.77.0")
|
||||
testImplementation("io.github.takahirom.roborazzi:roborazzi-compose:1.77.0")
|
||||
androidTestImplementation(platform(libs.androidx.compose.bom))
|
||||
androidTestImplementation(libs.mockk.android)
|
||||
androidTestImplementation(libs.hilt.android.testing)
|
||||
androidTestImplementation(libs.androidx.compose.ui.test.manifest)
|
||||
}
|
||||
|
||||
tasks.withType<Test>().configureEach {
|
||||
dependsOn(":wolfskin-design:testDebugUnitTest")
|
||||
systemProperty("robolectric.dependency.dir", project(":wolfskin-design").layout.buildDirectory.dir("robolectric-sdk").get().asFile.absolutePath)
|
||||
systemProperty("robolectric.offline", "true")
|
||||
systemProperty("roborazzi.test.record", "true")
|
||||
systemProperty("wolfskin.captureDirectory", rootProject.layout.buildDirectory.dir("wolfskin-captures").get().asFile.absolutePath)
|
||||
}
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 37 KiB |
BIN
app/src/debug/assets/library/assets/movie-awake-2007-poster.jpg
Normal file
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 27 KiB |
BIN
app/src/debug/assets/library/assets/movie-blame-2017-poster.jpg
Normal file
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 18 KiB |
BIN
app/src/debug/assets/library/assets/movie-drop-2025-poster.jpg
Normal file
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 21 KiB |
BIN
app/src/debug/assets/library/assets/movie-easy-a-2010-poster.jpg
Normal file
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 18 KiB |
BIN
app/src/debug/assets/library/assets/movie-faces-1968-poster.jpg
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
app/src/debug/assets/library/assets/movie-fatale-2020-poster.jpg
Normal file
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 22 KiB |
BIN
app/src/debug/assets/library/assets/movie-locke-2014-poster.jpg
Normal file
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 26 KiB |
BIN
app/src/debug/assets/library/assets/movie-mercy-2026-poster.jpg
Normal file
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 39 KiB |
BIN
app/src/debug/assets/library/assets/movie-normal-2026-poster.jpg
Normal file
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 15 KiB |
BIN
app/src/debug/assets/library/assets/movie-ponyo-2008-poster.jpg
Normal file
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 28 KiB |
BIN
app/src/debug/assets/library/assets/movie-shaft-2000-poster.jpg
Normal file
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 41 KiB |
|
After Width: | Height: | Size: 28 KiB |