From 6b2d2b4f1bde493f9bbf3f75bb110bfe6442a1ac Mon Sep 17 00:00:00 2001 From: lihenggui Date: Thu, 2 May 2024 12:33:43 -0700 Subject: [PATCH] Convert app-nia-catalog to compose multiplatform application --- app-nia-catalog/build.gradle.kts | 106 +++++++++++++----- .../{main => androidMain}/AndroidManifest.xml | 0 .../apps/niacatalog/NiaCatalogActivity.kt | 0 .../res/drawable/ic_launcher_background.xml | 0 .../res/drawable/ic_launcher_foreground.xml | 0 .../res/mipmap-anydpi-v26/ic_launcher.xml | 0 .../mipmap-anydpi-v26/ic_launcher_round.xml | 0 .../res/values/strings.xml | 0 .../res/values/themes.xml | 0 .../samples/apps/niacatalog/ui/Catalog.kt | 0 .../src/desktopMain/kotlin/main.kt | 28 +++++ .../src/iosMain/kotlin/MainViewController.kt | 4 + 12 files changed, 111 insertions(+), 27 deletions(-) rename app-nia-catalog/src/{main => androidMain}/AndroidManifest.xml (100%) rename app-nia-catalog/src/{main => androidMain}/kotlin/com/google/samples/apps/niacatalog/NiaCatalogActivity.kt (100%) rename app-nia-catalog/src/{main => androidMain}/res/drawable/ic_launcher_background.xml (100%) rename app-nia-catalog/src/{main => androidMain}/res/drawable/ic_launcher_foreground.xml (100%) rename app-nia-catalog/src/{main => androidMain}/res/mipmap-anydpi-v26/ic_launcher.xml (100%) rename app-nia-catalog/src/{main => androidMain}/res/mipmap-anydpi-v26/ic_launcher_round.xml (100%) rename app-nia-catalog/src/{main => androidMain}/res/values/strings.xml (100%) rename app-nia-catalog/src/{main => androidMain}/res/values/themes.xml (100%) rename app-nia-catalog/src/{main => commonMain}/kotlin/com/google/samples/apps/niacatalog/ui/Catalog.kt (100%) create mode 100644 app-nia-catalog/src/desktopMain/kotlin/main.kt create mode 100644 app-nia-catalog/src/iosMain/kotlin/MainViewController.kt diff --git a/app-nia-catalog/build.gradle.kts b/app-nia-catalog/build.gradle.kts index 94d55b81c..05639b2ef 100644 --- a/app-nia-catalog/build.gradle.kts +++ b/app-nia-catalog/build.gradle.kts @@ -13,27 +13,58 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import com.google.samples.apps.nowinandroid.FlavorDimension -import com.google.samples.apps.nowinandroid.NiaFlavor +import org.jetbrains.compose.desktop.application.dsl.TargetFormat + -/* - * Copyright 2022 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ plugins { - alias(libs.plugins.nowinandroid.android.application) - alias(libs.plugins.nowinandroid.android.application.compose) + alias(libs.plugins.kotlin.multiplatform) + alias(libs.plugins.android.application) + alias(libs.plugins.jetbrains.compose) + alias(libs.plugins.compose.compiler) +} + +kotlin { + androidTarget { + compilations.all { + kotlinOptions { + jvmTarget = "11" + } + } + } + + jvm("desktop") + + listOf( + iosX64(), + iosArm64(), + iosSimulatorArm64() + ).forEach { iosTarget -> + iosTarget.binaries.framework { + baseName = "ComposeApp" + isStatic = true + } + } + + sourceSets { + val desktopMain by getting + + androidMain.dependencies { + implementation(libs.compose.ui.tooling.preview) + implementation(libs.androidx.activity.compose) + } + commonMain.dependencies { + implementation(compose.runtime) + implementation(compose.foundation) + implementation(compose.material3) + implementation(compose.ui) + implementation(compose.components.resources) + implementation(compose.components.uiToolingPreview) + implementation(projects.core.designsystem) + } + desktopMain.dependencies { + implementation(compose.desktop.currentOs) + } + } } android { @@ -41,10 +72,12 @@ android { applicationId = "com.google.samples.apps.niacatalog" versionCode = 1 versionName = "0.0.1" // X.Y.Z; X = Major, Y = minor, Z = Patch level - + minSdk = libs.versions.android.minSdk.get().toInt() + targetSdk = libs.versions.android.targetSdk.get().toInt() + compileSdk = libs.versions.android.compileSdk.get().toInt() // The UI catalog does not depend on content from the app, however, it depends on modules // which do, so we must specify a default value for the contentType dimension. - missingDimensionStrategy(FlavorDimension.contentType.name, NiaFlavor.demo.name) + missingDimensionStrategy("contentType", "demo") } packaging { @@ -53,6 +86,9 @@ android { } } namespace = "com.google.samples.apps.niacatalog" + sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") + sourceSets["main"].res.srcDirs("src/androidMain/res") + sourceSets["main"].resources.srcDirs("src/commonMain/resources") buildTypes { release { @@ -62,15 +98,31 @@ android { signingConfig = signingConfigs.named("debug").get() } } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + isCoreLibraryDesugaringEnabled = true + } + + dependencies { + debugImplementation(libs.compose.ui.tooling) + coreLibraryDesugaring(libs.android.desugarJdkLibs) + } } -dependencies { - implementation(libs.androidx.activity.compose) +compose.desktop { + application { + mainClass = "MainKt" - implementation(projects.core.designsystem) - implementation(projects.core.ui) + nativeDistributions { + targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb) + packageName = "com.google.samples.apps.niacatalog" + packageVersion = "1.0.0" + } + } } -dependencyGuard { - configuration("releaseRuntimeClasspath") +compose.experimental { + web.application {} } diff --git a/app-nia-catalog/src/main/AndroidManifest.xml b/app-nia-catalog/src/androidMain/AndroidManifest.xml similarity index 100% rename from app-nia-catalog/src/main/AndroidManifest.xml rename to app-nia-catalog/src/androidMain/AndroidManifest.xml diff --git a/app-nia-catalog/src/main/kotlin/com/google/samples/apps/niacatalog/NiaCatalogActivity.kt b/app-nia-catalog/src/androidMain/kotlin/com/google/samples/apps/niacatalog/NiaCatalogActivity.kt similarity index 100% rename from app-nia-catalog/src/main/kotlin/com/google/samples/apps/niacatalog/NiaCatalogActivity.kt rename to app-nia-catalog/src/androidMain/kotlin/com/google/samples/apps/niacatalog/NiaCatalogActivity.kt diff --git a/app-nia-catalog/src/main/res/drawable/ic_launcher_background.xml b/app-nia-catalog/src/androidMain/res/drawable/ic_launcher_background.xml similarity index 100% rename from app-nia-catalog/src/main/res/drawable/ic_launcher_background.xml rename to app-nia-catalog/src/androidMain/res/drawable/ic_launcher_background.xml diff --git a/app-nia-catalog/src/main/res/drawable/ic_launcher_foreground.xml b/app-nia-catalog/src/androidMain/res/drawable/ic_launcher_foreground.xml similarity index 100% rename from app-nia-catalog/src/main/res/drawable/ic_launcher_foreground.xml rename to app-nia-catalog/src/androidMain/res/drawable/ic_launcher_foreground.xml diff --git a/app-nia-catalog/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app-nia-catalog/src/androidMain/res/mipmap-anydpi-v26/ic_launcher.xml similarity index 100% rename from app-nia-catalog/src/main/res/mipmap-anydpi-v26/ic_launcher.xml rename to app-nia-catalog/src/androidMain/res/mipmap-anydpi-v26/ic_launcher.xml diff --git a/app-nia-catalog/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app-nia-catalog/src/androidMain/res/mipmap-anydpi-v26/ic_launcher_round.xml similarity index 100% rename from app-nia-catalog/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml rename to app-nia-catalog/src/androidMain/res/mipmap-anydpi-v26/ic_launcher_round.xml diff --git a/app-nia-catalog/src/main/res/values/strings.xml b/app-nia-catalog/src/androidMain/res/values/strings.xml similarity index 100% rename from app-nia-catalog/src/main/res/values/strings.xml rename to app-nia-catalog/src/androidMain/res/values/strings.xml diff --git a/app-nia-catalog/src/main/res/values/themes.xml b/app-nia-catalog/src/androidMain/res/values/themes.xml similarity index 100% rename from app-nia-catalog/src/main/res/values/themes.xml rename to app-nia-catalog/src/androidMain/res/values/themes.xml diff --git a/app-nia-catalog/src/main/kotlin/com/google/samples/apps/niacatalog/ui/Catalog.kt b/app-nia-catalog/src/commonMain/kotlin/com/google/samples/apps/niacatalog/ui/Catalog.kt similarity index 100% rename from app-nia-catalog/src/main/kotlin/com/google/samples/apps/niacatalog/ui/Catalog.kt rename to app-nia-catalog/src/commonMain/kotlin/com/google/samples/apps/niacatalog/ui/Catalog.kt diff --git a/app-nia-catalog/src/desktopMain/kotlin/main.kt b/app-nia-catalog/src/desktopMain/kotlin/main.kt new file mode 100644 index 000000000..7d5527f4f --- /dev/null +++ b/app-nia-catalog/src/desktopMain/kotlin/main.kt @@ -0,0 +1,28 @@ +/* + * Copyright 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import androidx.compose.ui.window.Window +import androidx.compose.ui.window.application +import com.google.samples.apps.niacatalog.ui.NiaCatalog + +fun main() = application { + Window( + onCloseRequest = ::exitApplication, + title = "NiA Catalog", + ) { + NiaCatalog() + } +} \ No newline at end of file diff --git a/app-nia-catalog/src/iosMain/kotlin/MainViewController.kt b/app-nia-catalog/src/iosMain/kotlin/MainViewController.kt new file mode 100644 index 000000000..da9607f1d --- /dev/null +++ b/app-nia-catalog/src/iosMain/kotlin/MainViewController.kt @@ -0,0 +1,4 @@ +import androidx.compose.ui.window.ComposeUIViewController +import com.google.samples.apps.niacatalog.ui.NiaCatalog + +fun MainViewController() = ComposeUIViewController { NiaCatalog() } \ No newline at end of file