From baca3c1d8f713a6d75c3a86e1d7eccfd61d43666 Mon Sep 17 00:00:00 2001 From: Dimo Karaivanov Date: Thu, 30 Mar 2023 11:11:59 +0300 Subject: [PATCH] Status bar (#230) * input mode is now displayed in a StatusBar * status icons are no more >:) * updated docs * removed the EDITING_NOSHOW mode, because it became obsolete and it was preventing the StatusBar from appearing in some ABC-only fields --- CONTRIBUTING.md | 28 +++---- README.md | 2 - res/drawable-anydpi-v24/ime_lang_bg.xml | 19 ----- res/drawable-anydpi-v24/ime_lang_br.xml | 19 ----- .../ime_lang_cyrillic_lower.xml | 19 ----- .../ime_lang_cyrillic_upper.xml | 19 ----- res/drawable-anydpi-v24/ime_lang_de.xml | 19 ----- res/drawable-anydpi-v24/ime_lang_en.xml | 19 ----- res/drawable-anydpi-v24/ime_lang_es.xml | 19 ----- res/drawable-anydpi-v24/ime_lang_fi.xml | 19 ----- res/drawable-anydpi-v24/ime_lang_fr.xml | 19 ----- res/drawable-anydpi-v24/ime_lang_hebrew.xml | 19 ----- .../ime_lang_hebrew_abc.xml | 21 ----- res/drawable-anydpi-v24/ime_lang_it.xml | 19 ----- .../ime_lang_latin_lower.xml | 19 ----- .../ime_lang_latin_upper.xml | 19 ----- res/drawable-anydpi-v24/ime_lang_nb.xml | 19 ----- res/drawable-anydpi-v24/ime_lang_nl.xml | 19 ----- res/drawable-anydpi-v24/ime_lang_ru.xml | 19 ----- res/drawable-anydpi-v24/ime_lang_sv.xml | 19 ----- res/drawable-anydpi-v24/ime_lang_uk.xml | 19 ----- res/drawable-anydpi-v24/ime_number.xml | 19 ----- res/drawable-hdpi/ime_lang_bg.png | Bin 328 -> 0 bytes res/drawable-hdpi/ime_lang_br.png | Bin 413 -> 0 bytes res/drawable-hdpi/ime_lang_cyrillic_lower.png | Bin 543 -> 0 bytes res/drawable-hdpi/ime_lang_cyrillic_upper.png | Bin 443 -> 0 bytes res/drawable-hdpi/ime_lang_de.png | Bin 491 -> 0 bytes res/drawable-hdpi/ime_lang_en.png | Bin 323 -> 0 bytes res/drawable-hdpi/ime_lang_es.png | Bin 428 -> 0 bytes res/drawable-hdpi/ime_lang_fi.png | Bin 219 -> 0 bytes res/drawable-hdpi/ime_lang_fr.png | Bin 285 -> 0 bytes res/drawable-hdpi/ime_lang_hebrew.png | Bin 396 -> 0 bytes res/drawable-hdpi/ime_lang_hebrew_abc.png | Bin 397 -> 0 bytes res/drawable-hdpi/ime_lang_it.png | Bin 244 -> 0 bytes res/drawable-hdpi/ime_lang_latin_lower.png | Bin 494 -> 0 bytes res/drawable-hdpi/ime_lang_latin_upper.png | Bin 477 -> 0 bytes res/drawable-hdpi/ime_lang_nb.png | Bin 453 -> 0 bytes res/drawable-hdpi/ime_lang_nl.png | Bin 370 -> 0 bytes res/drawable-hdpi/ime_lang_ru.png | Bin 496 -> 0 bytes res/drawable-hdpi/ime_lang_sv.png | Bin 466 -> 0 bytes res/drawable-hdpi/ime_lang_uk.png | Bin 500 -> 0 bytes res/drawable-hdpi/ime_number.png | Bin 404 -> 0 bytes res/drawable-mdpi/ime_lang_bg.png | Bin 275 -> 0 bytes res/drawable-mdpi/ime_lang_br.png | Bin 279 -> 0 bytes res/drawable-mdpi/ime_lang_cyrillic_lower.png | Bin 390 -> 0 bytes res/drawable-mdpi/ime_lang_cyrillic_upper.png | Bin 324 -> 0 bytes res/drawable-mdpi/ime_lang_de.png | Bin 325 -> 0 bytes res/drawable-mdpi/ime_lang_en.png | Bin 245 -> 0 bytes res/drawable-mdpi/ime_lang_es.png | Bin 307 -> 0 bytes res/drawable-mdpi/ime_lang_fi.png | Bin 202 -> 0 bytes res/drawable-mdpi/ime_lang_fr.png | Bin 200 -> 0 bytes res/drawable-mdpi/ime_lang_hebrew.png | Bin 273 -> 0 bytes res/drawable-mdpi/ime_lang_hebrew_abc.png | Bin 297 -> 0 bytes res/drawable-mdpi/ime_lang_it.png | Bin 194 -> 0 bytes res/drawable-mdpi/ime_lang_latin_lower.png | Bin 331 -> 0 bytes res/drawable-mdpi/ime_lang_latin_upper.png | Bin 335 -> 0 bytes res/drawable-mdpi/ime_lang_nb.png | Bin 333 -> 0 bytes res/drawable-mdpi/ime_lang_nl.png | Bin 268 -> 0 bytes res/drawable-mdpi/ime_lang_ru.png | Bin 348 -> 0 bytes res/drawable-mdpi/ime_lang_sv.png | Bin 313 -> 0 bytes res/drawable-mdpi/ime_lang_uk.png | Bin 353 -> 0 bytes res/drawable-mdpi/ime_number.png | Bin 308 -> 0 bytes res/drawable-xhdpi/ime_lang_bg.png | Bin 395 -> 0 bytes res/drawable-xhdpi/ime_lang_br.png | Bin 483 -> 0 bytes .../ime_lang_cyrillic_lower.png | Bin 723 -> 0 bytes .../ime_lang_cyrillic_upper.png | Bin 556 -> 0 bytes res/drawable-xhdpi/ime_lang_de.png | Bin 592 -> 0 bytes res/drawable-xhdpi/ime_lang_en.png | Bin 387 -> 0 bytes res/drawable-xhdpi/ime_lang_es.png | Bin 515 -> 0 bytes res/drawable-xhdpi/ime_lang_fi.png | Bin 289 -> 0 bytes res/drawable-xhdpi/ime_lang_fr.png | Bin 273 -> 0 bytes res/drawable-xhdpi/ime_lang_hebrew.png | Bin 517 -> 0 bytes res/drawable-xhdpi/ime_lang_hebrew_abc.png | Bin 504 -> 0 bytes res/drawable-xhdpi/ime_lang_it.png | Bin 321 -> 0 bytes res/drawable-xhdpi/ime_lang_latin_lower.png | Bin 643 -> 0 bytes res/drawable-xhdpi/ime_lang_latin_upper.png | Bin 622 -> 0 bytes res/drawable-xhdpi/ime_lang_nb.png | Bin 621 -> 0 bytes res/drawable-xhdpi/ime_lang_nl.png | Bin 419 -> 0 bytes res/drawable-xhdpi/ime_lang_ru.png | Bin 653 -> 0 bytes res/drawable-xhdpi/ime_lang_sv.png | Bin 625 -> 0 bytes res/drawable-xhdpi/ime_lang_uk.png | Bin 641 -> 0 bytes res/drawable-xhdpi/ime_number.png | Bin 504 -> 0 bytes res/drawable-xxhdpi/ime_lang_bg.png | Bin 686 -> 0 bytes res/drawable-xxhdpi/ime_lang_br.png | Bin 854 -> 0 bytes .../ime_lang_cyrillic_lower.png | Bin 1078 -> 0 bytes .../ime_lang_cyrillic_upper.png | Bin 847 -> 0 bytes res/drawable-xxhdpi/ime_lang_de.png | Bin 915 -> 0 bytes res/drawable-xxhdpi/ime_lang_en.png | Bin 531 -> 0 bytes res/drawable-xxhdpi/ime_lang_es.png | Bin 769 -> 0 bytes res/drawable-xxhdpi/ime_lang_fi.png | Bin 403 -> 0 bytes res/drawable-xxhdpi/ime_lang_fr.png | Bin 473 -> 0 bytes res/drawable-xxhdpi/ime_lang_hebrew.png | Bin 817 -> 0 bytes res/drawable-xxhdpi/ime_lang_hebrew_abc.png | Bin 741 -> 0 bytes res/drawable-xxhdpi/ime_lang_it.png | Bin 393 -> 0 bytes res/drawable-xxhdpi/ime_lang_latin_lower.png | Bin 988 -> 0 bytes res/drawable-xxhdpi/ime_lang_latin_upper.png | Bin 954 -> 0 bytes res/drawable-xxhdpi/ime_lang_nb.png | Bin 1030 -> 0 bytes res/drawable-xxhdpi/ime_lang_nl.png | Bin 617 -> 0 bytes res/drawable-xxhdpi/ime_lang_ru.png | Bin 923 -> 0 bytes res/drawable-xxhdpi/ime_lang_sv.png | Bin 938 -> 0 bytes res/drawable-xxhdpi/ime_lang_uk.png | Bin 983 -> 0 bytes res/drawable-xxhdpi/ime_number.png | Bin 751 -> 0 bytes res/layout/mainview.xml | 29 +++++-- .../github/sspanak/tt9/ime/KeyPadHandler.java | 7 +- .../github/sspanak/tt9/ime/TraditionalT9.java | 76 +++++++++--------- .../sspanak/tt9/ime/helpers/InputType.java | 4 - .../github/sspanak/tt9/ime/modes/Mode123.java | 8 ++ .../github/sspanak/tt9/ime/modes/ModeABC.java | 17 ++++ .../sspanak/tt9/ime/modes/ModePredictive.java | 19 +++++ .../sspanak/tt9/languages/Language.java | 35 +++++--- .../definitions/BrazilianPortuguese.java | 3 - .../tt9/languages/definitions/Bulgarian.java | 5 -- .../tt9/languages/definitions/Dutch.java | 4 - .../tt9/languages/definitions/English.java | 7 +- .../tt9/languages/definitions/Finnish.java | 6 +- .../tt9/languages/definitions/French.java | 4 - .../tt9/languages/definitions/German.java | 4 - .../tt9/languages/definitions/Hebrew.java | 8 +- .../tt9/languages/definitions/Italian.java | 4 - .../tt9/languages/definitions/Norwegian.java | 4 - .../tt9/languages/definitions/Russian.java | 7 +- .../tt9/languages/definitions/Spanish.java | 3 - .../tt9/languages/definitions/Swedish.java | 8 +- .../tt9/languages/definitions/Ukrainian.java | 7 +- src/io/github/sspanak/tt9/ui/UI.java | 27 ------- .../sspanak/tt9/ui/bottom/StatusBar.java | 60 ++++++++++++++ .../ui/{ => bottom}/SuggestionsAdapter.java | 2 +- .../SuggestionsBar.java} | 56 +++++++++++-- 128 files changed, 265 insertions(+), 561 deletions(-) delete mode 100644 res/drawable-anydpi-v24/ime_lang_bg.xml delete mode 100644 res/drawable-anydpi-v24/ime_lang_br.xml delete mode 100644 res/drawable-anydpi-v24/ime_lang_cyrillic_lower.xml delete mode 100644 res/drawable-anydpi-v24/ime_lang_cyrillic_upper.xml delete mode 100644 res/drawable-anydpi-v24/ime_lang_de.xml delete mode 100644 res/drawable-anydpi-v24/ime_lang_en.xml delete mode 100644 res/drawable-anydpi-v24/ime_lang_es.xml delete mode 100644 res/drawable-anydpi-v24/ime_lang_fi.xml delete mode 100644 res/drawable-anydpi-v24/ime_lang_fr.xml delete mode 100644 res/drawable-anydpi-v24/ime_lang_hebrew.xml delete mode 100644 res/drawable-anydpi-v24/ime_lang_hebrew_abc.xml delete mode 100644 res/drawable-anydpi-v24/ime_lang_it.xml delete mode 100644 res/drawable-anydpi-v24/ime_lang_latin_lower.xml delete mode 100644 res/drawable-anydpi-v24/ime_lang_latin_upper.xml delete mode 100644 res/drawable-anydpi-v24/ime_lang_nb.xml delete mode 100644 res/drawable-anydpi-v24/ime_lang_nl.xml delete mode 100644 res/drawable-anydpi-v24/ime_lang_ru.xml delete mode 100644 res/drawable-anydpi-v24/ime_lang_sv.xml delete mode 100644 res/drawable-anydpi-v24/ime_lang_uk.xml delete mode 100644 res/drawable-anydpi-v24/ime_number.xml delete mode 100644 res/drawable-hdpi/ime_lang_bg.png delete mode 100644 res/drawable-hdpi/ime_lang_br.png delete mode 100644 res/drawable-hdpi/ime_lang_cyrillic_lower.png delete mode 100644 res/drawable-hdpi/ime_lang_cyrillic_upper.png delete mode 100644 res/drawable-hdpi/ime_lang_de.png delete mode 100644 res/drawable-hdpi/ime_lang_en.png delete mode 100644 res/drawable-hdpi/ime_lang_es.png delete mode 100644 res/drawable-hdpi/ime_lang_fi.png delete mode 100644 res/drawable-hdpi/ime_lang_fr.png delete mode 100644 res/drawable-hdpi/ime_lang_hebrew.png delete mode 100644 res/drawable-hdpi/ime_lang_hebrew_abc.png delete mode 100644 res/drawable-hdpi/ime_lang_it.png delete mode 100644 res/drawable-hdpi/ime_lang_latin_lower.png delete mode 100644 res/drawable-hdpi/ime_lang_latin_upper.png delete mode 100644 res/drawable-hdpi/ime_lang_nb.png delete mode 100644 res/drawable-hdpi/ime_lang_nl.png delete mode 100644 res/drawable-hdpi/ime_lang_ru.png delete mode 100644 res/drawable-hdpi/ime_lang_sv.png delete mode 100644 res/drawable-hdpi/ime_lang_uk.png delete mode 100644 res/drawable-hdpi/ime_number.png delete mode 100644 res/drawable-mdpi/ime_lang_bg.png delete mode 100644 res/drawable-mdpi/ime_lang_br.png delete mode 100644 res/drawable-mdpi/ime_lang_cyrillic_lower.png delete mode 100644 res/drawable-mdpi/ime_lang_cyrillic_upper.png delete mode 100644 res/drawable-mdpi/ime_lang_de.png delete mode 100644 res/drawable-mdpi/ime_lang_en.png delete mode 100644 res/drawable-mdpi/ime_lang_es.png delete mode 100644 res/drawable-mdpi/ime_lang_fi.png delete mode 100644 res/drawable-mdpi/ime_lang_fr.png delete mode 100644 res/drawable-mdpi/ime_lang_hebrew.png delete mode 100644 res/drawable-mdpi/ime_lang_hebrew_abc.png delete mode 100644 res/drawable-mdpi/ime_lang_it.png delete mode 100644 res/drawable-mdpi/ime_lang_latin_lower.png delete mode 100644 res/drawable-mdpi/ime_lang_latin_upper.png delete mode 100644 res/drawable-mdpi/ime_lang_nb.png delete mode 100644 res/drawable-mdpi/ime_lang_nl.png delete mode 100644 res/drawable-mdpi/ime_lang_ru.png delete mode 100644 res/drawable-mdpi/ime_lang_sv.png delete mode 100644 res/drawable-mdpi/ime_lang_uk.png delete mode 100644 res/drawable-mdpi/ime_number.png delete mode 100644 res/drawable-xhdpi/ime_lang_bg.png delete mode 100644 res/drawable-xhdpi/ime_lang_br.png delete mode 100644 res/drawable-xhdpi/ime_lang_cyrillic_lower.png delete mode 100644 res/drawable-xhdpi/ime_lang_cyrillic_upper.png delete mode 100644 res/drawable-xhdpi/ime_lang_de.png delete mode 100644 res/drawable-xhdpi/ime_lang_en.png delete mode 100644 res/drawable-xhdpi/ime_lang_es.png delete mode 100644 res/drawable-xhdpi/ime_lang_fi.png delete mode 100644 res/drawable-xhdpi/ime_lang_fr.png delete mode 100644 res/drawable-xhdpi/ime_lang_hebrew.png delete mode 100644 res/drawable-xhdpi/ime_lang_hebrew_abc.png delete mode 100644 res/drawable-xhdpi/ime_lang_it.png delete mode 100644 res/drawable-xhdpi/ime_lang_latin_lower.png delete mode 100644 res/drawable-xhdpi/ime_lang_latin_upper.png delete mode 100644 res/drawable-xhdpi/ime_lang_nb.png delete mode 100644 res/drawable-xhdpi/ime_lang_nl.png delete mode 100644 res/drawable-xhdpi/ime_lang_ru.png delete mode 100644 res/drawable-xhdpi/ime_lang_sv.png delete mode 100644 res/drawable-xhdpi/ime_lang_uk.png delete mode 100644 res/drawable-xhdpi/ime_number.png delete mode 100644 res/drawable-xxhdpi/ime_lang_bg.png delete mode 100644 res/drawable-xxhdpi/ime_lang_br.png delete mode 100644 res/drawable-xxhdpi/ime_lang_cyrillic_lower.png delete mode 100644 res/drawable-xxhdpi/ime_lang_cyrillic_upper.png delete mode 100644 res/drawable-xxhdpi/ime_lang_de.png delete mode 100644 res/drawable-xxhdpi/ime_lang_en.png delete mode 100644 res/drawable-xxhdpi/ime_lang_es.png delete mode 100644 res/drawable-xxhdpi/ime_lang_fi.png delete mode 100644 res/drawable-xxhdpi/ime_lang_fr.png delete mode 100644 res/drawable-xxhdpi/ime_lang_hebrew.png delete mode 100644 res/drawable-xxhdpi/ime_lang_hebrew_abc.png delete mode 100644 res/drawable-xxhdpi/ime_lang_it.png delete mode 100644 res/drawable-xxhdpi/ime_lang_latin_lower.png delete mode 100644 res/drawable-xxhdpi/ime_lang_latin_upper.png delete mode 100644 res/drawable-xxhdpi/ime_lang_nb.png delete mode 100644 res/drawable-xxhdpi/ime_lang_nl.png delete mode 100644 res/drawable-xxhdpi/ime_lang_ru.png delete mode 100644 res/drawable-xxhdpi/ime_lang_sv.png delete mode 100644 res/drawable-xxhdpi/ime_lang_uk.png delete mode 100644 res/drawable-xxhdpi/ime_number.png create mode 100644 src/io/github/sspanak/tt9/ui/bottom/StatusBar.java rename src/io/github/sspanak/tt9/ui/{ => bottom}/SuggestionsAdapter.java (97%) rename src/io/github/sspanak/tt9/ui/{SuggestionsView.java => bottom/SuggestionsBar.java} (76%) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 207280e5..28f97a16 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -15,15 +15,17 @@ The recommended way of building is using Android Studio. As the of time of writi If you have not configured Android Studio yet, follow [the official manual](https://developer.android.com/training/basics/firstapp), then follow the simple steps below to get the project running. - _Import the project in Android Studio._ -- _Prevent the "Default Activity not found" issue._ The app does not have a default view or a launcher icon. For this reason, you must configure Android Studio not to launch anything after installing, otherwise it will fail with "Default Activity not found" or a similar message. To do so: +- _Prevent the "Default Activity not found" issue._ If Android Studio fails to identify the default Activity, you must configure it not to launch anything after installing, otherwise it will fail with "Default Activity not found" or a similar message. To do so: - Open "Edit Configurations..." (Press Shift 3 times and select it from the command list) - Go to "General" tab. - Change "Launch Options" to "Nothing" - Hit "OK" -That's it! Now you should be able to deploy and debug the app on your device. +_You can find more info in this [Github issue](https://github.com/android/input-samples/issues/18)._ -You can find more info in this [Github issue](https://github.com/android/input-samples/issues/18). +_Since this is an IME, it makes little sense to open the configuration screen every time you test on a real device. It may be practical keep "Launch Options" set to "Nothing" at all times, not only when you encounter the error above._ + +That's it! Now you should be able to deploy and debug the app on your device. ### Building a Release .apk The project is configured to build an unsigned release variant by default. @@ -46,21 +48,17 @@ 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: -- Add status icons - - Create a proper icon for each screen size. The icon needs to contain the abbreviation of the language. (e.g. "En" for "English"). - - The font must be Roboto or Roboto Lt (Heebo for Hebrew) at an adequate size to fit the icon square with minimum padding. - - The text must be white and the background must be transparent as per the [official Android guide](https://android-doc.github.io/guide/practices/ui_guidelines/icon_design_status_bar.html). - - To simplify the process, you could use Android Studio. It has a built-in icon generator accessible by right-clicking on "drawable" folder -> New -> Image Asset. Then choose "Icon Type": "Notification Icons", "Asset Type": Text, "Trim": No, "Padding": 0%. -- Find a suitable dictionary and add it to `assets/` folder. Two file formats are supported, [see below](#dictionary-formats). +- Find a suitable dictionary and add it to the `assets/` 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 language class in `languages/definitions/` and define its properties. - - `name` is the native name of the language (e.g. "English", "Deutsch", "Українська"). - `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 `assets/` folder. - - `icon` is the status icon for Predictive mode. - - `abcLowerCaseIcon` and `abcUpperCaseIcon` are the respective status icons for ABC (non-predictive) modes. Note that, you must not set `abcUpperCaseIcon`, if your language has no uppercase and lowercase letters (like Arabic, Asian scripts and Hebrew). - - Set `isPunctuationPartOfWords` to `true`, if the dictionary contains words with apostrophes or dashes, such as: `it's`, `you'll`, `a'tje` or `п'ят`. This will allow using 1-key for typing them (they will appear as suggestions). `false` will enable faster typing when apostrophes or other punctuation are not part of the words (no such words will be suggested). - `characterMap` contains the letters and punctuation marks associated with each key. + - Set `isPunctuationPartOfWords` to `true`, if the dictionary contains words with apostrophes or dashes, such as: `it's`, `you'll`, `a'tje` or `п'ят`. This will allow using 1-key for typing them (they will appear as suggestions). `false` will enable faster typing when apostrophes or other punctuation are not part of the words (no such words will be suggested). + - `abcString` _(optional)_. A custom string to display in ABC mode. By default, the first three letters on 2-key are used (e.g. "ABC" or "АБВ"). Set this if the first letters of the alphabet are _not_ on 2-key, like in Hebrew, or if a different string makes more sense. + - `hasUpperCase` _(optional)_ set to `false` when the language has no upper- and lowercase letters. For example: Arabic, Hebrew, East Asian + languages, and so on. The default is `true`. + - `name` _(optional)_ defaults to the native name of the language (e.g. "English", "Deutsch", "Українська"). Useful to set when the default is ambiguous. For example, both Portuguese in Portugal and Brazil will default to "Português", so assigning "Português brasileiro" would make it clear it's the language used in Brazil. - Finally, add the new language to the list in `LanguageCollection.java`. You only need to add it in one place, in the constructor. Please, be nice and maintain the alphabetical order. @@ -70,7 +68,7 @@ To support a new language one needs to: The most basic format is just a list of words where each word is on a new line. Constraints: -- No single lowercase letters. The application will add them automatically. +- No single lowercase letters. They will be added automatically. - No repeating words. - No digits or garbage characters as part of the words. @@ -110,7 +108,7 @@ To translate Traditional T9 menus and messages in your language, add: `res/value Alternatively, if you don't have Android Studio, you could just use `res/values/strings.xml` as a reference and translate all strings in your file, skipping the ones that have the `translatable="false"` attribute. -## Adding Support for Keys +## Adding Support for New Hardware Keys (Hotkeys) TT9 allows assigning hotkeys for performing different functions. If your phone has a special key that does not appear on the Hotkey configuration screen, you can easily add support for it. - In `preferences/helpers/Hotkeys.java`, find the `generateList()` function. diff --git a/README.md b/README.md index fbea9aa8..3f25246a 100644 --- a/README.md +++ b/README.md @@ -35,8 +35,6 @@ Your PRs are welcome! - The source code, the logo image and the icons are licensed under the conditions described in [LICENSE.txt](LICENSE.txt). - The dictionaries are licensed under the licenses provided in the [respective readme files](docs/dictionaries/), where applicable. Detailed information about the dictionaries is also available there. - [Silver foil photo created by rawpixel.com - www.freepik.com](https://www.freepik.com/photos/silver-foil) -- "Roboto" font is under [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0). -- "Heebo" font is under [SIL Open Font License Version 1.1](http://scripts.sil.org/OFL). - "Negotiate" and "Vibrocentric" fonts are under [The Fontspring Desktop/Ebook Font End User License](docs/desktop-ebook-EULA-1.8.txt). ## Privacy Policy diff --git a/res/drawable-anydpi-v24/ime_lang_bg.xml b/res/drawable-anydpi-v24/ime_lang_bg.xml deleted file mode 100644 index c15b21c7..00000000 --- a/res/drawable-anydpi-v24/ime_lang_bg.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/res/drawable-anydpi-v24/ime_lang_br.xml b/res/drawable-anydpi-v24/ime_lang_br.xml deleted file mode 100644 index 5860b1ad..00000000 --- a/res/drawable-anydpi-v24/ime_lang_br.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/res/drawable-anydpi-v24/ime_lang_cyrillic_lower.xml b/res/drawable-anydpi-v24/ime_lang_cyrillic_lower.xml deleted file mode 100644 index 3cdb5b60..00000000 --- a/res/drawable-anydpi-v24/ime_lang_cyrillic_lower.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/res/drawable-anydpi-v24/ime_lang_cyrillic_upper.xml b/res/drawable-anydpi-v24/ime_lang_cyrillic_upper.xml deleted file mode 100644 index f54b1560..00000000 --- a/res/drawable-anydpi-v24/ime_lang_cyrillic_upper.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/res/drawable-anydpi-v24/ime_lang_de.xml b/res/drawable-anydpi-v24/ime_lang_de.xml deleted file mode 100644 index f928161f..00000000 --- a/res/drawable-anydpi-v24/ime_lang_de.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/res/drawable-anydpi-v24/ime_lang_en.xml b/res/drawable-anydpi-v24/ime_lang_en.xml deleted file mode 100644 index cbcb6ca2..00000000 --- a/res/drawable-anydpi-v24/ime_lang_en.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/res/drawable-anydpi-v24/ime_lang_es.xml b/res/drawable-anydpi-v24/ime_lang_es.xml deleted file mode 100644 index afc45851..00000000 --- a/res/drawable-anydpi-v24/ime_lang_es.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/res/drawable-anydpi-v24/ime_lang_fi.xml b/res/drawable-anydpi-v24/ime_lang_fi.xml deleted file mode 100644 index cd0375ef..00000000 --- a/res/drawable-anydpi-v24/ime_lang_fi.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/res/drawable-anydpi-v24/ime_lang_fr.xml b/res/drawable-anydpi-v24/ime_lang_fr.xml deleted file mode 100644 index c3c702b6..00000000 --- a/res/drawable-anydpi-v24/ime_lang_fr.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/res/drawable-anydpi-v24/ime_lang_hebrew.xml b/res/drawable-anydpi-v24/ime_lang_hebrew.xml deleted file mode 100644 index 24196a14..00000000 --- a/res/drawable-anydpi-v24/ime_lang_hebrew.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/res/drawable-anydpi-v24/ime_lang_hebrew_abc.xml b/res/drawable-anydpi-v24/ime_lang_hebrew_abc.xml deleted file mode 100644 index d7f2753a..00000000 --- a/res/drawable-anydpi-v24/ime_lang_hebrew_abc.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/res/drawable-anydpi-v24/ime_lang_it.xml b/res/drawable-anydpi-v24/ime_lang_it.xml deleted file mode 100644 index 737fd30d..00000000 --- a/res/drawable-anydpi-v24/ime_lang_it.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/res/drawable-anydpi-v24/ime_lang_latin_lower.xml b/res/drawable-anydpi-v24/ime_lang_latin_lower.xml deleted file mode 100644 index cc1e23b8..00000000 --- a/res/drawable-anydpi-v24/ime_lang_latin_lower.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/res/drawable-anydpi-v24/ime_lang_latin_upper.xml b/res/drawable-anydpi-v24/ime_lang_latin_upper.xml deleted file mode 100644 index 57bd3ad1..00000000 --- a/res/drawable-anydpi-v24/ime_lang_latin_upper.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/res/drawable-anydpi-v24/ime_lang_nb.xml b/res/drawable-anydpi-v24/ime_lang_nb.xml deleted file mode 100644 index cf1ab788..00000000 --- a/res/drawable-anydpi-v24/ime_lang_nb.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/res/drawable-anydpi-v24/ime_lang_nl.xml b/res/drawable-anydpi-v24/ime_lang_nl.xml deleted file mode 100644 index 7100ee58..00000000 --- a/res/drawable-anydpi-v24/ime_lang_nl.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/res/drawable-anydpi-v24/ime_lang_ru.xml b/res/drawable-anydpi-v24/ime_lang_ru.xml deleted file mode 100644 index 78cd91a6..00000000 --- a/res/drawable-anydpi-v24/ime_lang_ru.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/res/drawable-anydpi-v24/ime_lang_sv.xml b/res/drawable-anydpi-v24/ime_lang_sv.xml deleted file mode 100644 index df398391..00000000 --- a/res/drawable-anydpi-v24/ime_lang_sv.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/res/drawable-anydpi-v24/ime_lang_uk.xml b/res/drawable-anydpi-v24/ime_lang_uk.xml deleted file mode 100644 index 9afe8476..00000000 --- a/res/drawable-anydpi-v24/ime_lang_uk.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/res/drawable-anydpi-v24/ime_number.xml b/res/drawable-anydpi-v24/ime_number.xml deleted file mode 100644 index b439f7ff..00000000 --- a/res/drawable-anydpi-v24/ime_number.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/res/drawable-hdpi/ime_lang_bg.png b/res/drawable-hdpi/ime_lang_bg.png deleted file mode 100644 index 6e13d49ddd5dc16c4c40aa553e6624f1f50f648d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 328 zcmV-O0k{5%P)ndG{61eS#)Z_0UM#z08dH-Vv0>woKf#2%(nGyW!I zb)BL0jPeru_@)X`k1NE$Ny(eCq849>fqTh29%6krA$f2!vmRCGA@4%P)&7O^^OqNl4q|r z(x`UuY&eWhk~2|!2O5YwlaB>;;V?c)-$WhTs%{Wtduc^6uL`QgcXo&INjO6ft%N;7 zIk=#jW3r({eO!dP6LN4te?L4ak#)e@%)(FJPV8S@5-JG2!C)fk*h7Z+O?`(r{_Ov^ zAVd7-Mk?@TDag8nd|w|jQ$cp}B3tlgDF{z$V+G!11)b#QPD0r@a;F@V6_i8oNsZoM zFi{4zblluFhC%EPA}sPsSMfh+2kE#nBIe;d_6vnV;T?Gbq7ke-H~1#M00000NkvXX Hu0mjfo;I(4 diff --git a/res/drawable-hdpi/ime_lang_cyrillic_lower.png b/res/drawable-hdpi/ime_lang_cyrillic_lower.png deleted file mode 100644 index 82cce2d26f976af3b2554fd3ccc7addef4ac2063..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 543 zcmV+)0^t3LP)Ei**cAsf^g~E`(%}HGu$~=*9%GuRyeE&GHTzyftlfPeS+)zL>to}6J5j?0IaW?LC*9WR z&{YNxcJ8Fu2y4=(*qw;o1hgDdTuq$0fCqP8x${WdSmU07|wR218`Go9> zqI(e=$216TUBcOLL6r-UajjiKY~D+`VmY19Ed?E&-HP=YVlCxDu$)bh>;{sbr*jmN z$5^pGA=VjR3>?Q~lXZf0p33VyWH)1d0!lJ2-Z^r)AU}%MH@VnDdn&d`h+X-}p7lWT zYtIGMPStv)CI6i}u|7k}4yATV$Loar@$@IB&VG%he4VVkzCbLg4+wTaB7Q6&TVBb# z3{b#M<&Ynr^AsylAhsi1R0K=Tx2bB0!9_8R-14spjKy{Zj#1K*()rxECd3{Lg?U?i hpR?`2z`(#?;sf7HI=b7uUpfE)002ovPDHLkV1k2d_U-@x diff --git a/res/drawable-hdpi/ime_lang_cyrillic_upper.png b/res/drawable-hdpi/ime_lang_cyrillic_upper.png deleted file mode 100644 index bdd2c392c45fac1fa9b12e56908b97f2ef1944bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 443 zcmV;s0Yv_ZP)0XB3f!mL~{Xu8SZQ zw7`9A?`*O&S{X&Y7+)T-G|;-;>%wqa#K+ODm{NnJax_h2nS zuyzd=jeCoL>{9p5)>KQ(v!D{4M8h+(VB*2BLf>^y$g`k66Pj<# ziGsDJFXS#d7xG3B=RFv|kNVUma|}{&R>iq3Xd24R3i9|qSQmC&Gk{V3D;U98D98hA zU;Z}|j)-J8w{ddj} zz}l64@kOZiVH?t8f6T-+}lgRfs5%x{Q%S!8~URYBa)C+b(&#>t|v z_!bX2`EgbQaYMoD#PSL1W?MK@iTAAnW;E1d`c1s0*A>$b7B7&G!(#7!1F)>2OuXvIR2PBe4e0{UoK}d&HCN3B>NOZdn||F`-jEKQ zOFor6N&2d8_LT8ghxHmdOa3Ay9f)g>Ua!D<4Qal_@EBrTE48Mpji4Z=;B^n;{ixd@ zG2A>Kk;||>6vPy~?h!9ZC-QU1`%wi7VhUbYFkHCZMu&Ljaw%H|i)EnTb%nZkZ%(_2 z7F1gVW;Wz}Bz1b`^hEX9;7&sv)Z!WSSEHQO*Mj)9amSAK8s4KmRtn8WVEE*ZC@^tI zVz|Z#{~46cRY`n(1?D$&!@V=80rf2COpU=!bo8Oxr(#oMaccDO;tA-tI5uN&v4`f$ h`^5VTw|;{+Xe#;jmEo@dMo?^c258M8v0T|`YmTb?m1eUymf`p@|$ko0dwyH*>ueh{5n z?L}*4%M)|-IIicAey_cV0k3MU<0)#`KMENg*K;5ZbQ9gxH4{RWpA?xK*K;5Z6nKfw zh#!A=ZI`rMF`o=28uIEu4~#qk>hWA3pqguF$XnbD@!QJwB&g;fCVZ53seA03{-Al?8*$Of zbC6u8y-hK2wW2uAnZnm>y=v-XsWI0W78-(@IZ=;3TCXkFM<6!z;8l*Op!z*-e8Bu5 zxeoU(9B-8agrXGoRR3yX2OA6VgNdIw9)abCjwV*yScn%eM+V0uLZapD)r_d3`ul68 z(n5DvY4c`-*pTC#DWHex5HDVLTr&t(FeE_FAUjWt82i>PbDWccJQTW&GR$w?*749s zV1Xg%!^?{}E`Z(|$0M-JkSvp>=*j8y=XeAcVESPElBu`L63q#^Z|H1ey&yI;3scYA z{vG=5616sfIsY`V&`{`6q5FwoBv#p)L7;Qcq^hTn47i*}HcysI?oDs^OeT~0B|ZVI WOdZh@pNr4{0000|k1|%Oc%$NbB7J0fjhE&A8opzSDK|#V<_Nd?; z2lqnZyGKH0T7B&tRTX<1K8f?!dg@=9CC-0jopOu7q_z$ptH-ks{>+V^6|eulu=8-AfYZNIj5Gf@Nz5pWO$NG_ N!PC{xWt~$(69D3~SA+ln diff --git a/res/drawable-hdpi/ime_lang_fr.png b/res/drawable-hdpi/ime_lang_fr.png deleted file mode 100644 index 5e08af89f363409f7e2aa6da57acccf960d6c902..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 285 zcmV+&0pk9NP)}P?6VuK=Jq1d1ZSSU6q0v5_a26<4+ jeu{99dG-y%FpkOxPli~tP_~5E00000NkvXXu0mjfh&gje diff --git a/res/drawable-hdpi/ime_lang_hebrew.png b/res/drawable-hdpi/ime_lang_hebrew.png deleted file mode 100644 index afa3d540e215e3a4dd94c677ce420be5367d3e41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 396 zcmV;70dxL|P)73p7$uVr09Ngzi2bEK_k?IgmEy$aHnUpcX^;FUlY_{FjlffhsNO|pmeUxRcQ zErYX!^foPZ#`Cs7ql+oz*<|#|109X0%jlB_+8WO}qfZ{FA)h;I_=i9h`5Myg8~pn~ z3j77RC9N~s#cD;MEKqBF2h-P!R&V+%of%dJMgqZHf*J3RCcj_QZ*CJX$bac=9pKU4 zTB_>D>tZLV52+=*f7ff4BSr9#xrF+O@p{H8pMc;I1?cuv7;eWs^n4AzaRZPhex}^y qeQ$+y-{@bw?VlU=20;)6BYXqChMPM!HB1};0000akq_ diff --git a/res/drawable-hdpi/ime_lang_hebrew_abc.png b/res/drawable-hdpi/ime_lang_hebrew_abc.png deleted file mode 100644 index 893ee673ca5679547729893581ee414231c367d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 397 zcmV;80doF{P)qK;DXB5?dN6KK#|(2a&YBWPd=31(*l8QMRAr<1uqRs+mSNie%45I+SU>?x4` rJE diff --git a/res/drawable-hdpi/ime_lang_it.png b/res/drawable-hdpi/ime_lang_it.png deleted file mode 100644 index 1ad64c550a43b36790b075dbdecd218ba3199231..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 244 zcmV#`NLE4lLoDu(KF~v+)p?UHA`j$q&P4wd;t8 z+5l{2E_IGRpPiP#*VE^-iwenZV{-UB9at!UMj;GEPBJ%>E8Xer%`E_62gUy6Aq z57tu1(6@pmckUm^dqskgsN uArJ3l9(ArhA7Lm}>gX4{`x_#nrTPH;AhEPr#MO%c0000mUBz=>SVl zei#h9U7=8zM??-9#}o&je>iF)$Tz{~A5Jl}MlrO;pBs|6jh{7MQs8`cJHy0iCmGUX zm2}WQE$L^0NTVBDPw6zOjLsO+IMX%LdhIM)yw`a59WuOTv}|at$2L=1cq7q=&=TwU zm2%+Xv}_1Kk5$5opETZVT28FbBGC{Ue=T_?&y(I4a^_}I9;@F|jnV%KZPHM~;Bsup z| zt{MVV18SciLDCi9HTJHip?q+;RYUTV6%spH@AJUb1ee=l$ltWNVFQ{_VRlQpny`?Y zd^mx)@0`yY#NIt#X#OZxGX0&HNyQoht)vyeQR2Uhxv_qN#NEZfRF`4^AG{H#XG5lL zhKluBwCLhh1eP1W0A_p##2P}~oGFagH0?4HR|=D30t9y3Ipy%^hH*qqy6Z5WuJM@0 kvDBwQk3mx?6bk>1PmpK}--BLPG5`Po07*qoM6N<$f-|?{lK=n! diff --git a/res/drawable-hdpi/ime_lang_latin_upper.png b/res/drawable-hdpi/ime_lang_latin_upper.png deleted file mode 100644 index 375da8829c2114d31f3c632993e5b582da9957a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 477 zcmV<30V4j1P)?GTX`?d%F-=~NAPVU)C zy6tw2Mx*i10We72=jy!9h<+q*uHL2Ir1rkI3TZsS(t8ghdguHlex%O6e-mly{YKuy zzy^9^y4_e0(jvj{u?nV5Jtyyrzy=yJ`a$YO9(Yd?*m3dcdhd;3BTxi(zs~DfV8^B5 z;%ybjhWbDQ`HDAgz+Zsp{MiKbeg*Y`_=b*NPkz+6oVOo5i$ZJWCTXY2y9SqP&ViYbOX8p-5_kxZlGF;33~4wFwM36@ptFLiDV-? ze#vT8sZ=V<0no*EOs(^JF>&x-CVKU{67`LEk4_7?5>$JLIQT;*B3tjd5Vcl~PW!V! zeQay*BY09EviClMCk7&$jQ8O{vA;%Uu32CMeM|q8@fHWdSan}=kNr2y9ESG*B;n&k46e!3N@_Te;?{8u69}B3u|3$erS^5_GHqE>ODnF82=NEe*s+-#C3I zIv1MXCFBD&u;*!bH=#VxFpmfJIJ90LKqgSSuPf>?R?E^ry7T6IPGBZb(mqAwIanI# zuIFALe!CRiwf_&4bgdA5uly#E{#WPq0cQ#sooDAPo(bpEKy#lSou~Es0PX}Lu~p|Y$bi#*AU@thY%l3o2|Ct*@<0vjyXjUStxgXYmfszM!a#(& vczvJ_<6La4PB!*0i(ts0V=9$Or82`0agAtlg(U{*00000NkvXXu0mjfo^!{~ diff --git a/res/drawable-hdpi/ime_lang_nl.png b/res/drawable-hdpi/ime_lang_nl.png deleted file mode 100644 index 29923acbdb3b0986a801d02f1940278e00e72056..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 370 zcmV-&0ge8NP)mCm zau8R&&=bAhYCa$zKwR}gC;D8t zVIZzV11U(tH<1*d(0ai6YDp>z+VZfMVdPMQ}Q z*javfX-7Bh3KjfI?ifhEZK1%|uN0Z&?UxFHGXf;rzEI%mmU9FoH(Me7Z5n~(<|!1o zUUN2qWacXr*!0ggfcPI5I<@@|;OD4UZ2#wb$j7tzbD!&+Gj^R$r}LNi0LHe%*^iad QO#lD@07*qoM6N<$f~$(6wg3PC diff --git a/res/drawable-hdpi/ime_lang_ru.png b/res/drawable-hdpi/ime_lang_ru.png deleted file mode 100644 index ca10c6b627c3c562ffbbaa9391445ece8c028cf6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 496 zcmV~5*S%*gPZYinW;HnZhtbbBQy_*REY_EL`-O)ZA5_D;BVMi%4pcSFVkh^UHJzpnEeP zHs65X8ET5k=Ze~t!gR~hG+=-sv`h9)@{)4VQZnd1e@B}SAkz?9GkcP%fr9cp;DNgO z{6)h7#M^$8h&{S9qjZWQu2WDhZ@Co2g|4A@y0vu_X+M!J7?$e~YOkqF4Dt-=K()jg z7v9k54jh)v_4kz2B?g(#P!4F{Gfa_a>%E}{jA%%a5=SbhGs?5Jv-${(Z%9peDs-1? zW%Usl-;geohj-@LYLj4OLkhaf=BcbM38pbra!tq5>XN9Cd)fRgpna<|C#&fN?Y69a z*!-=ydY<&jelHLo!s*{W_d*P8$xQ#rJ|$?k`$FQ4%qXSR-UY;e0+h$hj-rEGGq`qc mO$pi~LuW}tuODaT&+!8eWbeD0000M94ax>DdXaiDveTGc%JIX`o$eBS zSh6C=t5u;;C=})aU?cKq^5E@%f+Svx>_sk6K1~R9FFxjOSTXNbK%KDf%+`9_U64cv zOE~&@Xwzol;BAW|Nj^jxulI=0QRM9Pi(}n6dc8+{w$`P!z4KFUyrO} z!*0HJcMD5IqT+*fIBz|Dy-zklqT1W8K)b`^-FVv-*xcA!mAC&2Xv@hNdiOkwJlS(= zwv&$wfu5{Mzicr47(3{0*?K;6*U=z*ES~v6&`5QHg#5>!GuKqXLuOP~aoKnJ*k&;jm%bO0SB9b9x+!mHH-laOE0H=`Nmc2`2y zSzfIgjmCdPM64SdKi*hpoM#Pw9c%Xd3OC^(G1Udg|MkfKG;Trz3n)AG1axuo?%DGa zB;NIf^?=iM;8P5HUV==0glyTPxcU`51M4rvEil4jr;N^j+7>(;Ka$?k8t6L8FOi=N zF{I*wAKiy%Pk!wk z>>nk$a2F%-6)>`%1N@5hwIkL0IJFRocbB~g8SpFC*Z3t->hlRStDoQi;c<4>fsA6I zZb{R7$;?SY=5Nep&fKx=FHy@$`sSWdkC60{Dq8ES`G%)zz qPrsr*7lz5`hCDx7r_pFM{(^6|P<$n6(dcjh0000H`Es%R z(bK8XXfy%<&Q?!W7ps@4K2(>&^v~0{x2gDiQC$)n&>?~9V<32Z>R1PRXB`&>I|Cui ztTImJ`L=q{@heR9X!Yvq=3P{;nB?x{4DmM;_T0N3xw)ZvKxRz)9@X-9M8l7q`O^L- zG<61Bfw+ig?%F3P@QYGnFljjhtX})1#4pNj1Hmk=&TiEHCO9wWDg_BR;2aMx5j+JvMMEUNvj_+n{Om6*4QT#zAoAWyTTli+i)h}6;=L6ecxU4-x{5mIH%=k~ z_2~P+`6p|wJVbl&8w6)^IC&zeJJGGpM(7&^_8d+E+N_6z^{JpHXOH2T00j=#XM&oX zHHK#bq<6Gy&@%|EIXnf7q66r{?+;cA_zjw_%%ID#6j7YtAnd28QI7=DejoU4{x#cJ Z5ig_j6muNn`zHVZ002ovPDHLkV1n;$a5w+} diff --git a/res/drawable-mdpi/ime_lang_br.png b/res/drawable-mdpi/ime_lang_br.png deleted file mode 100644 index a558df026482c49369b5261b178ed2a13b6769c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 279 zcmV+y0qFjTP)*mjpDiU%XP@4XY9rteVwCWm7_n`35C;g%W!W z4_G$?3ToC#RI!}IACQX!I_j^{j@=ZXK;ubp|DY>|Jz6=Sq46L0auR>DjO4BwpwY3;ko(sFtLW;RDY<6I diM@jz@d2OhJs^TN$%Fs^002ovPDHLkV1i?DbI$+( diff --git a/res/drawable-mdpi/ime_lang_cyrillic_lower.png b/res/drawable-mdpi/ime_lang_cyrillic_lower.png deleted file mode 100644 index fc2944efe1f33cfe8facc63938e194fb42281fa3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 390 zcmV;10eSw3P)2Wj5To4qv9&M?zo49`pk^0~=w zZZ>=JP>9Guj6VDBMvKfuPXE82e|KEWzX0xe6iLQ8n9+^=0kXhSW&lS@D8h7w-Ew2)X^;-E!uD`&RM2| zF%iHaZQ=%uV%_!0zGLE%dOV;@u@~BFGdDq!%2Mo3Atxpk`u%`&N{v$t*;kRNTYzo~ ze?ei4A5is3@YQLvb3-TYylq2BD%4lh$CgaQz5_61Uv%!0-N!D}eNDlSwUlYvb+o(F zI~`SC#NGklfm1@PABt67Quef6rm6w4E%FW=TvscWVzHtbk)!L41_6#5-5QZEWr}&fEMULJAn?g1MNUMSQAOi15Ri3r+hORNH$0A7KWtl_>CpiPiZ(~?4^YEN7GLDruk`4E zHftZDMUyPnlPqk)w*xT0TxOJ9PZ4ZlUFv6w!9_<=``!S|o`dA?m-F;m}wTBs8C@-5(7$BOSBx*2wO1x~s`vLmiqK0ITt1oOq zVF1j9$=AJb34#DS_Vd>P8*qgEA_l23`}_d4=lS(ysNRcyl3WLPcoST21PRRTcbv~ddfc8@ENX);elF~9L2%xtyW1XTN(5}#GYg))_{(Lz% Xu$ph%NU5i$00000NkvXXu0mjfU`v-P diff --git a/res/drawable-mdpi/ime_lang_en.png b/res/drawable-mdpi/ime_lang_en.png deleted file mode 100644 index 012cafaf3475204609ede75ab7cd3256f4542203..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 245 zcmVkWf241^h>BV-dYLO19rbObhGgm#2(MzPCos`&TpLlfL$^RfCQFh>& zCZr5_dg7TTFo1hMp(Q{qch#_-ud0V?Qr*~_X$&w%I2$AT6H(?xH$ z@Mi7N8&L%obH8BkPMWf=VG1o+k;R;b^Jj90FnTSyKV7JFJfa3jaXTgNv%Smhzb3b? zgO3R%_U@r{rwI$ZjcPeYk~DEWTHu$Lhn$?Q(fN&)@CB=NOE3ai?|J|L002ovPDHLk FV1hHwfD-@! diff --git a/res/drawable-mdpi/ime_lang_fi.png b/res/drawable-mdpi/ime_lang_fi.png deleted file mode 100644 index 61c3166287d44de746fdf783b4431fae82989e56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gj6FprVLn`9lPPoX~V8G)dyHMGp zNqR=_8@4hN_kzVU5;i;xxYbm5lfB(+=jRoNFTAW_GwxsX)$vIR%H$bhD~exN;*nb@dKU4;OXk;vd$@?2>_&KLEHcU diff --git a/res/drawable-mdpi/ime_lang_hebrew.png b/res/drawable-mdpi/ime_lang_hebrew.png deleted file mode 100644 index 8be9e98aec38dd0a6a11013b5b4e4f01194a5404..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 273 zcmV+s0q*{ZP)ev$tgavc5CpX1?0tCr?v1pVjdc>ii?_Qu1Vl zs-FydU+?D}%e+UPvAX7e_u82*xcGV5!wIXeWG%OMUBAYTi*IS(gUTh>tb6LYPuj1D z{;!gAX30ytpu<+8YjXd-6@A4v;qrH-$J-dPS^Qr|w=84diosK z2*?iOnXpGB^TVU46+2I!WBtd@_36Tzrq|b(S8uH17T3z1qbQtz;Opa;uU2_Q2Qy!5 sR4ks@W&Y%^a8uv&u3H5TDxZww)hwU6PS9O62k3VOPgg&ebxsLQ0JzG1Gynhq diff --git a/res/drawable-mdpi/ime_lang_it.png b/res/drawable-mdpi/ime_lang_it.png deleted file mode 100644 index a725c630a57f455580cc7fb4d5dddf499bd79250..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gjot`d^Ar*1S2@lEtvMfdYRm0s{#mFv&( zEe9A+xwG?SM0GO%e<|zY@o2G_!-0+s3HAcFnKv?Qvbo66&&n83C{f@rO)8$!}IT#q~)Dq^r_?U1L=qLtHS3j3^P6f&kupN*NpaeR&bZ~S69fS^`14@7nd^_@vJ#mnD;pGIMv{F1fEEM;lmd|$m`c@^g4QNpLj^`^%GuXto2TC!$HEz*!aj@zR6C#1#fg>T7|aq zdW6=Cmt4bxI)!$tvkKl=rhGlt=;sIyq7f4f`I$Z=<&&&azFX8SLW6jS)#UTdXcIda zOEe!J0bWrFiO1>;uNUAC#>AcIvrvqIQ44+Mec4QT!HFJYV4~p$_^Qf-D5UxdE-C*5 z)EF8V#7p4aMBy9YN|!Qq3E`>nz6o~Eh0o$;kEbKZ@9L}#DIar)+Q-;979Yla^x>nw dlj**E3V-8!cOevbE*Jm+002ovPDHLkV1nsmlFR@A diff --git a/res/drawable-mdpi/ime_lang_latin_upper.png b/res/drawable-mdpi/ime_lang_latin_upper.png deleted file mode 100644 index e60a3d6df2c1b582e23a331dea99e98341047a64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 335 zcmV-V0kHmwP)IuQ8Orh`vPU>k}~U-VzpSv_VHvOB|*dnUfEY z*h|q(zOx-6HmF_xDEWiUCm`BW$#-TGzHNYL&q>C5ipte#gO*|=!T$_zFxdJDM0*+; z>yD1DP8)ch6s@gIK(r^wSZ%tyI&EMtnNP3zv#r-j_Vt`iD3eXd-$4m;hgP%pn+((^po05gRr~{CI18~43-~=3i1CW3Na8TN=J04ph0e+F(mo#^Mucg~QBXU^b=39w{9SKPv9Ft{Y_%cxvwnlQ0fMtK?`-uims-2 z-w5gxXcNu@mFHbR19_f2x7GOj+X0nMs5b`Z)m&U#`16wi3)Gtdu90i{sf?gL70vat z>x6nZ!1Z!)2I!@J2UOTtcv00000NkvXXu0mjf_V|js diff --git a/res/drawable-mdpi/ime_lang_nl.png b/res/drawable-mdpi/ime_lang_nl.png deleted file mode 100644 index 44e703a024d553eecf7f729c770ce56c58346003..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 268 zcmV+n0rUQeP)EnsuOkn+GpeAl?t9F{L++#(kgds1;vs%q0r{D{ z;S6z;6qMx8K-~BOx|+@d;gc2Q)_rgY|ER!Ug_o4E^N3#wn_K%MEam7wzmf-`^h804 SAZR`S0000z+422ni5i$ZB)EmGE9)S(Y24#edzy^4OvH{(oZ1CzwWJ?I*LeuM?^4;kmdQu*i zLT0lk{|5jYjI+-Xe9uEb4Nf_d30@c0zVB|J2I+>@i}snL^ZH%13<&fjs~jQ6YmRuM zZY^5y!gmG-(Rl-!6y~O;Gx^T6w+&olklcq{M^i_0awxe9)ZjhGi^LMcaXEXEO#N1J zJCm!YEV&BWk16SKIgW+V=4g#a8j1mbMX=#(3ov7XjwkuLGidB!4AZk?pL~zL?u;o; zUK;~CmZN-rm|0|NqGEU62>VuC@LJz06Zf?=UFiC${~eVR^Q`xT(?sorao;7N15 u$<0aUYbF8x50L2f$zXWlac2v!{V8AU^Ij(+VuJku0000SVQCx{Gu` zjq$x-coR&nmm2V>ti+9@j>I#0+Hz%CEZZkJis*dB8Jd^B;}7u!SIj`aQ_)7g00000 LNkvXXu0mjf`BsB! diff --git a/res/drawable-mdpi/ime_lang_uk.png b/res/drawable-mdpi/ime_lang_uk.png deleted file mode 100644 index 06d9970259b5a10bf59da3ab80b58f62523f2957..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 353 zcmV-n0iOPeP)69035UqmVI|`lg%~^(mW{fe+qcDlXz z(9*T6&*EOH{T(&5or~8%;bO&UR=V7hi*78stYtn@JNaxyLOG-z?&lzDWRBlB#)h^b z-jH^nd)J=^IU_S$$1&T%3E<4em>VK(=U|RLaK7jIU`I&*V-4%+{G#o| z{)c>%?~wLqm*^Sv0ZNMNX}9e?W*5|W)b^n5i9wKJ&TyH`vH$A1Pp<*nficC5$K|rq zP_8T8OnfS?8+MX9a{%*bwdUwM{k8+Y^Y{4zze6v1%^9i$00000NkvXXu0mjfK1QZf diff --git a/res/drawable-mdpi/ime_number.png b/res/drawable-mdpi/ime_number.png deleted file mode 100644 index 40dc6a25fd0f351179ae12bad28c7dc2b378a5b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 308 zcmV-40n7f0P)Ifx#d~7sOCCw;9ZHJ^_N6oTX5;4kItlX6#)c zd)_~QWHx7vDkm9^b;Eg-tqa7z_j^zs=Sg-fxCITTC;fpjTNY^41_eiU+h2vTwm{pJ z<;q3tOtrjF))zR-6F8okApT_3D9(WRC+PD;RXlU>$9w^4JKm(k%!6tG00008AQ!IjX41$APS72W}X&4M9qNSMQ72gXwP{J$^!a2jp)ERgTO8@m7C~= zGjmWDNbFezmKEq}FmN@nQGpueW$nca^;|exLFrHISp@6?75j4J^P}jKhlDr7>#u+! zp1tUs=5B`1X8}cgCmsadLEyZ=fd@ge@LWLQLC}KmTmb+53c&sk+&vHAwE()ikUoiX zu7=NF0d&uSFPc$`V+A%Ua6xxqW9j=1Y--L{uu*}z=#s9^LQ}cI_}S#ZSpi+9Mt7*w pIrCf3`J2f}>&9&F4)=#<{1!fTys?r8hE%hEn-}_?rI=xtY%F| zv$t=eBz?y=uM$QW=zwmbVBIQUnt_6Hgi_HRnt1i%#oLq9d_#Mq9sRsfV1faGa)eUR z@JZEf{YvYg)O4gM)v8&;ApHc`zzs_C0_P@!X$G_=4vLNqMB&_IFv0-Z_x413;mleA ze;eqo><8y2;|lnE;W;vJXxtIGLJ>D0>%SlLED#z%>zs9EEK_6pU^6pA)K0|MGVtelijrRefBAT+u&2RbKp*DriY_k$c+NsHZZN?-gpCZu zW}zX1r!Qb517nf@fjXEWa|1ua93qpb;P!j4W;RGSAUX+Y>H`CfcQ|bi))vJ0wX5YtOCUd z2QRfwbp&~ZA-!lUT&hu!ui8O1--dKVW;aK5M!Hm^c>lBLKUMQ>NJqpi_{Y?50b^xV zb2bQN?+Kwc(^wg5IBBm8sow&|0I=q6gm935VL4d~C$W^7-vV|a=~ZWf(D+STNB9mH z#S|y;jy1mp?DtTwIuqmvh#XM3F{%*x0CbRJ>bHQsh0L;>p{=mcp^A|Yz==P5*(nGw zxEZQ3fj#nGbtx)FK7hRnuv|t5(H~V~0($_(rGvfQoM<`~V4)Hre~}HUF@fFLv!UZb ze-Yh;GxSbHFs>&k7m!Z1MUao4@b3OI+ERISMocDlR3XA7@Z)HT`;j^$S-dJR4p0Sa z3k@2RU|rk^mTj~8Re`|GK3(D_HX38;wSz(P&&de*t)1>|yUFIgtPW002ovPDHLk FV1oBEOeFvS diff --git a/res/drawable-xhdpi/ime_lang_cyrillic_upper.png b/res/drawable-xhdpi/ime_lang_cyrillic_upper.png deleted file mode 100644 index 1c1bdc68ef2df7c2f7bd467cde9d19c386e139d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 556 zcmV+{0@MA8P)u|o>vCX914zfG zqbNpD1Gb{;iZSP&#oQm3qbNpD13T8d4D{o}Q7VcNrZNy7)X;-%HI8)cX^b$T0sgYK zAH)>bF_^+Yc*vX{dd*zFa4mz03}j~-iIs^;1*n0~Ft(ZT7RHKuRD*#p89sl|y*4Tp zpax2~gz?V3ih#z%c$~%I^MdXT#t7pKbbO)Upy&aO&oQAnlO`J@sDab{8V_6bpGenX zCdyxC(D*b7O>vB%26n88f%Y~ItV@C?@riT`(qv>-0yI7~wA|0Ycmr)!9n$fsAsHi#H?Xg&gT`kJ5+jT^aH6_~H9e{eX35Rg zCN$Lsf@VoIM*e*OJyi@jeHdt+ZR}nhDh=S)(+-cAGwXUlXHs5XIiN3}hVHY01N20* zVZVd6(9`XTq1iW}M^?j{9MH|yGY>UTOB44KpfNC>#-{`6|IP7lr?CcXQio^Wz#rn% uLG?xx-77UH zttAV=YL!SN5{X3O9|54iG_GyDOYFGMpMmKHm|9}X{ay~18|cWn=SzWYpfX~JGxvQN zFbuG!LsA=w6YEBLdM#sg9Qc@k!`t7C|NfI+>E|S?6A~478+1s zyc?`x;0FD{bslGlHP_t*aR&BWE9_a$&EEp zV4(rn`+I5Vg8mr$a+(8-8?c6f8$2Hkl+4g(EP`Q_!IX25f*A(j29uM#_ppHo%Y(iH z9I^|g9|-Oeyw@Olqe1Wk+Xly*3}zO8F1c8UTW`92%H@&W%fFuI*4r|P@UaUD3f`1t zklS9oXS?)@0|!3d%iEyy!7?s;rt`0!>gA+E7!^c1DCIf1avm}jmV1$KaB*iYdaq2`(%3=hSc zYeqqt0K7HKmAVVC1MsX|75gdj`$y*!(~90jYp$OJi~wAd3&K~3--8(aynZ4aXiILN z1quXEbYKXpl)@glU!NWn3ebb_xwN(vqpMPJ`~Ly;iv5Hw*C`0w zh;OXZw-Agw&n=NB&#H37`5zgT9%}9BuV?ZOI@kfSAy1uIzD}f2$397*K!DCyLs%r%W{=$HmXi?xd%{=fU7nMqYC_{om9@>~3W&lVL3R+w6O z>0D3EbzVc(xG&X5zpqkQc3@)b`%uRi#@oI%+a&q8DhlQuOmA#GKZnhbHO;PAihKF- z7>n}@nwehSerVHNFaE$dE`X68C>p|`^&sKlml<3RtTH-t`Un>mi-IF92u9RRE)evH^id`Wytyh+U2`v}n%jrSU?Va9mQh;WBt95FDd=(cPY z7OabbQ3q>GEaMYui6!TWk@XdMl!A3JFzR59iDewXp7X@WdSHXFW?c-7I#`p0_?Ng8 zQc~WQl07jj7Iv(O(RDVkW;C$B(cS|fv7l6aGLo<21EA;11pAi@tZTsw8b~eZgT=y% zbuD;71E~egSu9knYrzW|2z&rMALIk+Yu2?T40@mOdHU92~)C8 zL5>Y5qB)Ug#~MXHCtWrTaA8N*D7YW^Y#J!p1mnq+1;Q_DCV}w{SiXWZ);(q$YbFD` zkdk#4xSxY6TGJa|P3uZ=%kU2%p#fYjpNr^yLB8`Gs0NpvA9K1U>w{e*sBznZo;Nw@ zo(_A7Z;AKjb&M9SyF816O0{9vL_(9Z;)O(dH$ENMIg!xhJn+ImbWR>V9GY;3iG(Jn zp4WQL>&Bjk*Fqa!!??6&0lHh$ICNHe{~T}}$8j9Tac=wpl&Y4QM7%)f00000NkvXX Hu0mjfq-5b_ diff --git a/res/drawable-xhdpi/ime_lang_hebrew_abc.png b/res/drawable-xhdpi/ime_lang_hebrew_abc.png deleted file mode 100644 index c83d03612ee82a831784de32dfc1e1fc9c273daa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 504 zcmVL&9m!^(~c?*rRHdoKZ#0s}LU_>$ItR#-C z)lfHsJ zeOVxV7$#h(-^Iq45<@nQ=dJ!yy@xanS;4dd^g+)D6aLjoN|_=*Od?4uby~!O zjBRurx$k`sj4S}nR=L6%*Q>Q=f7i~Tc-5>~pAP9ospYjbxLvtl+uJ*0~0000nWzEzFWLvt|eW#?X;7v-VU4>{(0MmNUgc1uDa%7qIKb=DnL^40hLk zzn>=V7J=~siJsq*;%*U8fq@ivi@u; zOmR?w%Af+3K?N#<3RH%?0(;7~oGA`@1rlXl!?~i6S71$9_hYlQ`LbE@&g76+;ML}r z^3f;nOb!_Z9Iii`|C2aBIeXC!uJ39;2hK43{olZMcbuI)JM_wj?~90t$h|lNze~3# TP&{4{00000NkvXXu0mjfBWQ<; diff --git a/res/drawable-xhdpi/ime_lang_latin_lower.png b/res/drawable-xhdpi/ime_lang_latin_lower.png deleted file mode 100644 index 6c0415db85f48ddd3b82c62b6567a4bd2b2dcd6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 643 zcmV-}0(||6P)kQ=-}u8cW`u&lyDv34nhZ{gS!s)wD%%LSv^@IVSM?aZ$>|` z*Q>XZB8j`ZPN&o9+&Ta@q1{W{sP1M7#g51sRd=(nSgjsCz>2U~tsXtVim+I%9zDQ{ zuvo1gYX=A&4zL60M`$mhJ)Zuq9!MK~M+) z8aEfcupdLV%=ByeQymn1Mn=o&)!=e`I#a zJC9L3y#Nso0=?ro<1wdxRgf>EB_@3Uxx*t5a72DpC_&wr`ZWRD<7;raZS)~zeIpOR z(0o=4!JyfVwHa7}UXWi%jFF!k2l3GW|JFWixzbBvpIim)SLhlvL+cOeLU7G!cRHO; dr_=cl`~^VJ!$J_wVO0PC002ovPDHLkV1lSl8xH^g diff --git a/res/drawable-xhdpi/ime_lang_latin_upper.png b/res/drawable-xhdpi/ime_lang_latin_upper.png deleted file mode 100644 index e329955a94cceeacdbdf884c17b8b74f4f884a94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 622 zcmV-!0+IcRP)n0!5r!})N`mi?(ri+!^wZsfi3HDpv(X><2Q_i zCYPZ;;@;ovS(^iG296XjRFcqO!yO$1>r+4t*yk}(FJ9!h<(|bL-_$5t9jJkkHAlkO z5bBfkJJuC}B|aW*TofZz7%-rR#s_PPfX3%B)EiwJcpigF0|x1hfiJXnamb z8I~i@^XTU?Py}&*Twu^xN>7Qtv4b-yp{RA||=Lq!O5&eTgy8+wT z5s4RR1bz@7!@hv#8>byaxdGEzS^n*w&fj>a)9G|Noz6ez3%2Fc01Q!_v;Y7A07*qo IM6N<$f`iKy+W-In diff --git a/res/drawable-xhdpi/ime_lang_nb.png b/res/drawable-xhdpi/ime_lang_nb.png deleted file mode 100644 index cc2358bd76d61fc38feca0ab5af0ced47b919d89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 621 zcmV-z0+RiSP)2%rwFvRwhwNW*jCMLW?Nl?vI#04kW;4`*gs`G$N4h@>1nyY{{ zKwebm0h`=r43M2_6>2o7K@(JS6{s6H;G0_sHn~k1Ad~8IV3XUN0dlV~E3nCJ(!iU> ztiUGMY#{#L$MziCTN>vt`wz0jX0}dbCqEugSF-2&&29yy!>O z6ySt`G(XBb8Pc34cMAiW&!n0HCm=W)y(;s)37gzc7}%?(zzGPBW)KY-VUxRsfroSS zO$LagV{OpQZec+8c~wn;6A)Ch0$Upn(*FqqlWGc_fS{Tc*klY1F+nvsSc+SY`x)~E z&M-h=YeRvfR|5ys>%bsdvQu3F&NtxIhA$kw8X%^^Vp;b^bVt=0aHatQzc$P`TF(G^ z$MX678_VA<>?@2x}s&VS55RE8<2-9@Ju00000NkvXX Hu0mjfRMHQ8 diff --git a/res/drawable-xhdpi/ime_lang_nl.png b/res/drawable-xhdpi/ime_lang_nl.png deleted file mode 100644 index b2af69dcbd2a63f3610756d8a5700ee58e6b86dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 419 zcmV;U0bKrxP)o!=|9N_ z>^Ig9V69iHAP9mWZ~}n$G(L*)q>gJ)^P57Rc*IS?i1V=(sMhMtz{W%MQ*9WM?ny zSC>6_FOWTb$n(3Qv1Uc|j5y@31-2?7U-qzs0wm2J#OpDfk;N3?!=A)tsbv%(X>F%6 zhF_w@G)KfC_b)(Df8&a2hNy%Y3v5uo8%j(wL?z5sfS|tYm6-ZOCCpiXpgzzerY=zl z4hpog#MC7!VeSGXxvv_=!V0u5d!`;q^Pd?0cH?+fCkTQd2!h}b`2o8HBv7knUOfN+ N002ovPDHLkV1f)cuvh>9 diff --git a/res/drawable-xhdpi/ime_lang_ru.png b/res/drawable-xhdpi/ime_lang_ru.png deleted file mode 100644 index 1234865be010befa360ed66249824700a7b6693e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 653 zcmV;80&@L{P)pHsYd1rsnFH6@g; ziDP%&iX+XnJH>0>;c2N!fWdIolrSy4Z4_gReMHs-AFrS{o~cWqL*oj_zJV@QBW4uW zh>tx{?5U_rphE)-P-v4=$=k)bMw;&o*C=hDcWSc0WH@SaD0~;l)f4u=8^p71qsWIWI!9m=cj`Gl`1m7y#^v0k{BCtK=M{8%T7~VA!(OvZ*lxII zo?CP|V=ir^pR|twv*D=uDN1*&uQpP?eTwavg>KDLK*gIVw3fZim`{3pK?1{3a}Sh$ zsH`0uTx;m-1qlpC%{@@M*T4AjfopsEdO-riQF9NJZ=;x&oYq<(XGN8*;BW%u@L_O&hiM))DBQ&00000NkvXXu0mjfRR%E= diff --git a/res/drawable-xhdpi/ime_lang_sv.png b/res/drawable-xhdpi/ime_lang_sv.png deleted file mode 100644 index 0ac84f183f8cfe843a73a05c0793c86e76800cb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 625 zcmV-%0*?KOP)rOSlr;LFgcqKnHOL&_Ub**FoF?bl`O0>%esIqi?NP%{M}DhtHmj-pmfn z{gt$mRx91zH5!dZqtR$IMgibHSf}5=Eetl;HrNY3vP0DFwcWQM1oo5#`#0Egu#Fl2 z^BZ{!_DkD;DIuWVf@6>i)e}Km1{=)xQS~puf+7s8njZ8CcCa=Ns?QF5^_QxZ2)+wz zvsZ0);3-jE{T#$yc+>B*lTDyg?HpYFyd8h-+g4nQAg1pQQ_d4cq)-W5xfqDmZQ9su zY@M(?PCAsK{iF5uq?&@bV`Nb6YB->E#!0MIzmzPfSJf2wWH+jff*rxj<7=?r!G5S; z4R~5CRLg;1jGbzuL9FpTd?JLqvJLiA{ZA46R@SapEfKT_^VzF*GZ1S%Q){rn$VJZx zScyfUG+V!9rP`-}xMCbM?F=7##RFdp5OGo1*U1Tf8XOQ_cDcfx`Ve@EJfF~(ruC}L z2I7GyFRCR_IHU~Rz880J7D@po;AQf7%OdU|cW%gB#{*x9v` zAt&o_qgoC41XijgGN1Q!f!`6GxQ>GzTZhG5E`bZ)J@5m|s?^#44+nb^@Lay;6`AsT zP)(r^;?16Rd!;^;K+M%Ni9a|~9n5!azK3(Z3HY7ByW^nxO|ZaHex||r7FuVvJF0P2 ztHBd^>X7OybrLpMZvmcSj}a+g?Z`!wz8M@4BT8(e(P%UpjsJyz>%qu=D`85;00000 LNkvXXu0mjfdR`)) diff --git a/res/drawable-xhdpi/ime_lang_uk.png b/res/drawable-xhdpi/ime_lang_uk.png deleted file mode 100644 index 3b51af6a27458c45600e1845b18a833fc3ff2855..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 641 zcmV-{0)G98P)kR4m=d-GO4tre2hR>n33jmQKszuUXa~o8Bzf`<1jy>{ydQis%q{pw2iYsy5o>hV^W~pPDpV^cLBc^x9HVRK~DoW zsJcMz0`aC@nbh3^^$C!Z#{U?^cOK%@+XDL%AcMB?BM^V)W_5BPoxrfv9kgQMcQ!IX zd?q+`av+nyQm-dF;eP18TR9WN=Rxt{QczBS=S%8i@q(Rw{R8~q^*cSNR|16u7KeTD zSpF@u{nveY~SG0fO|Uj^z7Bdiqva z=QO4k>`Q?AVOAObs=d7*;Fl1;2Al~Fn45~fkJ-Qq;MX_X3X4;3WyAj(i@J?QqtR$I b8fWkciZ-2rdBIVa00000NkvXXu0mjf63Q#- diff --git a/res/drawable-xhdpi/ime_number.png b/res/drawable-xhdpi/ime_number.png deleted file mode 100644 index 3270404656ab32d27d7ea9894698de7d48f90690..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 504 zcmV(ue^J= zFTm!)YUMbN<2e5j02`^T)S9p5A|7{x*OsppGctuZj!dr+c3((QJhBcQY^c`!mfh_>v z(aGt8zZM`D@qMLzTGnKv&624SSZ4+C$;=#BmkoX|Kuddk!17c+qs@}B5?E(J{dfc1 z_`%NxY4gCkQV_?d9v?30SyzlUOXf;oT?vTIr_M-$wZ*6zyQ9(u7=Q1ThIJ;ePyq30 z*c3J9K7$1UAbm#aQDf>bs2l+Cc+Edr9hn=}Rsj_QAU>?Pd1dm5VFHx`;QGX|KW(Q# zy#V?W!?dic4k`o?{gDl@#KcJfV*sQlj-EQ}Pn;Am1W+9>95~_o@0(k-XWuN4ZX&QQ u1;#HZC3NhY1w4S6j(r`+aU92S4159=-mM?rdvyr_00004 diff --git a/res/drawable-xxhdpi/ime_lang_bg.png b/res/drawable-xxhdpi/ime_lang_bg.png deleted file mode 100644 index 39c07f7b85483216347185fe5776e9afa6cfad97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 686 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@Zgyv2U@G-=aSW-5dwcU?;2i@2)&#Ew zE!vGjFBD1y$_1_9h-RHh9ke_+FGBl=A2M*|L}$nHKvS0@2e%m=B-zAcvQ=O_|WI8 zYtGEg0y3G;F&4gWXOW%2Z>1n#;$XLDG4rWtznyYcSC4#N{h(I%Lf$m4&gbD99c^|# zxR+6|Da6BOe;4ngldRv}nkO%Hdh|0iN5Efihq=@o9Z{k4>yw%*KArl^`qlLM^BD6z z$9FzRpQ*nFsJ~Hu)wT06@kOzp>*OpVca%$5EVTMD_jTX*JIw0b-}#u;L)`iIycdH> z{XSQ13}tV+ZJc%LEAPKKNzeXXe{kl(y~GQKBGV54I$V6B^SbDZ8B3*0_@++3d%%8) zdR*{=;%RyU0$TceA4jHqek{)zIZII^B<|ml&tYcvzXYc&vQvO-lk0^jtLs`wolq|{l@v78-aERh-m5We^#kIdwvSXsY@)53pdns-Z3uT?-(#m zje~3I^!uOpOs#%r4w7SBxZzLb&AET(39mQgIB|)Gap9*+?(?>OI`o&7X_JZb@qmap z%X<%JoYn7Sligg>%(t-UwdQqo9e*L)&g<)LzOQsVxcBe@&es3)t@E$$jN4GmA9mp6 zA&}73iFfbr|7jraC-zR3&2NQY&c5HLG~=qx3*Q?QIGO%x<^KPb2^x5;)$=zVU%z{P z2qbWI%I|LP{rc?pY0I2*$KKQ*-Kzux(|>T+ES+`kSk{G^z;wvq>FVdQ&MBb@02!k| A&;S4c diff --git a/res/drawable-xxhdpi/ime_lang_br.png b/res/drawable-xxhdpi/ime_lang_br.png deleted file mode 100644 index 6430862df5dca7ee39b7ca1c5a580c8362e7d0f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 854 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@Zgyv2V3zfCaSW-5dwc6);B5y1)&#Ew zEYls>1360stT<#J@Hw%Uu`gl1;`rjgO9rcooo9a@de-~ylf|4dbw|7 zj%9ebVvB$i2bh>I-5|L9_R_C&t~p1U*YtI_nK38r-XixSMx67xWWdJ5OZP7-xW_m% zJm%Acf`5#X(wDl<*9tCR-{PAc8`*!N`fA<#PLP0p!Gm9#EAv`ywwT{KAGYWFVdrK> z(Ut$ENl&Q0_xa(%hYdWR=BJ)L@l}3a>$BAbZ0qJT|J9P(`A=l!{R!8m|K0WMv2R31 zIb+U)UzVBYdCd#scHVQYdt5&+qJQ17U-cqrY1-6W@l@o_ zdd@4(GaFxvKKagGs;GVMv19toqkm^L@R=6W@_uSRI{(gro1f&^=BA2$&t|f^a^S1n zz5I>R`!f%5^X=euPXD;=ME;HD=yISjGICifo7<8N<{#~ozp{GfU(fTYy~=tVR;N#V zjlI!n>8X6b@JInq$+Z8UeK@VItbEf~_F;j-rh;5^frV0=cHe$80m_+F{ik~QjHs~9 zZSRuP+F33(XYX$0Xq|c6#`&Ms0=ZdhEBo0ewt~f!*;8`(%?sbyuKcCdbmGv~yACaf zniywpdCzWMw8~#p5n}j;8i(>bCw~6UX?IL{cq>oADe-3mTi%nNnD`rpdU`vyNp}Q9 zSSTFso%71sxI-uAHm{3@j?9F&kKKUb*DCw?Q4`p%r_7tqyO}Cq7ccAS=3e)fO-W=L zzlW{(uRHmdF7(Ho)qSrCb$-E-h6(j&Z(OMRcI>we#Jm+xr0>m_@>{$9#Q)WAIDbW! zY<%{)S|Ac^b#G|?dsY`QkclDA-&nW(l3mjP@k-W_U+aJD3I4WqGFYMdFV>GoOSm9P zuP}Y%J|^}kY@GwhOB3pOW&L9Blyd^DlZK{ZU{XG$SjQY2B51R4`KGhL{KDYr>gTe~ HDWM4fk^7ry diff --git a/res/drawable-xxhdpi/ime_lang_cyrillic_lower.png b/res/drawable-xxhdpi/ime_lang_cyrillic_lower.png deleted file mode 100644 index b5926cafb5093532bd5824f0089ad5f6c19beef7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1078 zcmV-61j+k}P)gG&i?fIEN=NC!s;xC7|GbO0T^^JA@v@=jXIc9NL{eKVS2 z@ao5F$(FeL^{c9?s;a80s;a80P6WW+P+p}xY21%BBx8sFbsG2M3`w{d%CjUU=rsN+ z4L5olm4~rB4&}}AkhRmcuEKC*8(0GR!~30Wt8HJj;f5O6%k>yKZU3STH?-9|T;Y8v zH`>R=!ts*xHIx=tmK?rsmSRG>p*#)cPTRhCuupU!-?3lSes{=?v~P{_Nn~u*MRccuc(aQs6K1R^!i( zgV0e08cT5EvG7l&+DN3+*rS3R5;Nr)8QLDfPf)AzC6Ip)_8PkiEFphjXPZ9mX$ftg zaGC^l+EAdei(uU$HB0*;_zBu*d5+)DaS=v&h(^wDVwShom z12{>A^T)OnIA=i=9=MZ`KLvLhn*;wwy#zHH8!0}8GfpcxCYskYSY(rg>HQm5N3w1)_#3w18Tma@@)W5e}(t&qSzAF&@pA6?5S+M-N?|AH&QC&e9h&g3+Qztopl{%KdRb^M_{ z%)qJ6C707`p9(gHcdfY4PTOA%c9U}l$eHu~eu2L;E_#} w#<3fJ$7|UyWK~sFRaI40RaI40RaK?@1N9C<76$Pj-2eap07*qoM6N<$f?$9M%K!iX diff --git a/res/drawable-xxhdpi/ime_lang_cyrillic_upper.png b/res/drawable-xxhdpi/ime_lang_cyrillic_upper.png deleted file mode 100644 index cc670aec3531df63f2a7d11de11508d585daf1e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 847 zcmV-V1F-ywP)(oUPo>o9*i-@7-Nhv#u#IaDFC2%<25p#xwe#>ql?U2b9B6BRc?VtXkT1k%FS`$ zNh>?>npI)EdQzVFm=gF88g$|n$r~S20()){((wv5#SA-d&{DjD)i-PC23_4aRu~Wau*U{L$Ln)? z{l+g~Wz4YC2EFjvPJZ@0?(e`aOp0TMoi^x$&vx>&Yj%I1`Gv_qQ!T>Y8ieuTG3H8j zF~u>%4jYt=*Q`$6#EW7E-JmbrKbiCR6$a1S40OB>RM&ICWSG}2fo{+mXE*-1@yP2` z0UfVfq*i^?6~zp78x(xI@ycs$1|6?~Ydutm8QL@`IHTs(1RbyF8-{M^iE9=^d179;J_$Nr(PytE(0h zzhB;Yl9}Ya@D6mm2CglE@h9V$=;e)#4Z`@L{Dw|L(DAWJ&=anTR{-7k=o2+`gZzEu zyfAY0ylxU2#4CXQ#l!0&^{PR&^t|RG=udgz+BJC6nY);wU4w3J9C*Df&|ia_;uS#u zEA}pCsNW#pm?I)rYZmATY>rm|{Ve2lRJ)}?S2r%x@Tu_cO>Rn!F~%5Uj4{R-V~jCo ZyT5z?ZU4jO@<9Lq002ovPDHLkV1nUClI#Eg diff --git a/res/drawable-xxhdpi/ime_lang_de.png b/res/drawable-xxhdpi/ime_lang_de.png deleted file mode 100644 index fa7a80b8d4d5518b55bd98f00fcd238b93adec3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 915 zcmV;E18n?>P)Ab+24n+n1G)ih@Sh)Ukond35~sG5=-ww; zNa(knytqzMxVdr8Ip>^n&N=6t`#%7hsB*A; z^qIixT;z7>_&gNjRKJkcbRUq9tWdpbNy@z~`Sf0}p!k&ePj?j7eD(n`|oId4My0(Cs-h_fT;t4BUQvmOtik5Ts0jFlA#_TDr5 z>Sxy;Yle#~q=6g;O1>nqT}xdvwKW1rBzKt~>Q z#90CRIi{At^Qt7wy)%LHrJ%2f6K4g78VNkFO2XVb6F6Ur2h0qd6&z|L@VqJsbMH*x zd*kSH7qIOzu#V2MYU`#DV*0kiI~B!jdn` z1nh$eoX;UmE-#Qh^uJS$ zSs0WqWdqV)clwW)*A+-69?tCnrB|nrjE_{PQ+5m%Sus^F)@C5BD!I7(a}lH+ p&c6$scg{KIoO8}O=bUpc_Yb=Q+!~ar89M*~002ovPDHLkV1hN6w?+T} diff --git a/res/drawable-xxhdpi/ime_lang_en.png b/res/drawable-xxhdpi/ime_lang_en.png deleted file mode 100644 index 218e33a5d6f1b9349d92cc6534d7211471c3e3d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 531 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@Zgyv2V7%q&;uum9_x5IE?jZvK)&RGJ zmYxG_DU-`u@&ft~aO54N6J*213H#xfT*%#_Jv%X5#jW?G%#dufi!#a_Fd@p*} zpKSc^D7T~D oVE^%F>1iq7yE-7?#HL!t+tPklykAxx14cH3r>mdKI;Vst08|j}(EtDd diff --git a/res/drawable-xxhdpi/ime_lang_es.png b/res/drawable-xxhdpi/ime_lang_es.png deleted file mode 100644 index 501e871475c98b4fa4e36f8dba888d2e25320b0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 769 zcmV+c1OEJpP)`$~fikv8ueKQ&u zvhpf_Y&p(wcjugQ&N=6tbIv(;djK>zkHEdJ0z4oaJRlo9AR9a&8|;AI;@A`#E%&|( zumcKQe{2fAIXidZOi;@P@z7v7# zmlXT0;@Hv}=IF3gP;y{uHWs*kDY4fdZl0k-=}Qn51cWl-3|{&8C&7gSg57^C#PN^+ zn6TkK*x_Eh zIay!_R6@f&2heAEF`q#UpVlDovWQ}@VWo&~Tk zv#~w&F=UM&j#(7+O{4^_UqbA&9? zPNz)lcup4B0Tp$ix12>k-L565=YFjFpWER@LzxeYxL`m6%k^n&N=6ty9xgRG>O!4p~f^O00000NkvXXu0mjf)COe3 diff --git a/res/drawable-xxhdpi/ime_lang_fi.png b/res/drawable-xxhdpi/ime_lang_fi.png deleted file mode 100644 index 0cd92ca035f2cc1ba159412460a621450181145e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 403 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@Zgyv2V2tu~aSW-5dwc6*=3xhcmc;1~ zghHCEJG?wN->K*wRNc`$MW9q@`UF0;)fQ^y${PhE+PXj2Z%|m0nm?00vBg{(Xc7oG ztX7d-6!$J*?tIg(-{%AK1J^&^YM7*P%hykQA3mw|{g@km z<@}t|FUtzP>|6F@+ru@dt6yGwm3HoyYwe5U6}B(4y*9qN`oK23>u2nhf4jH++hbX3 z7SHzn=XD!d!GN=u1sSi}$lf(vFk^3T)uyc9wk5tx4Jyt@C6&Ez&wTdWA-ECXU<6P6f+ct0cX19L{J7>m+d0RUg zij)@2;m}ZLI@O7X`7gua@uk$ad(w4x{rUPd;cBHkBtSM?QMb`jIgxL$oC74_>FVdQ I&MBb@0JikCpa1{> diff --git a/res/drawable-xxhdpi/ime_lang_fr.png b/res/drawable-xxhdpi/ime_lang_fr.png deleted file mode 100644 index d8f330f3ee67f8254b7d546f11d5b6a26b757ba4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 473 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@Zgyv2U|ito;uum9_x5I@FSDb-(L$9F zCZU1@o-0}=H!y3la(WzK1R|k-ISb{dX`0Vnvb|PwPy8mum%P8@)ZVr)GdE9zf^F=3 z3K$K)XFXtj`k|?)!qIZi0-2vpW!ZCQRGWH;iKPEm1q#Fk^l3*0tS-5I?(e_+8Z(|l ztXn&F&OIJ~PVG$Y?VmTwU%mM?Gx366hGzAvw0VyXH|LgLwa}S9MQ_DiU+eWB9n-tM z^ByeneA@J^Y~JJUgZ=#v4Rof5=xJ0xujwr3JzRA1p{mCw|BCK%UgsdAbL)Clc7Hzi zF?_n^JyRaflNP(pCcSBH|6wnF{N<$QGm_%^ZL0e|3q4UiZ+di(oM+jbsfwCAn>3$& z_1N@y4N$$PkKuavNwVpw9$xDbx+-lay|K`4-k@^mjZurLVA^y=olb+@Jc*tyH&Z#h zmCoonM+haBNgkTSvH7&XG?y8%Z6qq)bnR*1`}>Fb{pQ5ZHoAQV3jS^LkKVR&rHJyn Rb-*ZN@O1TaS?83{1OV#k)F}V} diff --git a/res/drawable-xxhdpi/ime_lang_hebrew.png b/res/drawable-xxhdpi/ime_lang_hebrew.png deleted file mode 100644 index 07782232b0c414a29bc1a4ed4d015df282c7a83c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 817 zcmV-11J3-3P)T~hdZ`WEezt4^y?~B=L zn(jfv&?XNn)!u(@`N=Kw`>=t7PHmZ=txtBI=$GnHd7PE^<+d7y3p|X3{m89$yi;V~7JuJ4EU7Y+wBda!W3O=y_`d3(Z^`H_a-!%I5mo6s@? zTCtJQGoQ)-RWjSKrU@-Dpe)z2*=R>Le|zO;b0x2=X+}p5C}qC!wM_mu()*38hT(XJ zR#tT%_l5lD;-&AwxK0fJ0I_-eGYn@}{ ztMIB{ANSG;2lTf6e3H)Rp=ac#$b;$R+=?7bAJ5ubtqtG9NW&qw(J-)H{{7f!9LhX< v%)dxq{{zLEnGiw5Cw3T;1VdoB~XG(a0hV-bl`LlbzpZOIcrl|xaS-X{O{0md=dD?bJ&r4fq(Yc`ij@F82Cs1 znj5yAp{b_ZrS|1Ui#?t_FaH|WfXy^AMcq~{qlar|x|z3`S}$8geMB+j0XQcu~Y=A2!?N)0kd->=LG zTmJ4!!HfpMdD!FF0n+y@ll_8iHCVqvcB!2?K2rQ6`KGXPgADwwfAR&}s<1(W4E$Fu zM~>eNHfoSTdTulNf^Bt3FS6xWhWQPukly-7U$7OkBIte@UprE-C+zcMKVC5MoMN9v z@fSEY1^y4+ix+HHfwRbkH6?R%tOpDIZ*3HuMJ}uHIb8IfIvqVi15fKp)5fKp)5y|!& X-yXVM)4bTa00000NkvXXu0mjfzISM3 diff --git a/res/drawable-xxhdpi/ime_lang_it.png b/res/drawable-xxhdpi/ime_lang_it.png deleted file mode 100644 index d78fe98514901f41e3ce62f9d9cb0cf85d283447..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 393 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@Zgyv2U<~kdaSW-5dwX+Z=HUR5*2Mk^ zN}(PT1!I<9V$$5y>Hb0Ep3+iNCo>N-kBN+a_nZ|^u>TZL6!rh{|3RbRcdpOLDI3bI zfu=DqG}up)J5@Qy;=5h-WUr2V-|EjdXR9!!Dg`WSZ9H}7qPV-&{QEM38p4f62;wYH z$hz-#7Qyeo=gi`m(&;c0Ogv-1HT`n$xtB?=FF8)%{PoS>dA^s=IQZ3^O;-v~1DS}Q zSoY9;V>ZY#UH&USADy`P+}!;%^Iafo`nG?Xmkv2h)%RPm@ZA3A4}SYzwraf8d`q@= ze`b_oKmNO6C_2UNBhQc(E|pZM#SI&5jhId*+K7-_%xpdUbr$ zk55MnWsZZ<^Un+ql%}ok-IVxux$>+HuCqJ8&ga|VD1`_8$!B}`_W08_Q||*@&5yqF zvOTRg_u&6vJk2?;v^8Djta;yj=DBQ&GmDz1tZsYyKQ83&Mg`M91^3$Y`Znh5+$Xkd z>5oY-m+W-9E%8ionzxtnv>6ZjHm`dy?e*G5$>yY+ACK~#Iir2fv?b!>yv=)?J71?S z;NA6{o7-UWu|AbAU$1%VJp8h`UH7@>#@{jq6Owhr=M;;2bT2qm^;u`;-`<~sKn zU!+rHlY;Mm*%|R}XWuM~=UNNg&(Hg+`thGByMT1x$pz;Xj2Br6J^Fe&Le4WjDR`~a zZjKkNm1c}zstV8k;(5k^A>fe_*W^$C|SV6CByTM45b>x}PmC&@myGEtz-Lj;5ym zn-*yW{~B*-=`vlPelViB?W!sFrP&YJUhg|THS@iIDKZglzi7UKodJCbX8 zmmIs9SlNBRQ1Zne_iNi5>?T(w)tX<3KlsVyf`gQ$dsi~k@ze#pMs)=|%(XYtePlLs zyhuL%s$PA9+gaYsXqLY73HKBZyFH)%f2U&Y|GRTEU*}kq30_#pgh3GcjrPW8*ZT@iNTS)TE1oL;#apRK!f|0?ei(>Ef) z+E?Xrk8U`(VUNepvn>T$-*(5Y-gXj}o4|Q0>km@{=Q%l6g>yTBxt77x)z4*}Q$iB} Dw*S*u diff --git a/res/drawable-xxhdpi/ime_lang_latin_upper.png b/res/drawable-xxhdpi/ime_lang_latin_upper.png deleted file mode 100644 index 4b21d55112594a9ee146fb0fb091b9335a1a1f5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 954 zcmV;r14aCaP)6~4uK4C29N>HfXjf*05a&)oYqyQQR~N+?`gg&z1+5D z?6%sn&0SqNj^j9v<2a7vIF92uP6GfQ!uXvSC)T!NH4=4e#;-7L!?@v^|CMk6*U-GP zzLij85AiZPdqWVc;4ypo2jM;syQUA{R#1?*=+v z>V!7M47%RP+7i$^?#$XVV!> zo8GR`&mgtxXV&fly3w~2hc@zQtt)|@1|fbfQO9iCe$xfZ0v(-mLVLra3m>e_0d3G5 zetrX55BpsiWAru0fIisds(^mPuRbv7o_meg%i)K20AKVtYw1cjwfBHiWxc>w1Bwf+wPU(jrG+) zyFalu1@u7`V}_0f8PLyX#)&@7&9DWkg7Sewg_~* zdU4{OYoJeNWNj_b_r>Oy=_BK{FmcZ{IL4q87h7O$791O|h3sDyaEw9fMm@7O3v|3D z#H-Lc&NexLe3rs72C4I!S(^nqUd8P>1@wVUtX)87gAh}pKAb(WUIKk1JF~VH=$bNS z=x7k)=bGFnkb&n&5Mz|0`0SDc`k^ryGwd`7@l)$<7|-8k|77C1S)iBUrg$wte>k65 zYd{;+6T4{F+*<-2g)?hgf&TwQ$(Z4IgUp<^i;jchWk7$nHGael#~L)F)f@u{#cKij zU1&;Zk1)vkKX9)q5Vt{dmd7h=w}SYf#`Tju>_if}En`HiHE<8daU92S9LI4S$8j9T cah!hq1(kgY*jo_)4gdfE07*qoM6N<$f+`ci=>Px# diff --git a/res/drawable-xxhdpi/ime_lang_nb.png b/res/drawable-xxhdpi/ime_lang_nb.png deleted file mode 100644 index f13aa1bfc6de66dbc2986aaea0548f59c08d959a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1030 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@Zgyv2U_R^V;uum9_x9$)(kmVUt$|Jo zEbR_#?*vXTq;E*saE`&Kfv13N9*+XEHS>uF3!P@&{iGhcQgzASjaO{l*^R4W*XH$` z9R2VrRCDQ+ATJPcDpSRl?YMN>e~&KHG=FoSDr1>?_T#*tqf@rd{3?=tX5Klqr=b?{ zGwwTi=BC-E%{}(!Wlm5W>z=1G;=HnqUmLzQN%K#i{7LIUrbS$F48JN+*NjrB&C54? zR*G`l6`_eVo|WH-qKzruvaEN~tus|;ta@)=zPV&i*OBVJ^BOD9t~tKu@(kO#zNc1u z)Ld`7=Yeed(XMwefwnuZAMTLtE0>ZE`2F)*dfjYaE8l&t;rUCJm~EEZ>^J*d^j&?M zmp82cPBz6>L=WV|Vl(Z5v{PSbl^En&LgWTV$p3&QJ{ZNu=+;jevz14k@OV7FT)Ym@v>3KtX z?8Ij~&$SK9J0fIP&3A zb=sVpM{Wh&PQI3T#!ckE(fgUcnU9r3>;>kxJa00)wl4`RUjHj@21tC$lh$Yl&uh;+ zB9|LV2iDBat>()-t|aom?2P^1iDg&JKq20dYWbt<=9Ds#OE;ulzyDZ#I(J-`Va`n(Y(Uojwlwx1};Ys7oDU*&G&JMgMeYRi^C?Uiy`pB$QbiT&xcy7Qo zh~VcFZ-i9O+pVoRX}-AG?1aYq-na)5{gFS8>{&#Oxwut^@>dy!k_x#8{y zg%zx|)`&_=|_g$=%7P)46ruvMZ-et?*3Kh>zHvF9g6yM17>-&EH zIGHnfOFxFqz8bsw?3{rJSFQbH(-Pln}n6?Gx9hgEa(H-srBJ`^K5L z{#a$k^}^ik*>HV?l?3#Q-#Pfs^~WkRW*!ou#qevcgHh&kT4)O^PCp1<>tV+KElca zda7s11J7x}zybN|y$^TGvzDMg!?-@e+5@WhKlq~Z2ln)K+AbsrXe#FqUsijUS&SY~ zt-0mPV1Avp%kQ}%Fs_eqE&k3T7tS@; zo&x{BYCL;;Ca#al{l{`XH_ivH7ZDK=5fKp)5sCf+l_%4qM#={j00000NkvXXu0mjf Duj3oo diff --git a/res/drawable-xxhdpi/ime_lang_ru.png b/res/drawable-xxhdpi/ime_lang_ru.png deleted file mode 100644 index 8e5278de149d4b9c8c889bf7df1b4cab75e5ff29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 923 zcmV;M17!S(P)P?%>h^DIpzPI)Dx?9Y6<32hhPg?I?l0hqP8~i;=Lt8O;#; zX)V93e#6~eqtR$I8jVJy(P%Upjm8H6I#)J){m0;5Zii+0>&kCeI(}A_V0nWye^9$o z$ZL@B=E}g&tp?;b=*o_tT?Nu`ev^z0{QTm9ZO{S!{#X&+>!r>ZJ-4A~U>nr4-U5Eg zA2aHO>lFo=axld+>x%{X43h5l&H*pHvA$T4$shrC7WGOu zxbhe&-Dku!Bz7Rqwe+kvL0*HBV!OZhd{ePkA(L=*UO0&2p7kb3e2FQ*XGV-(={mlt zIH{1Mz>alh{V2$5(3S%#deU0UgHCHLU_bNbY|L$t)pdH(S}(TMS_|0St7H8r$ZJq? zW92go6iJIqr`vEv#VhNRKqiA+-3Jb)2sRe>tkrt*kf1JT-e42Gd2l)pFzQaIRxT+xM(+Hp<;UX5|G~@dD-YU z9|HDqNf*#tS@*#Dn?OE;&hW82e&!gkU-*mJh#UIO+MB^L21%A2;m3h35(f7%;0+FO z3}|CZiUVtJ2DU*x>%R-w+mw$%7k0MwD&#a!u0i+Q7{#D;vF>&Lj5Y%lYLI|4nAix<8u z1tx>?4H~#n7fyUZ(Q%x~pnQWi+^7+b9Ag$J+#mt=MwA)2{wz?3L9uQYV*1WK1nMwI zx|wWe#+bKr4}l5{5)fZ8Yv%3TL!cgmtUZ@7f9DLJ;g7#bFUHj$s%@Y zDARsX6G>L!XVgbk#(v7)af}}ge72;ruIv$DoIwXz-^>MjrK}ma?ka%&A7)q9J8Qu{ xIh4cu^>wQdVg&pqTE-+9xYsopHyVvq@ei6Q>DN{D)X)F`002ovPDHLkV1mi!tm*&& diff --git a/res/drawable-xxhdpi/ime_lang_sv.png b/res/drawable-xxhdpi/ime_lang_sv.png deleted file mode 100644 index 97cf4a699f3dd860ff84d4eba3b194a441b70a44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 938 zcmV;b16BNqP)LPZ9@=ACD`v&Up32% zfWkSb4{=0|w`2KG5HAENCj_b4mO09>6P5v&87LwBCx>Q@heCnwMJ5P)HA~W-H0hy; zLu$O5lDz8X~)TokZ7La11W5r>t2&2j^P3&IF92uj^j9v<6Is80cVrf!8?mG;Q#;t M07*qoM6N<$g7PoAU;qFB diff --git a/res/drawable-xxhdpi/ime_lang_uk.png b/res/drawable-xxhdpi/ime_lang_uk.png deleted file mode 100644 index 8520648d34dad8c2949a76c08de39db574e6f86f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 983 zcmV;|11S87P)PtHBZ z{|Mp2ANZRnMN7WKa{;B{_#Y!&{J`HvX*oVd;y6*caQu$~`^&v>d<^VI^?~CV=K1R} zajfPqBsP+-kA`!ygv58GH5{+W=bWGn93KPwCJh`PgSk1fxTH+jx=_G={VyE6{rVAI@{zuCMH@qGY!K{iig@RoDzN91mSP(YPDLeT$+;y^*PsuscQdeGKeV26OQ5bn!hE4V6!Jz<)yjeT28pa+4t9qd zybNNW27RrtT>EgaUq3{{Ii+AXNJemfJyQFxg{*W{qj?jg{|#-IT`TMc4HRqbg~V?i ze-lXWeOiv)Lh5i~WuVvw_J|gp&N&p)7r)zYEl8h343T*2U2t*yt{U_FGt!9{9mj8l z!UhSXAN$3KBj+P2j`a3^;`kca)*!jQwfSiK|EYrcS$;&M%a|{CR3~CB=hTpTd;(?Q z_yy*d>b3c(=e#WVzQ0*s2;~^n-(v=@RSO#%B#^h;FW*FB{TYstyS4k|hl&OXtnZJ? zH<3vHoRM-!a|G%eB=gb4iR6v*Ojv)EG&%Vp%@L?ATabIv*EoO8}O=bUr@(jQ*bGJ13pi6{U7002ovPDHLk FV1kR$koqL`lKWzk z`Hj?jsn1eh*X91~e%5e*60*@VsaH}bQfE>hrM^imq<%{MlKPE)Z+YHS@S!ZER`+)5 zw}KC?;W^RB@E`ZKe3)nf$*d#zVD|N$XGVbv0+Kn$*zJlLb0c-c^Cv;!fZ)UV!-FTd z;XNin!GPdjR_8UBYmg5Fc9}%Gz94a zTJo?!!~H{~_m&rLaBmVw7f{E;);jLhNdE;72pn^NbjTmjl6y7KZ}cxc}}hnDhdeteaD&cn&ePP zK=6-VG%c^m0u=;=@yD`Pye1nI4ha6i+KToKxyK!GAJjht$_J#KSnfzq|AAD4f&oE4 zv79-t$qt1A!uW~R@|q%0ARy=;LY*bADF&GX!uW}m|IMHV83V%jS3!3ud1CcJrhqX1 zEo=D`s}J%8wBX_7l-E=N83Ka-)s1t`YpQ|70pT&7SbdN%AovqY)A5?>AW=Zjp9*fc zoA&j@n)BXKAzeT%4@;!wy`zE!q=N;dg9W6M4PIdTf1PdWko$K9f0O2UDXQVUjWNa; hV~jDz7-P)S^be(mdKs)Zn(hDq002ovPDHLkV1gVzY>NN@ diff --git a/res/layout/mainview.xml b/res/layout/mainview.xml index 4ad10f7f..6d1c4e02 100644 --- a/res/layout/mainview.xml +++ b/res/layout/mainview.xml @@ -5,14 +5,29 @@ android:layout_height="wrap_content" android:orientation="vertical"> - + android:layout_height="@dimen/candidate_list_height"> + + + + + + + suggestions, int selectedIndex) { - if (mSuggestionView == null) { + if (suggestionBar == null) { return; } boolean show = suggestions != null && suggestions.size() > 0; - mSuggestionView.setSuggestions(suggestions, selectedIndex); + suggestionBar.setSuggestions(suggestions, selectedIndex); setCandidatesViewShown(show); } private String getComposingText() { - String text = mSuggestionView.getCurrentSuggestion(); + String text = suggestionBar.getCurrentSuggestion(); if (text.length() > 0 && text.length() > mInputMode.getSequenceLength()) { text = text.substring(0, mInputMode.getSequenceLength()); } @@ -499,7 +506,7 @@ public class TraditionalT9 extends KeyPadHandler { // This is why we retry, until there is a visual change. for (int retries = 0; retries < 2 && mLanguage.hasUpperCase(); retries++) { mInputMode.nextTextCase(); - setSuggestions(mInputMode.getSuggestions(), mSuggestionView.getCurrentIndex()); + setSuggestions(mInputMode.getSuggestions(), suggestionBar.getCurrentIndex()); refreshComposingText(); if (!currentSuggestionBefore.equals(getComposingText())) { @@ -521,7 +528,7 @@ public class TraditionalT9 extends KeyPadHandler { settings.saveInputMode(mInputMode.getId()); settings.saveTextCase(mInputMode.getTextCase()); - UI.updateStatusIcon(this, mLanguage, mInputMode); + statusBar.setText(mInputMode.toString()); } @@ -545,9 +552,6 @@ public class TraditionalT9 extends KeyPadHandler { // save it for the next time settings.saveInputLanguage(mLanguage.getId()); - UI.updateStatusIcon(this, mLanguage, mInputMode); - UI.toastInputMode(this, settings, mLanguage, mInputMode); - return true; } @@ -580,7 +584,7 @@ public class TraditionalT9 extends KeyPadHandler { } else if (mInputMode.is123() && allowedInputModes.size() == 1) { mEditing = EDITING_STRICT_NUMERIC; } else { - mEditing = inputType.isFilter() ? EDITING_NOSHOW : EDITING; + mEditing = EDITING; } } diff --git a/src/io/github/sspanak/tt9/ime/helpers/InputType.java b/src/io/github/sspanak/tt9/ime/helpers/InputType.java index d9334d9d..f8ebdedc 100644 --- a/src/io/github/sspanak/tt9/ime/helpers/InputType.java +++ b/src/io/github/sspanak/tt9/ime/helpers/InputType.java @@ -64,10 +64,6 @@ public class InputType { } - /** - * isFilter - * handle filter list cases... do not hijack DPAD center and make sure back's go through proper - */ public boolean isFilter() { if (field == null) { return false; diff --git a/src/io/github/sspanak/tt9/ime/modes/Mode123.java b/src/io/github/sspanak/tt9/ime/modes/Mode123.java index e3f5bb49..eeede02f 100644 --- a/src/io/github/sspanak/tt9/ime/modes/Mode123.java +++ b/src/io/github/sspanak/tt9/ime/modes/Mode123.java @@ -1,5 +1,7 @@ package io.github.sspanak.tt9.ime.modes; +import androidx.annotation.NonNull; + import java.util.ArrayList; public class Mode123 extends InputMode { @@ -24,4 +26,10 @@ public class Mode123 extends InputMode { final public boolean is123() { return true; } public int getSequenceLength() { return 0; } public boolean shouldTrackNumPress() { return false; } + + @NonNull + @Override + public String toString() { + return "123"; + } } diff --git a/src/io/github/sspanak/tt9/ime/modes/ModeABC.java b/src/io/github/sspanak/tt9/ime/modes/ModeABC.java index 631740c8..f9404a64 100644 --- a/src/io/github/sspanak/tt9/ime/modes/ModeABC.java +++ b/src/io/github/sspanak/tt9/ime/modes/ModeABC.java @@ -1,5 +1,7 @@ package io.github.sspanak.tt9.ime.modes; +import androidx.annotation.NonNull; + import java.util.ArrayList; import io.github.sspanak.tt9.languages.Language; @@ -56,4 +58,19 @@ public class ModeABC extends InputMode { @Override public boolean shouldSelectNextSuggestion() { return shouldSelectNextLetter; } + + @NonNull + @Override + public String toString() { + if (language == null) { + return textCase == CASE_LOWER ? "abc" : "ABC"; + } + + String langCode = language.getLocale().getCountry(); + langCode = langCode.length() == 0 ? language.getLocale().getLanguage() : langCode; + + String modeString = language.getAbcString() + " / " + langCode.toUpperCase(); + + return (textCase == CASE_LOWER) ? modeString.toLowerCase(language.getLocale()) : modeString.toUpperCase(language.getLocale()); + } } diff --git a/src/io/github/sspanak/tt9/ime/modes/ModePredictive.java b/src/io/github/sspanak/tt9/ime/modes/ModePredictive.java index 1dacf52c..15309f84 100644 --- a/src/io/github/sspanak/tt9/ime/modes/ModePredictive.java +++ b/src/io/github/sspanak/tt9/ime/modes/ModePredictive.java @@ -4,6 +4,8 @@ import android.os.Handler; import android.os.Looper; import android.os.Message; +import androidx.annotation.NonNull; + import io.github.sspanak.tt9.Logger; import io.github.sspanak.tt9.db.DictionaryDb; import io.github.sspanak.tt9.ime.helpers.InputType; @@ -331,4 +333,21 @@ public class ModePredictive extends InputMode { @Override final public boolean isPredictive() { return true; } @Override public int getSequenceLength() { return digitSequence.length(); } + + @NonNull + @Override + public String toString() { + if (language == null) { + return "Predictive"; + } + + String modeString = language.getName(); + if (textCase == CASE_UPPER) { + return modeString.toUpperCase(language.getLocale()); + } else if (textCase == CASE_LOWER && !settings.getAutoTextCase()) { + return modeString.toLowerCase(language.getLocale()); + } else { + return modeString; + } + } } diff --git a/src/io/github/sspanak/tt9/languages/Language.java b/src/io/github/sspanak/tt9/languages/Language.java index d62120fc..83906bc2 100644 --- a/src/io/github/sspanak/tt9/languages/Language.java +++ b/src/io/github/sspanak/tt9/languages/Language.java @@ -11,14 +11,13 @@ public class Language { private int id; protected String name; protected Locale locale; - protected int icon; protected String dictionaryFile; - protected int abcLowerCaseIcon; - protected int abcUpperCaseIcon; + protected String abcString; protected ArrayList> characterMap = new ArrayList<>(); private final HashMap reverseCharacterMap = new HashMap<>(); // settings + protected boolean hasUpperCase = true; protected boolean isPunctuationPartOfWords; // see the getter for more info final public int getId() { @@ -34,19 +33,31 @@ public class Language { } final public String getName() { - return name; - } + if (name == null) { + name = locale != null ? capitalize(locale.getDisplayLanguage(locale)) : ""; + } - final public int getIcon() { - return icon; + return name; } final public String getDictionaryFile() { return dictionaryFile; } - final public int getAbcIcon(boolean lowerCase) { - return lowerCase ? abcLowerCaseIcon : abcUpperCaseIcon; + final public String getAbcString() { + if (abcString == null) { + ArrayList lettersList = getKeyCharacters(2, false); + + abcString = ""; + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < lettersList.size() && i < 3; i++) { + sb.append(lettersList.get(i)); + } + + abcString = sb.toString(); + } + + return abcString; } /** @@ -68,8 +79,8 @@ public class Language { final public boolean isPunctuationPartOfWords() { return isPunctuationPartOfWords; } - final public boolean hasUpperCase() { - return abcUpperCaseIcon != 0; + public boolean hasUpperCase() { + return hasUpperCase; } @@ -164,6 +175,6 @@ public class Language { @NonNull @Override public String toString() { - return name != null ? name : ""; + return getName(); } } diff --git a/src/io/github/sspanak/tt9/languages/definitions/BrazilianPortuguese.java b/src/io/github/sspanak/tt9/languages/definitions/BrazilianPortuguese.java index d9b466e7..7724b60e 100644 --- a/src/io/github/sspanak/tt9/languages/definitions/BrazilianPortuguese.java +++ b/src/io/github/sspanak/tt9/languages/definitions/BrazilianPortuguese.java @@ -3,8 +3,6 @@ package io.github.sspanak.tt9.languages.definitions; import java.util.Arrays; import java.util.Locale; -import io.github.sspanak.tt9.R; - public class BrazilianPortuguese extends English { public BrazilianPortuguese() { super(); @@ -12,7 +10,6 @@ public class BrazilianPortuguese extends English { name = "Português brasileiro"; locale = new Locale("pt","BR"); dictionaryFile = "pt-BR-utf8.csv"; - icon = R.drawable.ime_lang_br; isPunctuationPartOfWords = true; diff --git a/src/io/github/sspanak/tt9/languages/definitions/Bulgarian.java b/src/io/github/sspanak/tt9/languages/definitions/Bulgarian.java index aef48f24..3a051b96 100644 --- a/src/io/github/sspanak/tt9/languages/definitions/Bulgarian.java +++ b/src/io/github/sspanak/tt9/languages/definitions/Bulgarian.java @@ -4,18 +4,13 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Locale; -import io.github.sspanak.tt9.R; import io.github.sspanak.tt9.languages.Language; import io.github.sspanak.tt9.languages.Characters; public class Bulgarian extends Language { public Bulgarian() { - name = "Български"; locale = new Locale("bg","BG"); dictionaryFile = "bg-utf8.csv"; - icon = R.drawable.ime_lang_bg; - abcLowerCaseIcon = R.drawable.ime_lang_cyrillic_lower; - abcUpperCaseIcon = R.drawable.ime_lang_cyrillic_upper; isPunctuationPartOfWords = false; diff --git a/src/io/github/sspanak/tt9/languages/definitions/Dutch.java b/src/io/github/sspanak/tt9/languages/definitions/Dutch.java index 7e434007..6b61ecc8 100644 --- a/src/io/github/sspanak/tt9/languages/definitions/Dutch.java +++ b/src/io/github/sspanak/tt9/languages/definitions/Dutch.java @@ -3,16 +3,12 @@ package io.github.sspanak.tt9.languages.definitions; import java.util.Arrays; import java.util.Locale; -import io.github.sspanak.tt9.R; - public class Dutch extends English { public Dutch() { super(); - name = "Nederlands"; locale = new Locale("nl","NL"); dictionaryFile = "nl-utf8.csv"; - icon = R.drawable.ime_lang_nl; isPunctuationPartOfWords = true; diff --git a/src/io/github/sspanak/tt9/languages/definitions/English.java b/src/io/github/sspanak/tt9/languages/definitions/English.java index 9d4671e9..feca8216 100644 --- a/src/io/github/sspanak/tt9/languages/definitions/English.java +++ b/src/io/github/sspanak/tt9/languages/definitions/English.java @@ -4,18 +4,13 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Locale; -import io.github.sspanak.tt9.R; -import io.github.sspanak.tt9.languages.Language; import io.github.sspanak.tt9.languages.Characters; +import io.github.sspanak.tt9.languages.Language; public class English extends Language { public English() { - name = "English"; locale = Locale.ENGLISH; dictionaryFile = "en-utf8.csv"; - icon = R.drawable.ime_lang_en; - abcLowerCaseIcon = R.drawable.ime_lang_latin_lower; - abcUpperCaseIcon = R.drawable.ime_lang_latin_upper; isPunctuationPartOfWords = true; diff --git a/src/io/github/sspanak/tt9/languages/definitions/Finnish.java b/src/io/github/sspanak/tt9/languages/definitions/Finnish.java index 837f15e8..346d5c0f 100644 --- a/src/io/github/sspanak/tt9/languages/definitions/Finnish.java +++ b/src/io/github/sspanak/tt9/languages/definitions/Finnish.java @@ -3,20 +3,16 @@ package io.github.sspanak.tt9.languages.definitions; import java.util.Arrays; import java.util.Locale; -import io.github.sspanak.tt9.R; - public class Finnish extends English { public Finnish() { super(); - name = "Suomi"; locale = new Locale("fi","FI"); dictionaryFile = "fi-utf8.csv"; - icon = R.drawable.ime_lang_fi; isPunctuationPartOfWords = true; characterMap.get(2).addAll(Arrays.asList("ä", "å")); - characterMap.get(6).addAll(Arrays.asList("ö")); + characterMap.get(6).add("ö"); } } diff --git a/src/io/github/sspanak/tt9/languages/definitions/French.java b/src/io/github/sspanak/tt9/languages/definitions/French.java index 2113d19e..98e965d7 100644 --- a/src/io/github/sspanak/tt9/languages/definitions/French.java +++ b/src/io/github/sspanak/tt9/languages/definitions/French.java @@ -3,16 +3,12 @@ package io.github.sspanak.tt9.languages.definitions; import java.util.Arrays; import java.util.Locale; -import io.github.sspanak.tt9.R; - public class French extends English { public French() { super(); - name = "Français"; locale = Locale.FRENCH; dictionaryFile = "fr-utf8.csv"; - icon = R.drawable.ime_lang_fr; isPunctuationPartOfWords = false; diff --git a/src/io/github/sspanak/tt9/languages/definitions/German.java b/src/io/github/sspanak/tt9/languages/definitions/German.java index 6d477308..f4d6335d 100644 --- a/src/io/github/sspanak/tt9/languages/definitions/German.java +++ b/src/io/github/sspanak/tt9/languages/definitions/German.java @@ -2,16 +2,12 @@ package io.github.sspanak.tt9.languages.definitions; import java.util.Locale; -import io.github.sspanak.tt9.R; - public class German extends English { public German() { super(); - name = "Deutsch"; locale = Locale.GERMAN; dictionaryFile = "de-utf8.csv"; - icon = R.drawable.ime_lang_de; isPunctuationPartOfWords = false; diff --git a/src/io/github/sspanak/tt9/languages/definitions/Hebrew.java b/src/io/github/sspanak/tt9/languages/definitions/Hebrew.java index e9d26052..263485ef 100644 --- a/src/io/github/sspanak/tt9/languages/definitions/Hebrew.java +++ b/src/io/github/sspanak/tt9/languages/definitions/Hebrew.java @@ -4,18 +4,16 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Locale; -import io.github.sspanak.tt9.R; -import io.github.sspanak.tt9.languages.Language; import io.github.sspanak.tt9.languages.Characters; +import io.github.sspanak.tt9.languages.Language; public class Hebrew extends Language { public Hebrew() { - name = "עברית"; locale = new Locale("iw","IL"); dictionaryFile = "he-utf8.csv"; - icon = R.drawable.ime_lang_hebrew; - abcLowerCaseIcon = R.drawable.ime_lang_hebrew_abc; + abcString = "אבג"; + hasUpperCase = false; isPunctuationPartOfWords = true; characterMap = new ArrayList<>(Arrays.asList( diff --git a/src/io/github/sspanak/tt9/languages/definitions/Italian.java b/src/io/github/sspanak/tt9/languages/definitions/Italian.java index cac48d91..b3e66b4f 100644 --- a/src/io/github/sspanak/tt9/languages/definitions/Italian.java +++ b/src/io/github/sspanak/tt9/languages/definitions/Italian.java @@ -3,16 +3,12 @@ package io.github.sspanak.tt9.languages.definitions; import java.util.Arrays; import java.util.Locale; -import io.github.sspanak.tt9.R; - public class Italian extends English { public Italian() { super(); - name = "Italiano"; locale = Locale.ITALIAN; dictionaryFile = "it-utf8.csv"; - icon = R.drawable.ime_lang_it; isPunctuationPartOfWords = false; diff --git a/src/io/github/sspanak/tt9/languages/definitions/Norwegian.java b/src/io/github/sspanak/tt9/languages/definitions/Norwegian.java index 75ad1bbd..fbf83fa9 100644 --- a/src/io/github/sspanak/tt9/languages/definitions/Norwegian.java +++ b/src/io/github/sspanak/tt9/languages/definitions/Norwegian.java @@ -3,16 +3,12 @@ package io.github.sspanak.tt9.languages.definitions; import java.util.Arrays; import java.util.Locale; -import io.github.sspanak.tt9.R; - public class Norwegian extends English { public Norwegian() { super(); - name = "Norsk bokmål"; locale = new Locale("nb","NO"); dictionaryFile = "nb-utf8.csv"; - icon = R.drawable.ime_lang_nb; isPunctuationPartOfWords = false; diff --git a/src/io/github/sspanak/tt9/languages/definitions/Russian.java b/src/io/github/sspanak/tt9/languages/definitions/Russian.java index 0a848f95..5c0745f5 100644 --- a/src/io/github/sspanak/tt9/languages/definitions/Russian.java +++ b/src/io/github/sspanak/tt9/languages/definitions/Russian.java @@ -4,18 +4,13 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Locale; -import io.github.sspanak.tt9.R; -import io.github.sspanak.tt9.languages.Language; import io.github.sspanak.tt9.languages.Characters; +import io.github.sspanak.tt9.languages.Language; public class Russian extends Language { public Russian() { - name = "Русский"; locale = new Locale("ru","RU"); dictionaryFile = "ru-utf8.csv"; - icon = R.drawable.ime_lang_ru; - abcLowerCaseIcon = R.drawable.ime_lang_cyrillic_lower; - abcUpperCaseIcon = R.drawable.ime_lang_cyrillic_upper; isPunctuationPartOfWords = false; diff --git a/src/io/github/sspanak/tt9/languages/definitions/Spanish.java b/src/io/github/sspanak/tt9/languages/definitions/Spanish.java index b44631ba..309cdd76 100644 --- a/src/io/github/sspanak/tt9/languages/definitions/Spanish.java +++ b/src/io/github/sspanak/tt9/languages/definitions/Spanish.java @@ -5,17 +5,14 @@ import java.util.Arrays; import java.util.Collections; import java.util.Locale; -import io.github.sspanak.tt9.R; import io.github.sspanak.tt9.languages.Characters; public class Spanish extends English { public Spanish() { super(); - name = "Español"; locale = new Locale("es", "ES"); dictionaryFile = "es-utf8.csv"; - icon = R.drawable.ime_lang_es; isPunctuationPartOfWords = false; diff --git a/src/io/github/sspanak/tt9/languages/definitions/Swedish.java b/src/io/github/sspanak/tt9/languages/definitions/Swedish.java index 4bb64299..15f5d44c 100644 --- a/src/io/github/sspanak/tt9/languages/definitions/Swedish.java +++ b/src/io/github/sspanak/tt9/languages/definitions/Swedish.java @@ -3,21 +3,17 @@ package io.github.sspanak.tt9.languages.definitions; import java.util.Arrays; import java.util.Locale; -import io.github.sspanak.tt9.R; - public class Swedish extends English { public Swedish() { super(); - name = "Svenska"; locale = new Locale("sv","SE"); dictionaryFile = "sv-utf8.csv"; - icon = R.drawable.ime_lang_sv; isPunctuationPartOfWords = false; characterMap.get(2).addAll(Arrays.asList("å", "ä")); - characterMap.get(3).addAll(Arrays.asList("é")); - characterMap.get(6).addAll(Arrays.asList("ö")); + characterMap.get(3).add("é"); + characterMap.get(6).add("ö"); } } diff --git a/src/io/github/sspanak/tt9/languages/definitions/Ukrainian.java b/src/io/github/sspanak/tt9/languages/definitions/Ukrainian.java index d24aca95..7512c16e 100644 --- a/src/io/github/sspanak/tt9/languages/definitions/Ukrainian.java +++ b/src/io/github/sspanak/tt9/languages/definitions/Ukrainian.java @@ -4,18 +4,13 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Locale; -import io.github.sspanak.tt9.R; -import io.github.sspanak.tt9.languages.Language; import io.github.sspanak.tt9.languages.Characters; +import io.github.sspanak.tt9.languages.Language; public class Ukrainian extends Language { public Ukrainian() { - name = "Українська"; locale = new Locale("uk","UA"); dictionaryFile = "uk-utf8.csv"; - icon = R.drawable.ime_lang_uk; - abcLowerCaseIcon = R.drawable.ime_lang_cyrillic_lower; - abcUpperCaseIcon = R.drawable.ime_lang_cyrillic_upper; isPunctuationPartOfWords = true; diff --git a/src/io/github/sspanak/tt9/ui/UI.java b/src/io/github/sspanak/tt9/ui/UI.java index f56ee5ca..e1ddeeb3 100644 --- a/src/io/github/sspanak/tt9/ui/UI.java +++ b/src/io/github/sspanak/tt9/ui/UI.java @@ -31,33 +31,6 @@ public class UI { tt9.startActivity(prefIntent); } - - /** - * updateStatusIcon - * Set the status icon that is appropriate in current mode (based on - * openwmm-legacy) - */ - public static void updateStatusIcon(TraditionalT9 tt9, Language inputLanguage, InputMode inputMode) { - if (inputMode.isABC()) { - tt9.showStatusIcon(inputLanguage.getAbcIcon(inputMode.getTextCase() == InputMode.CASE_LOWER)); - } else if (inputMode.isPredictive()) { - tt9.showStatusIcon(inputLanguage.getIcon()); - } else if (inputMode.is123()) { - tt9.showStatusIcon(R.drawable.ime_number); - } else { - Logger.w("tt9.UI", "Unknown inputMode mode: " + inputMode + ". Hiding status icon."); - tt9.hideStatusIcon(); - } - } - - public static void toastInputMode(Context context, SettingsStore settings, Language newLanguage, InputMode mode) { - if (mode.isABC() && settings.getNotifyNextLanguageInModeAbc()) { - String toastMessage = newLanguage.getName(); - toastMessage += mode.getTextCase() == InputMode.CASE_LOWER ? " (abc)" : " (ABC)"; - toast(context, toastMessage); - } - } - public static void toast(Context context, CharSequence msg) { Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); } diff --git a/src/io/github/sspanak/tt9/ui/bottom/StatusBar.java b/src/io/github/sspanak/tt9/ui/bottom/StatusBar.java new file mode 100644 index 00000000..cab2ad9a --- /dev/null +++ b/src/io/github/sspanak/tt9/ui/bottom/StatusBar.java @@ -0,0 +1,60 @@ +package io.github.sspanak.tt9.ui.bottom; + +import android.content.Context; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import io.github.sspanak.tt9.Logger; +import io.github.sspanak.tt9.R; + +public class StatusBar { + private final TextView statusView; + private String statusText; + + + public StatusBar(View mainView) { + statusView = mainView.findViewById(R.id.status_bar); + } + + + public StatusBar setText(String text) { + statusText = "[ " + text + " ]"; + this.render(); + + return this; + } + + public StatusBar setDarkTheme(boolean darkTheme) { + if (statusView == null) { + Logger.w("StatusBar.setDarkTheme", "Not changing the theme of a NULL View."); + return this; + } + + Context context = statusView.getContext(); + + int backgroundColor = ContextCompat.getColor( + context, + darkTheme ? R.color.dark_candidate_background : R.color.candidate_background + ); + int color = ContextCompat.getColor( + context, + darkTheme ? R.color.dark_candidate_color : R.color.candidate_color + ); + + statusView.setBackgroundColor(backgroundColor); + statusView.setTextColor(color); + this.render(); + + return this; + } + + private void render() { + if (statusText == null) { + Logger.w("StatusBar.render", "Not displaying status of NULL mode"); + } + + statusView.setText(statusText); + } +} diff --git a/src/io/github/sspanak/tt9/ui/SuggestionsAdapter.java b/src/io/github/sspanak/tt9/ui/bottom/SuggestionsAdapter.java similarity index 97% rename from src/io/github/sspanak/tt9/ui/SuggestionsAdapter.java rename to src/io/github/sspanak/tt9/ui/bottom/SuggestionsAdapter.java index e97db26e..06095127 100644 --- a/src/io/github/sspanak/tt9/ui/SuggestionsAdapter.java +++ b/src/io/github/sspanak/tt9/ui/bottom/SuggestionsAdapter.java @@ -1,4 +1,4 @@ -package io.github.sspanak.tt9.ui; +package io.github.sspanak.tt9.ui.bottom; import android.content.Context; import android.graphics.Color; diff --git a/src/io/github/sspanak/tt9/ui/SuggestionsView.java b/src/io/github/sspanak/tt9/ui/bottom/SuggestionsBar.java similarity index 76% rename from src/io/github/sspanak/tt9/ui/SuggestionsView.java rename to src/io/github/sspanak/tt9/ui/bottom/SuggestionsBar.java index 4a45c1ea..011fd1cf 100644 --- a/src/io/github/sspanak/tt9/ui/SuggestionsView.java +++ b/src/io/github/sspanak/tt9/ui/bottom/SuggestionsBar.java @@ -1,7 +1,8 @@ -package io.github.sspanak.tt9.ui; +package io.github.sspanak.tt9.ui.bottom; import android.annotation.SuppressLint; import android.content.Context; +import android.graphics.Color; import android.graphics.drawable.Drawable; import android.view.View; @@ -17,21 +18,22 @@ import java.util.List; import io.github.sspanak.tt9.R; import io.github.sspanak.tt9.preferences.SettingsStore; -public class SuggestionsView { +public class SuggestionsBar { private final List suggestions = new ArrayList<>(); protected int selectedIndex = 0; + private boolean isDarkThemeEnabled = false; private final RecyclerView mView; private final SettingsStore settings; private SuggestionsAdapter mSuggestionsAdapter; - public SuggestionsView(SettingsStore settings, View mainView) { + public SuggestionsBar(SettingsStore settings, View mainView) { super(); this.settings = settings; - mView = mainView.findViewById(R.id.main_suggestions_list); + mView = mainView.findViewById(R.id.suggestions_bar); mView.setLayoutManager(new LinearLayoutManager(mainView.getContext(), RecyclerView.HORIZONTAL,false)); initDataAdapter(mainView.getContext()); @@ -108,6 +110,8 @@ public class SuggestionsView { @SuppressLint("NotifyDataSetChanged") public void setSuggestions(List newSuggestions, int initialSel) { + ecoSetBackground(newSuggestions); + suggestions.clear(); selectedIndex = 0; @@ -159,14 +163,54 @@ public class SuggestionsView { * https://stackoverflow.com/questions/72382886/system-applies-night-mode-to-views-added-in-service-type-application-overlay */ public void setDarkTheme(boolean darkEnabled) { + isDarkThemeEnabled = darkEnabled; Context context = mView.getContext(); - int backgroundColor = darkEnabled ? R.color.dark_candidate_background : R.color.candidate_background; int defaultColor = darkEnabled ? R.color.dark_candidate_color : R.color.candidate_color; int highlightColor = darkEnabled ? R.color.dark_candidate_selected : R.color.candidate_selected; - mView.setBackgroundColor(ContextCompat.getColor(context, backgroundColor)); mSuggestionsAdapter.setColorDefault(ContextCompat.getColor(context, defaultColor)); mSuggestionsAdapter.setColorHighlight(ContextCompat.getColor(context, highlightColor)); + + setBackground(suggestions); + } + + + /** + * setBackground + * Makes the background transparent, when there are no suggestions and theme-colored, + * when there are suggestions. + */ + private void setBackground(List newSuggestions) { + int newSuggestionsSize = newSuggestions != null ? newSuggestions.size() : 0; + if (newSuggestionsSize == 0) { + mView.setBackgroundColor(Color.TRANSPARENT); + return; + } + + int color = ContextCompat.getColor( + mView.getContext(), + isDarkThemeEnabled ? R.color.dark_candidate_background : R.color.candidate_background + ); + + mView.setBackgroundColor(color); + } + + + /** + * ecoSetBackground + * A performance-optimized version of "setBackground(). + * Determines if the suggestions have changed and only then it changes the background. + */ + private void ecoSetBackground(List newSuggestions) { + int newSuggestionsSize = newSuggestions != null ? newSuggestions.size() : 0; + if ( + (newSuggestionsSize == 0 && suggestions.size() == 0) + || (newSuggestionsSize > 0 && suggestions.size() > 0) + ) { + return; + } + + setBackground(newSuggestions); } }