diff --git a/.github/workflows/android_ci.yml b/.github/workflows/android_ci.yml
index a6b108ad..3b2cc951 100644
--- a/.github/workflows/android_ci.yml
+++ b/.github/workflows/android_ci.yml
@@ -129,4 +129,5 @@ jobs:
adb shell pm list packages >/dev/null
sleep 10
adb shell getprop sys.boot_completed
- ./gradlew connectedCoreDebugAndroidTest --stacktrace
+ ./gradlew connectedConjugateDebugAndroidTest --stacktrace
+ ./gradlew connectedKeyboardsDebugAndroidTest --stacktrace
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 81b5e876..b3e548f4 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -46,6 +46,27 @@ android {
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
+
+ productFlavors {
+ create("keyboards") {
+ applicationIdSuffix = ".keyboards"
+ isDefault = true
+ resValue(
+ "string",
+ "app_launcher_name",
+ "Scribe"
+ )
+ }
+ create("conjugate") {
+ applicationIdSuffix = ".conjugate"
+ resValue(
+ "string",
+ "app_launcher_name",
+ "Conjugate"
+ )
+ }
+ }
+
packaging {
resources {
pickFirsts.add("META-INF/LICENSE*")
@@ -114,10 +135,7 @@ android {
}
flavorDimensions.add("variants")
- productFlavors {
- create("core")
- create("fdroid")
- }
+
sourceSets {
getByName("main").java.srcDirs("src/main/kotlin")
diff --git a/app/src/conjugate/ic_launcher-playstore.png b/app/src/conjugate/ic_launcher-playstore.png
new file mode 100644
index 00000000..06fc5b22
Binary files /dev/null and b/app/src/conjugate/ic_launcher-playstore.png differ
diff --git a/app/src/conjugate/java/be/scri/activities/MainActivity.kt b/app/src/conjugate/java/be/scri/activities/MainActivity.kt
new file mode 100644
index 00000000..d8aa98f8
--- /dev/null
+++ b/app/src/conjugate/java/be/scri/activities/MainActivity.kt
@@ -0,0 +1,30 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+@file:Suppress("ktlint:standard:kdoc")
+/**
+ * Implements the main activity with a custom action bar, ViewPager navigation, and dynamic UI adjustments.
+ */
+
+package be.scri.activities
+
+import android.os.Bundle
+import androidx.activity.ComponentActivity
+import androidx.activity.compose.setContent
+import be.scri.ui.screens.SampleScreen
+
+/**
+ * The main entry point of the app.
+ * Initializes theme settings, navigation, and sets up the main UI using Jetpack Compose.
+ */
+class MainActivity : ComponentActivity() {
+ /**
+ * Initializes the app on launch. Sets the theme based on user preferences, sets up edge-to-edge
+ * layout, and builds the UI using Compose.
+ */
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ setContent {
+ SampleScreen()
+ }
+ }
+}
diff --git a/app/src/conjugate/java/be/scri/ui/screens/SampleScreen.kt b/app/src/conjugate/java/be/scri/ui/screens/SampleScreen.kt
new file mode 100644
index 00000000..08dfa9a7
--- /dev/null
+++ b/app/src/conjugate/java/be/scri/ui/screens/SampleScreen.kt
@@ -0,0 +1,25 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+package be.scri.ui.screens
+
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+
+@Composable
+fun SampleScreen(modifier: Modifier = Modifier) {
+ MaterialTheme {
+ Box(
+ modifier = modifier.fillMaxSize(),
+ contentAlignment = Alignment.Center,
+ ) {
+ Text(
+ text = "Conjugate App",
+ style = MaterialTheme.typography.bodyLarge,
+ )
+ }
+ }
+}
diff --git a/app/src/conjugate/res/drawable/ic_launcher_background.xml b/app/src/conjugate/res/drawable/ic_launcher_background.xml
new file mode 100644
index 00000000..ca3826a4
--- /dev/null
+++ b/app/src/conjugate/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/conjugate/res/drawable/ic_launcher_foreground.xml b/app/src/conjugate/res/drawable/ic_launcher_foreground.xml
new file mode 100644
index 00000000..0520adc1
--- /dev/null
+++ b/app/src/conjugate/res/drawable/ic_launcher_foreground.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/conjugate/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/conjugate/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 00000000..bbd3e021
--- /dev/null
+++ b/app/src/conjugate/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/conjugate/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/conjugate/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 00000000..bbd3e021
--- /dev/null
+++ b/app/src/conjugate/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/conjugate/res/mipmap-hdpi/ic_launcher.webp b/app/src/conjugate/res/mipmap-hdpi/ic_launcher.webp
new file mode 100644
index 00000000..2a1b5c9d
Binary files /dev/null and b/app/src/conjugate/res/mipmap-hdpi/ic_launcher.webp differ
diff --git a/app/src/conjugate/res/mipmap-hdpi/ic_launcher_round.webp b/app/src/conjugate/res/mipmap-hdpi/ic_launcher_round.webp
new file mode 100644
index 00000000..0fa18337
Binary files /dev/null and b/app/src/conjugate/res/mipmap-hdpi/ic_launcher_round.webp differ
diff --git a/app/src/conjugate/res/mipmap-mdpi/ic_launcher.webp b/app/src/conjugate/res/mipmap-mdpi/ic_launcher.webp
new file mode 100644
index 00000000..e5ca338e
Binary files /dev/null and b/app/src/conjugate/res/mipmap-mdpi/ic_launcher.webp differ
diff --git a/app/src/conjugate/res/mipmap-mdpi/ic_launcher_round.webp b/app/src/conjugate/res/mipmap-mdpi/ic_launcher_round.webp
new file mode 100644
index 00000000..8157d818
Binary files /dev/null and b/app/src/conjugate/res/mipmap-mdpi/ic_launcher_round.webp differ
diff --git a/app/src/conjugate/res/mipmap-xhdpi/ic_launcher.webp b/app/src/conjugate/res/mipmap-xhdpi/ic_launcher.webp
new file mode 100644
index 00000000..1a6729bc
Binary files /dev/null and b/app/src/conjugate/res/mipmap-xhdpi/ic_launcher.webp differ
diff --git a/app/src/conjugate/res/mipmap-xhdpi/ic_launcher_round.webp b/app/src/conjugate/res/mipmap-xhdpi/ic_launcher_round.webp
new file mode 100644
index 00000000..c674c6a2
Binary files /dev/null and b/app/src/conjugate/res/mipmap-xhdpi/ic_launcher_round.webp differ
diff --git a/app/src/conjugate/res/mipmap-xxhdpi/ic_launcher.webp b/app/src/conjugate/res/mipmap-xxhdpi/ic_launcher.webp
new file mode 100644
index 00000000..576eb1fb
Binary files /dev/null and b/app/src/conjugate/res/mipmap-xxhdpi/ic_launcher.webp differ
diff --git a/app/src/conjugate/res/mipmap-xxhdpi/ic_launcher_round.webp b/app/src/conjugate/res/mipmap-xxhdpi/ic_launcher_round.webp
new file mode 100644
index 00000000..0b0da68b
Binary files /dev/null and b/app/src/conjugate/res/mipmap-xxhdpi/ic_launcher_round.webp differ
diff --git a/app/src/conjugate/res/mipmap-xxxhdpi/ic_launcher.webp b/app/src/conjugate/res/mipmap-xxxhdpi/ic_launcher.webp
new file mode 100644
index 00000000..820132e4
Binary files /dev/null and b/app/src/conjugate/res/mipmap-xxxhdpi/ic_launcher.webp differ
diff --git a/app/src/conjugate/res/mipmap-xxxhdpi/ic_launcher_round.webp b/app/src/conjugate/res/mipmap-xxxhdpi/ic_launcher_round.webp
new file mode 100644
index 00000000..cbbc8b9c
Binary files /dev/null and b/app/src/conjugate/res/mipmap-xxxhdpi/ic_launcher_round.webp differ
diff --git a/app/src/debug/res/values/strings.xml b/app/src/debug/res/values/strings.xml
deleted file mode 100644
index 045e125f..00000000
--- a/app/src/debug/res/values/strings.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/app/src/main/java/be/scri/activities/MainActivity.kt b/app/src/keyboards/java/be/scri/activities/MainActivity.kt
similarity index 100%
rename from app/src/main/java/be/scri/activities/MainActivity.kt
rename to app/src/keyboards/java/be/scri/activities/MainActivity.kt
diff --git a/build.gradle.kts b/build.gradle.kts
index 8dcd4fa6..6e9b2aea 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -13,7 +13,7 @@ buildscript {
dependencies {
classpath("io.nlopez.compose.rules:ktlint:0.4.17")
- classpath("com.android.tools.build:gradle:8.7.0")
+ classpath("com.android.tools.build:gradle:8.13.2")
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:2.0.0")
classpath("io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.23.8")
classpath("org.jlleitschuh.gradle:ktlint-gradle:12.1.1")
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 0d8f4d4e..b94a71a3 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
#Tue Jan 04 09:48:27 CET 2022
distributionBase=GRADLE_USER_HOME
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME