From ba6a8df5fcc048e2429daaf2a43a92274444fbd8 Mon Sep 17 00:00:00 2001 From: Pun Butrach Date: Mon, 17 Nov 2025 20:53:41 +0700 Subject: [PATCH] fix: Module bugs --- build.gradle | 4 +- gradle/libs.versions.toml | 22 +++++++++ modules/widgetpicker/build.gradle.kts | 65 +++++++++------------------ settings.gradle | 5 +++ 4 files changed, 50 insertions(+), 46 deletions(-) diff --git a/build.gradle b/build.gradle index de38b03088..217ceba8b7 100644 --- a/build.gradle +++ b/build.gradle @@ -319,7 +319,7 @@ android { sourceSets { main { res.srcDirs = ['res'] - java.srcDirs = ['src', 'src_plugins'] + java.srcDirs = ['src', 'src_plugins', 'compose'] manifest.srcFile 'AndroidManifest-common.xml' proto { srcDirs = ['protos/', 'quickstep/protos_overrides/'] @@ -408,6 +408,8 @@ dependencies { withQuickstepImplementation projects.flags withQuickstepImplementation projects.dagger withQuickstepImplementation projects.concurrent +// withQuickstepImplementation projects.compose + withQuickstepImplementation projects.modules.widgetpicker implementation libs.androidx.dynamicanimation implementation fileTree(dir: FRAMEWORK_PREBUILTS_DIR, include: 'SystemUI-statsd-16.jar') diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1f2a23e406..e9662641b1 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,10 +10,16 @@ coreKtx = "1.17.0" error_prone_annotations = "2.44.0" espressoCore = "3.7.0" junit = "1.3.0" +junitVersion = "4.13.2" +mockito = "5.14.2" +mockitoKotlin = "5.4.0" opto = "1.0.18" protocVersion = "4.33.1" retrofit = "3.0.0" room = "2.8.3" +testRules = "1.7.0" +testRunner = "1.7.0" +truth = "1.4.5" activityCompose = "1.11.0" airbnbLottie = "6.7.1" @@ -106,25 +112,33 @@ androidx-preference-ktx = { group = "androidx.preference", name = "preference-kt androidx-profileinstaller = { group = "androidx.profileinstaller", name = "profileinstaller", version.ref = "profileinstaller" } androidx-recyclerview = { group = "androidx.recyclerview", name = "recyclerview", version.ref = "recyclerview" } androidx-slice-core = { group = "androidx.slice", name = "slice-core", version.ref = "slice" } +androidx-test-rules = { group = "androidx.test", name = "rules", version.ref = "testRules" } +androidx-test-runner = { group = "androidx.test", name = "runner", version.ref = "testRunner" } androidx-uiautomator = { module = "androidx.test.uiautomator:uiautomator", version.ref = "uiautomator" } androidx-window = { group = "androidx.window", name = "window", version.ref = "window" } # Compose compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" } compose-foundation = { group = "androidx.compose.foundation", name = "foundation", version.ref = "compose" } +compose-foundation-layout = { group = "androidx.compose.foundation", name = "foundation-layout", version.ref = "compose" } compose-material = { group = "androidx.compose.material", name = "material", version.ref = "composeMaterial" } compose-material-icons = { group = "androidx.compose.material", name = "material-icons-extended", version.ref = "composeMaterialIcons" } compose-material3 = { group = "androidx.compose.material3", name = "material3", version.ref = "composeMaterial3" } compose-material3-windowSizeClass = { group = "androidx.compose.material3", name = "material3-window-size-class", version.ref = "composeMaterial3" } +compose-runtime = { group = "androidx.compose.runtime", name = "runtime", version.ref = "compose" } compose-runtime-livedata = { group = "androidx.compose.runtime", name = "runtime-livedata", version.ref = "compose" } compose-ui = { group = "androidx.compose.ui", name = "ui", version.ref = "compose" } compose-ui-google-fonts = { group = "androidx.compose.ui", name = "ui-text-google-fonts", version.ref = "compose" } compose-ui-graphics = { group = "androidx.compose.ui", name = "ui-graphics", version.ref = "compose"} +compose-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4", version.ref = "compose" } +compose-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest", version.ref = "compose" } compose-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling", version.ref = "compose" } compose-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview", version.ref = "compose" } compose-ui-util = { group = "androidx.compose.ui", name = "ui-util", version.ref = "compose" } +dagger = { group = "com.google.dagger", name = "dagger", version.ref = "dagger" } dagger-compiler = { group = "com.google.dagger", name = "dagger-compiler", version.ref = "dagger" } +dagger-android-processor = { group = "com.google.dagger", name = "dagger-android-processor", version.ref = "dagger" } dagger-hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "dagger" } dagger-hilt-compiler = { group = "com.google.dagger", name = "hilt-compiler", version.ref = "dagger" } @@ -155,6 +169,7 @@ kotlin-parcelizeRuntime = { module = "org.jetbrains.kotlin:kotlin-parcelize-runt kotlin-stdlib-jdk7 = { module = "org.jetbrains.kotlin:kotlin-stdlib-jdk7", version.ref = "kotlin" } # KotlinX kotlinx-coroutines-android = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-android", version.ref = "kotlinxCoroutines" } +kotlinx-coroutines-test = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-test", version.ref = "kotlinxCoroutines" } kotlinx-serialization-json = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-json", version.ref = "kotlinxSerialization" } # Other @@ -164,7 +179,14 @@ chickenhook-restrictionbypass = { group = "com.github.ChickenHook", name = "Rest coil-compose = { group = "io.coil-kt", name = "coil-compose", version.ref = "coil" } google-errorprone-annotations = { module = "com.google.errorprone:error_prone_annotations", version.ref = "error_prone_annotations" } google-material = { group = "com.google.android.material", name = "material", version.ref = "googleMaterial" } +google-truth = { group = "com.google.truth", name = "truth", version.ref = "truth" } hoko-blur = { group = "io.github.hokofly", name = "hoko-blur", version.ref = "hokoBlur" } +junit = { group = "junit", name = "junit", version.ref = "junitVersion" } +mockito-android = { group = "org.mockito", name = "mockito-android", version.ref = "mockito" } +mockito-kotlin = { group = "org.mockito.kotlin", name = "mockito-kotlin", version.ref = "mockitoKotlin" } +mockito-robolectric = { group = "org.mockito", name = "mockito-core", version.ref = "mockito" } +mockito-robolectric-bytebuddy = { group = "net.bytebuddy", name = "byte-buddy", version = "1.15.11" } +mockito-robolectric-bytebuddy-agent = { group = "net.bytebuddy", name = "byte-buddy-agent", version = "1.15.11" } javax-inject = { group = "javax.inject", name = "javax.inject", version.ref = "javaxInject" } kdrag0n-colorkt = { group = "dev.kdrag0n", name = "colorkt", version.ref = "kdrag0nColorkt" } leakcanary-android = { module = "com.squareup.leakcanary:leakcanary-android", version.ref = "leakcanaryAndroid" } diff --git a/modules/widgetpicker/build.gradle.kts b/modules/widgetpicker/build.gradle.kts index 8df71f690c..07678bffb8 100644 --- a/modules/widgetpicker/build.gradle.kts +++ b/modules/widgetpicker/build.gradle.kts @@ -15,19 +15,12 @@ */ plugins { - id(libs.plugins.android.library.get().pluginId) - id(libs.plugins.kotlin.android.get().pluginId) - id(libs.plugins.kotlin.kapt.get().pluginId) - id(libs.plugins.compose.compiler.get().pluginId) + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.android) + alias(libs.plugins.google.ksp) + alias(libs.plugins.kotlin.compose) } -// For the screenshot testing lib dependencies -apply() - -val androidTop = extra["ANDROID_TOP"].toString() -val robolibBuildDir = project(":RobolectricLib").layout.buildDirectory.toString() -val widgetPickerDir = "$androidTop/packages/apps/Launcher3/modules/widgetpicker" - android.buildFeatures.compose = true android { @@ -39,32 +32,24 @@ android { } sourceSets { named("main") { - java.setSrcDirs(listOf("$widgetPickerDir/src")) - manifest.srcFile("$widgetPickerDir/AndroidManifest.xml") - res.setSrcDirs(listOf("$widgetPickerDir/res")) + java.setSrcDirs(listOf("src")) + manifest.srcFile("AndroidManifest.xml") + res.setSrcDirs(listOf("res")) } named("androidTest") { java.setSrcDirs( listOf( - "$widgetPickerDir/tests/multivalentScreenshotTests/src", - "$widgetPickerDir/tests/multivalentTestsForDevice/src", + "tests/multivalentScreenshotTests/src", + "tests/multivalentTestsForDevice/src", ) ) - manifest.srcFile("$widgetPickerDir/tests/AndroidManifest.xml") + manifest.srcFile("tests/AndroidManifest.xml") } named("test") { - java.setSrcDirs(listOf("$widgetPickerDir/tests/multivalentTests/src")) - resources.setSrcDirs(listOf("$widgetPickerDir/tests/config")) - manifest.srcFile("$widgetPickerDir/tests/AndroidManifest.xml") - res.setSrcDirs(listOf("$widgetPickerDir/tests/multivalentScreenshotTests/res")) - } - } - signingConfigs { - getByName("debug") { - // This is necessary or the private APIs from the studiow-generate SDK won't work. - // Without the platform keystore, it will crash with: - // "java.lang.NoSuchMethodError: No static method asyncTraceForTrackBegin" - storeFile = file("$androidTop/vendor/google/certs/devkeys/platform.keystore") + java.setSrcDirs(listOf("tests/multivalentTests/src")) + resources.setSrcDirs(listOf("tests/config")) + manifest.srcFile("tests/AndroidManifest.xml") + res.setSrcDirs(listOf("tests/multivalentScreenshotTests/res")) } } @@ -80,8 +65,8 @@ android { dependencies { implementation(libs.androidx.core) implementation(libs.dagger) - kapt(libs.dagger.compiler) - kapt(libs.dagger.android.processor) + ksp(libs.dagger.compiler) + ksp(libs.dagger.android.processor) // Compose UI dependencies implementation(libs.compose.ui) @@ -91,11 +76,11 @@ dependencies { implementation(libs.androidx.activity.compose) // Other UI dependencies - implementation(libs.androidx.material3.window.size.cls) + implementation(libs.compose.material3.windowSizeClass) implementation(libs.androidx.window) // Compose android studio preview support - implementation(libs.compose.material.icons.extended) + implementation(libs.compose.material.icons) implementation(libs.compose.ui.tooling.preview) debugImplementation(libs.compose.ui.tooling) @@ -120,16 +105,6 @@ dependencies { androidTestApi(libs.compose.ui.test.junit4) debugApi(libs.compose.ui.test.manifest) - // Shared testing libs - testImplementation(project(":RobolectricLib")) - testImplementation(project(":SharedTestLib")) - androidTestImplementation(project(":SharedTestLib")) - androidTestImplementation(project(":PlatformParameterizedLib")) - androidTestImplementation(project(":ScreenshotLib")) - androidTestImplementation(project(":ScreenshotComposeLib")) -} - -// Work around for kotlin bug with symlinked source: http://b/316363701 -tasks.matching { it.name.matches(Regex("widgetpicker.*compile.*TestKotlin")) }.configureEach { - inputs.dir("$widgetPickerDir/tests/multivalentTests/src") + implementation(projects.concurrent) + implementation(projects.dagger) } diff --git a/settings.gradle b/settings.gradle index 293c2215ec..4bba2c621b 100644 --- a/settings.gradle +++ b/settings.gradle @@ -28,6 +28,8 @@ develocity { } } +rootProject.name = "lawnchair" + dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { @@ -107,3 +109,6 @@ include ':flags' include ':wmshell' include ':dagger' include ':concurrent' +//include ':compose' +include ':modules:widgetpicker' +