├── CODEOWNERS ├── app ├── .gitignore ├── src │ ├── main │ │ ├── res │ │ │ ├── resources.properties │ │ │ ├── values-ur │ │ │ │ └── strings.xml │ │ │ ├── values-bn-rBD │ │ │ │ └── strings.xml │ │ │ ├── values-bn │ │ │ │ └── strings.xml │ │ │ ├── values-br │ │ │ │ └── strings.xml │ │ │ ├── values-cr │ │ │ │ └── strings.xml │ │ │ ├── values-en-rIN │ │ │ │ └── strings.xml │ │ │ ├── values-ltg │ │ │ │ └── strings.xml │ │ │ ├── values-my │ │ │ │ └── strings.xml │ │ │ ├── values-ne │ │ │ │ └── strings.xml │ │ │ ├── values-nn │ │ │ │ └── strings.xml │ │ │ ├── values-pa │ │ │ │ └── strings.xml │ │ │ ├── values-sat │ │ │ │ └── strings.xml │ │ │ ├── values-si │ │ │ │ └── strings.xml │ │ │ ├── values-b+es+419 │ │ │ │ └── strings.xml │ │ │ ├── values-or │ │ │ │ └── strings.xml │ │ │ ├── values-th │ │ │ │ └── strings.xml │ │ │ ├── values │ │ │ │ ├── colors.xml │ │ │ │ ├── bools.xml │ │ │ │ ├── integers.xml │ │ │ │ ├── styles.xml │ │ │ │ └── dimens.xml │ │ │ ├── drawable-nodpi │ │ │ │ └── img_widget_preview.png │ │ │ ├── values-land │ │ │ │ └── dimens.xml │ │ │ ├── values-en-rGB │ │ │ │ └── strings.xml │ │ │ ├── values-es-rUS │ │ │ │ └── strings.xml │ │ │ ├── drawable │ │ │ │ ├── ic_arrow_drop_down_vector.xml │ │ │ │ ├── ic_height_vector.xml │ │ │ │ ├── ic_swap_vertical_vector.xml │ │ │ │ ├── ripple_circle_background.xml │ │ │ │ ├── ic_box_vector.xml │ │ │ │ ├── ic_thermostat_vector.xml │ │ │ │ ├── ic_energy_vector.xml │ │ │ │ ├── ic_drop_vector.xml │ │ │ │ ├── ic_square_foot_vector.xml │ │ │ │ ├── colored_ripple.xml │ │ │ │ ├── ic_scale_vector.xml │ │ │ │ ├── ic_speed_vector.xml │ │ │ │ ├── unit_type_background.xml │ │ │ │ ├── ic_pressure_vector.xml │ │ │ │ ├── ic_launcher_foreground.xml │ │ │ │ └── ic_launcher_monochrome.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ │ ├── ic_launcher.xml │ │ │ │ ├── ic_launcher_red.xml │ │ │ │ ├── ic_launcher_amber.xml │ │ │ │ ├── ic_launcher_blue.xml │ │ │ │ ├── ic_launcher_brown.xml │ │ │ │ ├── ic_launcher_cyan.xml │ │ │ │ ├── ic_launcher_indigo.xml │ │ │ │ ├── ic_launcher_lime.xml │ │ │ │ ├── ic_launcher_orange.xml │ │ │ │ ├── ic_launcher_pink.xml │ │ │ │ ├── ic_launcher_purple.xml │ │ │ │ ├── ic_launcher_teal.xml │ │ │ │ ├── ic_launcher_yellow.xml │ │ │ │ ├── ic_launcher_grey_black.xml │ │ │ │ ├── ic_launcher_blue_grey.xml │ │ │ │ ├── ic_launcher_deep_orange.xml │ │ │ │ ├── ic_launcher_deep_purple.xml │ │ │ │ ├── ic_launcher_light_blue.xml │ │ │ │ └── ic_launcher_light_green.xml │ │ │ ├── values-sw600dp │ │ │ │ └── dimens.xml │ │ │ ├── menu │ │ │ │ ├── converter_menu.xml │ │ │ │ └── menu.xml │ │ │ ├── values-kr │ │ │ │ └── strings.xml │ │ │ ├── layout │ │ │ │ ├── dialog_history.xml │ │ │ │ ├── widget.xml │ │ │ │ ├── item_unit_type.xml │ │ │ │ ├── history_view.xml │ │ │ │ ├── activity_main.xml │ │ │ │ ├── activity_unit_converter_picker.xml │ │ │ │ ├── activity_unit_converter.xml │ │ │ │ └── widget_config.xml │ │ │ ├── values-pa-rPK │ │ │ │ └── strings.xml │ │ │ ├── values-ms │ │ │ │ └── strings.xml │ │ │ ├── values-ta │ │ │ │ └── strings.xml │ │ │ ├── values-az │ │ │ │ └── strings.xml │ │ │ ├── values-is │ │ │ │ └── strings.xml │ │ │ ├── xml │ │ │ │ └── widget_info.xml │ │ │ ├── values-fil │ │ │ │ └── strings.xml │ │ │ ├── values-te │ │ │ │ └── strings.xml │ │ │ ├── values-ckb │ │ │ │ └── strings.xml │ │ │ ├── values-kn │ │ │ │ └── strings.xml │ │ │ ├── values-cy │ │ │ │ └── strings.xml │ │ │ ├── values-gl │ │ │ │ └── strings.xml │ │ │ ├── values-mk │ │ │ │ └── strings.xml │ │ │ ├── values-lt │ │ │ │ └── strings.xml │ │ │ ├── values-zgh │ │ │ │ └── strings.xml │ │ │ ├── values-ml │ │ │ │ └── strings.xml │ │ │ ├── values-sl │ │ │ │ └── strings.xml │ │ │ ├── values-fa │ │ │ │ └── strings.xml │ │ │ ├── values-lv │ │ │ │ └── strings.xml │ │ │ ├── values-kab │ │ │ │ └── strings.xml │ │ │ ├── values-ar │ │ │ │ └── strings.xml │ │ │ ├── values-eu │ │ │ │ └── strings.xml │ │ │ ├── values-be │ │ │ │ └── strings.xml │ │ │ ├── values-ia │ │ │ │ └── strings.xml │ │ │ └── values-bg │ │ │ │ └── strings.xml │ │ ├── ic_launcher-playstore.png │ │ ├── project.properties │ │ └── kotlin │ │ │ └── org │ │ │ └── fossify │ │ │ └── math │ │ │ ├── models │ │ │ ├── ConverterUnitsState.kt │ │ │ └── History.kt │ │ │ ├── helpers │ │ │ ├── Calculator.kt │ │ │ ├── HistoryHelper.kt │ │ │ ├── Constants.kt │ │ │ ├── Config.kt │ │ │ ├── converters │ │ │ │ ├── Base.kt │ │ │ │ ├── TimeConverter.kt │ │ │ │ ├── TemperatureConverter.kt │ │ │ │ ├── AreaConverter.kt │ │ │ │ ├── SpeedConverter.kt │ │ │ │ ├── PressureConverter.kt │ │ │ │ └── MassConverter.kt │ │ │ └── NumberFormatHelper.kt │ │ │ ├── activities │ │ │ ├── SplashActivity.kt │ │ │ ├── SimpleActivity.kt │ │ │ └── UnitConverterPickerActivity.kt │ │ │ ├── receivers │ │ │ └── LocaleChangeReceiver.kt │ │ │ ├── interfaces │ │ │ └── CalculatorDao.kt │ │ │ ├── databases │ │ │ └── CalculatorDatabase.kt │ │ │ ├── dialogs │ │ │ └── HistoryDialog.kt │ │ │ ├── adapters │ │ │ ├── HistoryAdapter.kt │ │ │ └── UnitTypesAdapter.kt │ │ │ └── extensions │ │ │ └── Context.kt │ ├── debug │ │ └── res │ │ │ └── values │ │ │ └── strings.xml │ ├── gplay │ │ └── res │ │ │ └── values │ │ │ └── bools.xml │ └── foss │ │ └── res │ │ └── values │ │ └── bools.xml ├── proguard-rules.pro ├── schemas │ └── org.fossify.math.databases.CalculatorDatabase │ │ └── 1.json └── detekt-baseline.xml ├── fastlane ├── metadata │ └── android │ │ ├── en-US │ │ ├── changelogs │ │ │ ├── 1.txt │ │ │ ├── 2.txt │ │ │ ├── 5.txt │ │ │ ├── 6.txt │ │ │ ├── 4.txt │ │ │ ├── 8.txt │ │ │ ├── 3.txt │ │ │ ├── 9.txt │ │ │ └── 7.txt │ │ ├── title.txt │ │ ├── short_description.txt │ │ ├── images │ │ │ ├── icon.png │ │ │ ├── featureGraphic.png │ │ │ ├── phoneScreenshots │ │ │ │ ├── 1_en-US.png │ │ │ │ ├── 2_en-US.png │ │ │ │ ├── 3_en-US.png │ │ │ │ ├── 4_en-US.png │ │ │ │ └── 5_en-US.png │ │ │ └── tenInchScreenshots │ │ │ │ ├── 1_en-US.png │ │ │ │ ├── 2_en-US.png │ │ │ │ ├── 3_en-US.png │ │ │ │ ├── 4_en-US.png │ │ │ │ └── 5_en-US.png │ │ └── full_description.txt │ │ ├── zh-CN │ │ ├── short_description.txt │ │ └── full_description.txt │ │ ├── zh-HK │ │ ├── short_description.txt │ │ └── full_description.txt │ │ ├── zh-TW │ │ ├── short_description.txt │ │ └── full_description.txt │ │ ├── iw-IL │ │ ├── short_description.txt │ │ └── full_description.txt │ │ ├── bqi │ │ ├── short_description.txt │ │ └── full_description.txt │ │ ├── hi-IN │ │ ├── short_description.txt │ │ └── full_description.txt │ │ ├── ca │ │ ├── short_description.txt │ │ └── full_description.txt │ │ ├── eo │ │ └── short_description.txt │ │ ├── ru-RU │ │ ├── short_description.txt │ │ └── full_description.txt │ │ ├── cs-CZ │ │ ├── short_description.txt │ │ └── full_description.txt │ │ ├── de-DE │ │ ├── short_description.txt │ │ └── full_description.txt │ │ ├── pl-PL │ │ ├── short_description.txt │ │ └── full_description.txt │ │ ├── sv-SE │ │ └── short_description.txt │ │ ├── tr-TR │ │ ├── short_description.txt │ │ └── full_description.txt │ │ ├── uk │ │ ├── short_description.txt │ │ └── full_description.txt │ │ ├── et │ │ ├── short_description.txt │ │ └── full_description.txt │ │ ├── hu-HU │ │ └── short_description.txt │ │ └── fi-FI │ │ └── short_description.txt ├── Appfile ├── Fastfile └── README.md ├── .fossify └── release-marker.txt ├── graphics ├── icon.webp └── foreground.svg ├── Gemfile ├── gradle ├── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties └── libs.versions.toml ├── keystore.properties_sample ├── .github ├── ISSUE_TEMPLATE │ ├── config.yml │ └── feature_request.yml ├── workflows │ ├── pr.yml │ ├── pr-labeler.yml │ ├── no-response.yml │ ├── testing-build.yml │ ├── update-commons.yml │ ├── update-lint-baselines.yml │ ├── validate-fastlane-metadata.yml │ ├── image-minimizer.yml │ ├── prepare-release-pr.yml │ └── release.yml └── dependabot.yml ├── .gitignore ├── settings.gradle.kts ├── .editorconfig ├── gradle.properties ├── CONTRIBUTING.md ├── detekt.yml ├── lint.xml ├── README.md ├── CHANGELOG.md └── gradlew.bat /CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @naveensingh -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | /foss 3 | /gplay 4 | -------------------------------------------------------------------------------- /app/src/main/res/resources.properties: -------------------------------------------------------------------------------- 1 | unqualifiedResLocale=en-US 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/1.txt: -------------------------------------------------------------------------------- 1 | * Initial release 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/title.txt: -------------------------------------------------------------------------------- 1 | Fossify Calculator Beta 2 | -------------------------------------------------------------------------------- /.fossify/release-marker.txt: -------------------------------------------------------------------------------- 1 | # Auto-generated file. DO NOT EDIT. 2 | 1.3.0 3 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/2.txt: -------------------------------------------------------------------------------- 1 | * Added new translations. 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/zh-CN/short_description.txt: -------------------------------------------------------------------------------- 1 | 简约开源的计算器,可快速轻松的计算 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/zh-HK/short_description.txt: -------------------------------------------------------------------------------- 1 | 簡單的開源計算器,可快速輕鬆地進行計算 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/zh-TW/short_description.txt: -------------------------------------------------------------------------------- 1 | 簡單的開源計算器,可快速輕鬆地進行計算 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/5.txt: -------------------------------------------------------------------------------- 1 | Changed: 2 | 3 | • Updated translations 4 | -------------------------------------------------------------------------------- /graphics/icon.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Calculator/HEAD/graphics/icon.webp -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | -keep class com.ezylang.evalex.** { *; } 2 | -dontwarn com.ezylang.evalex.** 3 | -------------------------------------------------------------------------------- /fastlane/metadata/android/iw-IL/short_description.txt: -------------------------------------------------------------------------------- 1 | מחשבון פשוט ובקוד פתוח לחישוב במהירות ובקלות 2 | -------------------------------------------------------------------------------- /app/src/main/res/values-ur/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | 3 | gem "fastlane" 4 | gem "fastlane-plugin-fossify", "~> 1.0" 5 | -------------------------------------------------------------------------------- /app/src/main/res/values-bn-rBD/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /app/src/main/res/values-bn/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /app/src/main/res/values-br/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /app/src/main/res/values-cr/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /app/src/main/res/values-en-rIN/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /app/src/main/res/values-ltg/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /app/src/main/res/values-my/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /app/src/main/res/values-ne/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /app/src/main/res/values-nn/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /app/src/main/res/values-pa/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /app/src/main/res/values-sat/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /app/src/main/res/values-si/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /fastlane/metadata/android/bqi/short_description.txt: -------------------------------------------------------------------------------- 1 | ماشیݩ هساو ساڌه وو بونچک واز سی هساو کردنا زی وو آسووݩ 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/hi-IN/short_description.txt: -------------------------------------------------------------------------------- 1 | तेज़ और आसान गणना के लिए एक सरल एवं ओपन-सोर्स कैलकुलेटर 2 | -------------------------------------------------------------------------------- /app/src/main/res/values-b+es+419/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /app/src/main/res/values-or/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/values-th/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /fastlane/metadata/android/ca/short_description.txt: -------------------------------------------------------------------------------- 1 | Calculadora senzilla i de codi obert per a càlculs ràpids i fàcils 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/6.txt: -------------------------------------------------------------------------------- 1 | Changed: 2 | 3 | • Marked app as beta 4 | • Updated translations 5 | 6 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/short_description.txt: -------------------------------------------------------------------------------- 1 | Simple and open-source calculator for quick and easy calculations 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/eo/short_description.txt: -------------------------------------------------------------------------------- 1 | Simpla kaj malfermitkoda kalkulilo por rapidaj kaj facilaj kalkuloj 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/ru-RU/short_description.txt: -------------------------------------------------------------------------------- 1 | Простой и свободный калькулятор для быстрых и лёгких расчётов 2 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Calculator/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /fastlane/metadata/android/cs-CZ/short_description.txt: -------------------------------------------------------------------------------- 1 | Jednoduchá a open-source kalkulačka pro rychlé a jednoduché výpočty 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/de-DE/short_description.txt: -------------------------------------------------------------------------------- 1 | Einfacher Open-Source-Rechner für schnelle und einfache Berechnungen 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/pl-PL/short_description.txt: -------------------------------------------------------------------------------- 1 | Prosty i otwartoźródłowy kalkulator do szybkich i łatwych obliczeń 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/sv-SE/short_description.txt: -------------------------------------------------------------------------------- 1 | Enkel kalkylator med öppen källkod för snabba och enkla beräkningar 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/tr-TR/short_description.txt: -------------------------------------------------------------------------------- 1 | Hızlı ve kolay hesaplamalar için basit ve açık kaynaklı hesap makinesi 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/uk/short_description.txt: -------------------------------------------------------------------------------- 1 | Простий калькулятор з відкритим кодом для швидких і легких розрахунків 2 | -------------------------------------------------------------------------------- /keystore.properties_sample: -------------------------------------------------------------------------------- 1 | storePassword=123456 2 | keyPassword=abcdef 3 | keyAlias=myAlias 4 | storeFile=../keystore.jks 5 | -------------------------------------------------------------------------------- /app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Calculator/HEAD/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /fastlane/metadata/android/et/short_description.txt: -------------------------------------------------------------------------------- 1 | Lihtne ja avatud lähtekoodil põhinev kalkulaator kiireks ja vaevata arvutuseks 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/hu-HU/short_description.txt: -------------------------------------------------------------------------------- 1 | Egyszerű és nyílt forráskódú számológép a gyors és egyszerű számításokhoz 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/4.txt: -------------------------------------------------------------------------------- 1 | * Changed package name, re-installation is required 2 | * Added more translations 3 | -------------------------------------------------------------------------------- /fastlane/metadata/android/fi-FI/short_description.txt: -------------------------------------------------------------------------------- 1 | Yksinkertainen ja avoimen lähdekoodin laskin nopeisiin ja helppoihin laskelmiin 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/8.txt: -------------------------------------------------------------------------------- 1 | Changed: 2 | 3 | • Compatibility updates for Android 15 & 16 4 | • Updated translations 5 | 6 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Calculator/HEAD/fastlane/metadata/android/en-US/images/icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/img_widget_preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Calculator/HEAD/app/src/main/res/drawable-nodpi/img_widget_preview.png -------------------------------------------------------------------------------- /app/src/main/res/values/bools.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | true 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/values/integers.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 26 4 | 5 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/featureGraphic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Calculator/HEAD/fastlane/metadata/android/en-US/images/featureGraphic.png -------------------------------------------------------------------------------- /app/src/debug/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Calculator_debug 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/values-land/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 22sp 3 | 2dp 4 | 5 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/1_en-US.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Calculator/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/1_en-US.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/2_en-US.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Calculator/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/2_en-US.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/3_en-US.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Calculator/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/3_en-US.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/4_en-US.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Calculator/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/4_en-US.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/5_en-US.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Calculator/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/5_en-US.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/tenInchScreenshots/1_en-US.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Calculator/HEAD/fastlane/metadata/android/en-US/images/tenInchScreenshots/1_en-US.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/tenInchScreenshots/2_en-US.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Calculator/HEAD/fastlane/metadata/android/en-US/images/tenInchScreenshots/2_en-US.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/tenInchScreenshots/3_en-US.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Calculator/HEAD/fastlane/metadata/android/en-US/images/tenInchScreenshots/3_en-US.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/tenInchScreenshots/4_en-US.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Calculator/HEAD/fastlane/metadata/android/en-US/images/tenInchScreenshots/4_en-US.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/tenInchScreenshots/5_en-US.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FossifyOrg/Calculator/HEAD/fastlane/metadata/android/en-US/images/tenInchScreenshots/5_en-US.png -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: Questions 4 | url: https://github.com/orgs/FossifyOrg/discussions 5 | about: Please ask and answer questions here. -------------------------------------------------------------------------------- /.github/workflows/pr.yml: -------------------------------------------------------------------------------- 1 | name: PR 2 | 3 | on: 4 | pull_request: 5 | branches: [ main ] 6 | 7 | jobs: 8 | call-pr-workflow: 9 | uses: FossifyOrg/.github/.github/workflows/pr.yml@main 10 | -------------------------------------------------------------------------------- /fastlane/Appfile: -------------------------------------------------------------------------------- 1 | json_key_file("fastlane/fastlane.json") # Path to the json secret file - Follow https://docs.fastlane.tools/actions/supply/#setup to get one 2 | package_name("org.fossify.math") # e.g. com.krausefx.app 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | *.aab 3 | .gradle 4 | /local.properties 5 | /.idea/ 6 | .DS_Store 7 | /build 8 | /captures 9 | keystore.jks 10 | keystore.properties 11 | fastlane/fastlane.json 12 | fastlane/report.xml 13 | .kotlin/ 14 | -------------------------------------------------------------------------------- /app/src/main/project.properties: -------------------------------------------------------------------------------- 1 | android.library.reference.1=../../build/intermediates/exploded-aar/com.android.support/support-v4/23.3.0 2 | android.library.reference.2=../../build/intermediates/exploded-aar/com.android.support/appcompat-v7/23.3.0 3 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/3.txt: -------------------------------------------------------------------------------- 1 | * Update themed/monochrome app icon 2 | * Bump minimum target Android version to 8 3 | * Replace checkboxes with material switches 4 | * Other minor fixes and improvements 5 | * Added new translations 6 | -------------------------------------------------------------------------------- /app/src/main/res/values-en-rGB/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Calculator 4 | Scientific Calculator 5 | 6 | -------------------------------------------------------------------------------- /.github/workflows/pr-labeler.yml: -------------------------------------------------------------------------------- 1 | name: PR Labeler 2 | 3 | on: 4 | pull_request_target: 5 | types: [opened] 6 | 7 | jobs: 8 | call-pr-labeler-workflow: 9 | uses: FossifyOrg/.github/.github/workflows/pr-labeler.yml@main 10 | secrets: inherit 11 | -------------------------------------------------------------------------------- /app/src/gplay/res/values/bools.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | false 4 | false 5 | true 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/math/models/ConverterUnitsState.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.math.models 2 | 3 | import org.fossify.math.helpers.converters.Converter 4 | 5 | data class ConverterUnitsState( 6 | val topUnit: Converter.Unit, 7 | val bottomUnit: Converter.Unit, 8 | ) 9 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/math/helpers/Calculator.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.math.helpers 2 | 3 | import android.content.Context 4 | 5 | interface Calculator { 6 | fun showNewResult(value: String, context: Context) 7 | 8 | fun showNewFormula(value: String, context: Context) 9 | } 10 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/9.txt: -------------------------------------------------------------------------------- 1 | Added: 2 | 3 | • Energy unit converter 4 | • Pressure unit converter 5 | • Speed unit converter 6 | 7 | Changed: 8 | 9 | • Updated translations 10 | 11 | Fixed: 12 | 13 | • Fixed issue that occurs after doing a percent operation 14 | 15 | -------------------------------------------------------------------------------- /.github/workflows/no-response.yml: -------------------------------------------------------------------------------- 1 | name: No Response 2 | 3 | on: 4 | schedule: 5 | - cron: "0 12 * * *" # Runs daily at noon 6 | workflow_dispatch: 7 | 8 | jobs: 9 | call-no-response-workflow: 10 | uses: FossifyOrg/.github/.github/workflows/no-response.yml@main 11 | secrets: inherit 12 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip 4 | networkTimeout=10000 5 | validateDistributionUrl=true 6 | zipStoreBase=GRADLE_USER_HOME 7 | zipStorePath=wrapper/dists 8 | -------------------------------------------------------------------------------- /app/src/main/res/values-es-rUS/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Calculadora 4 | Calculadora Científica 5 | Convertidor de unidades 6 | 7 | -------------------------------------------------------------------------------- /app/src/foss/res/values/bools.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | true 4 | true 5 | true 6 | true 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_arrow_drop_down_vector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.github/workflows/testing-build.yml: -------------------------------------------------------------------------------- 1 | name: Testing build (on PR) 2 | 3 | on: 4 | pull_request: 5 | branches: [main] 6 | types: [labeled, opened, synchronize, reopened] 7 | 8 | jobs: 9 | call-testing-build-workflow: 10 | uses: FossifyOrg/.github/.github/workflows/testing-build.yml@main 11 | secrets: inherit 12 | -------------------------------------------------------------------------------- /.github/workflows/update-commons.yml: -------------------------------------------------------------------------------- 1 | name: Update Fossify Commons 2 | 3 | on: 4 | repository_dispatch: 5 | types: [update-commons] 6 | workflow_dispatch: 7 | schedule: 8 | - cron: "0 6 * * 0" 9 | 10 | jobs: 11 | update-commons: 12 | uses: FossifyOrg/.github/.github/workflows/update-commons.yml@main 13 | secrets: inherit 14 | -------------------------------------------------------------------------------- /fastlane/Fastfile: -------------------------------------------------------------------------------- 1 | default_platform(:android) 2 | 3 | platform :android do 4 | desc 'Run unit & instrumentation tests' 5 | lane(:test) { test_android } 6 | 7 | desc 'Build & deploy AAB to Google Play (includes metadata)' 8 | lane(:deploy) { deploy_android } 9 | 10 | desc 'Push Play Store metadata' 11 | lane(:metadata) { metadata_android } 12 | end 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_height_vector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.github/workflows/update-lint-baselines.yml: -------------------------------------------------------------------------------- 1 | name: Update lint baselines 2 | 3 | on: 4 | repository_dispatch: 5 | types: [update-lint-baselines] 6 | workflow_dispatch: 7 | schedule: 8 | - cron: "0 0 1 * *" 9 | 10 | jobs: 11 | update-lint-baselines: 12 | uses: FossifyOrg/.github/.github/workflows/update-lint-baselines.yml@main 13 | secrets: inherit 14 | -------------------------------------------------------------------------------- /.github/workflows/validate-fastlane-metadata.yml: -------------------------------------------------------------------------------- 1 | name: Fastlane metadata validation 2 | 3 | on: 4 | push: 5 | branches: [main] 6 | paths: 7 | - "fastlane/**" 8 | pull_request: 9 | branches: [main] 10 | paths: 11 | - "fastlane/**" 12 | 13 | jobs: 14 | validate: 15 | uses: FossifyOrg/.github/.github/workflows/validate-fastlane-metadata.yml@main 16 | -------------------------------------------------------------------------------- /.github/workflows/image-minimizer.yml: -------------------------------------------------------------------------------- 1 | name: Image Minimizer 2 | 3 | on: 4 | issue_comment: 5 | types: [created, edited] 6 | issues: 7 | types: [opened, edited] 8 | pull_request_target: 9 | types: [opened, edited] 10 | 11 | jobs: 12 | call-image-minimizer-workflow: 13 | uses: FossifyOrg/.github/.github/workflows/image-minimizer.yml@main 14 | secrets: inherit 15 | -------------------------------------------------------------------------------- /.github/workflows/prepare-release-pr.yml: -------------------------------------------------------------------------------- 1 | name: Prepare Release PR 2 | 3 | on: 4 | repository_dispatch: 5 | types: [prepare-release] 6 | workflow_dispatch: 7 | push: 8 | branches: [main] 9 | paths: 10 | - "CHANGELOG.md" 11 | 12 | jobs: 13 | call-release-pr: 14 | uses: FossifyOrg/.github/.github/workflows/prepare-release-pr.yml@main 15 | secrets: inherit 16 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_swap_vertical_vector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ripple_circle_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_red.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/math/activities/SplashActivity.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.math.activities 2 | 3 | import android.content.Intent 4 | import org.fossify.commons.activities.BaseSplashActivity 5 | 6 | class SplashActivity : BaseSplashActivity() { 7 | override fun initActivity() { 8 | startActivity(Intent(this, MainActivity::class.java)) 9 | finish() 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_amber.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_blue.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_brown.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_cyan.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_indigo.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_lime.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_orange.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_pink.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_purple.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_teal.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_yellow.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_grey_black.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_box_vector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_blue_grey.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_deep_orange.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_deep_purple.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_light_blue.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_light_green.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/values-sw600dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 320dp 3 | 320dp 4 | @dimen/activity_margin 5 | 6 | 42sp 7 | 30sp 8 | 60sp 9 | 10 | -------------------------------------------------------------------------------- /settings.gradle.kts: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | gradlePluginPortal() 4 | google() 5 | mavenCentral() 6 | } 7 | } 8 | dependencyResolutionManagement { 9 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) 10 | repositories { 11 | google() 12 | mavenCentral() 13 | maven { setUrl("https://jitpack.io") } 14 | mavenLocal() 15 | } 16 | } 17 | include(":app") 18 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_thermostat_vector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/7.txt: -------------------------------------------------------------------------------- 1 | Added: 2 | 3 | • Support for negative temperature conversion 4 | 5 | Changed: 6 | 7 | • Improved calculation precision to prevent rounding errors 8 | • Updated translations 9 | 10 | Removed: 11 | 12 | • Removed comma-decimal toggle to follow system locale 13 | 14 | Fixed: 15 | 16 | • Corrected mislabeled millisecond unit in the converter 17 | • Fixed an issue that prevented typing decimal numbers like 1.01 in the unit converter 18 | 19 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | 3 | on: 4 | push: 5 | branches: [ main ] 6 | paths: 7 | - ".fossify/release-marker.txt" 8 | 9 | jobs: 10 | call-release-workflow: 11 | name: Release 12 | uses: FossifyOrg/.github/.github/workflows/release.yml@main 13 | with: 14 | track: ${{ vars.GPLAY_TRACK || 'beta' }} 15 | rollout: ${{ vars.GPLAY_ROLLOUT || '0.05' }} 16 | validate_only: ${{ vars.GPLAY_DRY_RUN == 'true' }} 17 | secrets: inherit 18 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_energy_vector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/menu/converter_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/values-kr/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 계산기 4 | 공학용 계산기 5 | 에러: 공으로 나눌 할수 없어요 6 | 버튼 탭시 진동 7 | C (Clear) 버튼을 어떻게 사용합니까? 8 | 탭하면 한 번에 한 문자가 제거됩니다. 길게 탭하면 모든 필드가 재설정됩니다. 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_history.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig 2 | # http://EditorConfig.org 3 | 4 | # top-most EditorConfig file 5 | root = true 6 | 7 | # LF end-of-line, insert an empty new line and UTF-8 8 | [*] 9 | end_of_line = lf 10 | insert_final_newline = true 11 | charset = utf-8 12 | indent_style = space 13 | indent_size = 4 14 | continuation_indent_size = 4 15 | max_line_length = 160 16 | 17 | [*.xml] 18 | continuation_indent_size = 4 19 | 20 | [*.kt] 21 | ij_kotlin_name_count_to_use_star_import = 5 22 | ij_kotlin_name_count_to_use_star_import_for_members = 5 23 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/math/receivers/LocaleChangeReceiver.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.math.receivers 2 | 3 | import android.content.BroadcastReceiver 4 | import android.content.Context 5 | import android.content.Intent 6 | import org.fossify.math.extensions.updateWidgets 7 | 8 | class LocaleChangeReceiver : BroadcastReceiver() { 9 | 10 | override fun onReceive(context: Context, intent: Intent) { 11 | if (Intent.ACTION_LOCALE_CHANGED == intent.action) { 12 | context.updateWidgets() 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/res/values-pa-rPK/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | کیلکولیٹر 4 | وگیانک کیلکولیٹر 5 | غلطی آئی اے، صفر نال ونڈ 6 | تریخ 7 | تریخ چ کوئی نہیں اے 8 | ہٹاؤ 9 | تریخ ہٹائی گئی اے 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_drop_vector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_square_foot_vector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx4g -XX:+UseGCOverheadLimit -XX:GCTimeLimit=10 -Dfile.encoding=UTF-8 -XX:+UseParallelGC 2 | kotlin.code.style=official 3 | android.useAndroidX=true 4 | android.enableJetifier=true 5 | org.gradle.parallel=true 6 | org.gradle.caching=true 7 | org.gradle.vfs.watch=true 8 | org.gradle.configureondemand=true 9 | org.gradle.unsafe.configuration-cache=true 10 | org.gradle.unsafe.configuration-cache-problems=warn 11 | android.nonTransitiveRClass=true 12 | 13 | # Versioning 14 | VERSION_NAME=1.3.0 15 | VERSION_CODE=9 16 | APP_ID=org.fossify.math 17 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/math/models/History.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.math.models 2 | 3 | import androidx.room.ColumnInfo 4 | import androidx.room.Entity 5 | import androidx.room.Index 6 | import androidx.room.PrimaryKey 7 | 8 | @Entity(tableName = "history", indices = [(Index(value = ["id"], unique = true))]) 9 | data class History( 10 | @PrimaryKey(autoGenerate = true) var id: Long?, 11 | @ColumnInfo(name = "formula") var formula: String, 12 | @ColumnInfo(name = "result") var result: String, 13 | @ColumnInfo(name = "timestamp") var timestamp: Long 14 | ) 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/colored_ripple.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_scale_vector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/values-ms/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Kalkulator 4 | Kalkulator Saintifik 5 | Amaran: pembahagian dengan sifar 6 | Getar semasa butang ditekan 7 | Bagaimana Butang C (Menghapus) Digunakan? 8 | Tekan sekali untuk menghapuskan satu karakter. Tekan lama untuk mengosongkan tempat yang diisikan. 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/math/interfaces/CalculatorDao.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.math.interfaces 2 | 3 | import androidx.room.Dao 4 | import androidx.room.Insert 5 | import androidx.room.OnConflictStrategy 6 | import androidx.room.Query 7 | import org.fossify.math.models.History 8 | 9 | @Dao 10 | interface CalculatorDao { 11 | @Query("SELECT * FROM history ORDER BY timestamp DESC LIMIT :limit") 12 | fun getHistory(limit: Int = 20): List 13 | 14 | @Insert(onConflict = OnConflictStrategy.REPLACE) 15 | fun insertOrUpdate(history: History): Long 16 | 17 | @Query("DELETE FROM history") 18 | fun deleteHistory() 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 250dp 3 | 250dp 4 | 180dp 5 | 180dp 6 | @dimen/medium_margin 7 | 8 | 34sp 9 | 20sp 10 | 40sp 11 | 12 | 120dp 13 | 40dp 14 | 64dp 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/values-ta/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | கால்குலேட்டர் 4 | அறிவியல் கால்குலேட்டர் 5 | பிழை: பூஜ்ஜியத்தால் வகுத்தல் 6 | வரலாறு 7 | வரலாறு காலியாக உள்ளது 8 | சி (தெளிவு) பொத்தான் எப்படி வேலை செய்கிறது\? 9 | அதைத் தட்டினால் ஒரு நேரத்தில் ஒரு எழுத்து நீக்கப்படும். நீண்ட நேரம் அழுத்தினால், எல்லாப் புலங்களையும் ஒரே நேரத்தில் மீட்டமைக்கும். 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/values-az/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Kalkulyator 4 | Səhv: sıfıra bölünmə 5 | Düyməyə basdıqda titrə 6 | C (Sil) düyməsi necə işləyir? 7 | Tək toxunur 1 rəqəmi siləcək. Basılı saxlamaq isə tamamilə rəqəmləri sıfırlayacaq. 8 | Elmi Kalkulyator 9 | Ölçü çevirici 10 | Ölçüləri dəyiş 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/values-is/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Vísindareiknivél 4 | Ferill 5 | Ferillinn er tómur 6 | Hreinsa 7 | Ferill hreinsaður 8 | Titra þegar pikkað er á takka 9 | Hvernig virkar C (Hreinsa) hnappurinn\? 10 | Með því að pikka á hann verður einn stafur fjarlægður í einu. Haltu inni til þess að endurstilla alla reiti í einu. 11 | 12 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | ### Reporting 2 | Before you report something, read the reporting rules [here](https://github.com/FossifyOrg/General-Discussion#how-do-i-suggest-an-improvement-ask-a-question-or-report-an-issue) please. 3 | 4 | ### Contributing as a developer 5 | Some instructions about code style and everything that has to be done to increase the chance of your code getting accepted can be found at the [General Discussion](https://github.com/FossifyOrg/General-Discussion#contribution-rules-for-developers) section. 6 | 7 | ### Contributing as a non developer 8 | In case you just want to for example improve a translation, you can find the way of doing it [here](https://github.com/FossifyOrg/General-Discussion#how-can-i-suggest-an-edit-to-a-file). 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_speed_vector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/xml/widget_info.xml: -------------------------------------------------------------------------------- 1 | 2 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/values-fil/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Error: paghahati sa zero 4 | Nakaraan 5 | Walang nakaraan 6 | Linisin 7 | Nalinis na ang nakaraan 8 | Mag-vibrate sa pagpindot 9 | Paano gumagana ang C (Clear) button\? 10 | Matatanggal ng isang karakter kapag pinindot ito nang isang beses. Ire-reset naman ang lahat ng mga field kapag mahabang pinindot ito. 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/values-te/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | గనన యంత్రము 4 | శాస్త్రీయ గనన యంత్రము 5 | లోపం: సున్నాతో భాగించటం 6 | చరిత్ర 7 | చరిత్ర శూన్యం 8 | క్లియర్ 9 | చరిత్ర క్లియర్ చేయబడింది 10 | C (క్లియర్) బటన్ ఎలా పని చేస్తుంది\? 11 | దానిపై నొక్కడం ద్వారా ఒక్కో అక్షరం తీసివేయబడుతుంది. ఎక్కువసేపు నొక్కితే, అన్ని ఫీల్డ్‌లు ఒకేసారి రీసెట్ చేయబడతాయి. 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/values-ckb/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | ژمێرەر 4 | ژمێرەری زانستی 5 | هەڵە ڕوویدا: سفر دابەش نابێ بەسەر هیچدا 6 | مێژوو 7 | مێژوو بەتاڵە 8 | سڕینەوە 9 | مێژوو خاوێنکرایەوە 10 | لەرزین لەکاتی دەستنان بە هێماکان 11 | دەستدان لێی یەک ژمارە دەسڕێتەوە یەکجار، زیاتر دەسڕاگرتن خانەکە سفر دەکاتەوە. 12 | دوگمەی C (سڕینەوە) چۆن کارەکات؟ 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/values-kn/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | ಕ್ಯಾಲ್ಕುಲೇಟರ್ 4 | ವೈಜ್ಞಾನಿಕ ಕ್ಯಾಲ್ಕುಲೇಟರ್ 5 | ದೋಷ : ಶೂನ್ಯದಿಂದ ವಿಭಜನೆ 6 | ಇತಿಹಾಸ 7 | ಇತಿಹಾಸ ಖಾಲಿಯಾಗಿದೆ 8 | ಸ್ಪಷ್ಟ 9 | ಇತಿಹಾಸವನ್ನು ತೆರವುಗೊಳಿಸಲಾಗಿದೆ 10 | ಸಿ (ತೆರವುಗೊಳಿಸಿ) ಬಟನ್ ಹೇಗೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ\? 11 | ಅದರ ಮೇಲೆ ಟ್ಯಾಪ್ ಮಾಡುವುದರಿಂದ ಒಂದು ಸಮಯದಲ್ಲಿ ಒಂದು ಅಕ್ಷರವನ್ನು ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ. ದೀರ್ಘವಾಗಿ ಒತ್ತಿದರೆ ಎಲ್ಲಾ ಕ್ಷೇತ್ರಗಳನ್ನು ಒಂದೇ ಬಾರಿಗೆ ಮರುಹೊಂದಿಸುತ್ತದೆ. 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/values-cy/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Cyfrifiannell 4 | Cyfrifiannell Gwyddonol 5 | Gwall: rhannu â sero 6 | Hanes 7 | Mae\'r hanes yn wag 8 | Clirio 9 | Mae\'r hanes wedi cael ei glirio 10 | Dirgrynu wrth wasgu botymau 11 | Sut mae\'r botwm C (clirio) yn gweithio? 12 | Mae ei dapio yn tynnu un rhif ar y tro. Mae ei dal yn ailosod pob maes gyda\'i gilydd ar unwaith. 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/values-gl/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Calculadora 4 | Calculadora Científica 5 | Erro: división por cero 6 | Rexistro 7 | O rexistro está baleiro 8 | Limpar 9 | Borrouse o historial 10 | Vibrar ao premer nun botón 11 | Como funciona o botón C (Borrar)? 12 | O premer, eliminarase un carácter á vez. O premer de forma continua, restableceranse todos os campos á vez. 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/values-mk/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Калкулатор 4 | Научен калкулатор 5 | Грешка: поделба по нула 6 | Историја 7 | Историјата е празна 8 | ясно 9 | Историјата е исчистена 10 | Вибрирајте на копчето притиснете 11 | Како функционира копчето C (Clear) \? 12 | Прислушкувањето на него ќе отстрани еден лик во исто време. Долгото притискање ќе ги ресетира сите полиња одеднаш. 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/values-lt/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Skaičiuotuvas 4 | Mokslinis skaičiuotuvas 5 | Klaida: dalyba iš nulio 6 | Istorija 7 | Istorija yra tuščia 8 | Išvalyti 9 | Istorija išvalyta 10 | Vibruoti, kai paspaudžiami mygtukai 11 | Kaip veikia C (Išvalymo) mygtukas\? 12 | Kiekvieną kartą ant jo bakstelėjus, bus šalinama po vieną simbolį. Ilgai jį palaikius, bus iš karto atstatyti visi laukai. 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/values-zgh/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | ⵜⴰⵙⵎⵙⵙⵉⴹⵏⵜ 4 | ⵜⴰⵙⵎⵙⵙⵉⴹⵏⵜ ⵜⴰⵎⴰⵙⵙⴰⵏⵜ 5 | ⵜⴰⵣⴳⵍⵜ: ⴰⴱⵟⵟⵓ ⵅⴼ ⵓⵎⵢⴰ 6 | ⴰⵎⵣⵔⵓⵢ 7 | ⴰⵎⵣⵔⵓⵢ ⵢⵓⵔⴰ 8 | ⴽⴽⵙ 9 | ⵉⵜⵜⵡⴰⴽⴽⵙ ⵓⵎⵣⵔⵓⵢ 10 | ⴰⵔⵎⵉⵎⵎⵉ ⴳ ⵡⴰⴱⴱⴰⵥ ⵅⴼ ⵜⴳⵎⵎⵓⵜⵉⵏ 11 | ⵎⴰⵎⴽ ⵜⵙⵡⵓⵔⵓⵢ ⵜⴳⵎⵎⵓⵜ C (ⴽⴽⵙ)\? 12 | ⴰⴱⴱⴰⵥ ⵅⴼ ⵓⵢⵏⵏⴰ ⴰⴷ ⵉⴽⴽⵙ ⵢⴰⵏ ⵓⵙⴽⴽⵉⵍ ⴳ ⵢⴰⵏ ⵓⵣⵎⵣ. ⵎⵛ ⵉⵍⵍⴰ ⵡⴰⴱⴱⴰⵥ ⴰⵙⵓⵍⴰⵏ ⵔⴰⴷ ⵜⵜⵓⵙⵏⴼⵍⵏ ⵎⴰⵕⵕⴰ ⵉⴳⵔⴰⵏ ⴳ ⵢⴰⵏ ⵓⵣⵎⵣ. 13 | ⴰⵙⵏⴼⴰⵍ ⵏ ⵉⵙⵖⴰⵍⵏ 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/values-ml/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | കാൽക്കുലേറ്റർ 4 | ശാസ്ത്രീയ കാൽക്കുലേറ്റർ 5 | പിശക്: 0 കൊണ്ട് ഹരിക്കാനാവില്ല 6 | ഹിസ്റ്ററി 7 | ഹിസ്റ്ററിയിൽ ഒന്നുമില്ല 8 | ക്ലിയർ ചെയുക 9 | ഹിസ്റ്ററി മായ്ച്ചു കളഞ്ഞു 10 | ബട്ടൺ അമർത്തുമ്പോൾ വൈബ്രേറ്റ് ചെയ്യുക 11 | C(ക്ലിയർ ) ബട്ടൺ പ്രവർത്തിക്കുന്നത് എങ്ങനെ\? 12 | ടാപ്പ് ചെയ്യുമ്പോൾ ഒരു സമയം ഒരു പ്രതീകത്തെ നീക്കംചെയ്യും. ദീർഘനേരം അമർത്തിയാൽ എല്ലാ ഫീൽഡുകളും പുനഃസജ്ജമാക്കും. 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/math/helpers/HistoryHelper.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.math.helpers 2 | 3 | import android.content.Context 4 | import android.os.Handler 5 | import android.os.Looper 6 | import org.fossify.commons.helpers.ensureBackgroundThread 7 | import org.fossify.math.extensions.calculatorDB 8 | import org.fossify.math.models.History 9 | 10 | class HistoryHelper(val context: Context) { 11 | fun getHistory(callback: (calculations: ArrayList) -> Unit) { 12 | ensureBackgroundThread { 13 | val notes = context.calculatorDB.getHistory() as ArrayList 14 | 15 | Handler(Looper.getMainLooper()).post { 16 | callback(notes) 17 | } 18 | } 19 | } 20 | 21 | fun insertOrUpdateHistoryEntry(entry: History) { 22 | ensureBackgroundThread { 23 | context.calculatorDB.insertOrUpdate(entry) 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/res/values-sl/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Kalkulator 4 | Znanstveni kalkulator 5 | Napaka: deljenje z ničlo 6 | Zgodovina 7 | Zgodovina je prazna 8 | Počisti 9 | Zgodovina je bila izbrisana 10 | Vibriraj ob pritisku gumba 11 | Kako deluje gumb C (Clear)\? 12 | Če ga stisnete, odstranite po en lik naenkrat. Z dolgim pritiskom nanj boste odstranili vsa polja naenkrat. 13 | Pretvornik enot 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/layout/widget.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 16 | 17 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /fastlane/metadata/android/zh-CN/full_description.txt: -------------------------------------------------------------------------------- 1 | 隆重推出 Fossify 计算器——您的多功能高效工具,可满足您的所有计算需求。享受时尚、现代的设计和强大的功能,非常适合简单的计算和更复杂的任务。

