Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
101 changes: 90 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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.
Expand All @@ -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
Expand All @@ -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`
Expand 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
Binary file added images/google-play-badge-en.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.