diff --git a/README.md b/README.md index ce2ed228..fb5c5225 100644 --- a/README.md +++ b/README.md @@ -2,19 +2,33 @@ **Brainwallet** is a free, open-source, self-custodial [Litecoin](https://litecoin.org) wallet for Android. Your seed phrase and keys stay on your device — Brainwallet never has custody of your funds. +### CircleCI status +[![Release](https://img.shields.io/github/v/release/gruntsoftware/android?style=plastic)](https://github.com/gruntsoftware/android/releases) [![CircleCI](https://dl.circleci.com/status-badge/img/gh/gruntsoftware/android/tree/main.svg?style=svg)](https://dl.circleci.com/status-badge/redirect/gh/gruntsoftware/android/tree/main) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) -[![Website](https://img.shields.io/badge/website-brainwallet.co-blue)](https://brainwallet.co) -**CI status** — [main](https://dl.circleci.com/status-badge/redirect/gh/gruntsoftware/android/tree/main) · [develop](https://dl.circleci.com/status-badge/redirect/gh/gruntsoftware/android/tree/develop) +## Play Store +[![Get it on Google Play](images/google-play-badge-en.png)](https://play.google.com/store/apps/details?id=ltd.grunt.brainwallet) -## Download - -- **Play Store**: [ltd.grunt.brainwallet](https://play.google.com/store/apps/details?id=ltd.grunt.brainwallet) -- **iOS**: [gruntsoftware/ios](https://github.com/gruntsoftware/ios) +## Important Links & Download +- **iOS Repo**: [gruntsoftware/ios](https://github.com/gruntsoftware/ios) - **Website**: [brainwallet.co](https://brainwallet.co) - **Support**: [brainwallet.co/support](https://www.brainwallet.co/support) +## Why Brainwallet + +**Standalone, not a client of our servers.** Brainwallet connects directly to the Litecoin peer-to-peer network using [SPV](https://github.com/bitcoin/bips/blob/master/bip-0037.mediawiki) (simplified payment verification) — checking balances and broadcasting transactions doesn't depend on any Brainwallet-run backend. An already-installed copy keeps working even if Brainwallet the company disappeared. + +**Deterministic recovery.** Brainwallet is a [BIP32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki) hierarchical-deterministic wallet — one seed phrase (paper key) recovers your full balance and transaction history on any device, forever. + +**Keys never leave your device.** Private keys are generated and held in the Android Keystore, not in Brainwallet's infrastructure — we never have custody of your funds and no backend path to recover them for you. + +**Built on open standards**, not a proprietary protocol: +- [SPV](https://github.com/bitcoin/bips/blob/master/bip-0037.mediawiki) for fast sync without running a full node +- [BIP32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki) deterministic wallets +- [BIP38](https://github.com/bitcoin/bips/blob/master/bip-0038.mediawiki) import of password-protected paper wallets +- [BIP70](https://github.com/bitcoin/bips/blob/master/bip-0070.mediawiki) payment protocol support + ## Features - Self-custodial Litecoin wallet — your seed phrase never leaves your device @@ -57,8 +71,62 @@ Brainwallet Android is released under the [MIT License](LICENSE). For the full, up-to-date changelog see [GitHub Releases](https://github.com/gruntsoftware/android/releases) and the [compare view](https://github.com/gruntsoftware/android/compare). Highlights from recent versions: -### v4.9.0 +--- + +### **v4.10.6** [PR [#253](https://github.com/gruntsoftware/android/pull/253)] +--- +#### 🐛 Crash Fixes +- **`UnsatisfiedLinkError` on `core-lib` load** — `BRActivity`/`SyncReceiver` loaded the native wallet library via unguarded `System.loadLibrary()` static initializers, crashing every screen on launch if the OS failed to extract the `.so` (a common install/update failure mode on some OEMs). Native lib loading is now centralized in `BrainwalletApp.onCreate()` via [ReLinker](https://github.com/KeepSafe/ReLinker), which falls back to manual extraction from the APK when the system loader fails. +- **Ghost launcher icon crash** — the LibGDX game module's `AndroidLauncher` was accidentally exported with its own `MAIN`/`LAUNCHER` intent-filter, producing a second home-screen icon that crashed with `UnsatisfiedLinkError: libgdx.so not found` when tapped (it bypassed the app's real startup path). Fixed by removing the exported intent-filter. +- **`BreadActivity` NPE fix (#248)** — removed dead bottom-nav/toolbar code left over from an earlier refactor that deleted the view-binding logic but not the code still referencing those views, guaranteeing a `NullPointerException` on every launch. + +#### 🧪 Test Reliability +- Fixed a flaky `BWSender` reentrancy test that relied on `Thread.sleep()` racing real-time against a `StandardTestDispatcher` — replaced with deterministic `CountDownLatch` synchronization. +- Eliminated a flaky `ShopBentoViewModelTest` (#250). +- Removed a stale `modules/bw-gdlib` gitlink that was breaking CI (#249). + +#### 📚 Docs +- Real `SECURITY.md` with an actual vulnerability disclosure process, replacing GitHub's unfilled default template. +- Restructured `README.md` for external visitors/contributors (#251). +**Full Changelog**: https://github.com/gruntsoftware/android/compare/v4.10.4...v4.10.6 + +--- + +### **v4.10.4** [PR [#236](https://github.com/gruntsoftware/android/pull/236)] +--- +A feature-rich release centered on the Game Hub / emoji mini-game experience and an MVI refactor of the main screens: + +- **New screens**: emoji pager/picker (`EmojiPagerScreen`, `PickEmojisScreen`, `YourEmojisScreen`, `HowToSetEmojisScreen`) and Game Hub bento screens (`GameHubBentoScreen`, `GameHubBentoPagerScreen`) +- **MVI refactor**: `MainScreen`, `SettingsScreen`, and `GameHub` all restructured into Event/State/ViewModel patterns (`MainScreenEvent`/`MainScreenState`/`MainViewModel`, `SettingsEvent`/`SettingsState`/`SettingsViewModel`, `GameHubEvent`/`GameHubState`/`GameHubViewModel`) +- **In-app review**: Google Play in-app review integration (`InAppReviewService`) +- Design system, font (`Bolden Van`, `Lilita One`, `Open Sauce One`), and localization updates alongside the above + +**Full Changelog**: https://github.com/gruntsoftware/android/compare/v4.9.3...v4.10.4 + +--- + +### **v4.9.4 & v4.9.3** [PRs [#236](https://github.com/gruntsoftware/android/pull/236), [#222](https://github.com/gruntsoftware/android/pull/222)–[#229](https://github.com/gruntsoftware/android/pull/229)] +--- +- Fixed a crash in the send flow (`sendModelOnEvent`) +- Fixed the LTC/fiat picker layout +- Refactored analytics and reduced sync rate polling frequency (techdebt) +- Switched release tagging from release branches to tags going forward + +**Full Changelog**: https://github.com/gruntsoftware/android/compare/v4.9.1...v4.9.4 + +--- + +### **v4.9.1** [PR [#211](https://github.com/gruntsoftware/android/pull/211)] +--- +- Fixed `BreadActivity.initializeViews` crash +- Added `WalletManager`, made `validateAddress` an instance method +- Expanded Send flow test coverage for better stability + +--- + +### **v4.9.0** [PR [#201](https://github.com/gruntsoftware/android/pull/201)] +--- #### ✨ New Features ##### 📋 Copy Transaction Details to Clipboard @@ -95,8 +163,10 @@ A new `bentoSurface()` modifier in `BentoModifiers.kt` consolidates gradient and **Full Changelog**: https://github.com/gruntsoftware/android/compare/v4.7.2...v4.9.0 -### v4.8.3 +--- +### **v4.8.3** +--- #### ✨ New UI — Favourites & Tutorials Bento Sections **PR [#191](https://github.com/gruntsoftware/android/pull/191)** The main screen now features two new purpose-built bento panels replacing the generic placeholder container. The **Favourites** panel displays a set of coloured circular indicators using the app's design theme colours (affirm, info, warn, error) with full dark/light mode support. The **Tutorials** panel shows a "Coming Soon" placeholder consistent with the broader bento design language. The old `HomeBentoContainer` has been removed. String resources for both sections have been translated across 19 locales including Arabic, Chinese (Traditional & Simplified), French, German, Farsi, Hindi, Indonesian, Italian, Japanese, Korean, Polish, Punjabi, Brazilian Portuguese, Russian, Spanish, Swedish, Turkish, and Ukrainian. @@ -109,7 +179,10 @@ The send transaction flow has been fully redesigned as a multi-step paged screen **PR [#182](https://github.com/gruntsoftware/android/pull/182)** Unit test coverage has been significantly expanded alongside the send screen work, bringing the total suite to **309 tests**. New test classes include `AppModuleTest`, `SendStateTest`, and `BrainwalletAppTest`, covering the Koin DI module wiring, send state logic, and core app initialisation paths. -### v3.9.0 – v3.9.1 +--- + +### **v3.9.0 – v3.9.1** +--- - Update README for improved description by @kcw-grunt in #78 - Beta Release [ 🚀 ] Merge Develop into Main by @kcw-grunt in #81 - Current fiat preference from Settings needs to be reset if set in the TickerBento @@ -121,7 +194,10 @@ Unit test coverage has been significantly expanded alongside the send screen wor - Layout fixes for iPhone 8 – iPhone 17 Pro Max on the Welcome Screen - Support.brainwallet.co link fixed -### v3.6.0 +--- + +### **v3.6.0** +--- - 🚀 [Release v3.5.0] merged into Main by @kcw-grunt in #51 - Full Changelog: v3.4.2...v3.6.0 - Switched to `bundle exec fastlane single_unit_test_all` @@ -134,7 +210,10 @@ Unit test coverage has been significantly expanded alongside the send screen wor - Chore/refactor Firebase analytics - Chore/activate test coverage -### v3.3.1 +--- + +### **v3.3.1** +--- - Added locale filter - UI improvements - Various fixes diff --git a/images/google-play-badge-en.png b/images/google-play-badge-en.png new file mode 100644 index 00000000..0a1c1f9f Binary files /dev/null and b/images/google-play-badge-en.png differ