Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
c396259
Create engine-kmp
FikriMilano Mar 8, 2026
b74287e
Migrate core layer to engine-kmp
FikriMilano Mar 11, 2026
7d8bbf4
Migrate indexing to engine-kmp
FikriMilano Mar 12, 2026
505e896
Migrate database layer to engine-kmp
FikriMilano Mar 17, 2026
4267a34
Full search DSL with all 7 filter types, sort, pagination, nested sea…
FikriMilano Mar 17, 2026
36a6890
Migrate patch generation
FikriMilano Mar 18, 2026
453fe3a
Migrate upload request generation
FikriMilano Mar 18, 2026
1d1f544
Migrate upload pipeline
FikriMilano Mar 18, 2026
e79ae8e
Migrate orchestration
FikriMilano Mar 18, 2026
b1fb7ac
Migrate http layer
FikriMilano Mar 18, 2026
fc31d08
Migrate downloader
FikriMilano Mar 18, 2026
4effd77
Fix build
FikriMilano Mar 18, 2026
b5a46be
Fix build
FikriMilano Mar 18, 2026
a35be69
Add FhirEngineProvider, FhirEngineImpl, and sync upload pipeline
FikriMilano Mar 24, 2026
bf91ca8
Add engine-kmp-app demo module
FikriMilano Mar 24, 2026
4aa2bca
Migrate tests
FikriMilano Apr 1, 2026
63d60d1
Migrate engine sync package to Kotlin multiplatform
ellykits Mar 30, 2026
b9f50b7
Add missing logging, gzip encoding on KtorHttpService
ellykits Mar 31, 2026
8399b50
Refactor expect functions for sync scheduler
ellykits Mar 31, 2026
eadc352
Fix build error
FikriMilano Apr 1, 2026
a5eb602
Add sync worker tests and fix TransactionBundleGenerator
FikriMilano Apr 8, 2026
ce1e0aa
Integrate sync into sdc-kmp-demo with Android WorkManager
FikriMilano Apr 8, 2026
b060810
Fix blank page on deleting a patient
FikriMilano Apr 8, 2026
cd466f6
Fix null data
FikriMilano Apr 8, 2026
8606699
Fix sync up
FikriMilano Apr 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
99 changes: 99 additions & 0 deletions engine-kmp-app/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
import org.jetbrains.compose.desktop.application.dsl.TargetFormat
import org.jetbrains.kotlin.gradle.dsl.JvmTarget

plugins {
id("org.jetbrains.kotlin.multiplatform")
id("com.android.application")
id("org.jetbrains.kotlin.plugin.compose")
id("org.jetbrains.compose")
}

android {
namespace = "com.example.enginekmpapp"
compileSdk = Sdk.COMPILE_SDK

defaultConfig {
applicationId = "com.example.enginekmpapp"
minSdk = Sdk.MIN_SDK
targetSdk = 36
versionCode = 1
versionName = "1.0"
}
packaging { resources { excludes += "/META-INF/{AL2.0,LGPL2.1}" } }
buildTypes { getByName("release") { isMinifyEnabled = false } }
compileOptions {
sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_21
}
}

kotlin {
jvmToolchain(21)

androidTarget { compilerOptions { jvmTarget.set(JvmTarget.JVM_21) } }

jvm("desktop")

listOf(
iosX64(),
iosArm64(),
iosSimulatorArm64(),
)
.forEach { iosTarget ->
iosTarget.binaries.framework {
baseName = "engineKmpAppKit"
isStatic = true
}
}

targets.configureEach {
compilations.configureEach {
compilerOptions.configure {
freeCompilerArgs.add("-Xexpect-actual-classes")
optIn.addAll(
"kotlin.time.ExperimentalTime",
"kotlin.uuid.ExperimentalUuidApi",
)
}
}
}

sourceSets {
commonMain.dependencies {
implementation(compose.runtime)
implementation(compose.foundation)
implementation(compose.material3)
implementation(compose.ui)
implementation(libs.kotlinx.coroutines.core)
implementation(libs.kotlin.fhir)
implementation(project(":engine-kmp"))
}
androidMain.dependencies {
implementation(compose.preview)
implementation(libs.androidx.activity.compose)
}
val desktopMain by getting {
dependencies {
implementation(compose.desktop.currentOs)
}
}
val iosMain by creating {
dependsOn(commonMain.get())
}
val iosX64Main by getting { dependsOn(iosMain) }
val iosArm64Main by getting { dependsOn(iosMain) }
val iosSimulatorArm64Main by getting { dependsOn(iosMain) }
}
}

compose.desktop {
application {
mainClass = "com.example.enginekmpapp.MainKt"

nativeDistributions {
targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb)
packageName = "com.example.enginekmpapp"
packageVersion = "1.0.0"
}
}
}
23 changes: 23 additions & 0 deletions engine-kmp-app/src/androidMain/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8" ?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">

<application
android:allowBackup="true"
android:label="Engine KMP Demo"
android:supportsRtl="true"
android:theme="@android:style/Theme.Material.Light.NoActionBar"
android:name=".EngineKmpApplication"
>
<activity
android:exported="true"
android:configChanges="orientation|screenSize|screenLayout|keyboardHidden"
android:name=".MainActivity"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
/*
* Copyright 2025-2026 Google LLC
*
* 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
*
* http://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.
*/

package com.example.enginekmpapp

import android.app.Application

class EngineKmpApplication : Application() {
override fun onCreate() {
super.onCreate()
appContext = this
}

companion object {
lateinit var appContext: Application
private set
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*
* Copyright 2025-2026 Google LLC
*
* 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
*
* http://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.
*/

package com.example.enginekmpapp

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent

class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent { App(platformContext = applicationContext) }
}
}
Loading
Loading