2 | 📶 离线功能:
3 | Fossify 计算器完全离线运行,无需互联网权限。随时随地使用,体验增强的隐私、安全性和稳定性。

4 | 🌐 多种功能:
5 | 无论您是需要乘除运算,还是计算根式和幂次方,Fossify 计算器都能满足您的需求。它专为日常计算和高级运算设计,成为满足各种数学需求的可靠工具。

6 | 📳 可自定义设置:
7 | 通过自定义设置定制您的体验。您可以开启按键振动反馈,防止您的手机在使用应用时息屏,并根据您的喜好调整界面。

8 | 🔒 隐私和安全:
9 | 您的隐私至关重要。Fossify 计算器不会收集或与第三方共享任何用户信息。放心使用本应用,因为您知道您的数据是安全的。

10 | 📊 操作历史:
11 | 可查看计算历史,方便快速查阅。轻松浏览近期运算,以便回顾或继续之前的工作。

12 | 🎨 个性化体验:
13 | 通过自定义颜色主题,实现计算器个性化设置。调整文本和背景颜色以符合您的风格与偏好,打造视觉美观且易用的界面。

14 | 🌐 开源透明度:
15 | Fossify 计算器完全开源,提供透明度和安全性。访问源代码进行审计,确保工具值得信赖和可靠。

