Android app and input method for composing text from a paged symbol grid. The app can speak composed text with Android TextToSpeech and can also be enabled as a system keyboard.
- Single Android application module:
:app. - Package and namespace:
su.linka.linkapaperboard. - Launcher UI entrypoint:
MainActivity. - Keyboard service entrypoint:
PaperboardIME. - Shared grid UI layout:
app/src/main/res/layout/keys.xml.
- JDK 17.
- Android SDK with
compileSdk 36installed. - Use the checked-in Gradle wrapper:
./gradlew.
./gradlew assembleDebugRelease bundle, matching CI:
./gradlew clean bundleReleaseRelease signing is optional locally. To produce a signed release artifact, set:
ANDROID_KEYSTORE=/path/to/keystore
ANDROID_KEYSTORE_PASSWORD=...
ANDROID_KEY_ALIAS=...
ANDROID_KEY_PASSWORD=...Run all local JVM unit tests:
./gradlew testDebugUnitTestRun one test class:
./gradlew testDebugUnitTest --tests su.linka.linkapaperboard.CookieTestRun debug lint:
./gradlew lintDebugVerify that the merged release manifest and runtime contain neither Crashlytics nor AppMetrica:
./gradlew verifyPrivacyConfigurationRun instrumented tests only with a connected device or emulator:
./gradlew connectedDebugAndroidTest- The selectable alphabet is localized via
@string/alphabet; English and Russian alphabets intentionally differ. - The space key is stored internally as
␣and converted to a real space when a grid item is clicked. Cookiestores app preferences in SharedPreferences; tests that touch it should reset state withCookie.resetForTests(context).- The first privacy notice is informational and can be deferred without disabling TTS or the input method. Crashlytics and AppMetrica are not included in the app.
