├── app ├── .gitignore ├── src │ ├── main │ │ ├── res │ │ │ ├── resources.properties │ │ │ ├── raw │ │ │ │ ├── beeps.mp3 │ │ │ │ └── buzzer.mp3 │ │ │ ├── mipmap-hdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-mdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xhdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxhdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxxhdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── drawable │ │ │ │ ├── navigation_header_image.png │ │ │ │ ├── table_row_border.xml │ │ │ │ ├── baseline_exposure_plus_1_24.xml │ │ │ │ ├── ic_division.xml │ │ │ │ ├── ic_baseline_delete_outline_24.xml │ │ │ │ ├── ic_radio_button_unchecked.xml │ │ │ │ ├── ic_brightness_low.xml │ │ │ │ ├── lock_open_outline.xml │ │ │ │ ├── ic_menu_number_converter.xml │ │ │ │ ├── ic_outline_text_rotation_angleup.xml │ │ │ │ ├── ic_brightness_high.xml │ │ │ │ ├── ic_baseline_sort_by_alpha_24.xml │ │ │ │ ├── ic_baseline_timer_24.xml │ │ │ │ ├── ic_alphabetical_variant_24.xml │ │ │ │ ├── ic_baseline_format_list_bulleted_24.xml │ │ │ │ ├── snowflake.xml │ │ │ │ ├── ic_menu_dice.xml │ │ │ │ ├── wb_incandescent_48px.xml │ │ │ │ ├── ic_launcher_foreground.xml │ │ │ │ └── ic_outline_settings_24.xml │ │ │ ├── values │ │ │ │ ├── dimens.xml │ │ │ │ ├── colors.xml │ │ │ │ ├── themes.xml │ │ │ │ ├── array.xml │ │ │ │ └── common_words.xml │ │ │ ├── menu │ │ │ │ ├── menu_buzzers.xml │ │ │ │ ├── menu_timer.xml │ │ │ │ ├── menu_keep_screen_on.xml │ │ │ │ ├── menu_random_list.xml │ │ │ │ └── activity_main_drawer.xml │ │ │ ├── values-v23 │ │ │ │ └── themes.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ │ └── ic_launcher.xml │ │ │ ├── layout │ │ │ │ ├── dice.xml │ │ │ │ ├── app_bar_main.xml │ │ │ │ ├── alphabet_table_row.xml │ │ │ │ ├── content_main.xml │ │ │ │ ├── fragment_counter.xml │ │ │ │ ├── nav_header_main.xml │ │ │ │ ├── activity_main.xml │ │ │ │ ├── fragment_alphabet.xml │ │ │ │ ├── fragment_prime_fac.xml │ │ │ │ ├── fragment_random_list.xml │ │ │ │ ├── dialog_count_down_picker.xml │ │ │ │ ├── fragment_frosthaven.xml │ │ │ │ ├── counter.xml │ │ │ │ ├── fragment_buzzers.xml │ │ │ │ ├── fragment_rot13.xml │ │ │ │ ├── fragment_timer.xml │ │ │ │ ├── fragment_dice.xml │ │ │ │ └── fragment_number_converter.xml │ │ │ ├── values-no │ │ │ │ └── strings.xml │ │ │ ├── values-af │ │ │ │ └── strings.xml │ │ │ ├── values-fa │ │ │ │ └── strings.xml │ │ │ ├── values-in │ │ │ │ └── strings.xml │ │ │ ├── values-ji │ │ │ │ └── strings.xml │ │ │ ├── values-ko │ │ │ │ └── strings.xml │ │ │ ├── values-sr │ │ │ │ └── strings.xml │ │ │ ├── values-vi │ │ │ │ └── strings.xml │ │ │ ├── values-zh │ │ │ │ └── strings.xml │ │ │ ├── values-en │ │ │ │ └── strings.xml │ │ │ ├── values-hu │ │ │ │ └── strings.xml │ │ │ ├── values-ca │ │ │ │ └── strings.xml │ │ │ ├── values-iw │ │ │ │ └── strings.xml │ │ │ ├── values-eu │ │ │ │ └── strings.xml │ │ │ ├── xml │ │ │ │ └── pref_main.xml │ │ │ ├── values-tr │ │ │ │ └── strings.xml │ │ │ ├── navigation │ │ │ │ └── mobile_navigation.xml │ │ │ ├── values-de │ │ │ │ └── common_words.xml │ │ │ ├── values-ja │ │ │ │ └── strings.xml │ │ │ ├── values-zh-rCN │ │ │ │ └── strings.xml │ │ │ └── values-nb │ │ │ │ └── strings.xml │ │ ├── java │ │ │ └── com │ │ │ │ └── github │ │ │ │ └── muellerma │ │ │ │ └── tabletoptools │ │ │ │ ├── utils │ │ │ │ ├── TextUtils.kt │ │ │ │ ├── ShortcutManager.kt │ │ │ │ ├── ExtensionFunctions.kt │ │ │ │ └── Prefs.kt │ │ │ │ ├── TableTopToolsApp.kt │ │ │ │ └── ui │ │ │ │ ├── SecondInstance.kt │ │ │ │ ├── fragments │ │ │ │ ├── FrosthavenFragment.kt │ │ │ │ ├── AlphabetFragment.kt │ │ │ │ ├── CounterFragment.kt │ │ │ │ ├── PrimeFacFragment.kt │ │ │ │ ├── NumberConverterFragment.kt │ │ │ │ ├── PreferenceFragment.kt │ │ │ │ ├── RandomListFragment.kt │ │ │ │ ├── Rot13Fragment.kt │ │ │ │ └── AbstractBaseFragment.kt │ │ │ │ └── dialog │ │ │ │ └── TimerPickerDialog.kt │ │ └── AndroidManifest.xml │ ├── test │ │ └── java │ │ │ └── com │ │ │ └── github │ │ │ └── muellerma │ │ │ └── tabletoptools │ │ │ ├── PrimeFacUnitTest.kt │ │ │ ├── CharUtilsUnitTest.kt │ │ │ ├── RandomListTest.kt │ │ │ └── Rot13UnitTest.kt │ └── androidTest │ │ └── java │ │ └── com │ │ └── github │ │ └── muellerma │ │ └── tabletoptools │ │ └── ExampleInstrumentedTest.kt ├── proguard-rules.pro └── build.gradle ├── .idea ├── .name ├── .gitignore ├── codeStyles │ ├── codeStyleConfig.xml │ └── Project.xml ├── compiler.xml ├── migrations.xml ├── vcs.xml └── jarRepositories.xml ├── fastlane └── metadata │ └── android │ ├── zh-CN │ ├── title.txt │ ├── short_description.txt │ └── full_description.txt │ ├── ja-JP │ ├── title.txt │ ├── short_description.txt │ └── full_description.txt │ ├── af-ZA │ ├── title.txt │ ├── short_description.txt │ └── full_description.txt │ ├── ar-SA │ ├── title.txt │ ├── short_description.txt │ └── full_description.txt │ ├── ca-ES │ ├── title.txt │ ├── short_description.txt │ └── full_description.txt │ ├── de-DE │ ├── title.txt │ ├── short_description.txt │ └── full_description.txt │ ├── el-GR │ ├── title.txt │ ├── short_description.txt │ └── full_description.txt │ ├── en-US │ ├── title.txt │ ├── changelogs │ │ ├── 1.txt │ │ ├── 11.txt │ │ ├── 13.txt │ │ ├── 14.txt │ │ ├── 2.txt │ │ ├── 20.txt │ │ ├── 21.txt │ │ ├── 23.txt │ │ ├── 28.txt │ │ ├── 29.txt │ │ ├── 16.txt │ │ ├── 25.txt │ │ ├── 26.txt │ │ ├── 30.txt │ │ ├── 19.txt │ │ ├── 3.txt │ │ ├── 8.txt │ │ ├── 15.txt │ │ ├── 22.txt │ │ ├── 24.txt │ │ ├── 17.txt │ │ ├── 10.txt │ │ ├── 12.txt │ │ ├── 5.txt │ │ ├── 4.txt │ │ ├── 7.txt │ │ ├── 6.txt │ │ ├── 9.txt │ │ ├── 18.txt │ │ └── 27.txt │ ├── short_description.txt │ ├── images │ │ ├── icon.png │ │ ├── featureGraphic.png │ │ └── phoneScreenshots │ │ │ ├── 1.png │ │ │ ├── 2.png │ │ │ ├── 3.png │ │ │ ├── 4.png │ │ │ ├── 5.png │ │ │ └── 6.png │ └── full_description.txt │ ├── eu-ES │ ├── title.txt │ ├── short_description.txt │ └── full_description.txt │ ├── fa-IR │ ├── title.txt │ ├── short_description.txt │ └── full_description.txt │ ├── fi-FI │ ├── title.txt │ ├── short_description.txt │ └── full_description.txt │ ├── fr-FR │ ├── title.txt │ ├── short_description.txt │ └── full_description.txt │ ├── he-IL │ ├── title.txt │ ├── short_description.txt │ └── full_description.txt │ ├── hu-HU │ ├── title.txt │ ├── short_description.txt │ └── full_description.txt │ ├── id-ID │ ├── title.txt │ ├── short_description.txt │ └── full_description.txt │ ├── ko-KR │ ├── title.txt │ ├── short_description.txt │ └── full_description.txt │ ├── nb-NO │ ├── title.txt │ ├── short_description.txt │ └── full_description.txt │ ├── no-NO │ ├── title.txt │ ├── short_description.txt │ └── full_description.txt │ ├── pl-PL │ ├── title.txt │ ├── short_description.txt │ └── full_description.txt │ ├── sr-SP │ ├── title.txt │ ├── short_description.txt │ └── full_description.txt │ ├── tr-TR │ ├── title.txt │ ├── short_description.txt │ └── full_description.txt │ ├── uk-UA │ ├── title.txt │ ├── short_description.txt │ └── full_description.txt │ ├── vi-VN │ ├── title.txt │ ├── short_description.txt │ └── full_description.txt │ ├── yi-DE │ ├── title.txt │ ├── short_description.txt │ └── full_description.txt │ ├── zh-TW │ ├── title.txt │ ├── short_description.txt │ └── full_description.txt │ ├── it-IT │ ├── title.txt │ ├── short_description.txt │ └── full_description.txt │ ├── nl-NL │ ├── title.txt │ ├── short_description.txt │ └── full_description.txt │ ├── pt-BR │ ├── title.txt │ ├── short_description.txt │ └── full_description.txt │ ├── pt-PT │ ├── title.txt │ ├── short_description.txt │ └── full_description.txt │ ├── ro-RO │ ├── title.txt │ ├── short_description.txt │ └── full_description.txt │ ├── da-DK │ ├── title.txt │ ├── short_description.txt │ └── full_description.txt │ ├── ru-RU │ ├── title.txt │ ├── short_description.txt │ └── full_description.txt │ ├── sv-SE │ ├── title.txt │ ├── short_description.txt │ └── full_description.txt │ ├── cs-CZ │ ├── title.txt │ ├── short_description.txt │ └── full_description.txt │ └── es-ES │ ├── title.txt │ ├── short_description.txt │ └── full_description.txt ├── settings.gradle ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── SECURITY.md ├── Contributing.md ├── renovate.json ├── .gitignore ├── crowdin.yml ├── .github ├── workflows │ ├── build.yml │ └── deploy-apk.yml └── ISSUE_TEMPLATE │ ├── feature_request.md │ └── bug_report.md ├── gradle.properties ├── README.md └── gradlew.bat /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | Tabletop tools -------------------------------------------------------------------------------- /fastlane/metadata/android/zh-CN/title.txt: -------------------------------------------------------------------------------- 1 | 桌游工具 -------------------------------------------------------------------------------- /fastlane/metadata/android/ja-JP/title.txt: -------------------------------------------------------------------------------- 1 | タブレットツール -------------------------------------------------------------------------------- /fastlane/metadata/android/af-ZA/title.txt: -------------------------------------------------------------------------------- 1 | Tabletop Tools -------------------------------------------------------------------------------- /fastlane/metadata/android/ar-SA/title.txt: -------------------------------------------------------------------------------- 1 | أدوات سطح الجدول -------------------------------------------------------------------------------- /fastlane/metadata/android/ca-ES/title.txt: -------------------------------------------------------------------------------- 1 | Tabletop Tools -------------------------------------------------------------------------------- /fastlane/metadata/android/de-DE/title.txt: -------------------------------------------------------------------------------- 1 | Tabletop-Tools -------------------------------------------------------------------------------- /fastlane/metadata/android/el-GR/title.txt: -------------------------------------------------------------------------------- 1 | Εργαλεία Tabletop -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/title.txt: -------------------------------------------------------------------------------- 1 | Tabletop Tools -------------------------------------------------------------------------------- /fastlane/metadata/android/eu-ES/title.txt: -------------------------------------------------------------------------------- 1 | Tabletop Tools -------------------------------------------------------------------------------- /fastlane/metadata/android/fa-IR/title.txt: -------------------------------------------------------------------------------- 1 | Tabletop Tools -------------------------------------------------------------------------------- /fastlane/metadata/android/fi-FI/title.txt: -------------------------------------------------------------------------------- 1 | Taulukon Työkalut -------------------------------------------------------------------------------- /fastlane/metadata/android/fr-FR/title.txt: -------------------------------------------------------------------------------- 1 | Outils Tabletop -------------------------------------------------------------------------------- /fastlane/metadata/android/he-IL/title.txt: -------------------------------------------------------------------------------- 1 | Tabletop Tools -------------------------------------------------------------------------------- /fastlane/metadata/android/hu-HU/title.txt: -------------------------------------------------------------------------------- 1 | Tabletop Tools -------------------------------------------------------------------------------- /fastlane/metadata/android/id-ID/title.txt: -------------------------------------------------------------------------------- 1 | Tabletop Tools -------------------------------------------------------------------------------- /fastlane/metadata/android/ko-KR/title.txt: -------------------------------------------------------------------------------- 1 | Tabletop Tools -------------------------------------------------------------------------------- /fastlane/metadata/android/nb-NO/title.txt: -------------------------------------------------------------------------------- 1 | Tabellop Verktøy -------------------------------------------------------------------------------- /fastlane/metadata/android/no-NO/title.txt: -------------------------------------------------------------------------------- 1 | Tabletop Tools -------------------------------------------------------------------------------- /fastlane/metadata/android/pl-PL/title.txt: -------------------------------------------------------------------------------- 1 | Tabletop Tools -------------------------------------------------------------------------------- /fastlane/metadata/android/sr-SP/title.txt: -------------------------------------------------------------------------------- 1 | Tabletop Tools -------------------------------------------------------------------------------- /fastlane/metadata/android/tr-TR/title.txt: -------------------------------------------------------------------------------- 1 | Masaüstü Araçları -------------------------------------------------------------------------------- /fastlane/metadata/android/uk-UA/title.txt: -------------------------------------------------------------------------------- 1 | Настільні засоби -------------------------------------------------------------------------------- /fastlane/metadata/android/vi-VN/title.txt: -------------------------------------------------------------------------------- 1 | Tabletop Tools -------------------------------------------------------------------------------- /fastlane/metadata/android/yi-DE/title.txt: -------------------------------------------------------------------------------- 1 | Tabletop Tools -------------------------------------------------------------------------------- /fastlane/metadata/android/zh-TW/title.txt: -------------------------------------------------------------------------------- 1 | Tabletop Tools -------------------------------------------------------------------------------- /fastlane/metadata/android/it-IT/title.txt: -------------------------------------------------------------------------------- 1 | Strumenti Da Tavolo -------------------------------------------------------------------------------- /fastlane/metadata/android/nl-NL/title.txt: -------------------------------------------------------------------------------- 1 | Tools voor bordspellen -------------------------------------------------------------------------------- /fastlane/metadata/android/pt-BR/title.txt: -------------------------------------------------------------------------------- 1 | Ferramentas Tabletop -------------------------------------------------------------------------------- /fastlane/metadata/android/pt-PT/title.txt: -------------------------------------------------------------------------------- 1 | Ferramentas Tabletop -------------------------------------------------------------------------------- /fastlane/metadata/android/ro-RO/title.txt: -------------------------------------------------------------------------------- 1 | Unelte pentru tablete -------------------------------------------------------------------------------- /app/src/main/res/resources.properties: -------------------------------------------------------------------------------- 1 | unqualifiedResLocale=en-US 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/da-DK/title.txt: -------------------------------------------------------------------------------- 1 | Værktøjer Til Bordplade -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/1.txt: -------------------------------------------------------------------------------- 1 | Inital release 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/ru-RU/title.txt: -------------------------------------------------------------------------------- 1 | Инструменты для настолок -------------------------------------------------------------------------------- /fastlane/metadata/android/sv-SE/title.txt: -------------------------------------------------------------------------------- 1 | Verktyg för bordsskivor -------------------------------------------------------------------------------- /fastlane/metadata/android/cs-CZ/title.txt: -------------------------------------------------------------------------------- 1 | Nástroje pro stolní počítače -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/11.txt: -------------------------------------------------------------------------------- 1 | Update translations 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/13.txt: -------------------------------------------------------------------------------- 1 | Minor bug fixes 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/14.txt: -------------------------------------------------------------------------------- 1 | Support Android 13 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/2.txt: -------------------------------------------------------------------------------- 1 | * Add 5 Minute Timer 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/20.txt: -------------------------------------------------------------------------------- 1 | Update translations 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/21.txt: -------------------------------------------------------------------------------- 1 | Update translations 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/23.txt: -------------------------------------------------------------------------------- 1 | Minor improvements 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/28.txt: -------------------------------------------------------------------------------- 1 | Improve counters 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/29.txt: -------------------------------------------------------------------------------- 1 | Update translations 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/es-ES/title.txt: -------------------------------------------------------------------------------- 1 | Herramientas para juegos de mesa -------------------------------------------------------------------------------- /fastlane/metadata/android/zh-CN/short_description.txt: -------------------------------------------------------------------------------- 1 | 用于桌游的实用工具集合 2 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | rootProject.name = "Tabletop tools" -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/16.txt: -------------------------------------------------------------------------------- 1 | Implement dynamic colors 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/25.txt: -------------------------------------------------------------------------------- 1 | Prepare for Android 14 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/26.txt: -------------------------------------------------------------------------------- 1 | Add prime factorization 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/30.txt: -------------------------------------------------------------------------------- 1 | Add Frosthaven utils 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/19.txt: -------------------------------------------------------------------------------- 1 | Add setting to keep screen on 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/3.txt: -------------------------------------------------------------------------------- 1 | Add buzzers for two players 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/8.txt: -------------------------------------------------------------------------------- 1 | Use bundled sound for timer 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/ja-JP/short_description.txt: -------------------------------------------------------------------------------- 1 | テーブルトップゲーム用の便利なツールコレクション 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/15.txt: -------------------------------------------------------------------------------- 1 | Add ability to select start page 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/22.txt: -------------------------------------------------------------------------------- 1 | Play sound when pressing buzzer 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/24.txt: -------------------------------------------------------------------------------- 1 | Enable per-app language support 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/ar-SA/short_description.txt: -------------------------------------------------------------------------------- 1 | مجموعة أدوات مفيدة لألعاب الكمبيوتر 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/17.txt: -------------------------------------------------------------------------------- 1 | Update translations and minor bug fixes 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/fi-FI/short_description.txt: -------------------------------------------------------------------------------- 1 | Kätevä työkalu kokoelma pöytäpelejä 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/af-ZA/short_description.txt: -------------------------------------------------------------------------------- 1 | Handy tool collection for tabletop games 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/ca-ES/short_description.txt: -------------------------------------------------------------------------------- 1 | Handy tool collection for tabletop games 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/cs-CZ/short_description.txt: -------------------------------------------------------------------------------- 1 | Šikovná sbírka nástrojů pro stolní hry 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/da-DK/short_description.txt: -------------------------------------------------------------------------------- 1 | Handy værktøj samling til bordplade spil 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/10.txt: -------------------------------------------------------------------------------- 1 | Add lockup table for letter <=> position 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/12.txt: -------------------------------------------------------------------------------- 1 | Implement setting to adapt max. dice count 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/short_description.txt: -------------------------------------------------------------------------------- 1 | Handy tool collection for tabletop games 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/fa-IR/short_description.txt: -------------------------------------------------------------------------------- 1 | Handy tool collection for tabletop games 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/he-IL/short_description.txt: -------------------------------------------------------------------------------- 1 | Handy tool collection for tabletop games 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/hu-HU/short_description.txt: -------------------------------------------------------------------------------- 1 | Handy tool collection for tabletop games 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/id-ID/short_description.txt: -------------------------------------------------------------------------------- 1 | Handy tool collection for tabletop games 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/ko-KR/short_description.txt: -------------------------------------------------------------------------------- 1 | Handy tool collection for tabletop games 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/nb-NO/short_description.txt: -------------------------------------------------------------------------------- 1 | Hånd-verktøysamling for nettbrettspill 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/nl-NL/short_description.txt: -------------------------------------------------------------------------------- 1 | Handige collectie tools voor bordspellen 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/no-NO/short_description.txt: -------------------------------------------------------------------------------- 1 | Handy tool collection for tabletop games 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/sr-SP/short_description.txt: -------------------------------------------------------------------------------- 1 | Handy tool collection for tabletop games 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/vi-VN/short_description.txt: -------------------------------------------------------------------------------- 1 | Handy tool collection for tabletop games 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/yi-DE/short_description.txt: -------------------------------------------------------------------------------- 1 | Handy tool collection for tabletop games 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/zh-TW/short_description.txt: -------------------------------------------------------------------------------- 1 | Handy tool collection for tabletop games 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/de-DE/short_description.txt: -------------------------------------------------------------------------------- 1 | Sammlung nützlicher Tools für Tabletop-Spiele 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/pl-PL/short_description.txt: -------------------------------------------------------------------------------- 1 | Poręczny zestaw narzędzi do gier planszowych 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/sv-SE/short_description.txt: -------------------------------------------------------------------------------- 1 | Praktisk verktygskollektion för bordsspel 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/5.txt: -------------------------------------------------------------------------------- 1 | * Make timer configurable 2 | * Add more translations 3 | -------------------------------------------------------------------------------- /fastlane/metadata/android/eu-ES/short_description.txt: -------------------------------------------------------------------------------- 1 | Tresna erabilgarrien bilduma mahai-jokoetarako 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/it-IT/short_description.txt: -------------------------------------------------------------------------------- 1 | Handy collezione di strumenti per giochi da tavolo 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/ru-RU/short_description.txt: -------------------------------------------------------------------------------- 1 | Коллекция удобных инструментов для настольных игр 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/tr-TR/short_description.txt: -------------------------------------------------------------------------------- 1 | Masaüstü oyunlar için kullanışlı araç koleksiyonu 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/uk-UA/short_description.txt: -------------------------------------------------------------------------------- 1 | Колекція зручних інструментів для настільних ігор 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/el-GR/short_description.txt: -------------------------------------------------------------------------------- 1 | Εύχρηστη συλλογή εργαλείων για επιτραπέζια παιχνίδια 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/4.txt: -------------------------------------------------------------------------------- 1 | * Buzzers: Vibrate on press 2 | * Add French translation 3 | -------------------------------------------------------------------------------- /fastlane/metadata/android/fr-FR/short_description.txt: -------------------------------------------------------------------------------- 1 | Collection d'outils pratiques pour les jeux de société 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/pt-PT/short_description.txt: -------------------------------------------------------------------------------- 1 | Coleção de ferramentas úteis para jogos de tabuleiro 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/ro-RO/short_description.txt: -------------------------------------------------------------------------------- 1 | Colecție de unelte utilă pentru jocurile cu tabletă 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/7.txt: -------------------------------------------------------------------------------- 1 | * Add slider to increment dice count 2 | * Add German translation 3 | -------------------------------------------------------------------------------- /fastlane/metadata/android/es-ES/short_description.txt: -------------------------------------------------------------------------------- 1 | Una colección de herramientas útiles para juegos de mesa 2 | -------------------------------------------------------------------------------- /app/src/main/res/raw/beeps.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mueller-ma/TabletopTools/HEAD/app/src/main/res/raw/beeps.mp3 -------------------------------------------------------------------------------- /app/src/main/res/raw/buzzer.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mueller-ma/TabletopTools/HEAD/app/src/main/res/raw/buzzer.mp3 -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/6.txt: -------------------------------------------------------------------------------- 1 | * Add a list that can be randomized 2 | * Add Portuguese translation 3 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/9.txt: -------------------------------------------------------------------------------- 1 | * Use Material Design 3 2 | * Allow installation on external storage 3 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mueller-ma/TabletopTools/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /fastlane/metadata/android/pt-BR/short_description.txt: -------------------------------------------------------------------------------- 1 | Este aplicativo disponibiliza diversas ferramentas uteis para jogos de tabuleiro 2 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mueller-ma/TabletopTools/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mueller-ma/TabletopTools/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/18.txt: -------------------------------------------------------------------------------- 1 | Enhance dice page: More sliders (need to be enabled in settings) and allow negative values 2 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mueller-ma/TabletopTools/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mueller-ma/TabletopTools/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/27.txt: -------------------------------------------------------------------------------- 1 | - Add counter 2 | - Utilize multi-window feature of Android to use multiple tools at the same time 3 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mueller-ma/TabletopTools/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mueller-ma/TabletopTools/HEAD/fastlane/metadata/android/en-US/images/icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/navigation_header_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mueller-ma/TabletopTools/HEAD/app/src/main/res/drawable/navigation_header_image.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/featureGraphic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mueller-ma/TabletopTools/HEAD/fastlane/metadata/android/en-US/images/featureGraphic.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mueller-ma/TabletopTools/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mueller-ma/TabletopTools/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mueller-ma/TabletopTools/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mueller-ma/TabletopTools/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mueller-ma/TabletopTools/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/5.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mueller-ma/TabletopTools/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/6.png -------------------------------------------------------------------------------- /.idea/codeStyles/codeStyleConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 16dp 3 | 16dp 4 | 176dp 5 | -------------------------------------------------------------------------------- /fastlane/metadata/android/zh-CN/full_description.txt: -------------------------------------------------------------------------------- 1 | 这个应用为桌面游戏提供了几个简单的工具: 2 | * 骰子 (D3, D4, D6, D8, D10, D12, D20, D100) 3 | * [ROT13](https://zh.wikipedia.org/wiki/ROT13) 4 | * 数字转换器:十进制 <=> 二进制 <=> 六进制 5 | * 计时器 6 | * 可用于1至4名玩家的蜂鸣器 7 | * 可随机重排的列表 8 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## Supported Versions 4 | 5 | Since this is an Android app, only the latest version is supported. 6 | 7 | ## Reporting a Vulnerability 8 | 9 | Please open an issue on GitHub to report a vulnerability. 10 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_buzzers.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /fastlane/metadata/android/ja-JP/full_description.txt: -------------------------------------------------------------------------------- 1 | このアプリは、タブレットゲームに便利なツールをいくつか提供します。 2 | * サイコロ(D3、D4、D6、D8、D10、D12、D20、D100) 3 | * [ROT13](https://en.wikipedia.org/wiki/ROT13) 4 | * 数値コンバーター: 10 進法 <=> バイナリ <=> 六進法 5 | * タイマー 6 | * 1 - 4 人のプレイヤーのためのブザー 7 | * ランダム化が可能なリスト 8 | -------------------------------------------------------------------------------- /app/src/main/res/values-v23/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip 4 | networkTimeout=10000 5 | validateDistributionUrl=true 6 | zipStoreBase=GRADLE_USER_HOME 7 | zipStorePath=wrapper/dists 8 | -------------------------------------------------------------------------------- /.idea/migrations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /Contributing.md: -------------------------------------------------------------------------------- 1 | # Add new pages 2 | 3 | * Add icon 4 | * Add entry to activity_main_drawer.xml 5 | * Add package 6 | * Add fragment 7 | * Add layout file 8 | * Add entry to mobile_navigation.xml 9 | * Add to `appBarConfiguration` in MainActivity 10 | * Add to Readme.md and fastlane/metadata/android/en-US/full_description.txt 11 | -------------------------------------------------------------------------------- /fastlane/metadata/android/ar-SA/full_description.txt: -------------------------------------------------------------------------------- 1 | يوفر هذا التطبيق بعض الأدوات المفيدة لألعاب سطح الطاولة: 2 | * الأرز (D3, D4, D6, D8, D10, D12, D20, D100) 3 | * [ROT13](https://en.wikipedia.org/wiki/ROT13) 4 | * محول الرقم: العشري <=> Binary <=> Hexadecimal 5 | * المؤقت 6 | * ألغاز ل 1 - 4 لاعبين 7 | * قائمة يمكن أن تكون عشوائية 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/sv-SE/full_description.txt: -------------------------------------------------------------------------------- 1 | Denna app ger några praktiska verktyg för bordsspel: 2 | * Dice (D3, D4, D6, D8, D10, D12, D20, D100) 3 | * [ROT13](https://en.wikipedia.org/wiki/ROT13) 4 | * Antal omvandlare: Decimal <=> Binär <=> Hexadecimal 5 | * Timer 6 | * Summer för 1 - 4 spelare 7 | * Lista som kan randomiseras 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/table_row_border.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/af-ZA/full_description.txt: -------------------------------------------------------------------------------- 1 | This app provides a few handy tools for tabletop games: 2 | * Dice (D3, D4, D6, D8, D10, D12, D20, D100) 3 | * [ROT13](https://en.wikipedia.org/wiki/ROT13) 4 | * Number converter: Decimal <=> Binary <=> Hexadecimal 5 | * Timer 6 | * Buzzers for 1 - 4 players 7 | * List that can be randomized 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/ca-ES/full_description.txt: -------------------------------------------------------------------------------- 1 | This app provides a few handy tools for tabletop games: 2 | * Dice (D3, D4, D6, D8, D10, D12, D20, D100) 3 | * [ROT13](https://en.wikipedia.org/wiki/ROT13) 4 | * Number converter: Decimal <=> Binary <=> Hexadecimal 5 | * Timer 6 | * Buzzers for 1 - 4 players 7 | * List that can be randomized 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/full_description.txt: -------------------------------------------------------------------------------- 1 | This app provides a few handy tools for tabletop games: 2 | * Dice (D3, D4, D6, D8, D10, D12, D20, D100) 3 | * [ROT13](https://en.wikipedia.org/wiki/ROT13) 4 | * Number converter: Decimal <=> Binary <=> Hexadecimal 5 | * Timer 6 | * Buzzers for 1 - 4 players 7 | * List that can be randomized 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/eu-ES/full_description.txt: -------------------------------------------------------------------------------- 1 | This app provides a few handy tools for tabletop games: 2 | * Dice (D3, D4, D6, D8, D10, D12, D20, D100) 3 | * [ROT13](https://en.wikipedia.org/wiki/ROT13) 4 | * Number converter: Decimal <=> Binary <=> Hexadecimal 5 | * Timer 6 | * Buzzers for 1 - 4 players 7 | * List that can be randomized 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/fa-IR/full_description.txt: -------------------------------------------------------------------------------- 1 | This app provides a few handy tools for tabletop games: 2 | * Dice (D3, D4, D6, D8, D10, D12, D20, D100) 3 | * [ROT13](https://en.wikipedia.org/wiki/ROT13) 4 | * Number converter: Decimal <=> Binary <=> Hexadecimal 5 | * Timer 6 | * Buzzers for 1 - 4 players 7 | * List that can be randomized 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/he-IL/full_description.txt: -------------------------------------------------------------------------------- 1 | This app provides a few handy tools for tabletop games: 2 | * Dice (D3, D4, D6, D8, D10, D12, D20, D100) 3 | * [ROT13](https://en.wikipedia.org/wiki/ROT13) 4 | * Number converter: Decimal <=> Binary <=> Hexadecimal 5 | * Timer 6 | * Buzzers for 1 - 4 players 7 | * List that can be randomized 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/hu-HU/full_description.txt: -------------------------------------------------------------------------------- 1 | This app provides a few handy tools for tabletop games: 2 | * Dice (D3, D4, D6, D8, D10, D12, D20, D100) 3 | * [ROT13](https://en.wikipedia.org/wiki/ROT13) 4 | * Number converter: Decimal <=> Binary <=> Hexadecimal 5 | * Timer 6 | * Buzzers for 1 - 4 players 7 | * List that can be randomized 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/id-ID/full_description.txt: -------------------------------------------------------------------------------- 1 | This app provides a few handy tools for tabletop games: 2 | * Dice (D3, D4, D6, D8, D10, D12, D20, D100) 3 | * [ROT13](https://en.wikipedia.org/wiki/ROT13) 4 | * Number converter: Decimal <=> Binary <=> Hexadecimal 5 | * Timer 6 | * Buzzers for 1 - 4 players 7 | * List that can be randomized 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/ko-KR/full_description.txt: -------------------------------------------------------------------------------- 1 | This app provides a few handy tools for tabletop games: 2 | * Dice (D3, D4, D6, D8, D10, D12, D20, D100) 3 | * [ROT13](https://en.wikipedia.org/wiki/ROT13) 4 | * Number converter: Decimal <=> Binary <=> Hexadecimal 5 | * Timer 6 | * Buzzers for 1 - 4 players 7 | * List that can be randomized 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/sr-SP/full_description.txt: -------------------------------------------------------------------------------- 1 | This app provides a few handy tools for tabletop games: 2 | * Dice (D3, D4, D6, D8, D10, D12, D20, D100) 3 | * [ROT13](https://en.wikipedia.org/wiki/ROT13) 4 | * Number converter: Decimal <=> Binary <=> Hexadecimal 5 | * Timer 6 | * Buzzers for 1 - 4 players 7 | * List that can be randomized 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/vi-VN/full_description.txt: -------------------------------------------------------------------------------- 1 | This app provides a few handy tools for tabletop games: 2 | * Dice (D3, D4, D6, D8, D10, D12, D20, D100) 3 | * [ROT13](https://en.wikipedia.org/wiki/ROT13) 4 | * Number converter: Decimal <=> Binary <=> Hexadecimal 5 | * Timer 6 | * Buzzers for 1 - 4 players 7 | * List that can be randomized 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/yi-DE/full_description.txt: -------------------------------------------------------------------------------- 1 | This app provides a few handy tools for tabletop games: 2 | * Dice (D3, D4, D6, D8, D10, D12, D20, D100) 3 | * [ROT13](https://en.wikipedia.org/wiki/ROT13) 4 | * Number converter: Decimal <=> Binary <=> Hexadecimal 5 | * Timer 6 | * Buzzers for 1 - 4 players 7 | * List that can be randomized 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/zh-TW/full_description.txt: -------------------------------------------------------------------------------- 1 | This app provides a few handy tools for tabletop games: 2 | * Dice (D3, D4, D6, D8, D10, D12, D20, D100) 3 | * [ROT13](https://en.wikipedia.org/wiki/ROT13) 4 | * Number converter: Decimal <=> Binary <=> Hexadecimal 5 | * Timer 6 | * Buzzers for 1 - 4 players 7 | * List that can be randomized 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/da-DK/full_description.txt: -------------------------------------------------------------------------------- 1 | Denne app giver et par handy værktøjer til bordplade spil: 2 | * Terning (D3, D4, D6, D8, D10, D12, D20, D100) 3 | * [ROT13](https://en.wikipedia.org/wiki/ROT13) 4 | * Nummerkonverter: Decimal <=> Binary <=> Hexadecimal 5 | * Timer 6 | * Buzzers for 1 - 4 spillere 7 | * Liste som kan randomiseres 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/nb-NO/full_description.txt: -------------------------------------------------------------------------------- 1 | Denne appen tilbyr noen nyttige verktøy for nettbrettspill: 2 | * Dice (D3, D4, D6, D8, D10, D12, D20, D100) 3 | * [ROT13](https://en.wikipedia.org/wiki/ROT13) 4 | * Nummerkonverterer: Desimal<=> Binær <=> Heksadesimal 5 | * Tidtaker 6 | * Bukser for 1 - 4 spillere 7 | * Liste som kan bli randomisert 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/uk-UA/full_description.txt: -------------------------------------------------------------------------------- 1 | Цей застосунок надає кілька зручних засобів для настільних ігор: 2 | * Корм (D3, D4, D6, D8, D10, D12, D20, D100) 3 | * [ROT13](https://en.wikipedia.org/wiki/ROT13) 4 | * Конвертація чисел: десяткові <=> двійкові <=> шістнадцяткові 5 | * Таймер 6 | * Buzzers на 1 - 4 гравці 7 | * Список випадкових значень 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/cs-CZ/full_description.txt: -------------------------------------------------------------------------------- 1 | Tato aplikace poskytuje několik šikovných nástrojů pro stolní hry: 2 | * Barva (D3, D4, D6, D8, D10, D12, D20, D100) 3 | * [ROT13](https://en.wikipedia.org/wiki/ROT13) 4 | * Převodník čísla: desetinný <=> Binární <=> hexadecimální 5 | * Časovač 6 | * Buzzers pro 1 - 4 hráče 7 | * Seznam který může být náhodný 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/fi-FI/full_description.txt: -------------------------------------------------------------------------------- 1 | Tämä sovellus tarjoaa muutamia käteviä työkaluja pöytäpeleihin: 2 | * Dice (D3, D4, D6, D8, D10, D12, D20, D100) 3 | * [ROT13](https://en.wikipedia.org/wiki/ROT13) 4 | * Numeromuunnin: Desimaali <=> Binary <=> Hexadecimal 5 | * Ajastin 6 | * Puskurit 1 - 4 pelaajalle 7 | * Luettelo joka voidaan satunnaisesti 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/it-IT/full_description.txt: -------------------------------------------------------------------------------- 1 | Questa app fornisce alcuni strumenti utili per i giochi da tavolo: 2 | * Dadi (D3, D4, D6, D8, D10, D12, D20, D100) 3 | * [ROT13](https://en.wikipedia.org/wiki/ROT13) 4 | * Convertitore di numeri: Decimale <=> Binario <=> Esadecimale 5 | * Timer 6 | * Buzzer per 1 - 4 giocatori 7 | * Elenco che può essere casuale 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/nl-NL/full_description.txt: -------------------------------------------------------------------------------- 1 | Deze app biedt een paar handige tools voor bordspellen: 2 | * Dobbelsteen (D3, D4, D6, D8, D10, D12, D20, D100) 3 | * [ROT13](https://en.wikipedia.org/wiki/ROT13) 4 | * Getallen omzetten: Decimaal <=> Binair <=> Hexadecimaal 5 | * 5 Minuten Timer 6 | * Buzzers voor twee spelers 7 | * Lijst die kan worden geschud 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/de-DE/full_description.txt: -------------------------------------------------------------------------------- 1 | Diese App bietet eine Sammlung nützlicher Tools für Tabletop-Spiele: 2 | * Würfel (W3, W4, W6, W8, W10, W12, W20, W100) 3 | * [ROT13](https://de.wikipedia.org/wiki/ROT13) 4 | * Zahlenkonverter: Dezimal <=> Binär <=> Hexadezimal 5 | * Timer 6 | * Buzzers für 1 - 4 Spieler 7 | * Liste, die zufällig sortiert werden kann 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/ro-RO/full_description.txt: -------------------------------------------------------------------------------- 1 | Această aplicație oferă câteva unelte utile pentru jocurile cu tablete: 2 | * Șoareci (D3, D4, D6, D8, D10, D12, D20, D100) 3 | * [ROT13](https://en.wikipedia.org/wiki/ROT13) 4 | * Convertor de numere: zecimal <=> Binar <=> Hexadecimal 5 | * Cronometru 6 | * Zvonuri pentru 1 - 4 jucători 7 | * Lista care poate fi randomizat 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/tr-TR/full_description.txt: -------------------------------------------------------------------------------- 1 | Bu uygulama masaüstü oyunlar için birkaç kullanışlı araçlar sağlamaktadır: 2 | * Dice (D3, D4, D6, D8, D10, D12, D20, D100) 3 | * [ROT13](https://en.wikipedia.org/wiki/ROT13) 4 | * Sayı dönüştürücü: Ondalık <=> İkili <=> Onaltılık 5 | * Zamanlayıcı 6 | * 1 - 4 oyuncu için sesli uyarı 7 | * Rastgele hale getirilebilen liste 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/el-GR/full_description.txt: -------------------------------------------------------------------------------- 1 | Αυτή η εφαρμογή παρέχει μερικά εύχρηστα εργαλεία για επιτραπέζια παιχνίδια: 2 | * Dice (D3, D4, D6, D8, D10, D12, D20, D100) 3 | * [ROT13](https://en.wikipedia.org/wiki/ROT13) 4 | * Μετατροπέας αριθμών: Δεκαδικός <=> Δυαδικό <=> Hexadecimal 5 | * Χρονόμετρο 6 | * Buzzers για 1 - 4 παίκτες 7 | * Λίστα που μπορεί να τυχαιοποιηθεί 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/pl-PL/full_description.txt: -------------------------------------------------------------------------------- 1 | Ta aplikacja zapewnia kilka poręcznych narzędzi do gier planszowych: 2 | * Kości (D3, D4, D6, D8, D10, D12, D20, D100) 3 | * [ROT13](https://en.wikipedia.org/wiki/ROT13) 4 | * Konwertowanie liczb: Dziesiątkowe <=> Binarne <=> Szesnastkowe 5 | * Minutnik 6 | * Brzęczyki (buzzers) dla 1 - 4 graczy 7 | * Lista, którą można wymieszać 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/fr-FR/full_description.txt: -------------------------------------------------------------------------------- 1 | Cette application fournit quelques outils pratiques pour les jeux de société : 2 | * Dice (D3, D4, D6, D8, D10, D12, D20, D100) 3 | * [ROT13](https://fr.wikipedia.org/wiki/ROT13) 4 | * Convertisseur de nombres: Décimal <=> Binaire <=> Hexadécimal 5 | * Minuteur - 5 min 6 | * Buzzer pour 2 joueurs 7 | * Liste qui peut être randomisée 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/no-NO/full_description.txt: -------------------------------------------------------------------------------- 1 | This app provides a few handy tools for tabletop games: 2 | * Dice (D3, D4, D6, D8, D10, D12, D20, D100) 3 | * [Rot13](https://en.wikipedia.org/wiki/ROT13) 4 | * Number converter: Decimal <=> Binary <=> Hexadecimal 5 | * Timer 6 | * Buzzers for 1 - 4 players 7 | * List that can be randomized 8 | 9 | More tools are planned. 10 | -------------------------------------------------------------------------------- /fastlane/metadata/android/pt-PT/full_description.txt: -------------------------------------------------------------------------------- 1 | Este aplicativo fornece algumas ferramentas úteis para jogos de tabletop: 2 | * Dados (D3, D4, D6, D8, D10, D12, D20, D100) 3 | * [ROT13](https://en.wikipedia.org/wiki/ROT13) 4 | * Conversor de números: Número decimal <=> Binário <=> Hexadecimal 5 | * Temporizador 6 | * Buzzers para 1 a 4 jogadores 7 | * Lista que pode ser randomizada 8 | -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "extends": [ 4 | "config:recommended", 5 | ":dependencyDashboardApproval" 6 | ], 7 | "configMigration": true, 8 | "minimumReleaseAge": "7 days", 9 | "addLabels": [ 10 | "renovate" 11 | ], 12 | "dependencyDashboardLabels": [ 13 | "renovate" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /fastlane/metadata/android/es-ES/full_description.txt: -------------------------------------------------------------------------------- 1 | Esta app cuenta con varias herramientas útiles para juegos de mesa: 2 | * Dado (D3, D4, D6, D8, D10, D12, D20, D100) 3 | * [ROT13](https://es.wikipedia.org/wiki/ROT13) 4 | * Conversor de números: Decimal <=> Binario <=> Hexadecimal 5 | * Temporizador de 5 minutos 6 | * Zumbadores para dos jugadores 7 | * Lista que puede ser aleatorizada 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/ru-RU/full_description.txt: -------------------------------------------------------------------------------- 1 | Это приложение предоставляет несколько удобных инструментов для настольных игр: 2 | * Кубик (3, 4, 6, 8, 10, 12, 20, 100) граней 3 | * [ROT13](https://en.wikipedia.org/wiki/ROT13) 4 | * Конвертер чисел: десятичные <=> двоичные <=> шестнадцатеричные 5 | * Таймер 6 | * Зуммеры для 1 - 4 игроков 7 | * Список, который может быть рандомизирован 8 | -------------------------------------------------------------------------------- /fastlane/metadata/android/pt-BR/full_description.txt: -------------------------------------------------------------------------------- 1 | Este aplicativo disponibiliza diversas ferramentas uteis para jogos de tabuleiro: 2 | * Dados (D3, D4, D6, D8, D10, D12, D20, D100) 3 | * [ROT13](https://pt.wikipedia.org/wiki/ROT13) 4 | * Conversor numérico: Decimal <=> Binário <=> Hexadecimal 5 | * Timer de 5 minutos 6 | * Campainha para dos jogadores 7 | * Lista que pode ser aleatorizada 8 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FF6200EE 4 | #FF3700B3 5 | #FF03DAC5 6 | #FF018786 7 | #FFFFFFFF 8 | #042570 9 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/assetWizardSettings.xml 5 | /.idea/caches 6 | /.idea/deploymentTargetDropDown.xml 7 | /.idea/gradle.xml 8 | /.idea/libraries 9 | /.idea/misc.xml 10 | /.idea/modules.xml 11 | /.idea/navEditor.xml 12 | /.idea/workspace.xml 13 | /.idea/kotlinc.xml 14 | .DS_Store 15 | /build 16 | /captures 17 | .externalNativeBuild 18 | .cxx 19 | local.properties 20 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_timer.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/baseline_exposure_plus_1_24.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/codeStyles/Project.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_keep_screen_on.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_division.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /crowdin.yml: -------------------------------------------------------------------------------- 1 | files: 2 | - source: /app/src/main/res/values/strings.xml 3 | translation: /app/src/main/res/values-%two_letters_code%/strings.xml 4 | translate_attributes: 0 5 | content_segmentation: 0 6 | languages_mapping: 7 | two_letters_code: 8 | pt-BR: pt-rBR 9 | zh-CN: zh-rCN 10 | he: iw 11 | id: in 12 | yi: ji 13 | - source: /fastlane/metadata/android/en-US/*.txt 14 | translation: /fastlane/metadata/android/%locale%/%original_file_name% 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/muellerma/tabletoptools/utils/TextUtils.kt: -------------------------------------------------------------------------------- 1 | package com.github.muellerma.tabletoptools.utils 2 | 3 | fun Char.isLatinLetter(): Boolean { 4 | return this in 'A'..'Z' || this in 'a'..'z' 5 | } 6 | 7 | fun Char.positionInAlphabet(): Int { 8 | if (this in 'A'..'Z') { 9 | return code - 64 10 | } 11 | if (this in 'a'..'z') { 12 | return code - 96 13 | } 14 | 15 | return -1 16 | } 17 | 18 | fun Int.toStringWithSign() = if (this >= 0) "+$this" else "$this" 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_delete_outline_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/muellerma/tabletoptools/TableTopToolsApp.kt: -------------------------------------------------------------------------------- 1 | package com.github.muellerma.tabletoptools 2 | 3 | import android.app.Application 4 | import androidx.preference.PreferenceManager 5 | import com.google.android.material.color.DynamicColors 6 | 7 | class TableTopToolsApp: Application() { 8 | override fun onCreate() { 9 | super.onCreate() 10 | DynamicColors.applyToActivitiesIfAvailable(this) 11 | PreferenceManager.setDefaultValues(this, R.xml.pref_main, false) 12 | } 13 | } -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_radio_button_unchecked.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: Build App 2 | 3 | on: [push, pull_request] 4 | 5 | permissions: {} 6 | 7 | jobs: 8 | build: 9 | runs-on: ubuntu-latest 10 | 11 | steps: 12 | - uses: actions/checkout@v4 13 | 14 | - name: Setup Java 15 | uses: actions/setup-java@v4 16 | with: 17 | distribution: 'adopt' 18 | java-version: 17 19 | 20 | - name: Validate Gradle Wrapper 21 | uses: gradle/wrapper-validation-action@v2.0.0 22 | 23 | - name: Build 24 | run: bash gradlew build 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_brightness_low.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/lock_open_outline.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_menu_number_converter.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_outline_text_rotation_angleup.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dice.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_brightness_high.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/test/java/com/github/muellerma/tabletoptools/PrimeFacUnitTest.kt: -------------------------------------------------------------------------------- 1 | package com.github.muellerma.tabletoptools 2 | 3 | import com.github.muellerma.tabletoptools.ui.fragments.PrimeFacFragment 4 | import org.junit.Assert.assertEquals 5 | import org.junit.Test 6 | 7 | class PrimeFacUnitTest { 8 | @Test 9 | fun testFactor() { 10 | assertEquals(arrayListOf(1), PrimeFacFragment.factor(1)) 11 | assertEquals(arrayListOf(2, 2), PrimeFacFragment.factor(4)) 12 | assertEquals(arrayListOf(2, 5), PrimeFacFragment.factor(10)) 13 | assertEquals(arrayListOf(2, 3, 5), PrimeFacFragment.factor(30)) 14 | } 15 | } -------------------------------------------------------------------------------- /app/src/main/java/com/github/muellerma/tabletoptools/ui/SecondInstance.kt: -------------------------------------------------------------------------------- 1 | package com.github.muellerma.tabletoptools.ui 2 | 3 | import android.content.Intent 4 | import android.os.Bundle 5 | import androidx.appcompat.app.AppCompatActivity 6 | import com.github.muellerma.tabletoptools.R 7 | import com.github.muellerma.tabletoptools.utils.showToast 8 | 9 | class SecondInstance : AppCompatActivity() { 10 | override fun onCreate(savedInstanceState: Bundle?) { 11 | super.onCreate(savedInstanceState) 12 | showToast(R.string.second_instance_hint) 13 | startActivity(Intent(this, MainActivity::class.java)) 14 | } 15 | } -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_sort_by_alpha_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_timer_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/values-no/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_random_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 10 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_alphabetical_variant_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: enhancement 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_format_list_bulleted_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/values-af/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/values-fa/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/values-in/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/values-ji/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/values-ko/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/values-sr/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/values-vi/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/values-zh/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Device (please complete the following information):** 27 | - Device: [e.g. Pixel 3] 28 | - Android version: [e.g. 11] 29 | 30 | **Additional context** 31 | Add any other context about the problem here. 32 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -dontobfuscate -------------------------------------------------------------------------------- /app/src/androidTest/java/com/github/muellerma/tabletoptools/ExampleInstrumentedTest.kt: -------------------------------------------------------------------------------- 1 | package com.github.muellerma.tabletoptools 2 | 3 | import androidx.test.platform.app.InstrumentationRegistry 4 | import androidx.test.ext.junit.runners.AndroidJUnit4 5 | 6 | import org.junit.Test 7 | import org.junit.runner.RunWith 8 | 9 | import org.junit.Assert.* 10 | 11 | /** 12 | * Instrumented test, which will execute on an Android device. 13 | * 14 | * See [testing documentation](http://d.android.com/tools/testing). 15 | */ 16 | @RunWith(AndroidJUnit4::class) 17 | class ExampleInstrumentedTest { 18 | @Test 19 | fun useAppContext() { 20 | // Context of the app under test. 21 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext 22 | assertEquals("com.github.muellerma.tabletoptools", appContext.packageName) 23 | } 24 | } -------------------------------------------------------------------------------- /app/src/main/res/values-en/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/snowflake.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/values-hu/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Beállítások 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | Beállítások 20 | 21 | Nem található böngésző 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/values-ca/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Configuració 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | Configuració 20 | 21 | No s\'ha trobat cap navegador 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/values-iw/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | הגדרות 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | כללי 20 | הגדרות 21 | 22 | לא נמצא דפדפן 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_menu_dice.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/layout/app_bar_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 12 | 13 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/layout/alphabet_table_row.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 15 | 16 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/test/java/com/github/muellerma/tabletoptools/CharUtilsUnitTest.kt: -------------------------------------------------------------------------------- 1 | package com.github.muellerma.tabletoptools 2 | 3 | import com.github.muellerma.tabletoptools.utils.isLatinLetter 4 | import com.github.muellerma.tabletoptools.utils.positionInAlphabet 5 | import org.junit.Test 6 | 7 | import org.junit.Assert.* 8 | 9 | class CharUtilsUnitTest { 10 | @Test 11 | fun testLatinLetterCheck() { 12 | assertTrue('a'.isLatinLetter()) 13 | assertTrue('z'.isLatinLetter()) 14 | assertTrue('A'.isLatinLetter()) 15 | assertTrue('Z'.isLatinLetter()) 16 | assertFalse('Ä'.isLatinLetter()) 17 | assertFalse('é'.isLatinLetter()) 18 | } 19 | 20 | @Test 21 | fun testPositionInAlphabet() { 22 | assertEquals('A'.positionInAlphabet(), 1) 23 | assertEquals('B'.positionInAlphabet(), 2) 24 | assertEquals('Z'.positionInAlphabet(), 26) 25 | assertEquals('a'.positionInAlphabet(), 1) 26 | assertEquals('b'.positionInAlphabet(), 2) 27 | assertEquals('z'.positionInAlphabet(), 26) 28 | } 29 | } -------------------------------------------------------------------------------- /app/src/main/res/layout/content_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 20 | -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 15 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_counter.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/wb_incandescent_48px.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/layout/nav_header_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 14 | 15 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 16 | 17 | 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/muellerma/tabletoptools/utils/ShortcutManager.kt: -------------------------------------------------------------------------------- 1 | package com.github.muellerma.tabletoptools.utils 2 | 3 | import android.content.Context 4 | import android.content.Intent 5 | import android.os.Build 6 | import androidx.core.content.pm.ShortcutInfoCompat 7 | import androidx.core.content.pm.ShortcutManagerCompat 8 | import androidx.core.graphics.drawable.IconCompat 9 | import com.github.muellerma.tabletoptools.R 10 | import com.github.muellerma.tabletoptools.ui.SecondInstance 11 | 12 | fun Context.createShortcuts() { 13 | val intent = Intent(this, SecondInstance::class.java) 14 | .setAction(Intent.ACTION_VIEW) 15 | .setFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK) 16 | val info = ShortcutInfoCompat.Builder(this, "second_instance") 17 | .setIntent(intent) 18 | .setShortLabel(getString(R.string.second_instance)) 19 | .setLongLabel(getString(R.string.second_instance)) 20 | .setIcon(IconCompat.createWithResource(this, R.mipmap.ic_launcher)) 21 | .setAlwaysBadged() 22 | .build() 23 | 24 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) { 25 | ShortcutManagerCompat.addDynamicShortcuts(this, listOf(info)) 26 | } 27 | } 28 | 29 | -------------------------------------------------------------------------------- /app/src/test/java/com/github/muellerma/tabletoptools/RandomListTest.kt: -------------------------------------------------------------------------------- 1 | package com.github.muellerma.tabletoptools 2 | 3 | import com.github.muellerma.tabletoptools.ui.fragments.RandomListFragment 4 | import org.junit.Assert.assertEquals 5 | import org.junit.Assert.assertTrue 6 | import org.junit.Test 7 | 8 | class RandomListTest { 9 | @Test 10 | fun testRandomizeList() { 11 | val list = RandomListFragment.randomizeList("foo\nbar\n\n \n foobar \n") 12 | .split("\n") 13 | 14 | assertEquals(3, list.size) 15 | assertTrue("foo" in list) 16 | assertTrue("bar" in list) 17 | assertTrue("foobar" in list) 18 | } 19 | 20 | @Test 21 | fun testRandomizeListOneElement() { 22 | val list = RandomListFragment.randomizeList("foo") 23 | .split("\n") 24 | 25 | assertEquals(1, list.size) 26 | assertTrue("foo" in list) 27 | } 28 | 29 | @Test 30 | fun testSortList() { 31 | val list = RandomListFragment.sortList("foo\nbar\n\n \n foobar \n") 32 | .split("\n") 33 | 34 | assertEquals(3, list.size) 35 | assertTrue(list[0] == "bar") 36 | assertTrue(list[1] == "foo") 37 | assertTrue(list[2] == "foobar") 38 | } 39 | } -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | # IDE (e.g. Android Studio) users: 3 | # Gradle settings configured through the IDE *will override* 4 | # any settings specified in this file. 5 | # For more details on how to configure your build environment visit 6 | # http://www.gradle.org/docs/current/userguide/build_environment.html 7 | # Specifies the JVM arguments used for the daemon process. 8 | # The setting is particularly useful for tweaking memory settings. 9 | org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 10 | # When configured, Gradle will run in incubating parallel mode. 11 | # This option should only be used with decoupled projects. More details, visit 12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 13 | # org.gradle.parallel=true 14 | # AndroidX package structure to make it clearer which packages are bundled with the 15 | # Android operating system, and which are packaged with your app"s APK 16 | # https://developer.android.com/topic/libraries/support-library/androidx-rn 17 | android.useAndroidX=true 18 | # Automatically convert third-party libraries to use AndroidX 19 | android.enableJetifier=true 20 | # Kotlin code style for this project: "official" or "obsolete": 21 | kotlin.code.style=official 22 | android.defaults.buildfeatures.buildconfig=true 23 | android.nonTransitiveRClass=false 24 | android.nonFinalResIds=false -------------------------------------------------------------------------------- /.idea/jarRepositories.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 14 | 15 | 19 | 20 | 24 | 25 | 29 | 30 | -------------------------------------------------------------------------------- /.github/workflows/deploy-apk.yml: -------------------------------------------------------------------------------- 1 | name: Deploy APK on GitHub 2 | 3 | on: 4 | release: 5 | types: 6 | - created 7 | 8 | permissions: 9 | contents: write 10 | 11 | jobs: 12 | build: 13 | runs-on: ubuntu-latest 14 | 15 | steps: 16 | - uses: actions/checkout@v4 17 | 18 | - name: Setup Java 19 | uses: actions/setup-java@v4 20 | with: 21 | distribution: 'adopt' 22 | java-version: 17 23 | 24 | - name: Validate Gradle Wrapper 25 | uses: gradle/wrapper-validation-action@v2.0.0 26 | 27 | - name: Build APK 28 | run: bash gradlew app:assembleRelease 29 | 30 | - uses: r0adkll/sign-android-release@v1.0.4 31 | name: Sign APK 32 | id: sign_app 33 | with: 34 | releaseDirectory: app/build/outputs/apk/release 35 | signingKeyBase64: ${{ secrets.SIGNING_KEY }} 36 | alias: "key0" 37 | keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }} 38 | keyPassword: ${{ secrets.KEY_PASSWORD }} 39 | env: 40 | BUILD_TOOLS_VERSION: "34.0.0" 41 | 42 | - uses: svenstaro/upload-release-action@v2 43 | name: Upload APK 44 | with: 45 | file: ${{steps.sign_app.outputs.signedReleaseFile}} 46 | asset_name: tabletop_tools.apk 47 | tag: ${{ github.ref }} 48 | repo_token: ${{ secrets.GITHUB_TOKEN }} 49 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/muellerma/tabletoptools/utils/ExtensionFunctions.kt: -------------------------------------------------------------------------------- 1 | package com.github.muellerma.tabletoptools.utils 2 | 3 | import android.content.ActivityNotFoundException 4 | import android.content.Context 5 | import android.content.Intent 6 | import android.net.Uri 7 | import android.os.Build 8 | import android.os.Bundle 9 | import android.util.Log 10 | import android.widget.Toast 11 | import androidx.annotation.StringRes 12 | import com.github.muellerma.tabletoptools.R 13 | 14 | private const val TAG = "ExtensionFunctions" 15 | 16 | inline fun Bundle.parcelable(key: String): T? = when { 17 | Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU -> getParcelable(key, T::class.java) 18 | else -> @Suppress("DEPRECATION") getParcelable(key) as? T 19 | } 20 | 21 | fun String.openInBrowser(context: Context) { 22 | val intent = Intent(Intent.ACTION_VIEW, Uri.parse(this)) 23 | try { 24 | context.startActivity(intent) 25 | } catch (e: ActivityNotFoundException) { 26 | Log.d(TAG, "Unable to open url in browser: $intent") 27 | context.showToast(R.string.error_no_browser_found) 28 | } 29 | } 30 | 31 | fun Context.showToast(@StringRes msg: Int) { 32 | Toast 33 | .makeText(this, msg, Toast.LENGTH_SHORT) 34 | .show() 35 | } 36 | 37 | fun Context.showToast(msg: String) { 38 | Toast 39 | .makeText(this, msg, Toast.LENGTH_SHORT) 40 | .show() 41 | } -------------------------------------------------------------------------------- /app/src/main/java/com/github/muellerma/tabletoptools/ui/fragments/FrosthavenFragment.kt: -------------------------------------------------------------------------------- 1 | package com.github.muellerma.tabletoptools.ui.fragments 2 | 3 | import android.os.Bundle 4 | import android.view.LayoutInflater 5 | import android.view.View 6 | import android.view.ViewGroup 7 | import androidx.core.widget.addTextChangedListener 8 | import com.github.muellerma.tabletoptools.R 9 | import com.github.muellerma.tabletoptools.databinding.FragmentFrosthavenBinding 10 | import kotlin.math.ceil 11 | 12 | 13 | class FrosthavenFragment : AbstractBaseFragment() { 14 | private lateinit var binding: FragmentFrosthavenBinding 15 | 16 | override fun onCreateView( 17 | inflater: LayoutInflater, 18 | container: ViewGroup?, 19 | savedInstanceState: Bundle? 20 | ): View { 21 | binding = FragmentFrosthavenBinding.inflate(inflater, container, false) 22 | setupScreenOn(binding.root) 23 | 24 | binding.scenarioLevelInput.addTextChangedListener { 25 | binding.scenarioLevelOutput.text = 26 | getString(R.string.frosthaven_scenario_level_out, calculateScenarioLevel(it.toString())) 27 | } 28 | 29 | return binding.root 30 | } 31 | 32 | companion object { 33 | private fun calculateScenarioLevel(characterLevels: String): Int { 34 | val avg = "\\d+".toRegex().findAll(characterLevels).map { it.value.toInt() }.average() 35 | return ceil(avg / 2).toInt() 36 | } 37 | } 38 | } -------------------------------------------------------------------------------- /app/src/main/res/values-eu/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Mahai-jokoetarako tresnak 5 | Tresna erabilgarrien bilduma mahai-jokoetarako 6 | Ezarpenak 7 | 8 | ROT13 9 | Ezin izan da automatikoki txandakatu 10 | Automatikoki txandakatu 11 | 12 | -1 13 | +1 14 | -10 15 | +10 16 | 17 | 18 | 19 | Zenbaki osoa zenbaki lehenen faktorizaziorako 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | Ezarpenak 30 | 31 | 32 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/muellerma/tabletoptools/ui/fragments/AlphabetFragment.kt: -------------------------------------------------------------------------------- 1 | package com.github.muellerma.tabletoptools.ui.fragments 2 | 3 | import android.annotation.SuppressLint 4 | import android.os.Bundle 5 | import android.view.LayoutInflater 6 | import android.view.View 7 | import android.view.ViewGroup 8 | import com.github.muellerma.tabletoptools.databinding.AlphabetTableRowBinding 9 | import com.github.muellerma.tabletoptools.databinding.FragmentAlphabetBinding 10 | import com.github.muellerma.tabletoptools.utils.positionInAlphabet 11 | 12 | class AlphabetFragment : AbstractBaseFragment() { 13 | private lateinit var binding: FragmentAlphabetBinding 14 | 15 | override fun onCreateView( 16 | inflater: LayoutInflater, 17 | container: ViewGroup?, 18 | savedInstanceState: Bundle? 19 | ): View { 20 | binding = FragmentAlphabetBinding.inflate(inflater, container, false) 21 | 22 | ('A'..'Z').forEach { letter -> 23 | @SuppressLint("InflateParams") // View is set as child below 24 | val row = AlphabetTableRowBinding.inflate(inflater) 25 | val letterLabel = row.alphabetTableRowLetter 26 | val numberLabel = row.alphabetTableRowNumber 27 | letterLabel.text = letter.toString() 28 | numberLabel.text = letter.positionInAlphabet().toString() 29 | 30 | binding.alphabetTable.addView(row.root) 31 | } 32 | 33 | setupScreenOn(binding.root) 34 | 35 | return binding.root 36 | } 37 | 38 | companion object { 39 | private var TAG = AlphabetFragment::class.java.simpleName 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /app/src/main/res/values/array.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 5 | 20 6 | 50 7 | 100 8 | 500 9 | 10 | 11 | @string/menu_dice 12 | @string/menu_counter 13 | @string/menu_random_list 14 | @string/menu_rot13 15 | @string/menu_alphabet 16 | @string/menu_number_converter 17 | @string/menu_prime_fac 18 | @string/menu_timer 19 | @string/menu_buzzers 20 | 21 | 22 | @string/menu_dice_value 23 | @string/menu_counter_value 24 | @string/menu_random_list_value 25 | @string/menu_rot13_value 26 | @string/menu_alphabet_value 27 | @string/menu_number_converter_value 28 | @string/menu_prime_fac_value 29 | @string/menu_timer_value 30 | @string/menu_buzzers_value 31 | 32 | 33 | 34 | @string/buzzer_sound_none 35 | @string/buzzer_sound_buzzer 36 | 37 | 38 | none 39 | buzzer 40 | 41 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_alphabet.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 15 | 18 | 25 | 26 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /app/src/test/java/com/github/muellerma/tabletoptools/Rot13UnitTest.kt: -------------------------------------------------------------------------------- 1 | package com.github.muellerma.tabletoptools 2 | 3 | import com.github.muellerma.tabletoptools.ui.fragments.Rot13Fragment 4 | import org.junit.Assert.assertEquals 5 | import org.junit.Test 6 | 7 | class Rot13UnitTest { 8 | @Test 9 | fun testRotateUpper() { 10 | assertEquals('A', Rot13Fragment.rotateChar('A', 0)) 11 | assertEquals('B', Rot13Fragment.rotateChar('A', 1)) 12 | assertEquals('C', Rot13Fragment.rotateChar('A', 2)) 13 | assertEquals('N', Rot13Fragment.rotateChar('A', 13)) 14 | assertEquals('Z', Rot13Fragment.rotateChar('A', 25)) 15 | assertEquals('A', Rot13Fragment.rotateChar('A', 26)) 16 | } 17 | 18 | @Test 19 | fun testRotateLower() { 20 | assertEquals('a', Rot13Fragment.rotateChar('a', 0)) 21 | assertEquals('b', Rot13Fragment.rotateChar('a', 1)) 22 | assertEquals('c', Rot13Fragment.rotateChar('a', 2)) 23 | assertEquals('n', Rot13Fragment.rotateChar('a', 13)) 24 | assertEquals('z', Rot13Fragment.rotateChar('a', 25)) 25 | assertEquals('a', Rot13Fragment.rotateChar('a', 26)) 26 | } 27 | 28 | @Test 29 | fun testRotateNonLetters() { 30 | assertEquals('0', Rot13Fragment.rotateChar('0', 42)) 31 | assertEquals('1', Rot13Fragment.rotateChar('1', 42)) 32 | assertEquals(' ', Rot13Fragment.rotateChar(' ', 42)) 33 | assertEquals('!', Rot13Fragment.rotateChar('!', 42)) 34 | assertEquals('.', Rot13Fragment.rotateChar('.', 42)) 35 | } 36 | 37 | @Test 38 | fun testRotateNonLatinLetters() { 39 | assertEquals('Ä', Rot13Fragment.rotateChar('Ä', 42)) 40 | assertEquals('é', Rot13Fragment.rotateChar('é', 42)) 41 | } 42 | 43 | @Test 44 | fun testRotateString() { 45 | assertEquals("Unyyb", Rot13Fragment.rotateString("Hallo", 13)) 46 | assertEquals("Unyyb sbb", Rot13Fragment.rotateString("Hallo foo", 13)) 47 | } 48 | } -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_outline_settings_24.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_prime_fac.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 14 | 15 | 31 | 32 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /app/src/main/res/xml/pref_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 12 | 13 | 14 | 21 | 26 | 31 | 32 | 33 | 40 | 41 | 42 | 45 | 46 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Tabletop Tools 2 | 3 | [![Build App](https://github.com/mueller-ma/TabletopTools/actions/workflows/build.yml/badge.svg)](https://github.com/mueller-ma/TabletopTools/actions/workflows/build.yml) 4 | [![CodeFactor](https://www.codefactor.io/repository/github/mueller-ma/tabletoptools/badge)](https://www.codefactor.io/repository/github/mueller-ma/tabletoptools) 5 | [![Crowdin](https://badges.crowdin.net/tabletop-tools/localized.svg)](https://crowdin.com/project/tabletop-tools) 6 | 7 | This Android app provides a few handy tools for tabletop games: 8 | * Dice (D3, D4, D6, D8, D10, D12, D20, D100) 9 | * [ROT13](https://en.wikipedia.org/wiki/ROT13) 10 | * Number converter: Decimal <=> Binary <=> Hexadecimal 11 | * Timer 12 | * Buzzers for 1 - 4 players 13 | * List that can be randomized 14 | 15 | [Get it on F-Droid](https://f-droid.org/de/packages/com.github.muellerma.tabletoptools/)[Download from GitHub](https://github.com/mueller-ma/TabletopTools/releases) 16 | 17 | Screenshot Screenshot Screenshot Screenshot 18 | 19 | ## Translations 20 | 21 | App strings and the app store description can be translated via Crowdin: https://crowdin.com/project/tabletop-tools 22 | For the automatic rotation detection in ROT13 you need to manually copy [this file](https://github.com/mueller-ma/TabletopTools/blob/main/app/src/main/res/values/common_words.xml) and commit it. 23 | Crowdin doesn't handle this string array well. 24 | 25 | To request a new language, please [poke me on Crowdin](https://crowdin.com/profile/mueller-ma) or open an issue here on GitHub. 26 | 27 | ## Credits 28 | 29 | * Feature graphic by https://unsplash.com/@accrualbowtie 30 | * Some icons by Google and https://materialdesignicons.com/ 31 | * Sound for the timer by https://soundbible.com/ 32 | * Sound for buzzer by https://mixkit.co 33 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_random_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 13 | 14 | 32 | 33 | 45 | 46 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/muellerma/tabletoptools/ui/fragments/CounterFragment.kt: -------------------------------------------------------------------------------- 1 | package com.github.muellerma.tabletoptools.ui.fragments 2 | 3 | import android.os.Bundle 4 | import android.view.LayoutInflater 5 | import android.view.View 6 | import android.view.ViewGroup 7 | import androidx.core.widget.doOnTextChanged 8 | import com.github.muellerma.tabletoptools.databinding.CounterBinding 9 | import com.github.muellerma.tabletoptools.databinding.FragmentCounterBinding 10 | 11 | 12 | class CounterFragment : AbstractBaseFragment() { 13 | private lateinit var binding: FragmentCounterBinding 14 | 15 | override fun onCreateView( 16 | inflater: LayoutInflater, 17 | container: ViewGroup?, 18 | savedInstanceState: Bundle? 19 | ): View { 20 | binding = FragmentCounterBinding.inflate(inflater, container, false) 21 | 22 | setupScreenOn(binding.root) 23 | 24 | return binding.root 25 | } 26 | 27 | override fun onResume() { 28 | super.onResume() 29 | 30 | listOf( 31 | binding.counter1, 32 | binding.counter2, 33 | binding.counter3, 34 | binding.counter4, 35 | binding.counter5, 36 | binding.counter6, 37 | binding.counter7, 38 | binding.counter8 39 | ).forEachIndexed { index, counterBinding -> 40 | setupCounter(index + 1, counterBinding) 41 | } 42 | } 43 | 44 | private fun setupCounter(id: Int, counter: CounterBinding) { 45 | fun getInput() = counter.count.text.toString().toIntOrNull() ?: 0 46 | 47 | counter.less1.setOnClickListener { 48 | counter.count.setText(getInput().dec().toString()) 49 | } 50 | counter.less10.setOnClickListener { 51 | counter.count.setText(getInput().minus(10).toString()) 52 | } 53 | counter.more1.setOnClickListener { 54 | counter.count.setText(getInput().inc().toString()) 55 | } 56 | counter.more10.setOnClickListener { 57 | counter.count.setText(getInput().plus(10).toString()) 58 | } 59 | 60 | val prefs = prefs.Counter(id) 61 | counter.label.setText(prefs.label) 62 | counter.label.doOnTextChanged { text, _, _, _ -> prefs.label = text?.toString() } 63 | 64 | counter.count.setText(prefs.count.toString()) 65 | counter.count.doOnTextChanged { _, _, _, _ -> prefs.count = getInput() } 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /app/src/main/res/menu/activity_main_drawer.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 11 | 15 | 19 | 23 | 27 | 31 | 32 | 36 | 37 | 41 | 45 | 49 | 53 | 54 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_count_down_picker.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 13 | 14 | 20 | 21 | 27 | 28 | 32 | 33 | 34 | 40 | 41 | 47 | 48 | 52 | 53 | 54 | 55 | 56 |