diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 0000000..84a7c94 --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,44 @@ +FROM mcr.microsoft.com/devcontainers/java:17-bookworm + +# Always start as root for provisioning +USER root +ENV DEBIAN_FRONTEND=noninteractive + +# ---- System dependencies ---- +# Remove yarn repository to avoid GPG key errors +RUN rm -f /etc/apt/sources.list.d/yarn.list \ + && rm -rf /var/lib/apt/lists/* \ + && apt-get update \ + && apt-get install -y --no-install-recommends \ + curl \ + unzip \ + zip \ + libglu1-mesa \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +# ---- Android SDK env ---- +ENV ANDROID_SDK_ROOT=/usr/local/android-sdk +ENV ANDROID_HOME=${ANDROID_SDK_ROOT} +ENV PATH=${PATH}:${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin:${ANDROID_SDK_ROOT}/platform-tools + +# ---- Android command line tools ---- +RUN mkdir -p ${ANDROID_SDK_ROOT}/cmdline-tools \ + && curl -fsSL https://dl.google.com/android/repository/commandlinetools-linux-14742923_latest.zip -o /tmp/cmdline-tools.zip \ + && unzip /tmp/cmdline-tools.zip -d ${ANDROID_SDK_ROOT}/cmdline-tools \ + && mv ${ANDROID_SDK_ROOT}/cmdline-tools/cmdline-tools ${ANDROID_SDK_ROOT}/cmdline-tools/latest \ + && rm /tmp/cmdline-tools.zip + +# ---- SDK packages ---- +RUN yes | sdkmanager --licenses \ + && sdkmanager --update \ + && sdkmanager \ + "platform-tools" \ + "platforms;android-36" \ + "build-tools;36.0.0" + +# ---- Permissions (CRITICAL) ---- +RUN chown -R vscode:vscode ${ANDROID_SDK_ROOT} + +# Drop privileges +USER vscode diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..a797cbc --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,22 @@ +{ + "name": "Java + Android", + "build": { + "dockerfile": "Dockerfile" + }, + "features": { + "ghcr.io/devcontainers/features/java:1": { + "version": "17", + "installGradle": true + } + }, + "customizations": { + "vscode": { + "extensions": [ + "GitHub.copilot", + "oderwat.indent-rainbow", + "redhat.vscode-yaml" + ] + } + }, + "remoteUser": "vscode" +} diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e88a735..f20dd42 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -10,6 +10,7 @@ on: - '.gitignore' - 'renovate.json' - 'FUNDING.yml' + - '.devcontainer/**' workflow_dispatch: env: diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index acd59b8..34aa722 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -11,6 +11,7 @@ on: - '.github/**' - '!.github/workflows/**' - 'renovate.json' + - '.devcontainer/**' env: JAVA_VERSION: 17 diff --git a/.gitignore b/.gitignore index a368e93..568ed75 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,8 @@ .gradle /local.properties .DS_Store -/build +build +.kotlin /captures .externalNativeBuild .cxx @@ -11,5 +12,3 @@ local.properties # Ignore all files in the .idea directory except for name .idea/* !.idea/.name - -.kotlin/* \ No newline at end of file diff --git a/README.md b/README.md index 56db4e4..ed77b75 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,10 @@ # compose-floating-window -[![Release](https://jitpack.io/v/only52607/compose-floating-window.svg)](https://jitpack.io/#User/Repo) +[![Release](https://jitpack.io/v/ArthurKun21/compose-overlay-window.svg)](https://jitpack.io/#ArthurKun21/compose-overlay-window) [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) Global Floating Window Framework based on Jetpack Compose -[简体中文](README_CN.md) - ## Preview ![Preview](/preview/example.gif) @@ -22,38 +20,35 @@ Global Floating Window Framework based on Jetpack Compose ### Import Dependencies -- If the Gradle version is less than 7.0, add the Jitpack repository in the `build.gradle` of your app. +- Add on settings.gradle.kts -```groovy -repositories { - maven { url 'https://jitpack.io' } -} -``` - -- If the Gradle version is greater than or equal to 7.0, add it in the settings.gradle file. -```groovy +```kotlin dependencyResolutionManagement { repositories { - maven { url 'https://jitpack.io' } + maven { url = uri("https://jitpack.io") } } } ``` - Add `compose-floating-window` Dependency -```groovy + +```kotlin dependencies { - implementation "com.github.only52607:compose-floating-window:1.0" + implementation("com.github.ArthurKun21:compose-overlay-window:") } ``` ### Grant Floating Window Permission Add to `AndroidManifest.xml` + ```xml ``` -### Create Floating Window and Show +### Activity + +When you want to show the floating window while on the Activity, you can use the following code: ```kotlin val floatingWindow = ComposeFloatingWindow(applicationContext) @@ -69,65 +64,27 @@ floatingWindow.setContent { floatingWindow.show() ``` -> See [Sample App](https://github.com/only52607/compose-floating-window/tree/master/app). - -## Advanced Usage - -### Make Floating Window Draggable - -Use the `Modifier.dragFloatingWindow()` modifier on the component you want to make draggable. Example: - -```kotlin -FloatingActionButton( - modifier = Modifier.dragFloatingWindow() -) { - Icon(Icons.Filled.Call, "Call") -} -``` - -### Get the current instance of `ComposeFloatingWindow` +### Service -Using LocalComposeFloatingWindow to retrieve, here's an example: +When you want to show the floating window while on the Service, you can use the following code: ```kotlin -val floatingWindow = LocalComposeFloatingWindow.current -``` - -### Show Dialog - -When the Context of the floating window is set to Application, using AlertDialog and Dialog in the Compose interface of the floating window may result in a 'token is null' exception. In such cases, you can use the SystemAlertDialog or SystemDialog components, which can be used in the same way as the built-in AlertDialog and Dialog components. - -Example: -```kotlin -SystemAlertDialog( - onDismissRequest = { showDialog = false }, - confirmButton = { - TextButton(onClick = { showDialog = false }) { - Text(text = "OK") - } - }, - text = { - Text(text = "This is a system dialog") +val floatingWindow = ComposeServiceFloatingWindow(applicationContext) +floatingWindow.setContent { + FloatingActionButton( + modifier = Modifier.dragFloatingWindow(), + onClick = { + Log.i("") + }) { + Icon(Icons.Filled.Call, "Call") } -) -``` - -### ViewModel - -You can access the ViewModel from any Composable by calling the viewModel() function. - -```kotlin -class MyViewModel : ViewModel() { /*...*/ } - -@Composable -fun MyScreen( - viewModel: MyViewModel = viewModel() -) { - // use viewModel here } +floatingWindow.show() ``` -> See https://developer.android.com/jetpack/compose/libraries#viewmodel +## Advanced Usage + +> See [Sample Apps](samples). ## License diff --git a/README_CN.md b/README_CN.md deleted file mode 100644 index eeec8fa..0000000 --- a/README_CN.md +++ /dev/null @@ -1,132 +0,0 @@ -# compose-floating-window - -[![Release](https://jitpack.io/v/only52607/compose-floating-window.svg)](https://jitpack.io/#User/Repo) -[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) - -基于Jetpack Compose的全局悬浮窗框架 - -## 效果预览 - -![Preview](/preview/example.gif) - -## 特性 - -- 使用Compose代码描述悬浮窗界面 -- ViewModel支持 -- 可拖拽悬浮窗支持 -- 基于Application Context的对话框组件 - -## 基本使用 - -### 导入依赖 - -- 如果Gradle版本小于7.0,在应用的`build.gradle`中,添加Jitpack仓库 - -```groovy -repositories { - maven { url 'https://jitpack.io' } -} -``` - -- 如果Gradle版本大于等于7.0,在 settings.gradle 文件中加入 -```groovy -dependencyResolutionManagement { - repositories { - maven { url 'https://jitpack.io' } - } -} -``` - -- 添加ComposeFloatingWindow依赖 -```groovy -dependencies { - implementation "com.github.only52607:ComposeFloatingWindow:1.0" -} -``` - -### 增加悬浮窗权限 - -在`AndroidManifest.xml`中添加 -```xml - -``` - -### 创建悬浮窗并显示 - -```kotlin -val floatingWindow = ComposeFloatingWindow(applicationContext) -floatingWindow.setContent { - FloatingActionButton( - modifier = Modifier.dragFloatingWindow(), - onClick = { - Log.i("") - }) { - Icon(Icons.Filled.Call, "Call") - } -} -floatingWindow.show() -``` - -> 查看[示例程序](https://github.com/only52607/compose-floating-window/tree/master/app),了解详细用法。 - -## 高级用法 - -### 创建可拖拽的悬浮窗 - -在需要拖拽的组件上使用`Modifier.dragFloatingWindow()`修饰符,示例: - -```kotlin -FloatingActionButton( - modifier = Modifier.dragFloatingWindow() -) { - Icon(Icons.Filled.Call, "Call") -} -``` - -### 获取当前ComposeFloatingWindow实例 - -使用`LocalComposeFloatingWindow`获取,示例: - -```kotlin -val floatingWindow = LocalComposeFloatingWindow.current -``` - -### 显示对话框 - -当悬浮窗的Context为Application时,在悬浮窗的Compose界面中使用`AlertDialog`和`Dialog`会出现token is null异常,这时可使用`SystemAlertDialog`或`SystemDialog`组件,用法与自带的`AlertDialog`和`Dialog`一致。 - -示例: -```kotlin -SystemAlertDialog( - onDismissRequest = { showDialog = false }, - confirmButton = { - TextButton(onClick = { showDialog = false }) { - Text(text = "OK") - } - }, - text = { - Text(text = "This is a system dialog") - } -) -``` - -### 使用ViewModel - -通过调用 viewModel() 函数,从任何可组合项访问 ViewModel。 - -```kotlin -class MyViewModel : ViewModel() { /*...*/ } - -@Composable -fun MyScreen( - viewModel: MyViewModel = viewModel() -) { - // use viewModel here -} -``` - -> 详情请参照[Android文档](https://developer.android.com/jetpack/compose/libraries#viewmodel) - -## License - -Apache 2.0 License \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 363d897..22f8bda 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,38 +3,14 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile // Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { - alias(libs.plugins.agp) apply false - alias(libs.plugins.kotlin.android) apply false - alias(libs.plugins.android.library) apply false - alias(libs.plugins.compose.compiler) apply false alias(libs.plugins.ksp) apply false alias(libs.plugins.hilt.android) apply false - alias(libs.plugins.spotless) apply false } subprojects { - apply(plugin = "com.diffplug.spotless") tasks.withType().configureEach { compilerOptions { jvmTarget.set(JvmTarget.JVM_17) } } - configure { - kotlin { - target("**/*.kt", "**/*.kts") - targetExclude("**/build/**/*.kt") - ktlint(libs.ktlint.core.get().version).editorConfigOverride( - mapOf( - "ktlint_standard_annotation" to "disabled", - ), - ) - trimTrailingWhitespace() - endWithNewline() - } - format("xml") { - target("**/*.xml") - trimTrailingWhitespace() - endWithNewline() - } - } } diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts new file mode 100644 index 0000000..b729296 --- /dev/null +++ b/buildSrc/build.gradle.kts @@ -0,0 +1,20 @@ +plugins { + `kotlin-dsl` +} + +repositories { + gradlePluginPortal() + mavenCentral() + google() +} + +dependencies { + implementation(libs.androidx.gradle) + implementation(libs.kotlin.gradle) + implementation(libs.compose.compiler.gradle) + implementation(libs.spotless.gradle) + implementation(gradleApi()) + + // workaround to enable version catalogs (libs) in buildSrc + implementation(files(libs.javaClass.superclass.protectionDomain.codeSource.location)) +} diff --git a/buildSrc/settings.gradle.kts b/buildSrc/settings.gradle.kts new file mode 100644 index 0000000..d6e07ba --- /dev/null +++ b/buildSrc/settings.gradle.kts @@ -0,0 +1,9 @@ +dependencyResolutionManagement { + versionCatalogs { + create("libs") { + from(files("../gradle/libs.versions.toml")) + } + } +} + +rootProject.name = "ComposeFloatingWindow-buildSrc" diff --git a/buildSrc/src/main/kotlin/android.application.gradle.kts b/buildSrc/src/main/kotlin/android.application.gradle.kts new file mode 100644 index 0000000..d9d2576 --- /dev/null +++ b/buildSrc/src/main/kotlin/android.application.gradle.kts @@ -0,0 +1,25 @@ +import buildlogic.AndroidConfig +import buildlogic.configureAndroid + +plugins { + id("com.android.application") + id("org.jetbrains.kotlin.plugin.compose") + id("code.lint") +} + +android { + defaultConfig { + targetSdk = AndroidConfig.TARGET_SDK + } + configureAndroid(this) + + buildFeatures { + compose = true + } + + packaging { + resources { + excludes.add("/META-INF/{AL2.0,LGPL2.1}") + } + } +} diff --git a/buildSrc/src/main/kotlin/android.tests.gradle.kts b/buildSrc/src/main/kotlin/android.tests.gradle.kts new file mode 100644 index 0000000..cf44a8f --- /dev/null +++ b/buildSrc/src/main/kotlin/android.tests.gradle.kts @@ -0,0 +1,21 @@ +import org.gradle.accessors.dm.LibrariesForLibs + +plugins { + id("com.android.application") +} + +android { + defaultConfig { + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } +} + +val libs = the() + +dependencies { + testImplementation(libs.junit) + androidTestImplementation(libs.androidx.test.junit) + androidTestImplementation(libs.androidx.test.espresso) + androidTestImplementation(platform(libs.compose.bom)) + androidTestImplementation(libs.compose.ui.test.junit4) +} diff --git a/buildSrc/src/main/kotlin/buildLogic/AndroidConfig.kt b/buildSrc/src/main/kotlin/buildLogic/AndroidConfig.kt new file mode 100644 index 0000000..93eb612 --- /dev/null +++ b/buildSrc/src/main/kotlin/buildLogic/AndroidConfig.kt @@ -0,0 +1,14 @@ +package buildlogic + +import org.gradle.api.JavaVersion as GradleJavaVersion +import org.jetbrains.kotlin.gradle.dsl.JvmTarget as KotlinJvmTarget + +object AndroidConfig { + const val COMPILE_SDK = 36 + const val TARGET_SDK = 36 + const val MIN_SDK = 24 + + // https://youtrack.jetbrains.com/issue/KT-66995/JvmTarget-and-JavaVersion-compatibility-for-easier-JVM-version-setup + val JavaVersion = GradleJavaVersion.VERSION_17 + val JvmTarget = KotlinJvmTarget.JVM_17 +} \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/buildLogic/ProjectExtensions.kt b/buildSrc/src/main/kotlin/buildLogic/ProjectExtensions.kt new file mode 100644 index 0000000..dc69f1d --- /dev/null +++ b/buildSrc/src/main/kotlin/buildLogic/ProjectExtensions.kt @@ -0,0 +1,23 @@ +package buildlogic + +import com.android.build.api.dsl.CommonExtension +import org.gradle.accessors.dm.LibrariesForLibs +import org.gradle.api.Project +import org.gradle.kotlin.dsl.the + +val Project.libs get() = the() + +internal fun Project.configureAndroid(commonExtension: CommonExtension) { + commonExtension.apply { + compileSdk = AndroidConfig.COMPILE_SDK + + defaultConfig.apply { + minSdk = AndroidConfig.MIN_SDK + } + + compileOptions.apply { + sourceCompatibility = AndroidConfig.JavaVersion + targetCompatibility = AndroidConfig.JavaVersion + } + } +} diff --git a/buildSrc/src/main/kotlin/code.lint.gradle.kts b/buildSrc/src/main/kotlin/code.lint.gradle.kts new file mode 100644 index 0000000..1b6539e --- /dev/null +++ b/buildSrc/src/main/kotlin/code.lint.gradle.kts @@ -0,0 +1,25 @@ +import org.gradle.accessors.dm.LibrariesForLibs + +plugins { + id("com.diffplug.spotless") +} + +val libs = the() + + +spotless { + kotlin { + target("**/*.kt", "**/*.kts") + targetExclude("**/build/**/*.kt") + ktlint(libs.ktlint.core.get().version).editorConfigOverride( + mapOf("ktlint_standard_annotation" to "disabled") + ) + trimTrailingWhitespace() + endWithNewline() + } + format("xml") { + target("**/*.xml") + trimTrailingWhitespace() + endWithNewline() + } +} \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/library.gradle.kts b/buildSrc/src/main/kotlin/library.gradle.kts new file mode 100644 index 0000000..60ff369 --- /dev/null +++ b/buildSrc/src/main/kotlin/library.gradle.kts @@ -0,0 +1,25 @@ +import buildlogic.AndroidConfig +import buildlogic.configureAndroid + +plugins { + id("com.android.library") + id("org.jetbrains.kotlin.plugin.compose") + id("code.lint") +} + +android { + defaultConfig { + lint.targetSdk = AndroidConfig.TARGET_SDK + } + configureAndroid(this) + + buildFeatures { + compose = true + } + + packaging { + resources { + excludes.add("/META-INF/{AL2.0,LGPL2.1}") + } + } +} \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/library.tests.gradle.kts b/buildSrc/src/main/kotlin/library.tests.gradle.kts new file mode 100644 index 0000000..6f2acda --- /dev/null +++ b/buildSrc/src/main/kotlin/library.tests.gradle.kts @@ -0,0 +1,27 @@ +import org.gradle.accessors.dm.LibrariesForLibs + +plugins { + id("com.android.library") +} + +android { + defaultConfig { + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + testOptions { + unitTests.all { + it.useJUnitPlatform() + } + } +} + +val libs = the() + +dependencies { + testImplementation(libs.junit) + + androidTestImplementation(libs.androidx.test.junit) + androidTestImplementation(libs.androidx.test.espresso) + androidTestImplementation(platform(libs.compose.bom)) + androidTestImplementation(libs.compose.ui.test.junit4) +} diff --git a/buildSrc/src/main/kotlin/sample.common.deps.gradle.kts b/buildSrc/src/main/kotlin/sample.common.deps.gradle.kts new file mode 100644 index 0000000..3bce02e --- /dev/null +++ b/buildSrc/src/main/kotlin/sample.common.deps.gradle.kts @@ -0,0 +1,17 @@ +import org.gradle.accessors.dm.LibrariesForLibs + +plugins { + id("com.android.application") +} + +val libs = the() + +dependencies { + implementation(libs.appcompat) + implementation(libs.androidx.core.ktx) + implementation(libs.androidx.lifecycle.runtime.ktx) + implementation(libs.androidx.lifecycle.viewmodel.compose) + implementation(libs.activity.compose) + implementation(platform(libs.compose.bom)) + implementation(libs.bundles.compose.ui) +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 95a449c..891f2a0 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,7 +3,7 @@ compile-sdk = "36" target-sdk = "36" min-sdk = "24" -agp = "8.13.2" +agp = "9.0.0" kotlin = "2.3.0" android-core-ktx = "1.17.0" @@ -11,7 +11,7 @@ appcompat = "1.7.1" lifecycle = "2.10.0" activity-compose = "1.12.2" -compose-bom = "2026.01.00" +compose-bom = "2026.01.01" junit = "4.13.2" @@ -22,12 +22,12 @@ google-material = "1.13.0" leakcanary = "2.14" -hilt = "2.58" -ksp = "2.3.4" +hilt = "2.59" +ksp = "2.3.5" datastore = "1.2.0" -spotless = "8.1.0" +spotless = "8.2.1" ktlint-core = "1.8.0" [libraries] @@ -66,7 +66,15 @@ datastore-preferences = { module = "androidx.datastore:datastore-preferences", v ktlint-core = { module = "com.pinterest.ktlint:ktlint-cli", version.ref = "ktlint-core" } -kotlin-metadata = { module = "org.jetbrains.kotlin:kotlin-metadata-jvm", version = "2.3.0" } +# +# Gradle libraries +# + +androidx-gradle = { module = "com.android.tools.build:gradle", version.ref = "agp" } +kotlin-gradle = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } +compose-compiler-gradle = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin" } + +spotless-gradle = { group = "com.diffplug.spotless", name = "spotless-plugin-gradle", version.ref = "spotless" } [plugins] kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index f8e1ee3..61285a6 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 23449a2..19a6bde 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.0-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/library/build.gradle.kts b/library/build.gradle.kts index 4231376..d48cafa 100644 --- a/library/build.gradle.kts +++ b/library/build.gradle.kts @@ -1,20 +1,11 @@ plugins { - id("com.android.library") - kotlin("android") `maven-publish` - alias(libs.plugins.compose.compiler) + id("library") + id("library.tests") } android { namespace = "com.github.only52607.compose.window" - compileSdk = libs.versions.compile.sdk.get().toInt() - - defaultConfig { - minSdk = libs.versions.min.sdk.get().toInt() - - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - consumerProguardFiles("consumer-rules.pro") - } buildTypes { release { @@ -25,13 +16,6 @@ android { ) } } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - } - buildFeatures { - compose = true - } publishing { singleVariant("release") { withSourcesJar() @@ -56,17 +40,13 @@ dependencies { implementation(libs.compose.ui.graphics) implementation(libs.compose.ui.tooling.preview) implementation(libs.compose.material3) - androidTestImplementation(platform(libs.compose.bom)) - androidTestImplementation(libs.compose.ui.test.junit4) + debugImplementation(libs.compose.ui.tooling) debugImplementation(libs.compose.ui.test.manifest) implementation(libs.androidx.core.ktx) implementation(libs.appcompat) implementation(libs.google.material) - testImplementation(libs.junit) - androidTestImplementation(libs.androidx.test.junit) - androidTestImplementation(libs.androidx.test.espresso) } publishing { diff --git a/samples/app-activity/build.gradle.kts b/samples/app-activity/build.gradle.kts index a47cd46..885ea2d 100644 --- a/samples/app-activity/build.gradle.kts +++ b/samples/app-activity/build.gradle.kts @@ -1,21 +1,16 @@ plugins { - alias(libs.plugins.agp) - alias(libs.plugins.kotlin.android) - alias(libs.plugins.compose.compiler) + id("android.application") + id("android.tests") + id("sample.common.deps") } android { namespace = "io.github.arthurkun.app.activity" - compileSdk = libs.versions.compile.sdk.get().toInt() defaultConfig { applicationId = "io.github.arthurkun.floating.window" - minSdk = libs.versions.min.sdk.get().toInt() - targetSdk = libs.versions.target.sdk.get().toInt() versionCode = 1 versionName = "1.0" - - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } buildTypes { @@ -28,30 +23,11 @@ android { signingConfig = signingConfigs.getByName("debug") } } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - } - buildFeatures { - compose = true - } } dependencies { implementation(project(":library")) - implementation(libs.appcompat) - implementation(libs.androidx.core.ktx) - implementation(libs.androidx.lifecycle.runtime.ktx) - implementation(libs.androidx.lifecycle.viewmodel.compose) - implementation(libs.activity.compose) - implementation(platform(libs.compose.bom)) - implementation(libs.bundles.compose.ui) - testImplementation(libs.junit) - androidTestImplementation(libs.androidx.test.junit) - androidTestImplementation(libs.androidx.test.espresso) - androidTestImplementation(platform(libs.compose.bom)) - androidTestImplementation(libs.compose.ui.test.junit4) debugImplementation(libs.compose.ui.tooling) debugImplementation(libs.compose.ui.test.manifest) } diff --git a/samples/fullscreen-dialog/build.gradle.kts b/samples/fullscreen-dialog/build.gradle.kts index 3e7b418..31749f8 100644 --- a/samples/fullscreen-dialog/build.gradle.kts +++ b/samples/fullscreen-dialog/build.gradle.kts @@ -1,21 +1,16 @@ plugins { - alias(libs.plugins.agp) - alias(libs.plugins.kotlin.android) - alias(libs.plugins.compose.compiler) + id("android.application") + id("android.tests") + id("sample.common.deps") } android { namespace = "io.github.arthurkun.fullscreen.dialog" - compileSdk = libs.versions.compile.sdk.get().toInt() defaultConfig { applicationId = "io.github.arthurkun.floating.window" - minSdk = libs.versions.min.sdk.get().toInt() - targetSdk = libs.versions.target.sdk.get().toInt() versionCode = 1 versionName = "1.0" - - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } buildTypes { @@ -28,30 +23,11 @@ android { signingConfig = signingConfigs.getByName("debug") } } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - } - buildFeatures { - compose = true - } } dependencies { implementation(project(":library")) - implementation(libs.appcompat) - implementation(libs.androidx.core.ktx) - implementation(libs.androidx.lifecycle.runtime.ktx) - implementation(libs.androidx.lifecycle.viewmodel.compose) - implementation(libs.activity.compose) - implementation(platform(libs.compose.bom)) - implementation(libs.bundles.compose.ui) - testImplementation(libs.junit) - androidTestImplementation(libs.androidx.test.junit) - androidTestImplementation(libs.androidx.test.espresso) - androidTestImplementation(platform(libs.compose.bom)) - androidTestImplementation(libs.compose.ui.test.junit4) debugImplementation(libs.compose.ui.tooling) debugImplementation(libs.compose.ui.test.manifest) } diff --git a/samples/keyboard-usage/build.gradle.kts b/samples/keyboard-usage/build.gradle.kts index 3146e9a..8897bcd 100644 --- a/samples/keyboard-usage/build.gradle.kts +++ b/samples/keyboard-usage/build.gradle.kts @@ -1,21 +1,16 @@ plugins { - alias(libs.plugins.agp) - alias(libs.plugins.kotlin.android) - alias(libs.plugins.compose.compiler) + id("android.application") + id("android.tests") + id("sample.common.deps") } android { namespace = "io.github.arthurkun.keyboard.usage" - compileSdk = libs.versions.compile.sdk.get().toInt() defaultConfig { applicationId = "io.github.arthurkun.floating.window" - minSdk = libs.versions.min.sdk.get().toInt() - targetSdk = libs.versions.target.sdk.get().toInt() versionCode = 1 versionName = "1.0" - - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } buildTypes { @@ -28,30 +23,11 @@ android { signingConfig = signingConfigs.getByName("debug") } } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - } - buildFeatures { - compose = true - } } dependencies { implementation(project(":library")) - implementation(libs.appcompat) - implementation(libs.androidx.core.ktx) - implementation(libs.androidx.lifecycle.runtime.ktx) - implementation(libs.androidx.lifecycle.viewmodel.compose) - implementation(libs.activity.compose) - implementation(platform(libs.compose.bom)) - implementation(libs.bundles.compose.ui) - testImplementation(libs.junit) - androidTestImplementation(libs.androidx.test.junit) - androidTestImplementation(libs.androidx.test.espresso) - androidTestImplementation(platform(libs.compose.bom)) - androidTestImplementation(libs.compose.ui.test.junit4) debugImplementation(libs.compose.ui.tooling) debugImplementation(libs.compose.ui.test.manifest) } diff --git a/samples/service-hilt/build.gradle.kts b/samples/service-hilt/build.gradle.kts index 0f930d5..bf9c887 100644 --- a/samples/service-hilt/build.gradle.kts +++ b/samples/service-hilt/build.gradle.kts @@ -1,7 +1,7 @@ plugins { - alias(libs.plugins.agp) - alias(libs.plugins.kotlin.android) - alias(libs.plugins.compose.compiler) + id("android.application") + id("android.tests") + id("sample.common.deps") alias(libs.plugins.hilt.android) alias(libs.plugins.ksp) @@ -9,16 +9,11 @@ plugins { android { namespace = "io.github.arthurkun.service.hilt" - compileSdk = libs.versions.compile.sdk.get().toInt() defaultConfig { applicationId = "io.github.arthurkun.floating.window" - minSdk = libs.versions.min.sdk.get().toInt() - targetSdk = libs.versions.target.sdk.get().toInt() versionCode = 1 versionName = "1.0" - - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } buildTypes { @@ -31,38 +26,16 @@ android { signingConfig = signingConfigs.getByName("debug") } } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - } - buildFeatures { - compose = true - } } dependencies { implementation(project(":library")) - implementation(libs.appcompat) - implementation(libs.androidx.core.ktx) - implementation(libs.androidx.lifecycle.runtime.ktx) - implementation(libs.androidx.lifecycle.viewmodel.compose) - implementation(libs.activity.compose) - implementation(platform(libs.compose.bom)) - implementation(libs.bundles.compose.ui) - testImplementation(libs.junit) - androidTestImplementation(libs.androidx.test.junit) - androidTestImplementation(libs.androidx.test.espresso) - androidTestImplementation(platform(libs.compose.bom)) - androidTestImplementation(libs.compose.ui.test.junit4) debugImplementation(libs.compose.ui.tooling) debugImplementation(libs.compose.ui.test.manifest) implementation(libs.dagger.hilt.android) ksp(libs.dagger.hilt.compiler) - // Workaround for dagger-hilt and kotlin 2.3.0 compatibility issue - // https://github.com/google/dagger/issues/5001#issuecomment-3684972416 - ksp(libs.kotlin.metadata) implementation(libs.bundles.datastore) }