16 | 使用 Fossify 计算器体验更高水平的效率和自定义。立即下载,提升您的计算体验。

17 | 探索更多 Fossify 应用:https://www.fossify.org
18 | 开源代码:https://www.github.com/FossifyOrg
19 | 加入 Reddit 社区:https://www.reddit.com/r/Fossify
20 | 在 Telegram 上联系:https://t.me/Fossify
21 | -------------------------------------------------------------------------------- /fastlane/metadata/android/zh-HK/full_description.txt: -------------------------------------------------------------------------------- 1 | 隆重介紹 Fossify Calculator – 滿足您所有運算需求的多功能高效工具。享受時尚、現代的設計與強大的功能,非常適合簡單的計算和更複雜的任務。

2 | 📶 離線功能:
3 | Fossify Calculator 完全離線運行,無需網絡權限。隨時隨地使用,體驗增強的私隱性、安全性和穩定性。

4 | 🌐 多種功能:
5 | 無論您需要乘法、除法或計算根和冪,Fossify Calculator 都能滿足您的需求。它專為日常計算和更高級的操作而設計,使其成為滿足各種數學需求的可靠工具。

6 | 📳 可自訂設定:
7 | 透過可自訂的設定自訂您的體驗。按下按鈕時切換震動,防止手機在使用應用程式時休眠,並根據您的喜好調整介面。

8 | 🔒 私隱與安全:
9 | 您的私隱至關重要。 Fossify Calculator 不會收集或與第三方分享任何使用者資訊。請放心使用該應用程序,因為您知道您的資料是安全的。

10 | 📊 運算歷史:
11 | 存取計算歷史記錄以供快速參考。輕鬆瀏覽最近的操作以查看或繼續您的工作。

12 | 🎨 個人化體驗:
13 | 使用可自訂的顏色個性化您的計算器。調整文字和背景顏色以符合您的風格和偏好,創建具有視覺吸引力且易於使用的介面。

14 | 🌐 開源透明度:
15 | Fossify Calculator 完全開源,提供透明度和安全性。存取原始碼進行審核,確保工具值得信賴。

16 | 使用 Fossify Calculator 體驗新的效率和自訂程度。立即下載並提升您的運算體驗。

17 | 探索更多 Fossify 應用程式:https://www.fossify.org
18 | 開源程式碼:https://www.github.com/FossifyOrg
19 | 加入 Reddit 社群:https://www.reddit.com/r/Fossify
20 | 透過 Telegram 連接:https://t.me/Fossify
21 | -------------------------------------------------------------------------------- /fastlane/metadata/android/zh-TW/full_description.txt: -------------------------------------------------------------------------------- 1 | 隆重介紹 Fossify Calculator – 滿足您所有運算需求的多功能高效工具。享受時尚、現代的設計與強大的功能,非常適合簡單的計算和更複雜的任務。

2 | 📶 離線功能:
3 | Fossify Calculator 完全離線運行,無需網路權限。隨時隨地使用,體驗增強的隱私性、安全性和穩定性。

4 | 🌐 多種功能:
5 | 無論您需要乘法、除法或計算根和冪,Fossify Calculator 都能滿足您的需求。它專為日常計算和更高級的操作而設計,使其成為滿足各種數學需求的可靠工具。

6 | 📳 可自訂設定:
7 | 透過可自訂的設定自訂您的體驗。按下按鈕時切換震動,防止手機在使用應用程式時休眠,並根據您的喜好調整介面。

8 | 🔒 隱私與安全:
9 | 您的隱私至關重要。 Fossify Calculator 不會收集或與第三方分享任何使用者資訊。請放心使用該應用程序,因為您知道您的資料是安全的。

10 | 📊 運算歷史:
11 | 存取計算歷史記錄以供快速參考。輕鬆瀏覽最近的操作以查看或繼續您的工作。

12 | 🎨 個人化體驗:
13 | 使用可自訂的顏色個性化您的計算器。調整文字和背景顏色以符合您的風格和偏好,創建具有視覺吸引力且易於使用的介面。

14 | 🌐 開源透明度:
15 | Fossify Calculator 完全開源,提供透明度和安全性。存取原始碼進行審核,確保工具值得信賴。

16 | 使用 Fossify Calculator 體驗新的效率和自訂程度。立即下載並提升您的運算體驗。

