Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
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
24 changes: 8 additions & 16 deletions android-java/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import java.util.Properties
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.compose)
}

fun loadEnvProperties(): Properties {
Expand Down Expand Up @@ -38,22 +37,26 @@ fun loadEnvProperties(): Properties {
//
// More information can be found here:
// https://docs.ditto.live/sdk/latest/install-guides/java/android#integrating-and-initializing
fun envValue(prop: Properties, key: String): String {
return prop[key]?.toString()?.trim('"') ?: ""
}

androidComponents {
onVariants {
val prop = loadEnvProperties()
it.buildConfigFields.put(
"DITTO_APP_ID",
BuildConfigField(
"String",
"\"${prop["DITTO_APP_ID"]}\"",
"\"${envValue(prop, "DITTO_APP_ID")}\"",
"Ditto application ID"
)
)
it.buildConfigFields.put(
"DITTO_PLAYGROUND_TOKEN",
BuildConfigField(
"String",
"\"${prop["DITTO_PLAYGROUND_TOKEN"]}\"",
"\"${envValue(prop, "DITTO_PLAYGROUND_TOKEN")}\"",
"Ditto online playground authentication token"
)
)
Expand All @@ -62,7 +65,7 @@ androidComponents {
"DITTO_AUTH_URL",
BuildConfigField(
"String",
"\"${prop["DITTO_AUTH_URL"]}\"",
"\"${envValue(prop, "DITTO_AUTH_URL")}\"",
"Ditto Auth URL"
)
)
Expand All @@ -71,7 +74,7 @@ androidComponents {
"DITTO_WEBSOCKET_URL",
BuildConfigField(
"String",
"\"${prop["DITTO_WEBSOCKET_URL"]}\"",
"\"${envValue(prop, "DITTO_WEBSOCKET_URL")}\"",
"Ditto Websocket URL"
)
)
Expand Down Expand Up @@ -114,7 +117,6 @@ android {
}
buildFeatures {
buildConfig = true
compose = true
}
// This ensures Ditto can produce meaningful stack traces
packaging {
Expand All @@ -129,12 +131,6 @@ dependencies {

implementation(libs.androidx.core.ktx)
implementation(libs.androidx.lifecycle.runtime.ktx)
implementation(libs.androidx.activity.compose)
implementation(platform(libs.androidx.compose.bom))
implementation(libs.androidx.ui)
implementation(libs.androidx.ui.graphics)
implementation(libs.androidx.ui.tooling.preview)
implementation(libs.androidx.material3)
implementation(libs.ditto)
implementation(libs.androidx.recyclerview)
implementation(libs.material)
Expand All @@ -143,8 +139,4 @@ dependencies {
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)
androidTestImplementation("androidx.test.espresso:espresso-contrib:3.6.1")
androidTestImplementation(platform(libs.androidx.compose.bom))
androidTestImplementation(libs.androidx.ui.test.junit4)
debugImplementation(libs.androidx.ui.tooling)
debugImplementation(libs.androidx.ui.test.manifest)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package com.example.dittotasks

import com.ditto.kotlin.Ditto
import com.ditto.kotlin.DittoAuthenticationProvider
import com.ditto.kotlin.DittoConfig
import com.ditto.kotlin.DittoException
import com.ditto.kotlin.DittoFactory
import com.ditto.kotlin.DittoQueryResult
import com.ditto.kotlin.DittoStoreObserver
import com.ditto.kotlin.DittoSyncSubscription
import kotlinx.coroutines.runBlocking
import java.util.function.Consumer

/**
* Bridges Ditto v5 Kotlin SDK suspend functions for Java callers.
*/
object DittoHelper {

@JvmStatic
fun createDitto(appId: String, serverUrl: String): Ditto {
val config = DittoConfig(
databaseId = appId,
connect = DittoConfig.Connect.Server(serverUrl)
)
return DittoFactory.create(config)
}

@JvmStatic
fun setupAuth(ditto: Ditto, token: String) {
ditto.auth?.let { auth ->
auth.expirationHandler = { dittoInstance, _ ->
dittoInstance.auth?.login(token, DittoAuthenticationProvider.development())
}
}
}

@JvmStatic
@Throws(DittoException::class)
fun execute(ditto: Ditto, query: String, args: Map<String, Any?>) {
runBlocking {
ditto.store.execute(query, args)
}
}

@JvmStatic
fun registerSubscription(ditto: Ditto, query: String): DittoSyncSubscription {
return ditto.sync.registerSubscription(query)
}

@JvmStatic
fun registerObserver(
ditto: Ditto,
query: String,
callback: Consumer<DittoQueryResult>
): DittoStoreObserver {
return ditto.store.registerObserver(query) { result ->
callback.accept(result)
}
}

@JvmStatic
fun startSync(ditto: Ditto) {
ditto.sync.start()
}

@JvmStatic
fun stopSync(ditto: Ditto) {
ditto.sync.stop()
}

@JvmStatic
fun isSyncActive(ditto: Ditto): Boolean {
return ditto.sync.isActive
}
}
Loading