diff --git a/android/app/build.gradle b/android/app/build.gradle
index 46ab402d..168c38f1 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -1,4 +1,7 @@
apply plugin: 'com.android.application'
+// Kotlin source-set for the Telecom module only (androidx.core:core-telecom is
+// coroutine-first). All other native code stays Java; interop is seamless.
+apply plugin: 'kotlin-android'
// Mirror of resolveAppVersion() in ../../vite.config.js so the APK's
// versionName matches __APP_VERSION__ rendered in the About screen.
@@ -49,6 +52,12 @@ android {
buildConfig = true
}
+ // Match the Java compileOptions (VERSION_21 from capacitor.build.gradle) so
+ // the Kotlin telecom module and the Java sources target the same bytecode.
+ kotlinOptions {
+ jvmTarget = '21'
+ }
+
signingConfigs {
release {
if (project.hasProperty('VOJO_RELEASE_STORE_FILE')) {
@@ -102,6 +111,14 @@ dependencies {
// proxy credentials (proxy_support.md §15 #4). Not the deprecated
// androidx.security EncryptedSharedPreferences.
implementation "com.google.crypto.tink:tink-android:1.15.0"
+ // Telecom self-managed VoIP (docs/plans/telecom_migration.md). core-telecom
+ // wraps the API-34 transactional CallControl path and the ConnectionService
+ // backport (API 26-33) behind one CallsManager API. CallsManager is
+ // @RequiresApi(26) — every call site is gated on SDK_INT >= O; on API 24-25
+ // the Telecom path is skipped. coroutines-android supplies Dispatchers.Main
+ // that VojoCallsManager runs its CallControlScope on.
+ implementation "androidx.core:core-telecom:$coreTelecomVersion"
+ implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion"
testImplementation "junit:junit:$junitVersion"
androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion"
androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion"
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 4ff1c8a7..78f5fdb7 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -135,6 +135,15 @@
pre-declared for the planned speaker-toggle plugin. -->
+
+