diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 019f72cb..2039e9cb 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -48,11 +48,11 @@ Make sure you have a signing key. If you don't have one, follow the [official ma ## Adding a New Language To support a new language one needs to: -- Find a suitable dictionary and add it to the `languages/dictionaries/` folder. Two file formats are supported, [see below](#dictionary-formats). +- Find a suitable dictionary and add it to the `app/languages/dictionaries/` folder. Two file formats are supported, [see below](#dictionary-formats). - Do not forget to include the dictionary license (or readme) file in the `docs/` folder. -- Create a new `.yml` file in `languages/definitions/` and define the language properties. +- Create a new `.yml` file in `app/languages/definitions/` and define the language properties. - `locale` contains the language and the country codes (e.g. "en-US", "es-AR", "it-IT"). Refer to the list of [supported locales in Java](https://www.oracle.com/java/technologies/javase/jdk8-jre8-suported-locales.html#util-text). - - `dictionaryFile` is the name of the dictionary in `languages/dictionaries/` folder. + - `dictionaryFile` is the name of the dictionary in `app/languages/dictionaries/` folder. - `layout` contains the letters and punctuation marks associated with each key. - For 0-key `[SPECIAL]`, will be fine in most languages, but you could define your own set of special characters, for example: `[@, #, $]`. - For 1-key, you could use `[PUNCTUATION]` and have standard English/computer punctuation; or `[PUNCTUATION_FR]` that includes the French quotation marks: `«`, `»`; or `[PUNCTUATION_DE]` that includes the German quotation marks: `„`, `“`. And if the language has extra punctuation marks, like Spanish, you could complement the list like this: `[PUNCTUATION, ¡, ¿]`. Or you could define your own list, like for 0-key. diff --git a/README.md b/README.md index 5ffc89c3..6ac9a589 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Traditional T9 -TT9 is an IME (Input Method Editor) for Android devices with a hardware keypad. It supports predictive text typing in [multiple languages](languages/definitions) and configurable hotkeys, bringing old school Nokia experience to modern Android devices. +TT9 is an IME (Input Method Editor) for Android devices with a hardware keypad. It supports predictive text typing in [multiple languages](app/languages/definitions) and configurable hotkeys, bringing old school Nokia experience to modern Android devices. This is a modernized version of the [original project](https://github.com/Clam-/TraditionalT9) by Clam-. diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 00000000..1a05e15c --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,102 @@ +plugins { + id 'com.android.application' + id "at.zierler.yamlvalidator" version "1.5.0" +} + +apply from: 'constants.gradle' +apply from: 'dictionary-tools.gradle' +apply from: 'validate-languages.gradle' +apply from: 'version-tools.gradle' + + +tasks.register('validateLanguages') { + mustRunAfter(validateYaml) + inputs.dir fileTree(dir: LANGUAGES_INPUT_DIR) + outputs.file "${project.buildDir}/lang.validation.txt" + + doLast { + validateLanguageFiles(DEFINITIONS_INPUT_DIR, DICTIONARIES_INPUT_DIR, outputs.files.singleFile) + } +} + +tasks.register('copyLanguages', Copy) { + from LANGUAGES_INPUT_DIR + include '**/*.csv' + include '**/*.txt' + include '**/*.yml' + into LANGUAGES_OUTPUT_DIR +} + +tasks.register('calculateDictionarySizes') { + inputs.dir fileTree(dir: DICTIONARIES_INPUT_DIR) + outputs.dir DICTIONARIES_OUTPUT_DIR + + doLast { + getDictionarySizes(DICTIONARIES_INPUT_DIR, DICTIONARIES_OUTPUT_DIR) + } +} + +clean { + delete LANGUAGES_OUTPUT_DIR +} + +// using the exported Closures directly causes weird values, hence the extra wrappers here +def getVerCode = { -> return getVersionCode() } +def getVerName = { -> return getVersionName() } +def getVersionString = { flavor -> return flavor == 'debug' ? getDebugVersion() : getReleaseVersion() } + + +android { + namespace 'io.github.sspanak.tt9' + compileSdk 34 + + defaultConfig { + applicationId "io.github.sspanak.tt9" + minSdk 19 + //noinspection ExpiredTargetSdkVersion + targetSdk 30 + versionCode getVerCode() + versionName getVerName() + } + + buildFeatures { + buildConfig true + } + buildTypes { + debug { + buildConfigField 'String', 'VERSION_FULL', "\"${getVersionString('debug')}\"" + } + + release { + buildConfigField 'String', 'VERSION_FULL', "\"${getVersionString('release')}\"" + + debuggable false + jniDebuggable false +// minifyEnabled true +// shrinkResources true + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + + applicationVariants.configureEach { variant -> + tasks.named("generate${variant.name.capitalize()}Assets")?.configure { + dependsOn(validateLanguages, copyLanguages, calculateDictionarySizes) + } + + // generateDebugLintReportModel + ["lintAnalyzeDebug", "generateDebugLintReportModel", "lintVitalAnalyzeRelease", "generateReleaseLintVitalReportModel"].each { taskName -> + tasks.named(taskName)?.configure { + dependsOn(validateLanguages, copyLanguages, calculateDictionarySizes) + } + } + } +} + +dependencies { + implementation 'androidx.preference:preference:1.2.1' +} \ No newline at end of file diff --git a/app/constants.gradle b/app/constants.gradle new file mode 100644 index 00000000..31020444 --- /dev/null +++ b/app/constants.gradle @@ -0,0 +1,19 @@ +ext.LANGUAGES_DIR_NAME = 'languages' +ext.DEFINITIONS_DIR_NAME = 'definitions' +ext.DICTIONARIES_DIR_NAME = 'dictionaries' +ext.DICTIONARY_SIZES_DIR_NAME = 'dictionary-sizes' + +def ROOT_DIR = "${project.rootDir}/app" +def ASSETS_DIR = "${ROOT_DIR}/src/main/assets" + +ext.LANGUAGES_INPUT_DIR = "${ROOT_DIR}/${LANGUAGES_DIR_NAME}" +ext.DEFINITIONS_INPUT_DIR = "${LANGUAGES_INPUT_DIR}/${DEFINITIONS_DIR_NAME}" +ext.DICTIONARIES_INPUT_DIR = "${LANGUAGES_INPUT_DIR}/${DICTIONARIES_DIR_NAME}" + +ext.LANGUAGES_OUTPUT_DIR = "${ASSETS_DIR}/${LANGUAGES_DIR_NAME}" +ext.DEFINITIONS_OUTPUT_DIR = "${LANGUAGES_OUTPUT_DIR}/${DEFINITIONS_DIR_NAME}" +ext.DICTIONARIES_OUTPUT_DIR = "${LANGUAGES_OUTPUT_DIR}/${DICTIONARIES_DIR_NAME}" + +ext.CSV_DELIMITER = ' ' // TAB +ext.MAX_WORD_FREQUENCY = 255 +ext.MAX_ERRORS = 50 diff --git a/gradle/scripts/dictionary-tools.gradle b/app/dictionary-tools.gradle similarity index 100% rename from gradle/scripts/dictionary-tools.gradle rename to app/dictionary-tools.gradle diff --git a/languages/definitions/Arabic.yml b/app/languages/definitions/Arabic.yml similarity index 100% rename from languages/definitions/Arabic.yml rename to app/languages/definitions/Arabic.yml diff --git a/languages/definitions/BrazilianPortuguese.yml b/app/languages/definitions/BrazilianPortuguese.yml similarity index 100% rename from languages/definitions/BrazilianPortuguese.yml rename to app/languages/definitions/BrazilianPortuguese.yml diff --git a/languages/definitions/Bulgarian.yml b/app/languages/definitions/Bulgarian.yml similarity index 100% rename from languages/definitions/Bulgarian.yml rename to app/languages/definitions/Bulgarian.yml diff --git a/languages/definitions/Danish.yml b/app/languages/definitions/Danish.yml similarity index 100% rename from languages/definitions/Danish.yml rename to app/languages/definitions/Danish.yml diff --git a/languages/definitions/Dutch.yml b/app/languages/definitions/Dutch.yml similarity index 100% rename from languages/definitions/Dutch.yml rename to app/languages/definitions/Dutch.yml diff --git a/languages/definitions/English.yml b/app/languages/definitions/English.yml similarity index 100% rename from languages/definitions/English.yml rename to app/languages/definitions/English.yml diff --git a/languages/definitions/Finnish.yml b/app/languages/definitions/Finnish.yml similarity index 100% rename from languages/definitions/Finnish.yml rename to app/languages/definitions/Finnish.yml diff --git a/languages/definitions/French.yml b/app/languages/definitions/French.yml similarity index 100% rename from languages/definitions/French.yml rename to app/languages/definitions/French.yml diff --git a/languages/definitions/German.yml b/app/languages/definitions/German.yml similarity index 100% rename from languages/definitions/German.yml rename to app/languages/definitions/German.yml diff --git a/languages/definitions/Greek.yml b/app/languages/definitions/Greek.yml similarity index 100% rename from languages/definitions/Greek.yml rename to app/languages/definitions/Greek.yml diff --git a/languages/definitions/Hebrew.yml b/app/languages/definitions/Hebrew.yml similarity index 100% rename from languages/definitions/Hebrew.yml rename to app/languages/definitions/Hebrew.yml diff --git a/languages/definitions/Indonesian.yml b/app/languages/definitions/Indonesian.yml similarity index 100% rename from languages/definitions/Indonesian.yml rename to app/languages/definitions/Indonesian.yml diff --git a/languages/definitions/Italian.yml b/app/languages/definitions/Italian.yml similarity index 100% rename from languages/definitions/Italian.yml rename to app/languages/definitions/Italian.yml diff --git a/languages/definitions/Norwegian.yml b/app/languages/definitions/Norwegian.yml similarity index 100% rename from languages/definitions/Norwegian.yml rename to app/languages/definitions/Norwegian.yml diff --git a/languages/definitions/Polish.yml b/app/languages/definitions/Polish.yml similarity index 100% rename from languages/definitions/Polish.yml rename to app/languages/definitions/Polish.yml diff --git a/languages/definitions/Romanian.yml b/app/languages/definitions/Romanian.yml similarity index 100% rename from languages/definitions/Romanian.yml rename to app/languages/definitions/Romanian.yml diff --git a/languages/definitions/Russian.yml b/app/languages/definitions/Russian.yml similarity index 100% rename from languages/definitions/Russian.yml rename to app/languages/definitions/Russian.yml diff --git a/languages/definitions/Spanish.yml b/app/languages/definitions/Spanish.yml similarity index 100% rename from languages/definitions/Spanish.yml rename to app/languages/definitions/Spanish.yml diff --git a/languages/definitions/Swedish.yml b/app/languages/definitions/Swedish.yml similarity index 100% rename from languages/definitions/Swedish.yml rename to app/languages/definitions/Swedish.yml diff --git a/languages/definitions/Ukrainian.yml b/app/languages/definitions/Ukrainian.yml similarity index 100% rename from languages/definitions/Ukrainian.yml rename to app/languages/definitions/Ukrainian.yml diff --git a/languages/definitions/Yiddish.yml b/app/languages/definitions/Yiddish.yml similarity index 100% rename from languages/definitions/Yiddish.yml rename to app/languages/definitions/Yiddish.yml diff --git a/languages/dictionaries/ar-utf8.csv b/app/languages/dictionaries/ar-utf8.csv similarity index 100% rename from languages/dictionaries/ar-utf8.csv rename to app/languages/dictionaries/ar-utf8.csv diff --git a/languages/dictionaries/bg-utf8.csv b/app/languages/dictionaries/bg-utf8.csv similarity index 100% rename from languages/dictionaries/bg-utf8.csv rename to app/languages/dictionaries/bg-utf8.csv diff --git a/languages/dictionaries/da-utf8.csv b/app/languages/dictionaries/da-utf8.csv similarity index 100% rename from languages/dictionaries/da-utf8.csv rename to app/languages/dictionaries/da-utf8.csv diff --git a/languages/dictionaries/de-utf8.csv b/app/languages/dictionaries/de-utf8.csv similarity index 100% rename from languages/dictionaries/de-utf8.csv rename to app/languages/dictionaries/de-utf8.csv diff --git a/languages/dictionaries/en-utf8.csv b/app/languages/dictionaries/en-utf8.csv similarity index 100% rename from languages/dictionaries/en-utf8.csv rename to app/languages/dictionaries/en-utf8.csv diff --git a/languages/dictionaries/es-utf8.csv b/app/languages/dictionaries/es-utf8.csv similarity index 100% rename from languages/dictionaries/es-utf8.csv rename to app/languages/dictionaries/es-utf8.csv diff --git a/languages/dictionaries/fi-utf8.csv b/app/languages/dictionaries/fi-utf8.csv similarity index 100% rename from languages/dictionaries/fi-utf8.csv rename to app/languages/dictionaries/fi-utf8.csv diff --git a/languages/dictionaries/fr-utf8.csv b/app/languages/dictionaries/fr-utf8.csv similarity index 100% rename from languages/dictionaries/fr-utf8.csv rename to app/languages/dictionaries/fr-utf8.csv diff --git a/languages/dictionaries/gr-utf8.csv b/app/languages/dictionaries/gr-utf8.csv similarity index 100% rename from languages/dictionaries/gr-utf8.csv rename to app/languages/dictionaries/gr-utf8.csv diff --git a/languages/dictionaries/he-utf8.csv b/app/languages/dictionaries/he-utf8.csv similarity index 100% rename from languages/dictionaries/he-utf8.csv rename to app/languages/dictionaries/he-utf8.csv diff --git a/languages/dictionaries/id-utf8.csv b/app/languages/dictionaries/id-utf8.csv similarity index 100% rename from languages/dictionaries/id-utf8.csv rename to app/languages/dictionaries/id-utf8.csv diff --git a/languages/dictionaries/it-utf8.csv b/app/languages/dictionaries/it-utf8.csv similarity index 100% rename from languages/dictionaries/it-utf8.csv rename to app/languages/dictionaries/it-utf8.csv diff --git a/languages/dictionaries/ji-utf8.csv b/app/languages/dictionaries/ji-utf8.csv similarity index 100% rename from languages/dictionaries/ji-utf8.csv rename to app/languages/dictionaries/ji-utf8.csv diff --git a/languages/dictionaries/nb-utf8.csv b/app/languages/dictionaries/nb-utf8.csv similarity index 100% rename from languages/dictionaries/nb-utf8.csv rename to app/languages/dictionaries/nb-utf8.csv diff --git a/languages/dictionaries/nl-utf8.csv b/app/languages/dictionaries/nl-utf8.csv similarity index 100% rename from languages/dictionaries/nl-utf8.csv rename to app/languages/dictionaries/nl-utf8.csv diff --git a/languages/dictionaries/pl-utf8.csv b/app/languages/dictionaries/pl-utf8.csv similarity index 100% rename from languages/dictionaries/pl-utf8.csv rename to app/languages/dictionaries/pl-utf8.csv diff --git a/languages/dictionaries/pt-BR-utf8.csv b/app/languages/dictionaries/pt-BR-utf8.csv similarity index 100% rename from languages/dictionaries/pt-BR-utf8.csv rename to app/languages/dictionaries/pt-BR-utf8.csv diff --git a/languages/dictionaries/ro-utf8.csv b/app/languages/dictionaries/ro-utf8.csv similarity index 100% rename from languages/dictionaries/ro-utf8.csv rename to app/languages/dictionaries/ro-utf8.csv diff --git a/languages/dictionaries/ru-utf8.csv b/app/languages/dictionaries/ru-utf8.csv similarity index 100% rename from languages/dictionaries/ru-utf8.csv rename to app/languages/dictionaries/ru-utf8.csv diff --git a/languages/dictionaries/sv-utf8.csv b/app/languages/dictionaries/sv-utf8.csv similarity index 100% rename from languages/dictionaries/sv-utf8.csv rename to app/languages/dictionaries/sv-utf8.csv diff --git a/languages/dictionaries/uk-utf8.csv b/app/languages/dictionaries/uk-utf8.csv similarity index 100% rename from languages/dictionaries/uk-utf8.csv rename to app/languages/dictionaries/uk-utf8.csv diff --git a/proguard-project.txt b/app/proguard-rules.pro similarity index 79% rename from proguard-project.txt rename to app/proguard-rules.pro index 5bf49af3..f2fe1559 100644 --- a/proguard-project.txt +++ b/app/proguard-rules.pro @@ -18,9 +18,3 @@ #-keepclassmembers class fqcn.of.javascript.interface.for.webview { # public *; #} - -# LanguageDefinition properties must be preserved so that SnakeYAML can map them -# to the language YAMLs. --keepclassmembers class io.github.sspanak.tt9.languages.LanguageDefinition { - public *; -} diff --git a/AndroidManifest.xml b/app/src/main/AndroidManifest.xml similarity index 100% rename from AndroidManifest.xml rename to app/src/main/AndroidManifest.xml diff --git a/src/io/github/sspanak/tt9/ConsumerCompat.java b/app/src/main/java/io/github/sspanak/tt9/ConsumerCompat.java similarity index 100% rename from src/io/github/sspanak/tt9/ConsumerCompat.java rename to app/src/main/java/io/github/sspanak/tt9/ConsumerCompat.java diff --git a/src/io/github/sspanak/tt9/Logger.java b/app/src/main/java/io/github/sspanak/tt9/Logger.java similarity index 100% rename from src/io/github/sspanak/tt9/Logger.java rename to app/src/main/java/io/github/sspanak/tt9/Logger.java diff --git a/src/io/github/sspanak/tt9/TextTools.java b/app/src/main/java/io/github/sspanak/tt9/TextTools.java similarity index 100% rename from src/io/github/sspanak/tt9/TextTools.java rename to app/src/main/java/io/github/sspanak/tt9/TextTools.java diff --git a/src/io/github/sspanak/tt9/db/DictionaryLoader.java b/app/src/main/java/io/github/sspanak/tt9/db/DictionaryLoader.java similarity index 100% rename from src/io/github/sspanak/tt9/db/DictionaryLoader.java rename to app/src/main/java/io/github/sspanak/tt9/db/DictionaryLoader.java diff --git a/src/io/github/sspanak/tt9/db/LegacyDb.java b/app/src/main/java/io/github/sspanak/tt9/db/LegacyDb.java similarity index 100% rename from src/io/github/sspanak/tt9/db/LegacyDb.java rename to app/src/main/java/io/github/sspanak/tt9/db/LegacyDb.java diff --git a/src/io/github/sspanak/tt9/db/SlowQueryStats.java b/app/src/main/java/io/github/sspanak/tt9/db/SlowQueryStats.java similarity index 100% rename from src/io/github/sspanak/tt9/db/SlowQueryStats.java rename to app/src/main/java/io/github/sspanak/tt9/db/SlowQueryStats.java diff --git a/src/io/github/sspanak/tt9/db/WordStore.java b/app/src/main/java/io/github/sspanak/tt9/db/WordStore.java similarity index 100% rename from src/io/github/sspanak/tt9/db/WordStore.java rename to app/src/main/java/io/github/sspanak/tt9/db/WordStore.java diff --git a/src/io/github/sspanak/tt9/db/WordStoreAsync.java b/app/src/main/java/io/github/sspanak/tt9/db/WordStoreAsync.java similarity index 100% rename from src/io/github/sspanak/tt9/db/WordStoreAsync.java rename to app/src/main/java/io/github/sspanak/tt9/db/WordStoreAsync.java diff --git a/src/io/github/sspanak/tt9/db/entities/Word.java b/app/src/main/java/io/github/sspanak/tt9/db/entities/Word.java similarity index 100% rename from src/io/github/sspanak/tt9/db/entities/Word.java rename to app/src/main/java/io/github/sspanak/tt9/db/entities/Word.java diff --git a/src/io/github/sspanak/tt9/db/entities/WordBatch.java b/app/src/main/java/io/github/sspanak/tt9/db/entities/WordBatch.java similarity index 100% rename from src/io/github/sspanak/tt9/db/entities/WordBatch.java rename to app/src/main/java/io/github/sspanak/tt9/db/entities/WordBatch.java diff --git a/src/io/github/sspanak/tt9/db/entities/WordList.java b/app/src/main/java/io/github/sspanak/tt9/db/entities/WordList.java similarity index 100% rename from src/io/github/sspanak/tt9/db/entities/WordList.java rename to app/src/main/java/io/github/sspanak/tt9/db/entities/WordList.java diff --git a/src/io/github/sspanak/tt9/db/entities/WordPosition.java b/app/src/main/java/io/github/sspanak/tt9/db/entities/WordPosition.java similarity index 100% rename from src/io/github/sspanak/tt9/db/entities/WordPosition.java rename to app/src/main/java/io/github/sspanak/tt9/db/entities/WordPosition.java diff --git a/src/io/github/sspanak/tt9/db/entities/WordPositionsStringBuilder.java b/app/src/main/java/io/github/sspanak/tt9/db/entities/WordPositionsStringBuilder.java similarity index 100% rename from src/io/github/sspanak/tt9/db/entities/WordPositionsStringBuilder.java rename to app/src/main/java/io/github/sspanak/tt9/db/entities/WordPositionsStringBuilder.java diff --git a/src/io/github/sspanak/tt9/db/exceptions/DictionaryImportAbortedException.java b/app/src/main/java/io/github/sspanak/tt9/db/exceptions/DictionaryImportAbortedException.java similarity index 100% rename from src/io/github/sspanak/tt9/db/exceptions/DictionaryImportAbortedException.java rename to app/src/main/java/io/github/sspanak/tt9/db/exceptions/DictionaryImportAbortedException.java diff --git a/src/io/github/sspanak/tt9/db/exceptions/DictionaryImportAlreadyRunningException.java b/app/src/main/java/io/github/sspanak/tt9/db/exceptions/DictionaryImportAlreadyRunningException.java similarity index 100% rename from src/io/github/sspanak/tt9/db/exceptions/DictionaryImportAlreadyRunningException.java rename to app/src/main/java/io/github/sspanak/tt9/db/exceptions/DictionaryImportAlreadyRunningException.java diff --git a/src/io/github/sspanak/tt9/db/exceptions/DictionaryImportException.java b/app/src/main/java/io/github/sspanak/tt9/db/exceptions/DictionaryImportException.java similarity index 100% rename from src/io/github/sspanak/tt9/db/exceptions/DictionaryImportException.java rename to app/src/main/java/io/github/sspanak/tt9/db/exceptions/DictionaryImportException.java diff --git a/src/io/github/sspanak/tt9/db/sqlite/CompiledQueryCache.java b/app/src/main/java/io/github/sspanak/tt9/db/sqlite/CompiledQueryCache.java similarity index 100% rename from src/io/github/sspanak/tt9/db/sqlite/CompiledQueryCache.java rename to app/src/main/java/io/github/sspanak/tt9/db/sqlite/CompiledQueryCache.java diff --git a/src/io/github/sspanak/tt9/db/sqlite/DeleteOps.java b/app/src/main/java/io/github/sspanak/tt9/db/sqlite/DeleteOps.java similarity index 100% rename from src/io/github/sspanak/tt9/db/sqlite/DeleteOps.java rename to app/src/main/java/io/github/sspanak/tt9/db/sqlite/DeleteOps.java diff --git a/src/io/github/sspanak/tt9/db/sqlite/InsertOps.java b/app/src/main/java/io/github/sspanak/tt9/db/sqlite/InsertOps.java similarity index 100% rename from src/io/github/sspanak/tt9/db/sqlite/InsertOps.java rename to app/src/main/java/io/github/sspanak/tt9/db/sqlite/InsertOps.java diff --git a/src/io/github/sspanak/tt9/db/sqlite/ReadOps.java b/app/src/main/java/io/github/sspanak/tt9/db/sqlite/ReadOps.java similarity index 100% rename from src/io/github/sspanak/tt9/db/sqlite/ReadOps.java rename to app/src/main/java/io/github/sspanak/tt9/db/sqlite/ReadOps.java diff --git a/src/io/github/sspanak/tt9/db/sqlite/SQLiteOpener.java b/app/src/main/java/io/github/sspanak/tt9/db/sqlite/SQLiteOpener.java similarity index 100% rename from src/io/github/sspanak/tt9/db/sqlite/SQLiteOpener.java rename to app/src/main/java/io/github/sspanak/tt9/db/sqlite/SQLiteOpener.java diff --git a/src/io/github/sspanak/tt9/db/sqlite/Tables.java b/app/src/main/java/io/github/sspanak/tt9/db/sqlite/Tables.java similarity index 100% rename from src/io/github/sspanak/tt9/db/sqlite/Tables.java rename to app/src/main/java/io/github/sspanak/tt9/db/sqlite/Tables.java diff --git a/src/io/github/sspanak/tt9/db/sqlite/UpdateOps.java b/app/src/main/java/io/github/sspanak/tt9/db/sqlite/UpdateOps.java similarity index 100% rename from src/io/github/sspanak/tt9/db/sqlite/UpdateOps.java rename to app/src/main/java/io/github/sspanak/tt9/db/sqlite/UpdateOps.java diff --git a/src/io/github/sspanak/tt9/ime/EmptyDatabaseWarning.java b/app/src/main/java/io/github/sspanak/tt9/ime/EmptyDatabaseWarning.java similarity index 100% rename from src/io/github/sspanak/tt9/ime/EmptyDatabaseWarning.java rename to app/src/main/java/io/github/sspanak/tt9/ime/EmptyDatabaseWarning.java diff --git a/src/io/github/sspanak/tt9/ime/KeyPadHandler.java b/app/src/main/java/io/github/sspanak/tt9/ime/KeyPadHandler.java similarity index 100% rename from src/io/github/sspanak/tt9/ime/KeyPadHandler.java rename to app/src/main/java/io/github/sspanak/tt9/ime/KeyPadHandler.java diff --git a/src/io/github/sspanak/tt9/ime/TraditionalT9.java b/app/src/main/java/io/github/sspanak/tt9/ime/TraditionalT9.java similarity index 100% rename from src/io/github/sspanak/tt9/ime/TraditionalT9.java rename to app/src/main/java/io/github/sspanak/tt9/ime/TraditionalT9.java diff --git a/src/io/github/sspanak/tt9/ime/helpers/AppHacks.java b/app/src/main/java/io/github/sspanak/tt9/ime/helpers/AppHacks.java similarity index 100% rename from src/io/github/sspanak/tt9/ime/helpers/AppHacks.java rename to app/src/main/java/io/github/sspanak/tt9/ime/helpers/AppHacks.java diff --git a/src/io/github/sspanak/tt9/ime/helpers/GlobalKeyboardSettings.java b/app/src/main/java/io/github/sspanak/tt9/ime/helpers/GlobalKeyboardSettings.java similarity index 100% rename from src/io/github/sspanak/tt9/ime/helpers/GlobalKeyboardSettings.java rename to app/src/main/java/io/github/sspanak/tt9/ime/helpers/GlobalKeyboardSettings.java diff --git a/src/io/github/sspanak/tt9/ime/helpers/InputModeValidator.java b/app/src/main/java/io/github/sspanak/tt9/ime/helpers/InputModeValidator.java similarity index 100% rename from src/io/github/sspanak/tt9/ime/helpers/InputModeValidator.java rename to app/src/main/java/io/github/sspanak/tt9/ime/helpers/InputModeValidator.java diff --git a/src/io/github/sspanak/tt9/ime/helpers/InputType.java b/app/src/main/java/io/github/sspanak/tt9/ime/helpers/InputType.java similarity index 100% rename from src/io/github/sspanak/tt9/ime/helpers/InputType.java rename to app/src/main/java/io/github/sspanak/tt9/ime/helpers/InputType.java diff --git a/src/io/github/sspanak/tt9/ime/helpers/Key.java b/app/src/main/java/io/github/sspanak/tt9/ime/helpers/Key.java similarity index 100% rename from src/io/github/sspanak/tt9/ime/helpers/Key.java rename to app/src/main/java/io/github/sspanak/tt9/ime/helpers/Key.java diff --git a/src/io/github/sspanak/tt9/ime/helpers/TextField.java b/app/src/main/java/io/github/sspanak/tt9/ime/helpers/TextField.java similarity index 100% rename from src/io/github/sspanak/tt9/ime/helpers/TextField.java rename to app/src/main/java/io/github/sspanak/tt9/ime/helpers/TextField.java diff --git a/src/io/github/sspanak/tt9/ime/modes/InputMode.java b/app/src/main/java/io/github/sspanak/tt9/ime/modes/InputMode.java similarity index 100% rename from src/io/github/sspanak/tt9/ime/modes/InputMode.java rename to app/src/main/java/io/github/sspanak/tt9/ime/modes/InputMode.java diff --git a/src/io/github/sspanak/tt9/ime/modes/Mode123.java b/app/src/main/java/io/github/sspanak/tt9/ime/modes/Mode123.java similarity index 100% rename from src/io/github/sspanak/tt9/ime/modes/Mode123.java rename to app/src/main/java/io/github/sspanak/tt9/ime/modes/Mode123.java diff --git a/src/io/github/sspanak/tt9/ime/modes/ModeABC.java b/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModeABC.java similarity index 100% rename from src/io/github/sspanak/tt9/ime/modes/ModeABC.java rename to app/src/main/java/io/github/sspanak/tt9/ime/modes/ModeABC.java diff --git a/src/io/github/sspanak/tt9/ime/modes/ModePassthrough.java b/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModePassthrough.java similarity index 100% rename from src/io/github/sspanak/tt9/ime/modes/ModePassthrough.java rename to app/src/main/java/io/github/sspanak/tt9/ime/modes/ModePassthrough.java diff --git a/src/io/github/sspanak/tt9/ime/modes/ModePredictive.java b/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModePredictive.java similarity index 100% rename from src/io/github/sspanak/tt9/ime/modes/ModePredictive.java rename to app/src/main/java/io/github/sspanak/tt9/ime/modes/ModePredictive.java diff --git a/src/io/github/sspanak/tt9/ime/modes/helpers/AutoSpace.java b/app/src/main/java/io/github/sspanak/tt9/ime/modes/helpers/AutoSpace.java similarity index 100% rename from src/io/github/sspanak/tt9/ime/modes/helpers/AutoSpace.java rename to app/src/main/java/io/github/sspanak/tt9/ime/modes/helpers/AutoSpace.java diff --git a/src/io/github/sspanak/tt9/ime/modes/helpers/AutoTextCase.java b/app/src/main/java/io/github/sspanak/tt9/ime/modes/helpers/AutoTextCase.java similarity index 100% rename from src/io/github/sspanak/tt9/ime/modes/helpers/AutoTextCase.java rename to app/src/main/java/io/github/sspanak/tt9/ime/modes/helpers/AutoTextCase.java diff --git a/src/io/github/sspanak/tt9/ime/modes/helpers/Predictions.java b/app/src/main/java/io/github/sspanak/tt9/ime/modes/helpers/Predictions.java similarity index 100% rename from src/io/github/sspanak/tt9/ime/modes/helpers/Predictions.java rename to app/src/main/java/io/github/sspanak/tt9/ime/modes/helpers/Predictions.java diff --git a/src/io/github/sspanak/tt9/languages/Characters.java b/app/src/main/java/io/github/sspanak/tt9/languages/Characters.java similarity index 100% rename from src/io/github/sspanak/tt9/languages/Characters.java rename to app/src/main/java/io/github/sspanak/tt9/languages/Characters.java diff --git a/src/io/github/sspanak/tt9/languages/InvalidLanguageCharactersException.java b/app/src/main/java/io/github/sspanak/tt9/languages/InvalidLanguageCharactersException.java similarity index 100% rename from src/io/github/sspanak/tt9/languages/InvalidLanguageCharactersException.java rename to app/src/main/java/io/github/sspanak/tt9/languages/InvalidLanguageCharactersException.java diff --git a/src/io/github/sspanak/tt9/languages/InvalidLanguageException.java b/app/src/main/java/io/github/sspanak/tt9/languages/InvalidLanguageException.java similarity index 100% rename from src/io/github/sspanak/tt9/languages/InvalidLanguageException.java rename to app/src/main/java/io/github/sspanak/tt9/languages/InvalidLanguageException.java diff --git a/src/io/github/sspanak/tt9/languages/Language.java b/app/src/main/java/io/github/sspanak/tt9/languages/Language.java similarity index 100% rename from src/io/github/sspanak/tt9/languages/Language.java rename to app/src/main/java/io/github/sspanak/tt9/languages/Language.java diff --git a/src/io/github/sspanak/tt9/languages/LanguageCollection.java b/app/src/main/java/io/github/sspanak/tt9/languages/LanguageCollection.java similarity index 100% rename from src/io/github/sspanak/tt9/languages/LanguageCollection.java rename to app/src/main/java/io/github/sspanak/tt9/languages/LanguageCollection.java diff --git a/src/io/github/sspanak/tt9/languages/LanguageDefinition.java b/app/src/main/java/io/github/sspanak/tt9/languages/LanguageDefinition.java similarity index 100% rename from src/io/github/sspanak/tt9/languages/LanguageDefinition.java rename to app/src/main/java/io/github/sspanak/tt9/languages/LanguageDefinition.java diff --git a/src/io/github/sspanak/tt9/languages/NullLanguage.java b/app/src/main/java/io/github/sspanak/tt9/languages/NullLanguage.java similarity index 100% rename from src/io/github/sspanak/tt9/languages/NullLanguage.java rename to app/src/main/java/io/github/sspanak/tt9/languages/NullLanguage.java diff --git a/src/io/github/sspanak/tt9/preferences/PreferencesActivity.java b/app/src/main/java/io/github/sspanak/tt9/preferences/PreferencesActivity.java similarity index 100% rename from src/io/github/sspanak/tt9/preferences/PreferencesActivity.java rename to app/src/main/java/io/github/sspanak/tt9/preferences/PreferencesActivity.java diff --git a/src/io/github/sspanak/tt9/preferences/SettingsStore.java b/app/src/main/java/io/github/sspanak/tt9/preferences/SettingsStore.java similarity index 100% rename from src/io/github/sspanak/tt9/preferences/SettingsStore.java rename to app/src/main/java/io/github/sspanak/tt9/preferences/SettingsStore.java diff --git a/src/io/github/sspanak/tt9/preferences/helpers/Hotkeys.java b/app/src/main/java/io/github/sspanak/tt9/preferences/helpers/Hotkeys.java similarity index 100% rename from src/io/github/sspanak/tt9/preferences/helpers/Hotkeys.java rename to app/src/main/java/io/github/sspanak/tt9/preferences/helpers/Hotkeys.java diff --git a/src/io/github/sspanak/tt9/preferences/items/ItemClickable.java b/app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemClickable.java similarity index 100% rename from src/io/github/sspanak/tt9/preferences/items/ItemClickable.java rename to app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemClickable.java diff --git a/src/io/github/sspanak/tt9/preferences/items/ItemDropDown.java b/app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemDropDown.java similarity index 100% rename from src/io/github/sspanak/tt9/preferences/items/ItemDropDown.java rename to app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemDropDown.java diff --git a/src/io/github/sspanak/tt9/preferences/items/ItemLoadDictionary.java b/app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemLoadDictionary.java similarity index 100% rename from src/io/github/sspanak/tt9/preferences/items/ItemLoadDictionary.java rename to app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemLoadDictionary.java diff --git a/src/io/github/sspanak/tt9/preferences/items/ItemResetKeys.java b/app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemResetKeys.java similarity index 100% rename from src/io/github/sspanak/tt9/preferences/items/ItemResetKeys.java rename to app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemResetKeys.java diff --git a/src/io/github/sspanak/tt9/preferences/items/ItemSelectGlobalKeyboard.java b/app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemSelectGlobalKeyboard.java similarity index 100% rename from src/io/github/sspanak/tt9/preferences/items/ItemSelectGlobalKeyboard.java rename to app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemSelectGlobalKeyboard.java diff --git a/src/io/github/sspanak/tt9/preferences/items/ItemSelectLanguage.java b/app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemSelectLanguage.java similarity index 100% rename from src/io/github/sspanak/tt9/preferences/items/ItemSelectLanguage.java rename to app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemSelectLanguage.java diff --git a/src/io/github/sspanak/tt9/preferences/items/ItemSelectTheme.java b/app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemSelectTheme.java similarity index 100% rename from src/io/github/sspanak/tt9/preferences/items/ItemSelectTheme.java rename to app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemSelectTheme.java diff --git a/src/io/github/sspanak/tt9/preferences/items/ItemSelectZeroKeyCharacter.java b/app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemSelectZeroKeyCharacter.java similarity index 100% rename from src/io/github/sspanak/tt9/preferences/items/ItemSelectZeroKeyCharacter.java rename to app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemSelectZeroKeyCharacter.java diff --git a/src/io/github/sspanak/tt9/preferences/items/ItemSetDefaultGlobalKeyboard.java b/app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemSetDefaultGlobalKeyboard.java similarity index 100% rename from src/io/github/sspanak/tt9/preferences/items/ItemSetDefaultGlobalKeyboard.java rename to app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemSetDefaultGlobalKeyboard.java diff --git a/src/io/github/sspanak/tt9/preferences/items/ItemTruncateAll.java b/app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemTruncateAll.java similarity index 100% rename from src/io/github/sspanak/tt9/preferences/items/ItemTruncateAll.java rename to app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemTruncateAll.java diff --git a/src/io/github/sspanak/tt9/preferences/items/ItemTruncateUnselected.java b/app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemTruncateUnselected.java similarity index 100% rename from src/io/github/sspanak/tt9/preferences/items/ItemTruncateUnselected.java rename to app/src/main/java/io/github/sspanak/tt9/preferences/items/ItemTruncateUnselected.java diff --git a/src/io/github/sspanak/tt9/preferences/items/SectionKeymap.java b/app/src/main/java/io/github/sspanak/tt9/preferences/items/SectionKeymap.java similarity index 100% rename from src/io/github/sspanak/tt9/preferences/items/SectionKeymap.java rename to app/src/main/java/io/github/sspanak/tt9/preferences/items/SectionKeymap.java diff --git a/src/io/github/sspanak/tt9/preferences/screens/AppearanceScreen.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/AppearanceScreen.java similarity index 100% rename from src/io/github/sspanak/tt9/preferences/screens/AppearanceScreen.java rename to app/src/main/java/io/github/sspanak/tt9/preferences/screens/AppearanceScreen.java diff --git a/src/io/github/sspanak/tt9/preferences/screens/BaseScreenFragment.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/BaseScreenFragment.java similarity index 100% rename from src/io/github/sspanak/tt9/preferences/screens/BaseScreenFragment.java rename to app/src/main/java/io/github/sspanak/tt9/preferences/screens/BaseScreenFragment.java diff --git a/src/io/github/sspanak/tt9/preferences/screens/DebugScreen.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/DebugScreen.java similarity index 100% rename from src/io/github/sspanak/tt9/preferences/screens/DebugScreen.java rename to app/src/main/java/io/github/sspanak/tt9/preferences/screens/DebugScreen.java diff --git a/src/io/github/sspanak/tt9/preferences/screens/DictionariesScreen.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/DictionariesScreen.java similarity index 100% rename from src/io/github/sspanak/tt9/preferences/screens/DictionariesScreen.java rename to app/src/main/java/io/github/sspanak/tt9/preferences/screens/DictionariesScreen.java diff --git a/src/io/github/sspanak/tt9/preferences/screens/HotkeysScreen.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/HotkeysScreen.java similarity index 100% rename from src/io/github/sspanak/tt9/preferences/screens/HotkeysScreen.java rename to app/src/main/java/io/github/sspanak/tt9/preferences/screens/HotkeysScreen.java diff --git a/src/io/github/sspanak/tt9/preferences/screens/KeyPadScreen.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/KeyPadScreen.java similarity index 100% rename from src/io/github/sspanak/tt9/preferences/screens/KeyPadScreen.java rename to app/src/main/java/io/github/sspanak/tt9/preferences/screens/KeyPadScreen.java diff --git a/src/io/github/sspanak/tt9/preferences/screens/MainSettingsScreen.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/MainSettingsScreen.java similarity index 100% rename from src/io/github/sspanak/tt9/preferences/screens/MainSettingsScreen.java rename to app/src/main/java/io/github/sspanak/tt9/preferences/screens/MainSettingsScreen.java diff --git a/src/io/github/sspanak/tt9/preferences/screens/SetupScreen.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/SetupScreen.java similarity index 100% rename from src/io/github/sspanak/tt9/preferences/screens/SetupScreen.java rename to app/src/main/java/io/github/sspanak/tt9/preferences/screens/SetupScreen.java diff --git a/src/io/github/sspanak/tt9/preferences/screens/UsageStatsScreen.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/UsageStatsScreen.java similarity index 100% rename from src/io/github/sspanak/tt9/preferences/screens/UsageStatsScreen.java rename to app/src/main/java/io/github/sspanak/tt9/preferences/screens/UsageStatsScreen.java diff --git a/src/io/github/sspanak/tt9/ui/AddWordAct.java b/app/src/main/java/io/github/sspanak/tt9/ui/AddWordAct.java similarity index 100% rename from src/io/github/sspanak/tt9/ui/AddWordAct.java rename to app/src/main/java/io/github/sspanak/tt9/ui/AddWordAct.java diff --git a/src/io/github/sspanak/tt9/ui/DictionaryLoadingBar.java b/app/src/main/java/io/github/sspanak/tt9/ui/DictionaryLoadingBar.java similarity index 100% rename from src/io/github/sspanak/tt9/ui/DictionaryLoadingBar.java rename to app/src/main/java/io/github/sspanak/tt9/ui/DictionaryLoadingBar.java diff --git a/src/io/github/sspanak/tt9/ui/UI.java b/app/src/main/java/io/github/sspanak/tt9/ui/UI.java similarity index 100% rename from src/io/github/sspanak/tt9/ui/UI.java rename to app/src/main/java/io/github/sspanak/tt9/ui/UI.java diff --git a/src/io/github/sspanak/tt9/ui/main/BaseMainLayout.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/BaseMainLayout.java similarity index 100% rename from src/io/github/sspanak/tt9/ui/main/BaseMainLayout.java rename to app/src/main/java/io/github/sspanak/tt9/ui/main/BaseMainLayout.java diff --git a/src/io/github/sspanak/tt9/ui/main/MainLayoutNumpad.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/MainLayoutNumpad.java similarity index 100% rename from src/io/github/sspanak/tt9/ui/main/MainLayoutNumpad.java rename to app/src/main/java/io/github/sspanak/tt9/ui/main/MainLayoutNumpad.java diff --git a/src/io/github/sspanak/tt9/ui/main/MainLayoutSmall.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/MainLayoutSmall.java similarity index 100% rename from src/io/github/sspanak/tt9/ui/main/MainLayoutSmall.java rename to app/src/main/java/io/github/sspanak/tt9/ui/main/MainLayoutSmall.java diff --git a/src/io/github/sspanak/tt9/ui/main/MainView.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/MainView.java similarity index 100% rename from src/io/github/sspanak/tt9/ui/main/MainView.java rename to app/src/main/java/io/github/sspanak/tt9/ui/main/MainView.java diff --git a/src/io/github/sspanak/tt9/ui/main/keys/SoftBackspaceKey.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftBackspaceKey.java similarity index 100% rename from src/io/github/sspanak/tt9/ui/main/keys/SoftBackspaceKey.java rename to app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftBackspaceKey.java diff --git a/src/io/github/sspanak/tt9/ui/main/keys/SoftKey.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKey.java similarity index 100% rename from src/io/github/sspanak/tt9/ui/main/keys/SoftKey.java rename to app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKey.java diff --git a/src/io/github/sspanak/tt9/ui/main/keys/SoftKeyInputMode.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyInputMode.java similarity index 100% rename from src/io/github/sspanak/tt9/ui/main/keys/SoftKeyInputMode.java rename to app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyInputMode.java diff --git a/src/io/github/sspanak/tt9/ui/main/keys/SoftNumberKey.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftNumberKey.java similarity index 100% rename from src/io/github/sspanak/tt9/ui/main/keys/SoftNumberKey.java rename to app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftNumberKey.java diff --git a/src/io/github/sspanak/tt9/ui/main/keys/SoftPunctuationKey.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftPunctuationKey.java similarity index 100% rename from src/io/github/sspanak/tt9/ui/main/keys/SoftPunctuationKey.java rename to app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftPunctuationKey.java diff --git a/src/io/github/sspanak/tt9/ui/tray/StatusBar.java b/app/src/main/java/io/github/sspanak/tt9/ui/tray/StatusBar.java similarity index 100% rename from src/io/github/sspanak/tt9/ui/tray/StatusBar.java rename to app/src/main/java/io/github/sspanak/tt9/ui/tray/StatusBar.java diff --git a/src/io/github/sspanak/tt9/ui/tray/SuggestionsAdapter.java b/app/src/main/java/io/github/sspanak/tt9/ui/tray/SuggestionsAdapter.java similarity index 100% rename from src/io/github/sspanak/tt9/ui/tray/SuggestionsAdapter.java rename to app/src/main/java/io/github/sspanak/tt9/ui/tray/SuggestionsAdapter.java diff --git a/src/io/github/sspanak/tt9/ui/tray/SuggestionsBar.java b/app/src/main/java/io/github/sspanak/tt9/ui/tray/SuggestionsBar.java similarity index 100% rename from src/io/github/sspanak/tt9/ui/tray/SuggestionsBar.java rename to app/src/main/java/io/github/sspanak/tt9/ui/tray/SuggestionsBar.java diff --git a/res/drawable-anydpi-v24/ic_done.xml b/app/src/main/res/drawable-anydpi-v24/ic_done.xml similarity index 100% rename from res/drawable-anydpi-v24/ic_done.xml rename to app/src/main/res/drawable-anydpi-v24/ic_done.xml diff --git a/res/drawable-hdpi/ic_done.png b/app/src/main/res/drawable-hdpi/ic_done.png similarity index 100% rename from res/drawable-hdpi/ic_done.png rename to app/src/main/res/drawable-hdpi/ic_done.png diff --git a/res/drawable-hdpi/ic_launcher.png b/app/src/main/res/drawable-hdpi/ic_launcher.png similarity index 100% rename from res/drawable-hdpi/ic_launcher.png rename to app/src/main/res/drawable-hdpi/ic_launcher.png diff --git a/res/drawable-mdpi/ic_done.png b/app/src/main/res/drawable-mdpi/ic_done.png similarity index 100% rename from res/drawable-mdpi/ic_done.png rename to app/src/main/res/drawable-mdpi/ic_done.png diff --git a/res/drawable-mdpi/ic_launcher.png b/app/src/main/res/drawable-mdpi/ic_launcher.png similarity index 100% rename from res/drawable-mdpi/ic_launcher.png rename to app/src/main/res/drawable-mdpi/ic_launcher.png diff --git a/res/drawable-xhdpi/ic_done.png b/app/src/main/res/drawable-xhdpi/ic_done.png similarity index 100% rename from res/drawable-xhdpi/ic_done.png rename to app/src/main/res/drawable-xhdpi/ic_done.png diff --git a/res/drawable-xhdpi/ic_launcher.png b/app/src/main/res/drawable-xhdpi/ic_launcher.png similarity index 100% rename from res/drawable-xhdpi/ic_launcher.png rename to app/src/main/res/drawable-xhdpi/ic_launcher.png diff --git a/res/drawable-xxhdpi/ic_done.png b/app/src/main/res/drawable-xxhdpi/ic_done.png similarity index 100% rename from res/drawable-xxhdpi/ic_done.png rename to app/src/main/res/drawable-xxhdpi/ic_done.png diff --git a/res/drawable-xxhdpi/ic_launcher.png b/app/src/main/res/drawable-xxhdpi/ic_launcher.png similarity index 100% rename from res/drawable-xxhdpi/ic_launcher.png rename to app/src/main/res/drawable-xxhdpi/ic_launcher.png diff --git a/res/drawable/button_background.xml b/app/src/main/res/drawable/button_background.xml similarity index 100% rename from res/drawable/button_background.xml rename to app/src/main/res/drawable/button_background.xml diff --git a/res/drawable/button_background_dark.xml b/app/src/main/res/drawable/button_background_dark.xml similarity index 100% rename from res/drawable/button_background_dark.xml rename to app/src/main/res/drawable/button_background_dark.xml diff --git a/res/drawable/button_separator.xml b/app/src/main/res/drawable/button_separator.xml similarity index 100% rename from res/drawable/button_separator.xml rename to app/src/main/res/drawable/button_separator.xml diff --git a/res/drawable/button_separator_dark.xml b/app/src/main/res/drawable/button_separator_dark.xml similarity index 100% rename from res/drawable/button_separator_dark.xml rename to app/src/main/res/drawable/button_separator_dark.xml diff --git a/res/drawable/suggestion_separator.xml b/app/src/main/res/drawable/suggestion_separator.xml similarity index 100% rename from res/drawable/suggestion_separator.xml rename to app/src/main/res/drawable/suggestion_separator.xml diff --git a/res/ime_he_lang_lower.png b/app/src/main/res/ime_he_lang_lower.png similarity index 100% rename from res/ime_he_lang_lower.png rename to app/src/main/res/ime_he_lang_lower.png diff --git a/res/ime_he_text_lower.png b/app/src/main/res/ime_he_text_lower.png similarity index 100% rename from res/ime_he_text_lower.png rename to app/src/main/res/ime_he_text_lower.png diff --git a/res/layout/addwordview.xml b/app/src/main/res/layout/addwordview.xml similarity index 100% rename from res/layout/addwordview.xml rename to app/src/main/res/layout/addwordview.xml diff --git a/res/layout/main_numpad.xml b/app/src/main/res/layout/main_numpad.xml similarity index 100% rename from res/layout/main_numpad.xml rename to app/src/main/res/layout/main_numpad.xml diff --git a/res/layout/main_small.xml b/app/src/main/res/layout/main_small.xml similarity index 100% rename from res/layout/main_small.xml rename to app/src/main/res/layout/main_small.xml diff --git a/res/layout/pref_category.xml b/app/src/main/res/layout/pref_category.xml similarity index 100% rename from res/layout/pref_category.xml rename to app/src/main/res/layout/pref_category.xml diff --git a/res/layout/pref_dropdown.xml b/app/src/main/res/layout/pref_dropdown.xml similarity index 100% rename from res/layout/pref_dropdown.xml rename to app/src/main/res/layout/pref_dropdown.xml diff --git a/res/layout/pref_plain_text.xml b/app/src/main/res/layout/pref_plain_text.xml similarity index 100% rename from res/layout/pref_plain_text.xml rename to app/src/main/res/layout/pref_plain_text.xml diff --git a/res/layout/pref_switch.xml b/app/src/main/res/layout/pref_switch.xml similarity index 100% rename from res/layout/pref_switch.xml rename to app/src/main/res/layout/pref_switch.xml diff --git a/res/layout/pref_text.xml b/app/src/main/res/layout/pref_text.xml similarity index 100% rename from res/layout/pref_text.xml rename to app/src/main/res/layout/pref_text.xml diff --git a/res/layout/preferences_container.xml b/app/src/main/res/layout/preferences_container.xml similarity index 100% rename from res/layout/preferences_container.xml rename to app/src/main/res/layout/preferences_container.xml diff --git a/res/layout/suggestion_list.xml b/app/src/main/res/layout/suggestion_list.xml similarity index 100% rename from res/layout/suggestion_list.xml rename to app/src/main/res/layout/suggestion_list.xml diff --git a/res/layout/suggestion_list_numpad.xml b/app/src/main/res/layout/suggestion_list_numpad.xml similarity index 100% rename from res/layout/suggestion_list_numpad.xml rename to app/src/main/res/layout/suggestion_list_numpad.xml diff --git a/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml similarity index 100% rename from res/values-bg/strings.xml rename to app/src/main/res/values-bg/strings.xml diff --git a/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml similarity index 100% rename from res/values-de/strings.xml rename to app/src/main/res/values-de/strings.xml diff --git a/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml similarity index 100% rename from res/values-es/strings.xml rename to app/src/main/res/values-es/strings.xml diff --git a/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml similarity index 100% rename from res/values-fr/strings.xml rename to app/src/main/res/values-fr/strings.xml diff --git a/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml similarity index 100% rename from res/values-it/strings.xml rename to app/src/main/res/values-it/strings.xml diff --git a/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml similarity index 100% rename from res/values-iw/strings.xml rename to app/src/main/res/values-iw/strings.xml diff --git a/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml similarity index 100% rename from res/values-nl/strings.xml rename to app/src/main/res/values-nl/strings.xml diff --git a/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml similarity index 100% rename from res/values-pt-rBR/strings.xml rename to app/src/main/res/values-pt-rBR/strings.xml diff --git a/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml similarity index 100% rename from res/values-ru/strings.xml rename to app/src/main/res/values-ru/strings.xml diff --git a/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml similarity index 100% rename from res/values-uk/strings.xml rename to app/src/main/res/values-uk/strings.xml diff --git a/res/values/colors.xml b/app/src/main/res/values/colors.xml similarity index 100% rename from res/values/colors.xml rename to app/src/main/res/values/colors.xml diff --git a/res/values/dimens.xml b/app/src/main/res/values/dimens.xml similarity index 100% rename from res/values/dimens.xml rename to app/src/main/res/values/dimens.xml diff --git a/res/values/strings.xml b/app/src/main/res/values/strings.xml similarity index 100% rename from res/values/strings.xml rename to app/src/main/res/values/strings.xml diff --git a/res/values/styles.xml b/app/src/main/res/values/styles.xml similarity index 100% rename from res/values/styles.xml rename to app/src/main/res/values/styles.xml diff --git a/res/xml/method.xml b/app/src/main/res/xml/method.xml similarity index 100% rename from res/xml/method.xml rename to app/src/main/res/xml/method.xml diff --git a/res/xml/prefs.xml b/app/src/main/res/xml/prefs.xml similarity index 100% rename from res/xml/prefs.xml rename to app/src/main/res/xml/prefs.xml diff --git a/res/xml/prefs_screen_appearance.xml b/app/src/main/res/xml/prefs_screen_appearance.xml similarity index 100% rename from res/xml/prefs_screen_appearance.xml rename to app/src/main/res/xml/prefs_screen_appearance.xml diff --git a/res/xml/prefs_screen_debug.xml b/app/src/main/res/xml/prefs_screen_debug.xml similarity index 100% rename from res/xml/prefs_screen_debug.xml rename to app/src/main/res/xml/prefs_screen_debug.xml diff --git a/res/xml/prefs_screen_dictionaries.xml b/app/src/main/res/xml/prefs_screen_dictionaries.xml similarity index 100% rename from res/xml/prefs_screen_dictionaries.xml rename to app/src/main/res/xml/prefs_screen_dictionaries.xml diff --git a/res/xml/prefs_screen_hotkeys.xml b/app/src/main/res/xml/prefs_screen_hotkeys.xml similarity index 100% rename from res/xml/prefs_screen_hotkeys.xml rename to app/src/main/res/xml/prefs_screen_hotkeys.xml diff --git a/res/xml/prefs_screen_keypad.xml b/app/src/main/res/xml/prefs_screen_keypad.xml similarity index 100% rename from res/xml/prefs_screen_keypad.xml rename to app/src/main/res/xml/prefs_screen_keypad.xml diff --git a/res/xml/prefs_screen_setup.xml b/app/src/main/res/xml/prefs_screen_setup.xml similarity index 100% rename from res/xml/prefs_screen_setup.xml rename to app/src/main/res/xml/prefs_screen_setup.xml diff --git a/res/xml/prefs_screen_usage_stats.xml b/app/src/main/res/xml/prefs_screen_usage_stats.xml similarity index 100% rename from res/xml/prefs_screen_usage_stats.xml rename to app/src/main/res/xml/prefs_screen_usage_stats.xml diff --git a/gradle/scripts/validate-languages.gradle b/app/validate-languages.gradle similarity index 100% rename from gradle/scripts/validate-languages.gradle rename to app/validate-languages.gradle diff --git a/gradle/scripts/version-tools.gradle b/app/version-tools.gradle similarity index 100% rename from gradle/scripts/version-tools.gradle rename to app/version-tools.gradle diff --git a/build.gradle b/build.gradle index f5b46030..8de434bd 100644 --- a/build.gradle +++ b/build.gradle @@ -1,150 +1,4 @@ -buildscript { - repositories { - mavenCentral() - google() - maven { - url "https://plugins.gradle.org/m2/" - } - } - dependencies { - classpath 'com.android.tools.build:gradle:8.0.2' - classpath 'gradle.plugin.at.zierler:yaml-validator-plugin:1.5.0' - } -} - -apply plugin: 'com.android.application' -apply plugin: 'at.zierler.yamlvalidator' - -apply from: 'gradle/scripts/constants.gradle' -apply from: 'gradle/scripts/dictionary-tools.gradle' -apply from: 'gradle/scripts/validate-languages.gradle' -apply from: 'gradle/scripts/version-tools.gradle' - -configurations.configureEach { - yamlValidator { - searchPaths = ['languages/definitions'] - } -} - -dependencies { - implementation 'androidx.core:core:1.10.1' - implementation 'androidx.preference:preference:1.2.1' - - // fixes 'duplicate class error' when using "androidx.core" > 1.9.0 - // see: https://stackoverflow.com/a/77323424 - implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.0")) -} - -repositories { - mavenCentral() - google() - maven { - url "https://plugins.gradle.org/m2/" - } -} - -tasks.register('validateLanguages') { - mustRunAfter(validateYaml) - inputs.dir fileTree(dir: LANGUAGES_INPUT_DIR) - outputs.file "${project.buildDir}/lang.validation.txt" - - doLast { - validateLanguageFiles(DEFINITIONS_INPUT_DIR, DICTIONARIES_INPUT_DIR, outputs.files.singleFile) - } -} - -tasks.register('copyLanguages', Copy) { - from LANGUAGES_INPUT_DIR - include '**/*.csv' - include '**/*.txt' - include '**/*.yml' - into LANGUAGES_OUTPUT_DIR -} - -tasks.register('calculateDictionarySizes') { - inputs.dir fileTree(dir: DICTIONARIES_INPUT_DIR) - outputs.dir DICTIONARIES_OUTPUT_DIR - - doLast { - getDictionarySizes(DICTIONARIES_INPUT_DIR, DICTIONARIES_OUTPUT_DIR) - } -} - -clean { - delete LANGUAGES_OUTPUT_DIR -} - - -// using the exported Closures directly causes weird values, hence the extra wrappers here -def getVerCode = { -> return getVersionCode() } -def getVerName = { -> return getVersionName() } -def getVersionString = { flavor -> return flavor == 'debug' ? getDebugVersion() : getReleaseVersion() } - -android { - namespace "io.github.sspanak.tt9" - - defaultConfig { - minSdkVersion 19 - //noinspection ExpiredTargetSdkVersion - targetSdk 30 - compileSdk 33 - versionCode getVerCode() - versionName getVerName() - } - - sourceSets { - main { - manifest.srcFile 'AndroidManifest.xml' - java.srcDirs = ['src'] - resources.srcDirs = ['src'] - aidl.srcDirs = ['src'] - res.srcDirs = ['res'] - assets.srcDirs = ['assets'] - } - - // Move the build types to build-types/ - // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ... - // This moves them out of them default location under src//... which would - // conflict with src/ being used by the main source set. - // Adding new build types or product flavors should be accompanied - // by a similar customization. - debug.setRoot('build-types/debug') - release.setRoot('build-types/release') - } - - buildTypes { - debug { data -> - data.buildConfigField 'String', 'VERSION_FULL', "\"${getVersionString('debug')}\"" - } - - release { data -> - data.buildConfigField 'String', 'VERSION_FULL', "\"${getVersionString('release')}\"" - - debuggable false - jniDebuggable false - minifyEnabled true - shrinkResources true - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt' - } - } - buildFeatures { - aidl true - buildConfig true - renderScript false - } - - - applicationVariants.configureEach { variant -> - tasks.named("generate${variant.name.capitalize()}Assets")?.configure { - dependsOn(validateLanguages, copyLanguages, calculateDictionarySizes) - } - - tasks.named("lintAnalyzeDebug")?.configure { - mustRunAfter(copyLanguages, calculateDictionarySizes) - } - - tasks.named("lintVitalAnalyzeRelease")?.configure { - mustRunAfter(copyLanguages, calculateDictionarySizes) - } - } -} +// Top-level build file where you can add configuration options common to all sub-projects/modules. +plugins { + id 'com.android.application' version '8.2.2' apply false +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 6469e575..cc2be8b1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,17 +1,22 @@ -## For more details on how to configure your build environment visit +# Project-wide Gradle settings. +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. +# For more details on how to configure your build environment visit # http://www.gradle.org/docs/current/userguide/build_environment.html -# # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. -# Default value: -Xmx1024m -XX:MaxPermSize=256m -# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 -# +org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true -#Wed May 17 11:42:52 EEST 2023 -android.nonFinalResIds=true -android.nonTransitiveRClass=true +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app's APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn android.useAndroidX=true -org.gradle.jvmargs=-Xmx1536M -Dkotlin.daemon.jvm.options\="-Xmx1536M" +# Enables namespacing of each library's R class so that its R class includes only the +# resources declared in the library itself and none from the library's dependencies, +# thereby reducing the size of the R class for that library +android.nonTransitiveRClass=true +android.nonFinalResIds=true diff --git a/gradle/scripts/constants.gradle b/gradle/scripts/constants.gradle deleted file mode 100644 index da7ebffa..00000000 --- a/gradle/scripts/constants.gradle +++ /dev/null @@ -1,16 +0,0 @@ -ext.LANGUAGES_DIR_NAME = 'languages' -ext.DEFINITIONS_DIR_NAME = 'definitions' -ext.DICTIONARIES_DIR_NAME = 'dictionaries' -ext.DICTIONARY_SIZES_DIR_NAME = 'dictionary-sizes' - -ext.LANGUAGES_INPUT_DIR = "${project.rootDir}/${LANGUAGES_DIR_NAME}" -ext.DEFINITIONS_INPUT_DIR = "${LANGUAGES_INPUT_DIR}/${DEFINITIONS_DIR_NAME}" -ext.DICTIONARIES_INPUT_DIR = "${LANGUAGES_INPUT_DIR}/${DICTIONARIES_DIR_NAME}" - -ext.LANGUAGES_OUTPUT_DIR = "${LANGUAGES_INPUT_DIR}".replace("${project.rootDir}", "${project.rootDir}/assets") -ext.DEFINITIONS_OUTPUT_DIR = "${DEFINITIONS_INPUT_DIR}".replace("${project.rootDir}", "${project.rootDir}/assets") -ext.DICTIONARIES_OUTPUT_DIR = "${DICTIONARIES_INPUT_DIR}".replace("${project.rootDir}", "${project.rootDir}/assets") - -ext.CSV_DELIMITER = ' ' // TAB -ext.MAX_WORD_FREQUENCY = 255 -ext.MAX_ERRORS = 50 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 1f199791..e783f1fb 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Dec 08 16:11:22 EST 2014 +#Sat Feb 10 14:43:22 EET 2024 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-all.zip diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 00000000..ef939dff --- /dev/null +++ b/settings.gradle @@ -0,0 +1,17 @@ +pluginManagement { + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + google() + mavenCentral() + } +} + +rootProject.name = "tt9" +include ':app'