17 | 探索更多 Fossify 應用程式:https://www.fossify.org
18 | 開源程式碼:https://www.github.com/FossifyOrg
19 | 加入 Reddit 社群:https://www.reddit.com/r/Fossify
20 | 透過 Telegram 連接:https://t.me/Fossify
21 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/unit_type_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /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 | 21 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | 3 | registries: 4 | maven-google: 5 | type: maven-repository 6 | url: "https://dl.google.com/dl/android/maven2/" 7 | 8 | maven-central: 9 | type: maven-repository 10 | url: "https://repo.maven.apache.org/maven2" 11 | 12 | jitpack: 13 | type: maven-repository 14 | url: "https://jitpack.io" 15 | 16 | updates: 17 | - package-ecosystem: "bundler" 18 | directory: "/" 19 | schedule: 20 | interval: "weekly" 21 | commit-message: 22 | prefix: "chore" 23 | prefix-development: "chore" 24 | include: "scope" 25 | 26 | - package-ecosystem: "gradle" 27 | directory: "/" 28 | registries: 29 | - maven-central 30 | - maven-google 31 | - jitpack 32 | schedule: 33 | interval: "weekly" 34 | commit-message: 35 | prefix: "chore" 36 | prefix-development: "chore" 37 | include: "scope" 38 | 39 | - package-ecosystem: "github-actions" 40 | directory: "/" 41 | schedule: 42 | interval: "weekly" 43 | commit-message: 44 | prefix: "chore" 45 | prefix-development: "chore" 46 | include: "scope" 47 | -------------------------------------------------------------------------------- /fastlane/README.md: -------------------------------------------------------------------------------- 1 | fastlane documentation 2 | ---- 3 | 4 | # Installation 5 | 6 | Make sure you have the latest version of the Xcode command line tools installed: 7 | 8 | ```sh 9 | xcode-select --install 10 | ``` 11 | 12 | For _fastlane_ installation instructions, see [Installing _fastlane_](https://docs.fastlane.tools/#installing-fastlane) 13 | 14 | # Available Actions 15 | 16 | ## Android 17 | 18 | ### android test 19 | 20 | ```sh 21 | [bundle exec] fastlane android test 22 | ``` 23 | 24 | Run unit & instrumentation tests 25 | 26 | ### android deploy 27 | 28 | ```sh 29 | [bundle exec] fastlane android deploy 30 | ``` 31 | 32 | Build & deploy AAB to Google Play (includes metadata) 33 | 34 | ### android metadata 35 | 36 | ```sh 37 | [bundle exec] fastlane android metadata 38 | ``` 39 | 40 | Push Play Store metadata 41 | 42 | ---- 43 | 44 | This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run. 45 | 46 | More information about _fastlane_ can be found on [fastlane.tools](https://fastlane.tools). 47 | 48 | The documentation of _fastlane_ can be found on [docs.fastlane.tools](https://docs.fastlane.tools). 49 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 11 | 16 | 21 | 26 | 30 | 31 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/math/activities/SimpleActivity.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.math.activities 2 | 3 | import org.fossify.commons.activities.BaseSimpleActivity 4 | import org.fossify.math.R 5 | 6 | open class SimpleActivity : BaseSimpleActivity() { 7 | override fun getAppIconIDs() = arrayListOf( 8 | R.mipmap.ic_launcher_red, 9 | R.mipmap.ic_launcher_pink, 10 | R.mipmap.ic_launcher_purple, 11 | R.mipmap.ic_launcher_deep_purple, 12 | R.mipmap.ic_launcher_indigo, 13 | R.mipmap.ic_launcher_blue, 14 | R.mipmap.ic_launcher_light_blue, 15 | R.mipmap.ic_launcher_cyan, 16 | R.mipmap.ic_launcher_teal, 17 | R.mipmap.ic_launcher, 18 | R.mipmap.ic_launcher_light_green, 19 | R.mipmap.ic_launcher_lime, 20 | R.mipmap.ic_launcher_yellow, 21 | R.mipmap.ic_launcher_amber, 22 | R.mipmap.ic_launcher_orange, 23 | R.mipmap.ic_launcher_deep_orange, 24 | R.mipmap.ic_launcher_brown, 25 | R.mipmap.ic_launcher_blue_grey, 26 | R.mipmap.ic_launcher_grey_black 27 | ) 28 | 29 | override fun getAppLauncherName() = getString(R.string.app_launcher_name) 30 | 31 | override fun getRepositoryName() = "Calculator" 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_pressure_vector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_unit_type.xml: -------------------------------------------------------------------------------- 1 | 2 | 13 | 14 | 23 | 24 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/math/databases/CalculatorDatabase.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.math.databases 2 | 3 | import android.content.Context 4 | import androidx.room.Database 5 | import androidx.room.Room 6 | import androidx.room.RoomDatabase 7 | import org.fossify.math.interfaces.CalculatorDao 8 | import org.fossify.math.models.History 9 | 10 | @Database(entities = [History::class], version = 1) 11 | abstract class CalculatorDatabase : RoomDatabase() { 12 | 13 | abstract fun CalculatorDao(): CalculatorDao 14 | 15 | companion object { 16 | private var db: CalculatorDatabase? = null 17 | 18 | fun getInstance(context: Context): CalculatorDatabase { 19 | if (db == null) { 20 | synchronized(CalculatorDatabase::class) { 21 | if (db == null) { 22 | db = Room.databaseBuilder( 23 | context.applicationContext, 24 | CalculatorDatabase::class.java, 25 | "calculator.db" 26 | ) 27 | .build() 28 | db!!.openHelper.setWriteAheadLoggingEnabled(true) 29 | } 30 | } 31 | } 32 | return db!! 33 | } 34 | 35 | fun destroyInstance() { 36 | db = null 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/src/main/res/values-lv/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Kalkulators 4 | Zinātniskais kalkulators 5 | Kļūda: dalīšana ar nulli 6 | Vēsture 7 | Vēsture ir tukša 8 | Skaidrs 9 | Vēsture ir dzēsta 10 | Vibrēšana pēc pogas nospiešanas 11 | Kā darbojas poga C (Notīrīt)\? 12 | Pieskarieties tai, lai noņemtu vienu rakstzīmi vienlaikus. Ilgstoši nospiežot to, tiks atiestatīti visi lauki vienlaicīgi. 13 | Megavatstunda 14 | Kilovatstunda 15 | Vatstunda 16 | Kilokalorija 17 | Kalorija 18 | Gigadžouls 19 | Megadžouls 20 | Kilodžouls 21 | Džouls 22 | 23 | -------------------------------------------------------------------------------- /detekt.yml: -------------------------------------------------------------------------------- 1 | build: 2 | maxIssues: 0 3 | weights: 4 | complexity: 2 5 | LongParameterList: 2 6 | style: 1 7 | 8 | processors: 9 | active: true 10 | exclude: 11 | - "FunctionCountProcessor" 12 | - "PropertyCountProcessor" 13 | 14 | config: 15 | validation: true 16 | 17 | complexity: 18 | LongParameterList: 19 | active: true 20 | functionThreshold: 10 21 | constructorThreshold: 8 22 | ignoreDefaultParameters: true 23 | ignoreAnnotated: 24 | - "Composable" 25 | LongMethod: 26 | active: true 27 | threshold: 120 28 | ignoreAnnotated: 29 | - "Composable" 30 | - "Preview" 31 | 32 | style: 33 | MagicNumber: 34 | active: true 35 | ignoreAnnotated: ["Composable"] 36 | ignoreEnums: true 37 | ignoreNumbers: ["-1", "0", "1", "2", "42", "1000"] 38 | MaxLineLength: 39 | active: true 40 | maxLineLength: 120 41 | excludePackageStatements: true 42 | excludeImportStatements: true 43 | ReturnCount: 44 | active: true 45 | max: 4 46 | excludeGuardClauses: true 47 | excludes: ["**/test/**", "**/androidTest/**"] 48 | 49 | naming: 50 | FunctionNaming: 51 | active: true 52 | ignoreAnnotated: ["Composable", "Preview"] 53 | functionPattern: "[a-z][A-Za-z0-9]*" 54 | 55 | Compose: # io.nlopez.compose.rules 56 | ComposableParametersOrdering: 57 | active: true 58 | ModifierDefaultValue: 59 | active: true 60 | MissingModifierDefaultValue: 61 | active: true 62 | PublicComposablePreview: 63 | active: true 64 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/math/helpers/Constants.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.math.helpers 2 | 3 | import java.math.MathContext 4 | 5 | const val DIGIT = "digit" 6 | const val EQUALS = "equals" 7 | const val PLUS = "plus" 8 | const val MINUS = "minus" 9 | const val MULTIPLY = "multiply" 10 | const val DIVIDE = "divide" 11 | const val PERCENT = "percent" 12 | const val POWER = "power" 13 | const val ROOT = "root" 14 | const val DECIMAL = "decimal" 15 | const val CLEAR = "clear" 16 | const val RESET = "reset" 17 | 18 | const val NAN = "NaN" 19 | const val ZERO = "zero" 20 | const val ONE = "one" 21 | const val TWO = "two" 22 | const val THREE = "three" 23 | const val FOUR = "four" 24 | const val FIVE = "five" 25 | const val SIX = "six" 26 | const val SEVEN = "seven" 27 | const val EIGHT = "eight" 28 | const val NINE = "nine" 29 | 30 | // shared prefs 31 | const val CONVERTER_UNITS_PREFIX = "converter_last_units" 32 | 33 | // calculator state 34 | const val RES = "res" 35 | const val PREVIOUS_CALCULATION = "previousCalculation" 36 | const val LAST_KEY = "lastKey" 37 | const val LAST_OPERATION = "lastOperation" 38 | const val BASE_VALUE = "baseValue" 39 | const val SECOND_VALUE = "secondValue" 40 | const val INPUT_DISPLAYED_FORMULA = "inputDisplayedFormula" 41 | const val CALCULATOR_STATE = "calculatorState" 42 | 43 | // converter state 44 | const val TOP_UNIT = "top_unit" 45 | const val BOTTOM_UNIT = "bottom_unit" 46 | const val CONVERTER_VALUE = "converter_value" 47 | const val CONVERTER_STATE = "converter_state" 48 | 49 | // big decimal configuration 50 | val MATH_CONTEXT: MathContext? = MathContext.DECIMAL128 51 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/math/helpers/Config.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.math.helpers 2 | 3 | import android.content.Context 4 | import kotlinx.coroutines.flow.Flow 5 | import org.fossify.commons.helpers.BaseConfig 6 | import org.fossify.math.helpers.converters.Converter 7 | import org.fossify.math.models.ConverterUnitsState 8 | 9 | class Config(context: Context) : BaseConfig(context) { 10 | companion object { 11 | fun newInstance(context: Context) = Config(context) 12 | } 13 | 14 | fun getLastConverterUnits(converter: Converter): ConverterUnitsState? { 15 | val storedState = prefs.getString("$CONVERTER_UNITS_PREFIX.${converter.key}", null) 16 | return if (!storedState.isNullOrEmpty()) { 17 | val parts = storedState.split(",").map { part -> 18 | converter.units.first { it.key == part } 19 | } 20 | if (parts.size == 2) { 21 | ConverterUnitsState(parts[0], parts[1]) 22 | } else { 23 | null 24 | } 25 | } else { 26 | null 27 | } 28 | } 29 | 30 | fun putLastConverterUnits( 31 | converter: Converter, 32 | topUnit: Converter.Unit, 33 | bottomUnit: Converter.Unit 34 | ) { 35 | prefs.edit().putString( 36 | "$CONVERTER_UNITS_PREFIX.${converter.key}", 37 | "${topUnit.key},${bottomUnit.key}" 38 | ).apply() 39 | } 40 | 41 | val preventPhoneFromSleepingFlow: Flow = ::preventPhoneFromSleeping.asFlowNonNull() 42 | val vibrateOnButtonPressFlow: Flow = ::vibrateOnButtonPress.asFlowNonNull() 43 | } 44 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/math/dialogs/HistoryDialog.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.math.dialogs 2 | 3 | import androidx.appcompat.app.AlertDialog 4 | import org.fossify.commons.extensions.getAlertDialogBuilder 5 | import org.fossify.commons.extensions.setupDialogStuff 6 | import org.fossify.commons.extensions.toast 7 | import org.fossify.commons.helpers.ensureBackgroundThread 8 | import org.fossify.math.R 9 | import org.fossify.math.activities.SimpleActivity 10 | import org.fossify.math.adapters.HistoryAdapter 11 | import org.fossify.math.databinding.DialogHistoryBinding 12 | import org.fossify.math.extensions.calculatorDB 13 | import org.fossify.math.helpers.CalculatorImpl 14 | import org.fossify.math.models.History 15 | 16 | class HistoryDialog(activity: SimpleActivity, items: List, calculator: CalculatorImpl) { 17 | private var dialog: AlertDialog? = null 18 | 19 | init { 20 | 21 | val view = DialogHistoryBinding.inflate(activity.layoutInflater, null, false) 22 | 23 | activity.getAlertDialogBuilder() 24 | .setPositiveButton(org.fossify.commons.R.string.ok, null) 25 | .setNeutralButton(R.string.clear_history) { _, _ -> 26 | ensureBackgroundThread { 27 | activity.applicationContext.calculatorDB.deleteHistory() 28 | activity.toast(R.string.history_cleared) 29 | } 30 | }.apply { 31 | activity.setupDialogStuff(view.root, this, R.string.history) { alertDialog -> 32 | dialog = alertDialog 33 | } 34 | } 35 | 36 | view.historyList.adapter = HistoryAdapter(activity, items, calculator) { 37 | dialog?.dismiss() 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /app/src/main/res/layout/history_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 26 | 27 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /lint.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 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/math/helpers/converters/Base.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.math.helpers.converters 2 | 3 | import android.content.Context 4 | import org.fossify.math.R 5 | import org.fossify.math.helpers.MATH_CONTEXT 6 | import java.math.BigDecimal 7 | 8 | interface Converter { 9 | companion object { 10 | val ALL = listOf( 11 | LengthConverter, 12 | AreaConverter, 13 | VolumeConverter, 14 | MassConverter, 15 | TemperatureConverter, 16 | TimeConverter, 17 | SpeedConverter, 18 | PressureConverter, 19 | EnergyConverter 20 | ) 21 | } 22 | 23 | val nameResId: Int 24 | val imageResId: Int 25 | val units: List 26 | val defaultTopUnit: Unit 27 | val defaultBottomUnit: Unit 28 | 29 | val key: String 30 | 31 | fun convert(from: ValueWithUnit, to: Unit): ValueWithUnit { 32 | return ValueWithUnit(to.fromBase(from.unit.toBase(from.value)), to) 33 | } 34 | 35 | open class Unit( 36 | val nameResId: Int, 37 | val symbolResId: Int, 38 | val factor: BigDecimal, 39 | val key: String 40 | ) { 41 | open fun toBase(value: BigDecimal): BigDecimal = value.multiply(factor, MATH_CONTEXT) 42 | 43 | open fun fromBase(value: BigDecimal): BigDecimal = value.divide(factor, MATH_CONTEXT) 44 | 45 | fun withValue(value: BigDecimal) = ValueWithUnit(value, this) 46 | 47 | fun getNameWithSymbol(context: Context) = context.getString( 48 | R.string.unit_name_with_symbol_format, 49 | context.getString(nameResId), 50 | context.getString(symbolResId) 51 | ) 52 | } 53 | } 54 | 55 | data class ValueWithUnit(val value: BigDecimal, val unit: T) 56 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 15 | 16 | 23 | 24 | 25 | 26 | 33 | 34 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /fastlane/metadata/android/iw-IL/full_description.txt: -------------------------------------------------------------------------------- 1 | הכירו את Fossify מחשבון - הכלי הרב-תכליתי והיעיל שלך לכל צרכי החישוב שלך. תהנה מעיצוב מסוגנן ומודרני יחד עם פונקציונליות רבת עוצמה, מושלם הן לחישובים פשוטים והן למשימות מורכבות יותר.

2 | 📶 פונקציונליות אופליין:
3 | Fossify מחשבון פועל באופן לא מקוון לחלוטין ללא צורך בהרשאות אינטרנט. השתמש בו בכל זמן ובכל מקום וחווה פרטיות, אבטחה ויציבות משופרים.

4 | 🌐 פונקציות מרובות:
5 | בין אם אתה צריך להכפיל, לחלק או לחשב שורשים וחזקות, מחשבון Fossify סידר אותך. הוא מיועד לחישובים יומיומיים ולפעולות מתקדמות יותר, מה שהופך אותו לכלי אמין למגוון צרכים מתמטיים.

6 | 📳 הגדרות הניתנות להתאמה אישית:
7 | התאם את החוויה שלך עם הגדרות הניתנות להתאמה אישית. החלף תנודות בלחיצת כפתורים, מנע מהטלפון שלך לישון בזמן השימוש באפליקציה והתאם את הממשק לטעמך.

8 | 🔒 פרטיות ואבטחה:
9 | הפרטיות שלך היא מעל הכל. Fossify מחשבון אינו אוסף או משתף מידע משתמש כלשהו עם צדדים שלישיים. 10 | השתמש באפליקציה בראש שקט, בידיעה שהנתונים שלך מאובטחים.

11 | 📊 היסטוריית פעולות:
12 | גש להיסטוריה של החישובים שלך לעיון מהיר. דפדף בקלות בין הפעולות האחרונות כדי לסקור או להמשיך את העבודה שלך.

13 | 🎨 חוויה מותאמת אישית:
14 | התאם אישית את המחשבון שלך עם צבעים הניתנים להתאמה אישית. התאם את צבעי הטקסט והרקע כך שיתאימו לסגנון ולהעדפות שלך, יצירת ממשק מושך ויזואלי וקל לשימוש.

15 | 🌐 שקיפות במקור פתוח:
16 | Fossify מחשבון הוא קוד פתוח לחלוטין, ומציע שקיפות ואבטחה. גש לקוד המקור לביקורות, הבטחת כלי אמין.

17 | חווה רמה חדשה של יעילות והתאמה אישית עם Fossify Calculator. הורד עכשיו והגבר את חוויית החישוב שלך.

