Skip to content

Repository files navigation

LINKa. Paper Board

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.

Cover

Project

  • 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.

Requirements

  • JDK 17.
  • Android SDK with compileSdk 36 installed.
  • Use the checked-in Gradle wrapper: ./gradlew.

Build

./gradlew assembleDebug

Release bundle, matching CI:

./gradlew clean bundleRelease

Release 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=...

Test And Lint

Run all local JVM unit tests:

./gradlew testDebugUnitTest

Run one test class:

./gradlew testDebugUnitTest --tests su.linka.linkapaperboard.CookieTest

Run debug lint:

./gradlew lintDebug

Verify that the merged release manifest and runtime contain neither Crashlytics nor AppMetrica:

./gradlew verifyPrivacyConfiguration

Run instrumented tests only with a connected device or emulator:

./gradlew connectedDebugAndroidTest

Notes

  • 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.
  • Cookie stores app preferences in SharedPreferences; tests that touch it should reset state with Cookie.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.

Releases

Packages

Used by

Contributors

Languages