Skip to content

Obinot v2.1.1

Latest

Choose a tag to compare

@LexicoON LexicoON released this 04 Oct 01:34
aeaaf70

Obinot v2.1.1 — Changelog

Version: 2.1.1 (versionCode 4)


For Everyone

✨ Highlights

  • Website is live. The project now has a landing page at LexicoON.github.io/Obinot — hero, features, screenshots, Binot migration steps, all in one place. Served straight from the repo via GitHub Pages.
  • German is here. The app now ships in English, Spanish, and German, with a new language picker that shows each language in its own script plus a flag (Español 🇦🇷, Deutsch 🇩🇪, English 🇬🇧).
  • The native file picker is now the default. It shows your audio files and your exported .binot / .zip notes in one place, so importing feels the same whether you're on Record or in History.

🆕 New Features

  • Language selector in Onboarding, not just Settings — pick your language before you ever record anything.
  • Storage permission explainer in the picker's .binot tab: a one-time card that tells you why the app needs access and has a "Continue" button that fires the system prompt. Doesn't nag after the first time.

🐛 Bug Fixes

  • Shorter strings across the board. A bunch of EN/ES/DE messages were needlessly long and were getting truncated or wrapping awkwardly — trimmed ~80 entries.
  • Language switching is now data-driven. MainActivity reads from a supportedCodes set instead of a hardcoded when, so adding a language is a one-line change.
  • Existing users get the native picker enabled automatically on first launch after updating — no toggle hunting required.

For Developers

  • AppLanguage enum (ui/components/AppLanguage.kt) with DEVICE / ENGLISH / SPANISH / GERMAN, each carrying a localized display name, a native name, and a flag emoji. displayLabel() collapses duplicates ("English 🇬🇧") and shows both forms when they differ ("Inglés/English 🇬🇧").
  • values-de/strings.xml added (643 lines). locales_config.xml updated to advertise de.
  • Native picker migration: NATIVE_PICKER_MIGRATED_KEY + migrateNativePickerIfNeeded(), called from an app-scoped CoroutineScope in BinotApplication.onCreate so it never blocks UI startup. Idempotent; respects an explicit user opt-out afterwards.
  • BINOT_TAB_PERMISSION_PROMPTED_KEY tracks whether the one-time permission card has been shown.
  • Files: docs/index.html, docs/styles.css, docs/script.js, docs/assets/{icon,cover,features}.png.
  • Version: 2.1.1 / 4.