18 | חקור עוד אפליקציות Fossify: https://www.fossify.org
19 | קוד בקוד-פתוח: https://www.github.com/FossifyOrg
20 | הצטרף לקהילה ב-Reddit: https://www.reddit.com/r/Fossify
21 | התחבר בטלגרם: https://t.me/Fossify
22 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_unit_converter_picker.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 16 | 17 | 23 | 24 | 25 | 26 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_unit_converter.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 16 | 17 | 23 | 24 | 25 | 26 | 33 | 34 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /app/src/main/res/values-kab/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Tamsiḍent 4 | Sfeḍ 5 | Kilumitr 6 | Mitr 7 | Suntimitr 8 | Milimitr 9 | Mikrumitr 10 | Nanumitr 11 | Angstrom 12 | Parsek 13 | Amazray 14 | Ass 15 | Amalas 16 | Aseggas 17 | Amazray d ilem 18 | Senhez ɣef usiti n tqeffalt 19 | Teɣzi 20 | Amil 21 | Adebbuz 22 | Aseggas afessas 23 | Amilimitr Amkuẓ 24 | Amil amkuẓ 25 | Acr 26 | Ahiktar 27 | Ableɣ 28 | Lmitra ugasas 29 | Adisimitr agasas 30 | Asentimtr Agasas 31 | Aḍar agasas 32 | Aḍar Acr 33 | adebbuz agasas 34 | 35 | -------------------------------------------------------------------------------- /app/schemas/org.fossify.math.databases.CalculatorDatabase/1.json: -------------------------------------------------------------------------------- 1 | { 2 | "formatVersion": 1, 3 | "database": { 4 | "version": 1, 5 | "identityHash": "847fbacc72515e2c4dc9985eefeb45f9", 6 | "entities": [ 7 | { 8 | "tableName": "history", 9 | "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `formula` TEXT NOT NULL, `result` TEXT NOT NULL, `timestamp` INTEGER NOT NULL)", 10 | "fields": [ 11 | { 12 | "fieldPath": "id", 13 | "columnName": "id", 14 | "affinity": "INTEGER", 15 | "notNull": false 16 | }, 17 | { 18 | "fieldPath": "formula", 19 | "columnName": "formula", 20 | "affinity": "TEXT", 21 | "notNull": true 22 | }, 23 | { 24 | "fieldPath": "result", 25 | "columnName": "result", 26 | "affinity": "TEXT", 27 | "notNull": true 28 | }, 29 | { 30 | "fieldPath": "timestamp", 31 | "columnName": "timestamp", 32 | "affinity": "INTEGER", 33 | "notNull": true 34 | } 35 | ], 36 | "primaryKey": { 37 | "autoGenerate": true, 38 | "columnNames": [ 39 | "id" 40 | ] 41 | }, 42 | "indices": [ 43 | { 44 | "name": "index_history_id", 45 | "unique": true, 46 | "columnNames": [ 47 | "id" 48 | ], 49 | "orders": [], 50 | "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_history_id` ON `${TABLE_NAME}` (`id`)" 51 | } 52 | ], 53 | "foreignKeys": [] 54 | } 55 | ], 56 | "views": [], 57 | "setupQueries": [ 58 | "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", 59 | "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '847fbacc72515e2c4dc9985eefeb45f9')" 60 | ] 61 | } 62 | } -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher_monochrome.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/values-ar/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 | متر مربع 25 | هكتار 26 | متر مكعب 27 | أسبوع 28 | السنة 29 | كيف يعمل الزر C (مسح)؟ 30 | النقر على ذلك سوف يزيل حرف واحد في وقت واحد. الضغط لفترة طويلة سوف إعادة تعيين جميع الحقول في وقت واحد. 31 | أنجستروم 32 | מיליגרם 33 | ליטר 34 | أونصة 35 | 36 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/math/adapters/HistoryAdapter.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.math.adapters 2 | 3 | import android.view.View 4 | import android.view.ViewGroup 5 | import androidx.recyclerview.widget.RecyclerView 6 | import org.fossify.commons.extensions.copyToClipboard 7 | import org.fossify.commons.extensions.getProperTextColor 8 | import org.fossify.math.activities.SimpleActivity 9 | import org.fossify.math.databinding.HistoryViewBinding 10 | import org.fossify.math.helpers.CalculatorImpl 11 | import org.fossify.math.models.History 12 | 13 | class HistoryAdapter( 14 | val activity: SimpleActivity, 15 | val items: List, 16 | val calc: CalculatorImpl, 17 | val itemClick: () -> Unit 18 | ) : 19 | RecyclerView.Adapter() { 20 | 21 | private var textColor = activity.getProperTextColor() 22 | 23 | override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder = 24 | ViewHolder(HistoryViewBinding.inflate(activity.layoutInflater, parent, false)) 25 | 26 | 27 | override fun onBindViewHolder(holder: ViewHolder, position: Int) { 28 | val item = items[position] 29 | holder.bindView(item) 30 | } 31 | 32 | override fun getItemCount() = items.size 33 | 34 | inner class ViewHolder(private val binding: HistoryViewBinding) : 35 | RecyclerView.ViewHolder(binding.root) { 36 | fun bindView(item: History): View { 37 | itemView.apply { 38 | binding.itemFormula.text = item.formula 39 | binding.itemResult.text = item.result 40 | binding.itemFormula.setTextColor(textColor) 41 | binding.itemResult.setTextColor(textColor) 42 | 43 | setOnClickListener { 44 | calc.addNumberToFormula(item.result) 45 | itemClick() 46 | } 47 | 48 | setOnLongClickListener { 49 | activity.baseContext.copyToClipboard(item.result) 50 | true 51 | } 52 | } 53 | 54 | return itemView 55 | } 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /fastlane/metadata/android/bqi/full_description.txt: -------------------------------------------------------------------------------- 1 | موعرفی ماشیݩ هساو Fossify - ٱوزار همه کاره وو و کار ٱووڌنی ایسا سی پوی کارا هساو کردنی تووݩ. ز تراهی خیف وو مودرن وا ویژیی یل قودرتمند، ک هم سی هساوا ساڌه وو هم سی کارا پؽچسته تر و درد اخوره، فیس بۊکۊنین.

2 | 📶کارکرد آفلاین:
3 | ماشیݩ هساو Fossify کامل آفلاینه وو بؽ لنگ وابیڌن سی موجوزا اینترنتی کار اکونه. هو ن من هر زمووݩ وو جاگه و کار بگیرین وو ز هریم سیخومی، ٱمنیت وو پایداری پؽش رئڌه فیس کۊنین.

4 | 🌐 چنتا عملکرد:
5 | چ لنگ زرب، تقسیم یا هساو کردن جزر وو توان بۊین، Fossify Calculator لنگیا وو خاسته یل ایسا ن براوره اکونه. ای برنومه سی هساوا رۊزمره وو عملیات پؽش رئڌه تر تراحی وابیڌه وو هو ن و ٱوزاری قابل ائتماڌ سی هر لنگی من ریازی تبدیل اکونه.

6 | 📳 سامووا قابل و سامووݩ:
7 | وا سامووا قابل و سامووݩ، تجروبه خوته سیخومی کوݩ. دک زیڌن ن مجال زیڌن دویمه یل فعال یا قیرفعال کوݩ، ز و خاو رئڌن تیلیفووݩ مجال و کار گرؽڌن برنومه جلاوگری کۊنین وو رابت منتوری ن هر جۊر دلتووݩ اخو سامووݩ کۊنین.

8 | 🔒 هریم سیخومی وو ٱمنیت:
9 | هریم سیخومی ایسا موهم هڌ. Fossify Calculator هیچ دووسمندی منتوری ن وا آڌۊمیل دی کتن یا یک رسۊوی نؽکونه. وا خیال راهت ترین برنومه ن و کار بگیرین وو موتمئن بۊوین ک داده یل ایسا ایمن هڌن.

10 | 📊 ویرگار عملیات:
11 | سی دسرسی زیتر، و ویرگار هساو کردنا خوت دسرسی داشته بۊ. و راهتی عملیات دیندایی ن بپیتین تا کار خوته سیل کۊنی یا ز نۊ وا پؽش بری.

12 | 🎨 تجروبه سیخومی وابیڌه:
13 | ماشیݩ هساو خوته وا رنگا قابل سامووݩ، سیخومی کوݩ. رنگ هؽل وو پس زمینه ن ی جۊر وابیڌه وا سبک وو ترجیها خوت سامووݩ کوݩ وو ی رابت منتوری نشمین وو آسووݩ سی و کار گرؽڌن وورکل کوݩ.

14 | 🌐 شفافیت وا بونچک وازی:
15 | ماشیݩ هساو Fossify کامل بونچک واز هڌ وو شفافیت وو ٱمنیت ن وت اده. سی هساو رسی یل و کود بونچک دسرسی داشته بۊ وو ز ی ٱوزار قابل ائتماڌ و موتمئن اتمینووݩ داشته بۊ.

16 | وا Fossify Calculator سئت نۊیی ز کارایی وو سفارشی کردن ن تجروبه کوݩ. هیم سکو دانلود کوݩ وو تجروبه هساو کردن خوته وا روء بوور.

17 | برنومه یل قلوه ای ن ز Fossify بجۊرین: https://www.fossify.org
18 | کود بونچک واز: https://www.github.com/FossifyOrg
19 | و من ٱنجومن ردیت بیاین: https://www.reddit.com/r/Fossify
20 | منپیز من تلگرام: https://t.me/Fossify
21 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/full_description.txt: -------------------------------------------------------------------------------- 1 | Introducing Fossify Calculator – your versatile and efficient tool for all your calculation needs. Enjoy a stylish, modern design paired with powerful functionality, perfect for both simple calculations and more complex tasks.

2 | 📶 OFFLINE FUNCTIONALITY:
3 | Fossify Calculator operates entirely offline without needing internet permissions. Use it anytime, anywhere, and experience enhanced privacy, security, and stability.

4 | 🌐 MULTIPLE FUNCTIONS:
5 | Whether you need to multiply, divide, or calculate roots and powers, Fossify Calculator has got you covered. It's designed for everyday calculations and more advanced operations, making it a reliable tool for a variety of mathematical needs.

6 | 📳 CUSTOMIZABLE SETTINGS:
7 | Tailor your experience with customizable settings. Toggle vibrations on button presses, prevent your phone from sleeping while using the app, and adjust the interface to your liking.

8 | 🔒 PRIVACY AND SECURITY:
9 | Your privacy is paramount. Fossify Calculator does not collect or share any user information with third parties. Use the app with peace of mind, knowing your data is secure.

10 | 📊 OPERATIONS HISTORY:
11 | Access a history of your calculations for quick reference. Easily browse through recent operations to review or continue your work.

12 | 🎨 PERSONALIZED EXPERIENCE:
13 | Personalize your calculator with customizable colors. Adjust text and background colors to match your style and preferences, creating a visually appealing and easy-to-use interface.

14 | 🌐 OPEN-SOURCE TRANSPARENCY:
15 | Fossify Calculator is fully open-source, offering transparency and security. Access the source code for audits, ensuring a trustworthy and reliable tool.

16 | Experience a new level of efficiency and customization with Fossify Calculator. Download now and elevate your calculation experience.

17 | Explore more Fossify apps: https://www.fossify.org
18 | Open-Source Code: https://www.github.com/FossifyOrg
19 | Join the community on Reddit: https://www.reddit.com/r/Fossify
20 | Connect on Telegram: https://t.me/Fossify
21 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/math/activities/UnitConverterPickerActivity.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.math.activities 2 | 3 | import android.content.Intent 4 | import android.os.Bundle 5 | import android.view.WindowManager 6 | import org.fossify.commons.extensions.viewBinding 7 | import org.fossify.commons.helpers.NavigationIcon 8 | import org.fossify.commons.views.AutoGridLayoutManager 9 | import org.fossify.math.R 10 | import org.fossify.math.adapters.UnitTypesAdapter 11 | import org.fossify.math.databinding.ActivityUnitConverterPickerBinding 12 | import org.fossify.math.extensions.config 13 | import org.fossify.math.helpers.converters.Converter 14 | 15 | class UnitConverterPickerActivity : SimpleActivity() { 16 | private val binding by viewBinding(ActivityUnitConverterPickerBinding::inflate) 17 | 18 | override fun onCreate(savedInstanceState: Bundle?) { 19 | super.onCreate(savedInstanceState) 20 | setContentView(binding.root) 21 | setupEdgeToEdge(padBottomSystem = listOf(binding.unitTypesGrid)) 22 | setupMaterialScrollListener( 23 | binding.unitTypesGrid, 24 | binding.unitConverterPickerAppbar 25 | ) 26 | 27 | binding.unitTypesGrid.layoutManager = 28 | AutoGridLayoutManager(this, resources.getDimensionPixelSize(R.dimen.unit_type_size)) 29 | binding.unitTypesGrid.adapter = UnitTypesAdapter(this, Converter.ALL) { 30 | Intent(this, UnitConverterActivity::class.java).apply { 31 | putExtra(UnitConverterActivity.EXTRA_CONVERTER_ID, it) 32 | startActivity(this) 33 | } 34 | } 35 | 36 | binding.unitConverterPickerToolbar.setTitle(R.string.unit_converter) 37 | } 38 | 39 | override fun onResume() { 40 | super.onResume() 41 | 42 | setupTopAppBar(binding.unitConverterPickerAppbar, NavigationIcon.Arrow) 43 | 44 | if (config.preventPhoneFromSleeping) { 45 | window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) 46 | } 47 | } 48 | 49 | override fun onPause() { 50 | super.onPause() 51 | if (config.preventPhoneFromSleeping) { 52 | window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) 53 | } 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /app/src/main/res/values-eu/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Kalkulagailua 4 | Kalkulagailu zientifikoa 5 | Unitate bihurgailua 6 | Aldatu unitateak 7 | Errorea: zati zero 8 | Historia 9 | Historia hutsik dago 10 | Garbitu 11 | Historia garbitu da 12 | Dardara egin botoia sakatzean 13 | Luzera 14 | Kilometro 15 | Metro 16 | Zentimetro 17 | Milimetro 18 | Mikrometroa 19 | Nanometroa 20 | Angstrom 21 | Milia 22 | Yarda 23 | Oina 24 | Hazbetea 25 | Braza 26 | Itsas milia 27 | Parsec 28 | Argi-urtea 29 | Area 30 | Kilometro karratua 31 | Metro karratua 32 | Zentimetro karratua 33 | Milimetro karratua 34 | Milia karratua 35 | Yarda karratua 36 | Oin karratua 37 | 38 | -------------------------------------------------------------------------------- /fastlane/metadata/android/cs-CZ/full_description.txt: -------------------------------------------------------------------------------- 1 | Představujeme Kalkulačku Fossify – všestranný a efektivní nástroj pro všechny vaše výpočty. Užijte si stylový, moderní design spojený s výkonnou funkcionalitou, ideální pro jednoduché výpočty i složitější úlohy.

2 | 📶 OFFLINE FUNKČNOST:
3 | Kalkulačka Fossify funguje zcela offline bez nutnosti přístupu k internetu. Používejte ji kdykoli a kdekoli a vyzkoušejte zvýšené soukromí, bezpečnost a stabilitu.

4 | 🌐 MNOHO FUNKCÍ:
5 | Ať už potřebujete násobit, dělit nebo počítat odmocniny a mocniny, Kalkulačka Fossify vás nezklame. Je navržena pro běžné výpočty i pokročilejší operace, což z ní činí spolehlivý nástroj pro různé matematické úlohy.

6 | 📳 PŘIZPŮSOBITELNÁ NASTAVENÍ:
7 | Upravte si aplikaci podle sebe díky přizpůsobitelným nastavením. Zapněte nebo vypněte vibrace při stisku tlačítek, zakažte uspání telefonu během používání aplikace a dolaďte rozhraní k obrazu svému.

8 | 🔒 OCHRANA SOUKROMÍ A BEZPEČNOST:
9 | Vaše soukromí je pro nás na prvním místě. Kalkulačka Fossify nesbírá ani nesdílí žádné uživatelské informace s třetími stranami. Používejte aplikaci bez obav, vaše data jsou v bezpečí.

10 | 📊 HISTORIE VÝPOČTŮ:
11 | Získejte přístup k historii svých výpočtů pro rychlou orientaci. Snadno si prohlédněte nedávné operace pro kontrolu nebo pokračování ve své práci.

12 | 🎨 PERSONALIZOVANÝ ZÁŽITEK:
13 | Personalizujte si kalkulačku pomocí přizpůsobitelných barev. Upravte barvy textu a pozadí tak, aby odpovídaly vašemu stylu a preferencím, a vytvořte vizuálně atraktivní a snadno ovladatelné rozhraní.

14 | 🌐 TRANSPARENTNÍ A OPEN-SOURCE:
15 | Kalkulačka Fossify je zcela otevřený projekt, což zajišťuje transparentnost a bezpečnost. Získejte přístup ke zdrojovému kódu pro audit a ujistěte se o jeho důvěryhodnosti a spolehlivosti.

16 | Zažijte novou úroveň efektivity a přizpůsobení s Kalkulačkou Fossify. Stáhněte si ji nyní a pozvedněte své výpočty na vyšší úroveň.

17 | Prozkoumejte další aplikace Fossify: https://www.fossify.org
18 | Otevřený zdrojový kód: https://www.github.com/FossifyOrg
19 | Připojte se ke komunitě na Redditu: https://www.reddit.com/r/Fossify
20 | Připojte se k Telegramu: https://t.me/Fossify
21 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/math/helpers/NumberFormatHelper.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.math.helpers 2 | 3 | import java.math.BigDecimal 4 | import java.text.DecimalFormat 5 | import java.text.DecimalFormatSymbols 6 | 7 | class NumberFormatHelper( 8 | val decimalSeparator: String = getDecimalSeparator(), 9 | val groupingSeparator: String = getGroupingSeparator() 10 | ) { 11 | companion object { 12 | private const val MAX_FRACTION_DIGITS = 15 13 | } 14 | 15 | fun bigDecimalToString(bd: BigDecimal): String { 16 | val symbols = DecimalFormatSymbols.getInstance() 17 | 18 | val formatter = DecimalFormat() 19 | formatter.maximumFractionDigits = MAX_FRACTION_DIGITS 20 | formatter.decimalFormatSymbols = symbols 21 | formatter.isGroupingUsed = true 22 | 23 | val result = formatter.format(bd) 24 | return if (result.contains(decimalSeparator)) { 25 | result.trimEnd('0').trimEnd(decimalSeparator.single()) 26 | } else { 27 | result 28 | } 29 | } 30 | 31 | @Suppress("SwallowedException") 32 | fun addGroupingSeparators(str: String): String { 33 | return try { 34 | bigDecimalToString(removeGroupingSeparator(str).toBigDecimal()) 35 | } catch (_: NumberFormatException) { 36 | // Return original string if it cannot be parsed as a valid number 37 | str 38 | } 39 | } 40 | 41 | fun removeGroupingSeparator(str: String): String { 42 | return str.replace(groupingSeparator, "").replace(decimalSeparator, ".") 43 | } 44 | 45 | fun formatForDisplay(input: String): String { 46 | var formatted = addGroupingSeparators(input) 47 | // allow writing numbers like 0.003 48 | if (input.contains(decimalSeparator)) { 49 | val firstPart = formatted.substringBefore(decimalSeparator) 50 | val lastPart = input.substringAfter(decimalSeparator) 51 | formatted = "$firstPart$decimalSeparator$lastPart" 52 | } 53 | 54 | return formatted 55 | } 56 | } 57 | 58 | fun getDecimalSeparator(): String { 59 | return DecimalFormatSymbols.getInstance().decimalSeparator.toString() 60 | } 61 | 62 | fun getGroupingSeparator(): String { 63 | return DecimalFormatSymbols.getInstance().groupingSeparator.toString() 64 | } 65 | -------------------------------------------------------------------------------- /fastlane/metadata/android/et/full_description.txt: -------------------------------------------------------------------------------- 1 | Tutvustame Fossify kalkulaatorit - sinu mitmekülgset ja tõhusat tööriista kõigi sinu arvutusvajaduste jaoks. Naudi stiilset, kaasaegset kujundust koos võimsa funktsionaalsusega, mis sobib ideaalselt nii lihtsate arvutuste kui ka keerukamate ülesannete jaoks.

2 | 📶 VALLASREŽIIM:
3 | Fossify Calculator töötab täielikult võrguühenduseta, ilma et vajaks internetiõigusi. Kasuta seda igal ajal ja igal pool ning koge täiustatud privaatsust, turvalisust ja stabiilsust.

4 | 🌐 MULTIFUNKTSIOONID:
5 | Kas sul on vaja korrutada, jagada või arvutada juuri ja astendada, Fossify kalkulaatoris on see kõik olemas. Ta sobib ideaalselt nii igapäevasteks arvutusteks kui ka spetsiifilisemateks ülesanneteks ja on usaldusväärne abiline erinevateks matemaatikaülesanneteks.

6 | 📳 KOHANDATAVUS:
7 | Kohanda oma kasutuskogemust seadistustest. Kasuta vibratsiooni nupuvajutuste korral, takista telefoni uinumist rakenduse kasutamise ajal ja kohanda kasutajaliides oma maitse järgi.

8 | 🔒 PRIVAATSUS JA TURVALISUS:
9 | Sinu privaatsus on esmatähtis. Fossify kalkulaator ei kogu ega jaga kasutajate andmeid kolmandate osapooltega. Kasuta rakendust rahulikult, teades, et sinu andmed on kaitstud.

10 | 📊 TEHETE AJALUGU:
11 | Kiireks viitamiseks ja taaskasutuseks on sul mugav juurdepääs oma arvutuste ajaloole. Sirvi hõlpsasti hiljutisi tehteid, et oma tööd üle vaadata või jätkata.

12 | 🎨 ISIKUPÄRANE KASUTAJAKOGEMUS:
13 | Isikupärasta oma kalkulaator kohandatavate värvidega. Säti teksti- ja taustavärvid vastavalt oma stiilile ja eelistustele, luues visuaalselt atraktiivse ja hõlpsasti kasutatava kasutajaliidese.

14 | 🌐 AVATUD LÄHTEKOODIL PÕHINEV LÄBIPAISTVUS:
15 | Fossify kalkulaator on täielikult avatud lähtekoodiga, pakkudes läbipaistvust ja turvalisust. Kui seda vajad, siis sul on auditeerimiseks tegemiseks ligipääs lähtekoodile, tagades sellega usaldusväärse ja ausa töövahendi.

16 | Koge Fossify kalkulaatoriga uut tõhususe ja kohandamise taset. Laadi ta nüüd alla ja paranda oma arvutuskogemust.

17 | Kõik Fossify rakendused: https://www.fossify.org
18 | Avatud lähtekood: https://www.github.com/FossifyOrg
19 | Liitu kogukonnaga Redditis: https://www.reddit.com/r/Fossify
20 | Suhtle Telegramis: https://t.me/Fossify
21 | -------------------------------------------------------------------------------- /fastlane/metadata/android/hi-IN/full_description.txt: -------------------------------------------------------------------------------- 1 | पेश है फ़ॉसिफाई (Fossify) कैलकुलेटर - आपकी सभी गणना आवश्यकताओं के लिए आपका बहुमुखी और कुशल उपकरण। स्टाइलिश, आधुनिक डिज़ाइन का आनंद लें, जो शक्तिशाली कार्यक्षमता के साथ मिलकर सरल गणनाओं और अधिक जटिल कार्यों दोनों के लिए एकदम सही है।

2 | 📶 ऑफ़लाइन कार्यक्षमता:
3 | फ़ॉसिफाई (Fossify) कैलकुलेटर इंटरनेट अनुमतियों की आवश्यकता के बिना पूरी तरह से ऑफ़लाइन संचालित होता है। इसे कभी भी, कहीं भी उपयोग करें, और बेहतर गोपनीयता, सुरक्षा और स्थिरता का अनुभव करें।

4 | 🌐 एकाधिक फ़ंक्शन:
5 | चाहे आपको गुणा करने, विभाजित करने, या जड़ों और शक्तियों की गणना करने की आवश्यकता हो, फ़ॉसिफाई (Fossify) कैलकुलेटर ने आपको कवर कर दिया है। इसे रोज़मर्रा की गणनाओं और अधिक उन्नत संचालनों के लिए डिज़ाइन किया गया है, जो इसे विभिन्न गणितीय आवश्यकताओं के लिए एक विश्वसनीय उपकरण बनाता है।

6 | 📳 अनुकूलन योग्य सेटिंग्स:
7 | अनुकूलन योग्य सेटिंग्स के साथ अपने अनुभव को अनुकूलित करें। बटन दबाने पर कंपन को टॉगल करें, ऐप का उपयोग करते समय अपने फोन को स्लीप मोड में जाने से रोकें और इंटरफ़ेस को अपनी पसंद के अनुसार समायोजित करें।

8 | 🔒 गोपनीयता एवं सुरक्षा:
9 | आपकी निजता सर्वोपरि है। फ़ॉसिफाई (Fossify) कैलकुलेटर किसी भी उपयोगकर्ता की जानकारी तीसरे पक्ष के साथ एकत्र या साझा नहीं करता है। ऐप का उपयोग निश्चिंत होकर करें, यह जानकर कि आपका डेटा सुरक्षित है।

10 | 📊 परिचालन इतिहास:
11 | त्वरित संदर्भ के लिए अपनी गणना के इतिहास तक पहुँचें। अपने काम की समीक्षा करने या उसे जारी रखने के लिए हाल के कार्यों को आसानी से देखें।

12 | 🎨व्यक्तिगत अनुभव:
13 | अपने कैलकुलेटर को अनुकूलन योग्य रंगों के साथ निजीकृत करें। अपनी शैली और प्राथमिकताओं से मेल खाने के लिए टेक्स्ट और पृष्ठभूमि रंगों को समायोजित करें, एक दृश्यमान आकर्षक और उपयोग में आसान इंटरफ़ेस बनाएं।

14 | 🌐ओपन-सोर्स पारदर्शिता:
15 | फ़ॉसिफाई (Fossify) कैलकुलेटर पूरी तरह से खुला-स्रोत है, जो पारदर्शिता और सुरक्षा प्रदान करता है। एक भरोसेमंद और विश्वसनीय टूल सुनिश्चित करते हुए ऑडिट के लिए स्रोत कोड तक पहुंचें।

16 | फ़ॉसिफाई (Fossify) कैलकुलेटर के साथ दक्षता और अनुकूलन के एक नए स्तर का अनुभव करें। अभी डाउनलोड करें और अपने गणना अनुभव को बेहतर बनाएँ।

17 | फ़ॉसिफाई (Fossify) के और ऐप देखें: https://www.fossify.org
18 | फ़ॉसिफाई (Fossify) का ओपन-सोर्स कोड: https://www.github.com/FossifyOrg
19 | Reddit पर समुदाय से जुड़ें: https://www.reddit.com/r/Fossify
20 | Telegram पर कनेक्ट करें: https://t.me/Fossify
21 | -------------------------------------------------------------------------------- /fastlane/metadata/android/ru-RU/full_description.txt: -------------------------------------------------------------------------------- 1 | Представляем калькулятор Fossify — ваш универсальный и эффективный инструмент для всех ваших расчётных задач. Наслаждайтесь стильным, современным дизайном в сочетании с мощным функционалом, идеально подходящим как для простых расчётов, так и для более сложных задач.

2 | 📶 ФУНКЦИОНАЛЬНОСТЬ АВТОНОМНО:
3 | Калькулятор Fossify работает полностью автономно, не требуя разрешений на доступ в Интернет. Используйте его в любое время, в любом месте и наслаждайтесь повышенной приватностью, безопасностью и стабильностью.

4 | 🌐 МНОЖЕСТВО ФУНКЦИЙ:
5 | Вам нужно умножить, разделить, вычислить корень или степень? С калькулятором Fossify это несложно. Он создан для повседневных расчётов и сложных операций, оставаясь надёжным инструментом для любых математических задач.

6 | 📳 ГИБКИЕ НАСТРОЙКИ:
7 | Полная персонализация под вас: вибрация по нажатию, отключение блокировки экрана и гибкая настройка интерфейса. Сделайте приложение идеальным для себя.

8 | 🔒 КОНФИДЕНЦИАЛЬНОСТЬ И БЕЗОПАСНОСТЬ:
9 | Ваша конфиденциальность — наш главный приоритет. Калькулятор Fossify не собирает и не передает данные пользователей третьим сторонам. Используйте приложение со спокойной душой — ваши данные в полной безопасности.

10 | 📊 ИСТОРИЯ ОПЕРАЦИЙ:
11 | Получите доступ к истории ваших вычислений для быстрой справки. Легко просматривайте последние операции, чтобы проверить или продолжить свою работу.

12 | 🎨 ПЕРСОНАЛИЗАЦИЯ:
13 | Настройте калькулятор под себя: измените цвет фона и текста в соответствии со своим стилем. Создайте визуально приятный и удобный именно для вас интерфейс.

14 | 🌐 ПРОЗРАЧНОСТЬ БЛАГОДАРЯ ОТКРЫТОМУ КОДУ:
15 | Fossify Calculator — это приложение с открытым исходным кодом, которое обеспечивает полную прозрачность и безопасность. Исходный код доступен для проверки, что гарантирует его надежность и вызывает доверие.

16 | Испытайте новый уровень эффективности и персонализации с Fossify Calculator. Скачайте приложение прямо сейчас и выведите свои вычисления на новый уровень.

17 | Ознакомьтесь с другими приложениями от Fossify: https://www.fossify.org
18 | Исходный код: https://www.github.com/FossifyOrg
19 | Присоединяйтесь к сообществу на Reddit: https://www.reddit.com/r/Fossify
20 | Подключайтесь в Telegram: https://t.me/Fossify
21 | -------------------------------------------------------------------------------- /fastlane/metadata/android/tr-TR/full_description.txt: -------------------------------------------------------------------------------- 1 | Fossify Hesap Makinesi ile tanışın – sizin tüm hesap işlemlerinizi karşılamak için çok yönlü ve verimli aracınız. Hem basit hesaplamalar hemde daha kompleks işlemler için güçlü özellikler ile şık ve modern tasarımın mükemmel kombinasyonunun tadını çıkarın.

2 | 📶ÇEVRİM DIŞI İŞLEVSELLİK:
3 | Fossify Hesap Makinesi, internet izinlerine gereksinim duymadan tamamen çevrim dışı olarak çalışır. Her zaman, her yerde kullanın ve gelişmiş gizlilik, güvenlik ve stabiliteyi deneyimleyin.

4 | 🌐 ÇOKLU FONKSİYONLAR:
5 | İster çarpmaya, bölmeye veya kök ve kuvvetleri hesaplamaya ihtiyacınız olsun, Fossify Hesap Makinesi sizin yanınızda. Günlük hesaplamalar ve daha gelişmiş işlemler için tasarlanarak çeşitli matematiksel ihtiyaçlara yönelik güvenilir bir araç haline getirilmiştir.

6 | 📳 ÖZELLEŞTİRİLEBİLİR AYARLAR:
7 | Özelleştirilebilir ayarlarla deneyiminizi zenginleştirin. Tuş basımlarında titremeyi açın, uygulamayı kullanırken telefonunuzun uykuya geçmesinin önüne geçin ve arayüzü kendinize göre şekillendirin.

8 | 🔒 GİZLİLİK VE GÜVENLİK:
9 | Gizliliğiniz bizim için çok önemlidir. Fossify Hesap Makinesi, ne bir kullanıcı verisi toplar nede bunları üçüncü taraflara paylaşır. Uygulamayı verinizin güvende olduğunu bilerek gönül rahatlığıyla kullanın.

10 | 📊 İŞLEM GEÇMİŞİ:
11 | Hızlı bir referans için hesap geçmişinize ulaşın. Son operasyonlarınıza kolayca göz atarak çalışmalarınızı gözden geçirin veya çalışmalarınıza devam edin.

12 | 🎨 KİŞİSELLEŞTİRİLMİŞ DENEYİM:
13 | Özelleştirilebilir renklerle hesap makinenizi kişiselleştirin. Şahsi stil ve tercihlerinize göre metin ve arka plan renklerini değiştirerek görsel olarak çekici ve kullanımı kolay bir arayüz oluşturun

14 | 🌐 AÇIK KAYNAK ŞEFFAFLIĞI:
15 | Fossify Hesap Makinesi tamamen açık kaynak olup şeffaflık ve güvenlik sunar. Denetimler için kaynak koduna erişerek güvenilir ve sağlam bir araç olmasını sağlayın.

16 | Fossify Hesap Makinesi ile verimliliğin ve özelleştirmenin yeni boyutunu deneyimleyin. Şimdi indirin ve hesap deneyiminizi bir üst seviyeye çıkarın.

17 | Daha fazla Fossify uygulamaları keşfedin: https://www.fossify.org
18 | Açık kaynak kodu: https://www.github.com/FossifyOrg
19 | Reddit'te topluluğumuza katılın: https://www.reddit.com/r/Fossify
n 20 | Telegram üzerinden bağlanın: https://t.me/Fossify
21 | -------------------------------------------------------------------------------- /fastlane/metadata/android/uk/full_description.txt: -------------------------------------------------------------------------------- 1 | Представляємо Fossify Calculator – ваш універсальний та ефективний інструмент для всіх ваших розрахункових потреб. Насолоджуйтесь стильним, сучасним дизайном у поєднанні з потужною функціональністю, ідеально підходить як для простих розрахунків, так і для складніших завдань.

2 | 📶 ФУНКЦІОНАЛЬНІСТЬ ОФЛАЙН-РЕЖИМУ:
3 | Fossify Calculator працює повністю офлайн без потреби в доступі до Інтернету. Використовуйте його будь-коли та будь-де, забезпечуючи покращену конфіденційність, безпеку та стабільність.

4 | 🌐 КІЛЬКА ФУНКЦІЙ:
5 | Незалежно від того, чи потрібно вам множити, ділити чи обчислювати корені та степені, Fossify Calculator допоможе вам. Він розроблений для щоденних розрахунків та складніших операцій, що робить його надійним інструментом для різноманітних математичних потреб.

6 | 📳 НАЛАШТУВАНІ НАЛАШТУВАННЯ:
7 | Налаштуйте свій досвід за допомогою налаштувань. Увімкніть вібрацію під час натискання кнопок, запобіжіть переходу телефону в режим сну під час використання програми та налаштуйте інтерфейс на свій смак.

8 | 🔒 КОНФІДЕНЦІЙНІСТЬ ТА БЕЗПЕКА:
9 | Ваша конфіденційність є надзвичайно важливою. Fossify Calculator не збирає та не передає жодної інформації про користувачів третім особам. Використовуйте програму зі спокоєм, знаючи, що ваші дані в безпеці.

10 | 📊 ІСТОРІЯ ОПЕРАЦІЙ:
11 | Отримайте доступ до історії ваших розрахунків для швидкого доступу. Легко переглядайте останні операції, щоб переглянути або продовжити свою роботу.

12 | 🎨 ПЕРСОНАЛІЗОВАНИЙ ДОСВІД:
13 | Персоналізуйте свій калькулятор за допомогою налаштовуваних кольорів. Налаштуйте кольори тексту та фону відповідно до вашого стилю та вподобань, створюючи візуально привабливий та простий у використанні інтерфейс.

14 | 🌐 ПРОЗОРІСТЬ ВІДКРИТОГО КОДУ:
15 | Fossify Calculator повністю має відкритий код, що забезпечує прозорість та безпеку. Отримайте доступ до вихідного коду для аудитів, забезпечуючи надійний та надійний інструмент.

16 | Відчуйте новий рівень ефективності та налаштування за допомогою Fossify Calculator. Завантажте зараз та покращте свої обчислення.

17 | Дізнайтеся більше про програми Fossify: https://www.fossify.org
18 | Відкритий вихідний код: https://www.github.com/FossifyOrg
19 | Приєднуйтесь до спільноти на Reddit: https://www.reddit.com/r/Fossify
20 | Підключайтеся в Telegram: https://t.me/Fossify
21 | -------------------------------------------------------------------------------- /fastlane/metadata/android/ca/full_description.txt: -------------------------------------------------------------------------------- 1 | Us presentem la Calculadora Fossify: la vostra eina versàtil i eficient per a totes les vostres necessitats de càlcul. Gaudiu d'un disseny elegant i modern combinat amb una funcionalitat potent, perfecta tant per a càlculs senzills com per a tasques més complexes.

2 | 📶 FUNCIONALITAT SENSE CONNEXIÓ:
3 | La Calculadora Fossify funciona completament fora de línia sense necessitat de permisos d'Internet. Feu-la servir en qualsevol moment i en qualsevol lloc i experimenteu una privadesa, seguretat i estabilitat millorades.

4 | 🌐 MÚLTIPLES FUNCIONS:
5 | Tant si necessiteu multiplicar, dividir o calcular arrels i potències, la Calculadora Fossify ho fa. Està dissenyada per a càlculs diaris i operacions més avançades, cosa que la converteix en una eina fiable per a una varietat de necessitats matemàtiques.

6 | 📳 CONFIGURACIÓ PERSONALITZABLE:
7 | Personalitzeu la vostra experiència amb configuracions personalitzables. Activeu les vibracions en prémer els botons, eviteu que el telèfon entri en repòs mentre feu servir l'aplicació i ajusteu la interfície al vostre gust.

8 | 🔒 PRIVACITAT I SEGURETAT:
9 | La vostra privadesa és primordial. Fossify Calculator no recopila ni comparteix cap informació amb tercers. Feu servir l'aplicació amb tranquil·litat, sabent que les vostres dades estan segures.

10 | 📊 HISTÒRIA D'OPERACIONS:
11 | Accediu a un historial dels vostres càlculs per a una consulta ràpida. Navegueu fàcilment per les operacions recents per revisar o continuar la vostra feina.

12 | 🎨 EXPERIÈNCIA PERSONALITZADA:
13 | Personalitzeu els colors de la vostra calculadora. Ajusteu els colors del text i del fons perquè coincideixin amb el vostre estil i les vostres preferències, creant una interfície visualment atractiva i fàcil d'utilitzar.

14 | 🌐 TRANSPARÈNCIA DE CODI OBERT:
15 | Fossify Calculator és completament de codi obert, oferint transparència i seguretat. Accediu al codi font per a auditories, garantint una eina fiable i de confiança.

16 | Experimenteu un nou nivell d'eficiència i personalització amb Fossify Calculator. Baixeu-la ara i milloreu la vostra experiència de càlcul.

17 | Exploreu més aplicacions de Fossify: https://www.fossify.org
18 | Codi de obert: https://www.github.com/FossifyOrg
19 | Uniu-vos a la comunitat a Reddit: https://www.reddit.com/r/Fossify
20 | Connecteu-vos a Telegram: https://t.me/Fossify
21 | -------------------------------------------------------------------------------- /fastlane/metadata/android/pl-PL/full_description.txt: -------------------------------------------------------------------------------- 1 | Przedstawiamy Fossify Calculator – Twoje wszechstronne i wydajne narzędzie do wszystkich Twoich potrzeb obliczeniowych. Ciesz się stylowym, nowoczesnym wyglądem w połączeniu z potężną funkcjonalnością, idealną zarówno do prostych obliczeń, jak i bardziej złożonych zadań takich jak przeliczanie walut.

2 | 📶 FUNKCJE OFFLINE:
3 | Fossify Calculator działa całkowicie offline, nie wymagając dostępu do Internetu. Używaj go w dowolnym czasie i miejscu i doświadcz większej prywatności, bezpieczeństwa i stabilności.

4 | 🌐 WIELE FUNKCJI:
5 | Niezależnie od tego, czy potrzebujesz pomnożyć, podzielić, obliczyć pierwiastki czy też potęgować, Fossify Calculator pomoże Ci w tym. Został zaprojektowany do codziennych obliczeń i bardziej zaawansowanych operacji, co czyni go niezawodnym narzędziem do różnych potrzeb matematycznych.

6 | 📳 KONFIGUROWALNE USTAWIENIA:
7 | Dostosuj swoje doświadczenie dzięki konfigurowalnym ustawieniom. Przełączaj wibracje przy naciśnięciach przycisków, zapobiegaj przechodzeniu urządzenia w tryb uśpienia podczas korzystania z aplikacji i dostosuj interfejs do własnych upodobań.

8 | 🔒 PRYWATNOŚĆ I BEZPIECZEŃSTWO:
9 | Twoja prywatność jest najważniejsza. Fossify Calculator nie gromadzi ani nie udostępnia żadnych informacji o użytkowniku stronom trzecim. Korzystaj z aplikacji ze spokojem ducha, wiedząc, że Twoje dane są bezpieczne.

10 | 📊 HISTORIA OPERACJI:
11 | Uzyskaj dostęp do historii swoich obliczeń. Z łatwością przeglądaj ostatnie operacje, aby je przejrzeć lub kontynuować pracę.

12 | 🎨 SPERSONALIZOWANE DOŚWIADCZENIE:
13 | Spersonalizuj swój kalkulator dzięki konfigurowalnym kolorom. Dostosuj kolory tekstu i tła do swojego stylu i preferencji, tworząc atrakcyjny wizualnie i łatwy w użyciu interfejs.

14 | 🌐 OTWARTOŹRÓDŁOWA TRANSPARENTNOŚĆ:
15 | Fossify Calculator jest w pełni otwartoźródłowy, oferując przejrzystość i bezpieczeństwo. Uzyskaj możliwość przeglądu kodu źródłowego, co zapewnia zaufane i wiarygodne narzędzie.

16 | Doświadcz nowego poziomu wydajności i personalizacji z Fossify Calculator. Pobierz teraz i przenieś swoje doświadczenie z obliczania na wyższy poziom.

17 | Odkryj więcej aplikacji od Fossify: https://www.fossify.org
18 | Kod źródłowy: https://www.github.com/FossifyOrg
19 | Dołącz do społeczności na Reddicie: https://www.reddit.com/r/Fossify
20 | Połącz się na Telegramie: https://t.me/Fossify
21 | -------------------------------------------------------------------------------- /fastlane/metadata/android/de-DE/full_description.txt: -------------------------------------------------------------------------------- 1 | Wir stellen dir Fossify Calculator vor – Dein vielseitiges und effizientes Werkzeug für alle Rechenaufgaben. Genieße ein elegantes, modernes Design gepaart mit leistungsstarker Funktionalität, perfekt für einfache Berechnungen und komplexere Aufgaben.

2 | 📶 OFFLINE-FUNKTIONALITÄT:
3 | Fossify Calculator arbeitet vollständig offline und benötigt keine Internetverbindung. Du kannst ihn jederzeit und überall verwenden und profitierst von mehr Privatsphäre, Sicherheit und Stabilität.

4 | 🌐 ZAHLREICHE FUNKTIONEN:
5 | Egal, ob du multiplizieren, dividieren oder Wurzeln und Potenzen berechnen musst, Fossify Calculator hat alles, was du brauchst. Er wurde für alltägliche Berechnungen und fortgeschrittene Operationen entwickelt und ist ein zuverlässiges Werkzeug für eine Vielzahl von mathematischen Anforderungen.

6 | 📳 ANPASSBARE EINSTELLUNGEN:
7 | Passe dein Erlebnis mit individuellen Einstellungen an. Schalte die Vibrationsfunktion bei Tastendruck ein, verhindere, dass dein Telefon während dem Verwenden der App in den Ruhemodus wechselt, und passe die Bedienoberfläche nach deinem Geschmack an.

8 | 🔒 DATENSCHUTZ UND SICHERHEIT:
9 | Deine Privatsphäre steht an erster Stelle. Fossify Calculator sammelt keine Nutzungsdaten und gibt sie nicht an Dritte weiter. Nutze die App mit der Gewissheit, dass deine Daten sicher sind.

10 | 📊 BERECHNUNGSVERLAUF:
11 | Greife auf einen Verlauf deiner Berechnungen zu, um schnell nachschauen zu können. Einfaches Durchsuchen der letzten Berechnungen, um deine Arbeit zu überprüfen oder fortzusetzen.

12 | 🎨 PERSONALISIERTES ERLEBNIS:
13 | Gestalte deinen Taschenrechner mit anpassbaren Farben. Passe Text- und Hintergrundfarben an deinen Stil und deine Vorlieben an, um eine optisch ansprechende und bedienfreundliche Oberfläche zu schaffen.

14 | 🌐 OPEN-SOURCE-TRANSPARENZ:
15 | Fossify Calculator ist vollständig quelloffen und bietet Transparenz und Sicherheit. Zugriff auf den Quellcode für Audits, um ein vertrauenswürdiges und zuverlässiges Tool sicherzustellen.

16 | Erlebe mit Fossify Calculator ein neues Maß an Effizienz und Anpassbarkeit. Jetzt herunterladen und dein Rechenerlebnis verbessern.

17 | Entdecke weitere Apps von Fossify: https://www.fossify.org 18 | Open-Source-Code: https://www.github.com/FossifyOrg 19 | Tritt der Community auf Reddit bei: https://www.reddit.com/r/Fossify 20 | Verbinde dich auf Telegram: https://t.me/Fossify 21 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.yml: -------------------------------------------------------------------------------- 1 | name: Feature request 2 | description: Suggest an idea for this project 3 | labels: [ "feature request", "needs triage" ] 4 | body: 5 | - type: markdown 6 | attributes: 7 | value: | 8 | ## Hi there 👋 9 | Thanks for helping us improve Fossify Calculator by suggesting a feature! 10 | Please fill in as much information as possible about your feature request to avoid unnecessary and time-consuming back-and-forth communication. 11 | 12 | - type: checkboxes 13 | id: checklist 14 | attributes: 15 | label: "Checklist" 16 | options: 17 | - label: "I made sure that there are **no existing issues** - [open](https://github.com/FossifyOrg/Calculator/issues) or [closed](https://github.com/FossifyOrg/Calculator/issues?q=is%3Aissue+is%3Aclosed) - to which I could contribute my information." 18 | required: true 19 | - label: "I made sure that there are **no existing discussions** - [open](https://github.com/orgs/FossifyOrg/discussions?discussions_q=is:open+label:calculator) or [closed](https://github.com/orgs/FossifyOrg/discussions?discussions_q=is:closed+label:calculator) - to which I could contribute my information." 20 | required: true 21 | - label: "I have read the FAQs inside the app (Menu -> About -> FAQs) and my problem isn't listed." 22 | required: true 23 | - label: "**I have taken the time to fill in all the required details. I understand that the request will be dismissed otherwise.**" 24 | required: true 25 | - label: "This issue contains only one feature request." 26 | required: true 27 | - label: "I have read and understood the [contribution guidelines](https://github.com/FossifyOrg/Calculator/blob/master/CONTRIBUTING.md)." 28 | required: true 29 | 30 | - type: textarea 31 | id: feature-description 32 | attributes: 33 | label: Feature description 34 | description: | 35 | Explain how you want the app's look or behavior to change to suit your needs. 36 | validations: 37 | required: true 38 | 39 | - type: textarea 40 | id: why-is-the-feature-requested 41 | attributes: 42 | label: Why do you want this feature? 43 | description: | 44 | Describe any problem or limitation you come across while using the app which would be solved by this feature. 45 | validations: 46 | required: true 47 | 48 | - type: textarea 49 | id: additional-information 50 | attributes: 51 | label: Additional information 52 | description: Any other information you'd like to include, for instance sketches, mockups, pictures of rabbits, etc. 53 | -------------------------------------------------------------------------------- /app/detekt-baseline.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CyclomaticComplexMethod:CalculatorImpl.kt$CalculatorImpl$fun handleOperation(operation: String) 6 | CyclomaticComplexMethod:CalculatorImpl.kt$CalculatorImpl$private fun calculateResult() 7 | CyclomaticComplexMethod:MyWidgetProvider.kt$MyWidgetProvider$private fun myAction(action: String, context: Context) 8 | EmptyFunctionBlock:WidgetConfigureActivity.kt$WidgetConfigureActivity.<no name provided>${} 9 | ForEachOnRange:Context.kt$(0 until cnt).map { viewGroup.getChildAt(it) } 10 | MagicNumber:CalculatorImpl.kt$CalculatorImpl$3 11 | MagicNumber:CalculatorImpl.kt$CalculatorImpl$4 12 | MagicNumber:CalculatorImpl.kt$CalculatorImpl$5 13 | MagicNumber:CalculatorImpl.kt$CalculatorImpl$6 14 | MagicNumber:CalculatorImpl.kt$CalculatorImpl$7 15 | MagicNumber:CalculatorImpl.kt$CalculatorImpl$8 16 | MagicNumber:CalculatorImpl.kt$CalculatorImpl$9 17 | MagicNumber:ConverterView.kt$ConverterView$3 18 | MagicNumber:ConverterView.kt$ConverterView$4 19 | MagicNumber:ConverterView.kt$ConverterView$5 20 | MagicNumber:ConverterView.kt$ConverterView$6 21 | MagicNumber:ConverterView.kt$ConverterView$7 22 | MagicNumber:ConverterView.kt$ConverterView$8 23 | MagicNumber:ConverterView.kt$ConverterView$9 24 | MagicNumber:WidgetConfigureActivity.kt$WidgetConfigureActivity$100 25 | MaxLineLength:Context.kt$// we are reusing the same layout in the app and widget, but cannot use MyTextView etc in a widget, so color regular view types like this 26 | MaxLineLength:MyWidgetProvider.kt$MyWidgetProvider$DECIMAL 27 | NestedBlockDepth:CalculatorImpl.kt$CalculatorImpl$fun handleOperation(operation: String) 28 | NestedBlockDepth:ConverterView.kt$ConverterView$fun deleteCharacter() 29 | NestedBlockDepth:ConverterView.kt$ConverterView$private fun updateBottomValue() 30 | TooGenericExceptionCaught:Context.kt$e: Exception 31 | TooManyFunctions:CalculatorImpl.kt$CalculatorImpl 32 | TooManyFunctions:ConverterView.kt$ConverterView : LinearLayout 33 | TooManyFunctions:MainActivity.kt$MainActivity : SimpleActivityCalculator 34 | TooManyFunctions:MyWidgetProvider.kt$MyWidgetProvider : AppWidgetProviderCalculator 35 | UnusedPrivateMember:SettingsScreen.kt$@MyDevices @Composable private fun SettingsScreenPreview( @PreviewParameter(BooleanPreviewParameterProvider::class) showCheckmarksOnSwitches: Boolean ) 36 | 37 | 38 | -------------------------------------------------------------------------------- /app/src/main/res/values-be/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 | Марская міля 25 | Астранамічная адзінка 26 | Парсек 27 | Светлавы год 28 | Квадратны кіламетр 29 | Квадратны метр 30 | Квадратны сантыметр 31 | Квадратны міліметр 32 | Квадратная міля 33 | Квадратны ярд 34 | Квадратны фут 35 | Квадратны дзюйм 36 | Гектар 37 | Кубічны метр 38 | Кубічны дэцыметр 39 | Кубічны сантыметр 40 | Кубічны міліметр 41 | Як працуе кнопка C (Ачыстка)\? 42 | Крананне да яе выдаляе адзін сімвал. Доўгае націсканне на яе ачышчае адразу ўсе палі. 43 | 44 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/math/adapters/UnitTypesAdapter.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.math.adapters 2 | 3 | import android.graphics.drawable.LayerDrawable 4 | import android.graphics.drawable.RippleDrawable 5 | import android.view.View 6 | import android.view.ViewGroup 7 | import androidx.core.content.res.ResourcesCompat 8 | import androidx.recyclerview.widget.RecyclerView 9 | import org.fossify.commons.extensions.applyColorFilter 10 | import org.fossify.commons.extensions.darkenColor 11 | import org.fossify.commons.extensions.getProperBackgroundColor 12 | import org.fossify.commons.extensions.getProperPrimaryColor 13 | import org.fossify.commons.extensions.getProperTextColor 14 | import org.fossify.math.R 15 | import org.fossify.math.activities.SimpleActivity 16 | import org.fossify.math.databinding.ItemUnitTypeBinding 17 | import org.fossify.math.extensions.getStrokeColor 18 | import org.fossify.math.helpers.converters.Converter 19 | 20 | class UnitTypesAdapter( 21 | val activity: SimpleActivity, 22 | val items: List, 23 | val itemClick: (id: Int) -> Unit 24 | ) : 25 | RecyclerView.Adapter() { 26 | override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder = 27 | ViewHolder(ItemUnitTypeBinding.inflate(activity.layoutInflater, parent, false)) 28 | 29 | override fun onBindViewHolder(holder: ViewHolder, position: Int) { 30 | val item = items[position] 31 | holder.bindView(item, position) 32 | } 33 | 34 | override fun getItemCount() = items.size 35 | 36 | inner class ViewHolder(private val binding: ItemUnitTypeBinding) : 37 | RecyclerView.ViewHolder(binding.root) { 38 | fun bindView(item: Converter, id: Int): View { 39 | itemView.apply { 40 | binding.unitImage.setImageResource(item.imageResId) 41 | binding.unitLabel.setText(item.nameResId) 42 | 43 | val rippleBg = ResourcesCompat.getDrawable( 44 | resources, R.drawable.unit_type_background, context.theme 45 | ) as RippleDrawable 46 | val layerDrawable = 47 | rippleBg.findDrawableByLayerId(R.id.background_holder) as LayerDrawable 48 | layerDrawable.findDrawableByLayerId(R.id.background_stroke) 49 | .applyColorFilter(context.getStrokeColor()) 50 | layerDrawable.findDrawableByLayerId(R.id.background_shape) 51 | .applyColorFilter(context.getProperBackgroundColor().darkenColor(2)) 52 | binding.unitBackground.background = rippleBg 53 | 54 | binding.unitLabel.setTextColor(activity.getProperTextColor()) 55 | binding.unitImage.applyColorFilter(activity.getProperPrimaryColor()) 56 | 57 | setOnClickListener { 58 | itemClick(id) 59 | } 60 | } 61 | 62 | return itemView 63 | } 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/math/helpers/converters/TimeConverter.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.math.helpers.converters 2 | 3 | import org.fossify.math.R 4 | import java.math.BigDecimal 5 | 6 | object TimeConverter : Converter { 7 | override val nameResId: Int = R.string.unit_time 8 | override val imageResId: Int = org.fossify.commons.R.drawable.ic_clock_vector 9 | override val key: String = "TimeConverter" 10 | 11 | sealed class Unit(nameResId: Int, symbolResId: Int, factor: BigDecimal, key: String) : 12 | Converter.Unit(nameResId, symbolResId, factor, key) { 13 | companion object { 14 | private val MINUTE = BigDecimal("60") 15 | private val HOUR = MINUTE.multiply(BigDecimal("60")) 16 | private val DAY = HOUR.multiply(BigDecimal("24")) 17 | private val GREGORIAN_YEAR = DAY.multiply(BigDecimal("365.2425")) 18 | } 19 | 20 | data object Hour : Unit( 21 | nameResId = R.string.unit_time_hour, 22 | symbolResId = R.string.unit_time_hour_symbol, 23 | factor = HOUR, 24 | key = "Hour" 25 | ) 26 | 27 | data object Minute : Unit( 28 | nameResId = R.string.unit_time_minute, 29 | symbolResId = R.string.unit_time_minute_symbol, 30 | factor = MINUTE, 31 | key = "Minute" 32 | ) 33 | 34 | data object Second : Unit( 35 | nameResId = R.string.unit_time_second, 36 | symbolResId = R.string.unit_time_second_symbol, 37 | factor = BigDecimal.ONE, 38 | key = "Second" 39 | ) 40 | 41 | data object Millisecond : Unit( 42 | nameResId = R.string.unit_time_millisecond, 43 | symbolResId = R.string.unit_time_millisecond_symbol, 44 | factor = BigDecimal("0.001"), 45 | key = "Millisecond" 46 | ) 47 | 48 | data object Day : Unit( 49 | nameResId = R.string.unit_time_day, 50 | symbolResId = R.string.unit_time_day_symbol, 51 | factor = DAY, 52 | key = "Day" 53 | ) 54 | 55 | data object Week : Unit( 56 | nameResId = R.string.unit_time_week, 57 | symbolResId = R.string.unit_time_week_symbol, 58 | factor = BigDecimal("604800"), 59 | key = "Week" 60 | ) 61 | 62 | data object Year : Unit( 63 | nameResId = R.string.unit_time_year, 64 | symbolResId = R.string.unit_time_year_symbol, 65 | factor = GREGORIAN_YEAR, 66 | key = "Year" 67 | ) 68 | } 69 | 70 | override val units: List = listOf( 71 | Unit.Hour, 72 | Unit.Minute, 73 | Unit.Second, 74 | Unit.Millisecond, 75 | Unit.Day, 76 | Unit.Week, 77 | Unit.Year, 78 | ) 79 | 80 | override val defaultTopUnit: Unit = Unit.Hour 81 | override val defaultBottomUnit: Unit = Unit.Second 82 | } 83 | -------------------------------------------------------------------------------- /app/src/main/kotlin/org/fossify/math/helpers/converters/TemperatureConverter.kt: -------------------------------------------------------------------------------- 1 | package org.fossify.math.helpers.converters 2 | 3 | import org.fossify.math.R 4 | import org.fossify.math.helpers.MATH_CONTEXT 5 | import java.math.BigDecimal 6 | 7 | object TemperatureConverter : Converter { 8 | override val nameResId: Int = R.string.unit_temperature 9 | override val imageResId: Int = R.drawable.ic_thermostat_vector 10 | override val key: String = "TemperatureConverter" 11 | 12 | sealed class Unit(nameResId: Int, symbolResId: Int, factor: BigDecimal, key: String) : 13 | Converter.Unit(nameResId, symbolResId, factor, key) { 14 | 15 | data object Celsius : Unit( 16 | nameResId = R.string.unit_temperature_celsius, 17 | symbolResId = R.string.unit_temperature_celsius_symbol, 18 | factor = BigDecimal.ONE, 19 | key = "Celsius" 20 | ) { 21 | private val KELVIN_OFFSET = BigDecimal("273.15") 22 | 23 | override fun toBase(value: BigDecimal): BigDecimal = 24 | value.add(KELVIN_OFFSET, MATH_CONTEXT) 25 | 26 | override fun fromBase(value: BigDecimal): BigDecimal = 27 | value.subtract(KELVIN_OFFSET, MATH_CONTEXT) 28 | } 29 | 30 | data object Fahrenheit : Unit( 31 | nameResId = R.string.unit_temperature_fahrenheit, 32 | symbolResId = R.string.unit_temperature_fahrenheit_symbol, 33 | factor = BigDecimal("9").divide(BigDecimal("5"), MATH_CONTEXT), 34 | key = "Fahrenheit" 35 | ) { 36 | private val CELSIUS_OFFSET = BigDecimal("32") 37 | 38 | override fun toBase(value: BigDecimal): BigDecimal = 39 | Celsius.toBase( 40 | value.subtract(CELSIUS_OFFSET, MATH_CONTEXT) 41 | .divide(factor, MATH_CONTEXT) 42 | ) 43 | 44 | override fun fromBase(value: BigDecimal): BigDecimal = 45 | Celsius.fromBase(value) 46 | .multiply(factor, MATH_CONTEXT) 47 | .add(CELSIUS_OFFSET, MATH_CONTEXT) 48 | } 49 | 50 | data object Rankine : Unit( 51 | nameResId = R.string.unit_temperature_rankine, 52 | symbolResId = R.string.unit_temperature_rankine_symbol, 53 | factor = BigDecimal("5").divide(BigDecimal("9"), MATH_CONTEXT), 54 | key = "Rankine" 55 | ) 56 | 57 | data object Kelvin : Unit( 58 | nameResId = R.string.unit_temperature_kelvin, 59 | symbolResId = R.string.unit_temperature_kelvin_symbol, 60 | factor = BigDecimal.ONE, 61 | key = "Kelvin" 62 | ) 63 | } 64 | 65 | override val units: List = listOf( 66 | Unit.Celsius, 67 | Unit.Fahrenheit, 68 | Unit.Rankine, 69 | Unit.Kelvin, 70 | ) 71 | 72 | override val defaultTopUnit: Unit = Unit.Celsius 73 | override val defaultBottomUnit: Unit = Unit.Kelvin 74 | } 75 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Fossify Calculator 2 | 3 | Logo 4 | 5 | Get it on Google PlayGet it on F-Droid Get it on IzzyOnDroid 6 | 7 | Introducing Fossify Calculator – your versatile and efficient tool for all your calculation needs. Enjoy a stylish, modern design paired with powerful 8 | functionality, perfect for both simple calculations and more complex tasks. 9 | 10 | **📶 OFFLINE FUNCTIONALITY:** 11 | Fossify Calculator operates entirely offline without needing internet permissions. Use it anytime, anywhere, and experience enhanced privacy, security, and 12 | stability. 13 | 14 | **🌐 MULTIPLE FUNCTIONS:** 15 | Whether you need to multiply, divide, or calculate roots and powers, Fossify Calculator has got you covered. It's perfect for everyday calculations and more 16 | specialized tasks like mortgage calculations. 17 | 18 | **📳 CUSTOMIZABLE SETTINGS:** 19 | Tailor your experience with customizable settings. Toggle vibrations on button presses, prevent your phone from sleeping while using the app, and adjust the 20 | interface to your liking. 21 | 22 | **🔒 PRIVACY AND SECURITY:** 23 | Your privacy is paramount. Fossify Calculator does not collect or share any user information with third parties. Use the app with peace of mind, knowing your 24 | data is secure. 25 | 26 | **📊 OPERATIONS HISTORY:** 27 | Access a history of your calculations for quick reference. Easily browse through recent operations to review or continue your work. 28 | 29 | **🎨 PERSONALIZED EXPERIENCE:** 30 | Personalize your calculator with customizable colors. Adjust text and background colors to match your style and preferences, creating a visually appealing and 31 | easy-to-use interface. 32 | 33 | **🌐 OPEN-SOURCE TRANSPARENCY:** 34 | Fossify Calculator is fully open-source, offering transparency and security. Access the source code for audits, ensuring a trustworthy and reliable tool. 35 | 36 | Experience a new level of efficiency and customization with Fossify Calculator. Download now and elevate your calculation experience. 37 | 38 | ➡️ Explore more Fossify apps: https://www.fossify.org 39 | ➡️ Open-Source Code: https://www.github.com/FossifyOrg 40 | ➡️ Join the community on Reddit: https://www.reddit.com/r/Fossify 41 | ➡️ Connect on Telegram: https://t.me/Fossify 42 | 43 |
44 | App image 45 | App image 46 | App image 47 |
48 | 49 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | All notable changes to this project will be documented in this file. 3 | 4 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), 5 | and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). 6 | 7 | ## [Unreleased] 8 | 9 | ## [1.3.0] - 2025-12-16 10 | ### Added 11 | - Energy unit converter ([#192]) 12 | - Pressure unit converter ([#191]) 13 | - Speed unit converter ([#190]) 14 | 15 | ### Changed 16 | - Updated translations 17 | 18 | ### Fixed 19 | - Fixed issue that occurs after doing a percent operation ([#160]) 20 | 21 | ## [1.2.0] - 2025-10-29 22 | ### Changed 23 | - Compatibility updates for Android 15 & 16 24 | - Updated translations 25 | 26 | ## [1.1.0] - 2025-07-05 27 | ### Added 28 | - Support for negative temperature conversion ([#44]) 29 | 30 | ### Changed 31 | - Improved calculation precision to prevent rounding errors ([#6]) 32 | - Updated translations 33 | 34 | ### Removed 35 | - Removed comma-decimal toggle to follow system locale ([#64]) 36 | 37 | ### Fixed 38 | - Corrected mislabeled millisecond unit in the converter 39 | - Fixed an issue that prevented typing decimal numbers like 1.01 in the unit converter ([#31]) 40 | 41 | ## [1.0.5] - 2025-06-17 42 | ### Changed 43 | - Marked app as beta 44 | - Updated translations 45 | 46 | ## [1.0.4] - 2025-05-31 47 | ### Changed 48 | - Updated translations 49 | 50 | ## [1.0.3] - 2025-03-19 51 | ### Changed 52 | - Changed package name, re-installation is required 53 | - Added more translations 54 | 55 | ## [1.0.2] - 2024-10-20 56 | ### Changed 57 | - Update themed/monochrome app icon 58 | - Bump minimum target Android version to 8 59 | - Replace checkboxes with material switches 60 | - Other minor fixes and improvements 61 | - Added new translations 62 | 63 | ## [1.0.1] - 2024-07-24 64 | ### Changed 65 | - Added new translations. 66 | 67 | ## [1.0.0] - 2024-07-23 68 | ### Added 69 | - Initial release 70 | 71 | [#6]: https://github.com/FossifyOrg/Calculator/issues/6 72 | [#31]: https://github.com/FossifyOrg/Calculator/issues/31 73 | [#44]: https://github.com/FossifyOrg/Calculator/issues/44 74 | [#64]: https://github.com/FossifyOrg/Calculator/issues/64 75 | [#160]: https://github.com/FossifyOrg/Calculator/issues/160 76 | [#190]: https://github.com/FossifyOrg/Calculator/issues/190 77 | [#191]: https://github.com/FossifyOrg/Calculator/issues/191 78 | [#192]: https://github.com/FossifyOrg/Calculator/issues/192 79 | 80 | [Unreleased]: https://github.com/FossifyOrg/Calculator/compare/1.3.0...HEAD 81 | [1.3.0]: https://github.com/FossifyOrg/Calculator/compare/1.2.0...1.3.0 82 | [1.2.0]: https://github.com/FossifyOrg/Calculator/compare/1.1.0...1.2.0 83 | [1.1.0]: https://github.com/FossifyOrg/Calculator/compare/1.0.5...1.1.0 84 | [1.0.5]: https://github.com/FossifyOrg/Calculator/compare/1.0.4...1.0.5 85 | [1.0.4]: https://github.com/FossifyOrg/Calculator/compare/1.0.3...1.0.4 86 | [1.0.3]: https://github.com/FossifyOrg/Calculator/compare/1.0.2...1.0.3 87 | [1.0.2]: https://github.com/FossifyOrg/Calculator/compare/1.0.1...1.0.2 88 | [1.0.1]: https://github.com/FossifyOrg/Calculator/compare/1.0.0...1.0.1 89 | [1.0.0]: https://github.com/FossifyOrg/Calculator/releases/tag/1.0.0 90 | -------------------------------------------------------------------------------- /app/src/main/res/values-ia/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Millia 4 | Pollice 5 | Centimetro quadrate 6 | Pede 7 | Metro cubic 8 | KIlometro 9 | Centimetro cubic 10 | Rader 11 | Kilometro quadrate 12 | Centimetro 13 | Hectar 14 | Metro quadrate 15 | Volumine 16 | Metro 17 | Yard quadrate 18 | Conversor de unitates 19 | Millimetro 20 | Millimetro quadrate 21 | Litro 22 | Decimetro cubic 23 | Longitude 24 | Pede quadrate 25 | Micrometro 26 | Angstrom 27 | Centilitro 28 | Kilogramma 29 | Milligramma 30 | Microgramma 31 | Tonna 32 | Millilitro 33 | Historia es vacue 34 | Uncia 35 | Gramma 36 | Calculator 37 | Yard 38 | Area 39 | Acre 40 | Historia 41 | Nanometro 42 | Fathom 43 | Millia nautic 44 | Unitate astronomic 45 | Parsec 46 | Millia quadrate 47 | Pollice quadrate 48 | Millimetro cubic 49 | Decilitro 50 | Pede cubic 51 | Pollice cubic 52 | Libra 53 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @rem 2 | @rem Copyright 2015 the original author or authors. 3 | @rem 4 | @rem Licensed under the Apache License, Version 2.0 (the "License"); 5 | @rem you may not use this file except in compliance with the License. 6 | @rem You may obtain a copy of the License at 7 | @rem 8 | @rem https://www.apache.org/licenses/LICENSE-2.0 9 | @rem 10 | @rem Unless required by applicable law or agreed to in writing, software 11 | @rem distributed under the License is distributed on an "AS IS" BASIS, 12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | @rem See the License for the specific language governing permissions and 14 | @rem limitations under the License. 15 | @rem 16 | @rem SPDX-License-Identifier: Apache-2.0 17 | @rem 18 | 19 | @if "%DEBUG%"=="" @echo off 20 | @rem ########################################################################## 21 | @rem 22 | @rem Gradle startup script for Windows 23 | @rem 24 | @rem ########################################################################## 25 | 26 | @rem Set local scope for the variables with windows NT shell 27 | if "%OS%"=="Windows_NT" setlocal 28 | 29 | set DIRNAME=%~dp0 30 | if "%DIRNAME%"=="" set DIRNAME=. 31 | @rem This is normally unused 32 | set APP_BASE_NAME=%~n0 33 | set APP_HOME=%DIRNAME% 34 | 35 | @rem Resolve any "." and ".." in APP_HOME to make it shorter. 36 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi 37 | 38 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 39 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" 40 | 41 | @rem Find java.exe 42 | if defined JAVA_HOME goto findJavaFromJavaHome 43 | 44 | set JAVA_EXE=java.exe 45 | %JAVA_EXE% -version >NUL 2>&1 46 | if %ERRORLEVEL% equ 0 goto execute 47 | 48 | echo. 1>&2 49 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 50 | echo. 1>&2 51 | echo Please set the JAVA_HOME variable in your environment to match the 1>&2 52 | echo location of your Java installation. 1>&2 53 | 54 | goto fail 55 | 56 | :findJavaFromJavaHome 57 | set JAVA_HOME=%JAVA_HOME:"=% 58 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 59 | 60 | if exist "%JAVA_EXE%" goto execute 61 | 62 | echo. 1>&2 63 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 64 | echo. 1>&2 65 | echo Please set the JAVA_HOME variable in your environment to match the 1>&2 66 | echo location of your Java installation. 1>&2 67 | 68 | goto fail 69 | 70 | :execute 71 | @rem Setup the command line 72 | 73 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 74 | 75 | 76 | @rem Execute Gradle 77 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* 78 | 79 | :end 80 | @rem End local scope for the variables with windows NT shell 81 | if %ERRORLEVEL% equ 0 goto mainEnd 82 | 83 | :fail 84 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 85 | rem the _cmd.exe /c_ return code! 86 | set EXIT_CODE=%ERRORLEVEL% 87 | if %EXIT_CODE% equ 0 set EXIT_CODE=1 88 | if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% 89 | exit /b %EXIT_CODE% 90 | 91 | :mainEnd 92 | if "%OS%"=="Windows_NT" endlocal 93 | 94 | :omega 95 | -------------------------------------------------------------------------------- /app/src/main/res/layout/widget_config.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 13 | 14 | 23 | 24 | 31 | 32 | 38 | 39 | 48 | 49 | 56 | 57 | 58 | 59 | 65 | 66 |