diff --git a/androidApp/build.gradle.kts b/androidApp/build.gradle.kts new file mode 100644 index 0000000..6baa214 --- /dev/null +++ b/androidApp/build.gradle.kts @@ -0,0 +1,38 @@ +plugins { + alias(libs.plugins.android.application) + alias(libs.plugins.compose.multiplatform) + alias(libs.plugins.compose.compiler) +} + +android { + namespace = "com.avinal.memos" + compileSdk = 36 + + defaultConfig { + applicationId = "com.avinal.memos" + minSdk = 26 + targetSdk = 36 + versionCode = 1 + versionName = "1.0.0" + } + + buildTypes { + release { + isMinifyEnabled = true + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + } + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } +} + +dependencies { + implementation(project(":composeApp")) + implementation(libs.androidx.activity.compose) +} diff --git a/androidApp/proguard-rules.pro b/androidApp/proguard-rules.pro new file mode 100644 index 0000000..992e329 --- /dev/null +++ b/androidApp/proguard-rules.pro @@ -0,0 +1,17 @@ +# Ktor +-keep class io.ktor.** { *; } +-dontwarn io.ktor.** + +# kotlinx.serialization +-keepattributes *Annotation*, InnerClasses +-dontnote kotlinx.serialization.AnnotationsKt +-keepclassmembers class kotlinx.serialization.json.** { *** Companion; } +-keepclasseswithmembers class kotlinx.serialization.json.** { kotlinx.serialization.KSerializer serializer(...); } +-keep,includedescriptorclasses class com.avinal.memos.**$$serializer { *; } +-keepclassmembers class com.avinal.memos.** { *** Companion; } +-keepclasseswithmembers class com.avinal.memos.** { kotlinx.serialization.KSerializer serializer(...); } + +# Room +-keep class * extends androidx.room.RoomDatabase +-keep @androidx.room.Entity class * +-dontwarn androidx.room.paging.** diff --git a/androidApp/src/main/AndroidManifest.xml b/androidApp/src/main/AndroidManifest.xml new file mode 100644 index 0000000..c5733aa --- /dev/null +++ b/androidApp/src/main/AndroidManifest.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + diff --git a/androidApp/src/main/res/drawable/ic_launcher_background.xml b/androidApp/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..07d5da9 --- /dev/null +++ b/androidApp/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/androidApp/src/main/res/drawable/ic_launcher_foreground.xml b/androidApp/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/androidApp/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/androidApp/src/main/res/mipmap-anydpi/ic_launcher.xml b/androidApp/src/main/res/mipmap-anydpi/ic_launcher.xml new file mode 100644 index 0000000..6f3b755 --- /dev/null +++ b/androidApp/src/main/res/mipmap-anydpi/ic_launcher.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/androidApp/src/main/res/mipmap-anydpi/ic_launcher_round.xml b/androidApp/src/main/res/mipmap-anydpi/ic_launcher_round.xml new file mode 100644 index 0000000..6f3b755 --- /dev/null +++ b/androidApp/src/main/res/mipmap-anydpi/ic_launcher_round.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/androidApp/src/main/res/mipmap-hdpi/ic_launcher.webp b/androidApp/src/main/res/mipmap-hdpi/ic_launcher.webp new file mode 100644 index 0000000..c209e78 Binary files /dev/null and b/androidApp/src/main/res/mipmap-hdpi/ic_launcher.webp differ diff --git a/androidApp/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/androidApp/src/main/res/mipmap-hdpi/ic_launcher_round.webp new file mode 100644 index 0000000..b2dfe3d Binary files /dev/null and b/androidApp/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ diff --git a/androidApp/src/main/res/mipmap-mdpi/ic_launcher.webp b/androidApp/src/main/res/mipmap-mdpi/ic_launcher.webp new file mode 100644 index 0000000..4f0f1d6 Binary files /dev/null and b/androidApp/src/main/res/mipmap-mdpi/ic_launcher.webp differ diff --git a/androidApp/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/androidApp/src/main/res/mipmap-mdpi/ic_launcher_round.webp new file mode 100644 index 0000000..62b611d Binary files /dev/null and b/androidApp/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ diff --git a/androidApp/src/main/res/mipmap-xhdpi/ic_launcher.webp b/androidApp/src/main/res/mipmap-xhdpi/ic_launcher.webp new file mode 100644 index 0000000..948a307 Binary files /dev/null and b/androidApp/src/main/res/mipmap-xhdpi/ic_launcher.webp differ diff --git a/androidApp/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/androidApp/src/main/res/mipmap-xhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..1b9a695 Binary files /dev/null and b/androidApp/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ diff --git a/androidApp/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/androidApp/src/main/res/mipmap-xxhdpi/ic_launcher.webp new file mode 100644 index 0000000..28d4b77 Binary files /dev/null and b/androidApp/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ diff --git a/androidApp/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/androidApp/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..9287f50 Binary files /dev/null and b/androidApp/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ diff --git a/androidApp/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/androidApp/src/main/res/mipmap-xxxhdpi/ic_launcher.webp new file mode 100644 index 0000000..aa7d642 Binary files /dev/null and b/androidApp/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ diff --git a/androidApp/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/androidApp/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..9126ae3 Binary files /dev/null and b/androidApp/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ diff --git a/androidApp/src/main/res/values-night/themes.xml b/androidApp/src/main/res/values-night/themes.xml new file mode 100644 index 0000000..bcaec65 --- /dev/null +++ b/androidApp/src/main/res/values-night/themes.xml @@ -0,0 +1,6 @@ + + + diff --git a/androidApp/src/main/res/values/colors.xml b/androidApp/src/main/res/values/colors.xml new file mode 100644 index 0000000..f8c6127 --- /dev/null +++ b/androidApp/src/main/res/values/colors.xml @@ -0,0 +1,10 @@ + + + #FFBB86FC + #FF6200EE + #FF3700B3 + #FF03DAC5 + #FF018786 + #FF000000 + #FFFFFFFF + \ No newline at end of file diff --git a/androidApp/src/main/res/values/strings.xml b/androidApp/src/main/res/values/strings.xml new file mode 100644 index 0000000..b7c68c5 --- /dev/null +++ b/androidApp/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + Memos App + \ No newline at end of file diff --git a/androidApp/src/main/res/values/themes.xml b/androidApp/src/main/res/values/themes.xml new file mode 100644 index 0000000..bcaec65 --- /dev/null +++ b/androidApp/src/main/res/values/themes.xml @@ -0,0 +1,6 @@ + + + diff --git a/androidApp/src/main/res/xml/backup_rules.xml b/androidApp/src/main/res/xml/backup_rules.xml new file mode 100644 index 0000000..4df9255 --- /dev/null +++ b/androidApp/src/main/res/xml/backup_rules.xml @@ -0,0 +1,13 @@ + + + + \ No newline at end of file diff --git a/androidApp/src/main/res/xml/data_extraction_rules.xml b/androidApp/src/main/res/xml/data_extraction_rules.xml new file mode 100644 index 0000000..9ee9997 --- /dev/null +++ b/androidApp/src/main/res/xml/data_extraction_rules.xml @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/composeApp/build.gradle.kts b/composeApp/build.gradle.kts new file mode 100644 index 0000000..34f1343 --- /dev/null +++ b/composeApp/build.gradle.kts @@ -0,0 +1,82 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + +plugins { + alias(libs.plugins.kotlin.multiplatform) + alias(libs.plugins.android.kmp.library) + alias(libs.plugins.compose.multiplatform) + alias(libs.plugins.compose.compiler) + alias(libs.plugins.kotlin.serialization) + alias(libs.plugins.ksp) + alias(libs.plugins.room) +} + +kotlin { + @Suppress("DEPRECATION") + androidLibrary { + namespace = "com.avinal.memos.shared" + compileSdk = 36 + minSdk = 26 + + compilerOptions { + jvmTarget.set(JvmTarget.JVM_11) + } + } + + listOf( + iosArm64(), + iosSimulatorArm64() + ).forEach { iosTarget -> + iosTarget.binaries.framework { + baseName = "ComposeApp" + isStatic = true + } + } + + sourceSets { + commonMain.dependencies { + implementation(compose.runtime) + implementation(compose.foundation) + implementation(compose.material3) + implementation(compose.materialIconsExtended) + implementation(compose.ui) + implementation(compose.components.resources) + + implementation(libs.androidx.lifecycle.viewmodel) + implementation(libs.androidx.navigation.compose) + implementation(libs.androidx.datastore.preferences) + implementation(libs.kotlinx.coroutines.core) + implementation(libs.kotlinx.serialization.json) + implementation(libs.kotlinx.datetime) + + implementation(libs.ktor.client.core) + implementation(libs.ktor.client.content.negotiation) + implementation(libs.ktor.serialization.kotlinx.json) + + implementation(libs.coil.compose) + implementation(libs.coil.network.ktor) + + implementation(libs.room.runtime) + implementation(libs.sqlite.bundled) + } + + androidMain.dependencies { + implementation(libs.kotlinx.coroutines.android) + implementation(libs.ktor.client.okhttp) + implementation(libs.androidx.work.runtime) + } + + iosMain.dependencies { + implementation(libs.ktor.client.darwin) + } + } +} + +room { + schemaDirectory("$projectDir/schemas") +} + +dependencies { + add("kspAndroid", libs.room.compiler) + add("kspIosSimulatorArm64", libs.room.compiler) + add("kspIosArm64", libs.room.compiler) +} diff --git a/composeApp/src/androidMain/kotlin/com/avinal/memos/Platform.android.kt b/composeApp/src/androidMain/kotlin/com/avinal/memos/Platform.android.kt new file mode 100644 index 0000000..bccb6c2 --- /dev/null +++ b/composeApp/src/androidMain/kotlin/com/avinal/memos/Platform.android.kt @@ -0,0 +1,3 @@ +package com.avinal.memos + +actual fun getPlatformName(): String = "Android" diff --git a/composeApp/src/commonMain/kotlin/com/avinal/memos/Platform.kt b/composeApp/src/commonMain/kotlin/com/avinal/memos/Platform.kt new file mode 100644 index 0000000..501a352 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/com/avinal/memos/Platform.kt @@ -0,0 +1,3 @@ +package com.avinal.memos + +expect fun getPlatformName(): String diff --git a/composeApp/src/iosMain/kotlin/com/avinal/memos/MainViewController.kt b/composeApp/src/iosMain/kotlin/com/avinal/memos/MainViewController.kt new file mode 100644 index 0000000..5e3fec2 --- /dev/null +++ b/composeApp/src/iosMain/kotlin/com/avinal/memos/MainViewController.kt @@ -0,0 +1,5 @@ +package com.avinal.memos + +import androidx.compose.ui.window.ComposeUIViewController + +fun MainViewController() = ComposeUIViewController { App() } diff --git a/composeApp/src/iosMain/kotlin/com/avinal/memos/Platform.ios.kt b/composeApp/src/iosMain/kotlin/com/avinal/memos/Platform.ios.kt new file mode 100644 index 0000000..e248b52 --- /dev/null +++ b/composeApp/src/iosMain/kotlin/com/avinal/memos/Platform.ios.kt @@ -0,0 +1,6 @@ +package com.avinal.memos + +import platform.UIKit.UIDevice + +actual fun getPlatformName(): String = + UIDevice.currentDevice.systemName() + " " + UIDevice.currentDevice.systemVersion