Skip to content

🚀 [Release v4.11.0] - #259

Merged
kcw-grunt merged 165 commits into
mainfrom
release/v4.11.0
Jul 31, 2026
Merged

🚀 [Release v4.11.0]#259
kcw-grunt merged 165 commits into
mainfrom
release/v4.11.0

Conversation

@grunt-claude-bot

@grunt-claude-bot grunt-claude-bot commented Jul 30, 2026

Copy link
Copy Markdown
Collaborator

📱 Description

This release branch merges release/v4.11.0 into main: the Fallinmoji mini-game's Ready/Countdown intro sequence (v1.6.0), new unit test coverage for previously-untested pure-logic utilities and the gameinterface package, and a couple of small chores (skills lockfile, .gitignore entry). Version bumped from v4.10.6 (202506345) to v4.11.0 (202506346).

Platform

  • Android

🎯 Type of Change

  • 🐛 Bug fix
  • ✨ New feature
  • 🔧 Refactoring (code change that neither fixes a bug nor adds a feature)
  • 📚 Documentation update
  • 🎨 UI/UX improvement
  • ⚡ Performance improvement
  • 🧪 Test addition or improvement

📋 Changes

New Components Added

  • Base58Test, TypesConverterTest, BytesUtilTest, BRCompressorTest, BRDateUtilTest — unit tests for previously-untested pure-logic utility classes
  • GameKoinModuleTest — verifies gameModule Koin DI wiring
  • GdxGameViewTest — verifies GameExitData JSON parsing and the handleGameExit social-share dispatch logic
  • skills-lock.json — tracks installed Claude Code skills (aso, mobile-android-design)

Modifications

  • bw-gdlib submodule bumped to pick up Fallinmoji v1.6.0 (Ready dialog + 3-2-1-GO! countdown intro sequence, main menu button art polish) (🎮 Fallinmoji v1.6.0: Ready, Set, GO! #257)
  • GdxGameView.kt: GameExitData and handleGameExit widened from private to internal so the new tests can exercise them directly (no behavior change)
  • README.md: added v4.11.0 entry to the Release Notes section
  • app/build.gradle.kts: version bump v4.10.6 (202506345) → v4.11.0 (202506346)
  • .gitignore: also exclude CLAUDE.local.md

Removals

None

📊 Statistics

  • Additions: ~540 lines
  • Deletions: ~10 lines
  • Files Changed: 13
  • Commits: 3 new on top of the existing release/v4.11.0 branch history (test coverage, README release notes, plus the pre-existing Fallinmoji v1.6.0 / skill / version-bump commits)

🧪 Tests Status

  • Tests ran successfully locally (./gradlew testBrainwalletDebugUnitTest)
  • Added more tests? 48 new tests across 7 new test classes
  • Code coverage percentage of the codebase: not measured

📓 Release Notes

See the v4.11.0 draft release and the new v4.11.0 section in README.md for the full write-up.

Full Changelog: v4.10.6...release/v4.11.0

🎯 Reviewers

@kcw-grunt, @josikie

kcw-grunt and others added 30 commits March 30, 2025 10:50
🚀[Release v4.4.1] Merge into Develop
This reverts commit 4e252ac.

# Conflicts:
#	app/src/main/java/com/brainwallet/tools/manager/APIManager.kt
This reverts commit 4e252ac.

# Conflicts:
#	app/src/main/java/com/brainwallet/tools/manager/APIManager.kt
fix: race condition when clear shared prefs values after wipeAll
from the new peer discovery (v4.2.0)
* chore: update core submodule

* chore: resolve conflict

* Update build.gradle.kts

version and code bump

* chore: for now at BRPeerManager.wrapConnectV2 only using connect, since the core using hardcoded peers

* fix: fix write down confirm screen (#63)

* fix: fix write down confirm screen

* fix: fix allow seed word item not unique

* chore: cherry picked and adjust from
- f2fa8e1
- 98644c4
- 9396927
- 7ad4b98
- 8e57d2a

* fix: fix crash can't parse response inside LtcRepository.fetchRates

* fix: fix crash (failed parse) when SelectedPeersRepository.fetchSelectedPeers got unsuccessful response

* code bump

* fix: ConcurrentModificationException at BRPeerManager.txStatusUpdate

* feat: implement new API

* code bump

---------

Co-authored-by: Kerry Washington <mrkerrywashington@icloud.com>
kcw-grunt and others added 15 commits July 17, 2026 20:09
Languages updated: ar, de, es, fa, fr, hi, in, it, ja, ko, nl, pa, pl, pt-rBR, ru, sv, th, tr, uk, zh-rCN, zh-rTW
Triggered by: c45fa05

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
…tup NPE (#248)

The "Techdebt/improve shop" refactor (d0886db) deleted initializeViews(),
which was the only place binding bottomNav, menuBut, drawerLayout,
primaryPrice, and secondaryPrice via findViewById. The refactor left
onCreate/setListeners still dereferencing those never-assigned fields,
so BreadActivity crashed with a guaranteed NullPointerException on
BottomNavigationView.setOnNavigationItemSelectedListener on every launch.

These views were already non-functional before the crash: the bottom
nav's menu was only ever wired up via a design-time-only tools:menu
attribute (never inflated at runtime), and primaryPrice/secondaryPrice
had no code left to populate their text. Rather than resurrect dead
legacy UI, remove it outright: drop the associated fields, listeners,
and R.id.bottomNav/menuBut/drawerLayout/primary_price/secondary_price
views plus the now-unreferenced R.menu.bottom_nav_menu resource, and
fix the layout refs that pointed at the removed views.

Co-authored-by: Claude <noreply@anthropic.com>
)

Commit 1b353ae (release/v4.9.4) renamed the bw-gdlib submodule from
modules/bw-gdlib to bw-gdlib in .gitmodules, but never removed the old
gitlink entry from the tree. That left a tracked gitlink at
modules/bw-gdlib with no corresponding .gitmodules mapping, so
`git submodule sync --recursive && git submodule update --init --recursive`
(CircleCI's setup_environment step) fails on every build with:

  fatal: no submodule mapping found in .gitmodules for path 'modules/bw-gdlib'

Removing the dangling gitlink brings the tree's 5 submodule entries back
in sync with .gitmodules' 5 declared paths.

Co-authored-by: Claude <noreply@anthropic.com>
#250)

* Bump version to v4.10.5 (202506343)

* fix(shop-bento): eliminate flaky ShopBentoViewModelTest failure

ShopBentoViewModelTest had no MainDispatcherRule, unlike every other
ViewModel test in this codebase, so Dispatchers.Main was never
explicitly installed for it. ShopBentoViewModel.init launches its
work via viewModelScope (backed by Dispatchers.Main), so this test was
actually running against whatever Dispatchers.Main happened to be left
as by other test classes sharing the same Gradle test JVM fork —
explaining why `testBrainwalletReleaseUnitTest` failed intermittently
with `TurbineAssertionError: Unconsumed events found` only under the
full suite (order/load-dependent) and never in isolation. Added
MainDispatcherRule to match the established pattern (see
UnLockViewModelTest, BWSenderIntegrationTest, TxRepositoryImplIntegrationTest).

Also collapsed ShopBentoViewModel's two independent viewModelScope.launch
blocks (one collecting settingRepository.settings, one collecting
shopProxyRepository.shopProxy) into a single combine()-driven collector.
Previously each block called _state.update independently, so real
observers of `state` (not just the test) could see transient,
incomplete intermediate states depending on collector interleaving.

Swapped the fixed-duration advanceTimeBy(100) for advanceUntilIdle()
in the affected test, which deterministically drains all pending
coroutine work instead of guessing a virtual-time delay.

Verified with repeated full `testBrainwalletReleaseUnitTest` runs
(previously failed roughly 1 in 3-5 runs under the full 415-test suite).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Removed the auto summary in place of Claude summary

* fix(ci): lower Gradle daemon memory footprint to stop OOM-kill

The unit-test job's Gradle daemon was being killed mid-build
("The message received from the daemon indicates that the daemon has
disappeared... it may have been killed or may have crashed"),
consistently right as testBrainwalletDebugUnitTest started after a
heavy multi-module build (KSP across 5 modules, detekt across 4,
dataBinding, bw-gdlib texture packing, 415 unit tests).

-Xmx4g for the Gradle daemon plus AGP-forked unit-test worker JVMs
plus OS/container overhead was exceeding the resource_class: large
executor's available RAM. Lowered the daemon heap to -Xmx3g and
org.gradle.workers.max/--max-workers from 2 to 1 to leave more
headroom for the forked test JVMs, without changing the resource
class (and its higher CircleCI billing tier).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* perf(ci): skip detekt in the unit-test job

android-build-logic's DetektSetup.attachDetektTask() wires `detekt`
as a dependency of every compile*/assemble* task project-wide
(tasks.whenTaskAdded { if (name.startsWith("compile") || ...) dependsOn(detekt) }),
so a plain `./gradlew testBrainwalletDebugUnitTest` was also running
3-4 full detekt passes (autoCorrect=true, parallel=true, HTML/XML/TXT/
SARIF/Markdown reports across app/core/iap/general-purpose-app) that
have nothing to do with running tests.

That's real CPU/memory work competing with compilation and the forked
unit-test JVMs on the resource-constrained `large` executor, on top of
the daemon heap/worker tuning from the previous commit. Verified
locally: `-x detekt` removes all detekt tasks from the graph (confirmed
via --dry-run) with no other effect, and the full unit test run still
passes.

Scoped to this CI job's command line only, not the shared build-logic,
so local dev/lint workflows are unaffected.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

---------

Co-authored-by: kcw-grunt <mrkerrywashington@icloud.com>
Co-authored-by: Claude <noreply@anthropic.com>
)

* docs: add SECURITY.md with a real vulnerability disclosure process

PR #246 (kcw-grunt-patch-1) added SECURITY.md but left it as GitHub's
unedited default template — placeholder version numbers (5.1.x/5.0.x)
that don't match any real Brainwallet release, and instructional
placeholder text ("Use this section to tell people...") never filled
in with actual content.

Replaced with a real policy: reporting instructions pointing at the
verified support channel (brainwallet.co/support, from
BWConstants.SUPPORT_WEB_LINK — there's no dedicated security@ email
anywhere in this repo, and GitHub's private vulnerability reporting
is not enabled for this repo, confirmed via the API), explicit scope
(wallet/key-management code in scope, third-party deps and social
engineering out of scope), a supported-versions policy matching how
this app actually ships (continuous release, latest version only),
and a safe harbor statement — all relevant for a wallet app handling
real user funds and seed phrases.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* docs: restructure README with a real front page for new visitors/contributors

The README opened straight into CI badges followed by a raw dump of
release notes in inconsistent order (v4.9.0, then v4.8.3, then a jump
back to v3.9.0-v3.9.1, v3.6.0, v3.3.1) — no description of what the
app actually does beyond the title, no download links, no build/setup
instructions, no contributing/security/license pointers. For an
actively-developed open-source wallet repo, that's a poor front door
for anyone landing here from GitHub search or the Play Store listing.

Added, all verified against the actual repo/app rather than assumed:
- A real description and feature list
- Download links (Play Store id ltd.grunt.brainwallet, verified live;
  the gruntsoftware/ios sibling repo; brainwallet.co)
- Clone/build instructions grounded in the actual submodule setup and
  local.properties/google-services.json requirements from
  .circleci/config.yml
- Architecture summary (Koin, Compose, Coroutines, native wallet core)
  matching the real module layout
- Testing, Security (linking the new SECURITY.md), Contributing
  (linking the existing PR template), and License sections

Preserved the full existing release-notes content underneath a
"Release Notes" heading rather than deleting project history, with a
pointer to GitHub Releases/compare views for the current changelog
going forward.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* updated the README.md

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: kcw-grunt <mrkerrywashington@icloud.com>
* Bump bw-gdlib submodule to 5c2faab

Picks up the fix removing the exported launcher intent-filter from
AndroidLauncher, which caused a duplicate ghost home-screen icon in
release builds and crashed on launch (Crashlytics
0cdfcd994445922abf96c307663673c8). See bw-gdlib PR #14.

* Update build.gradle.kts

---------

Co-authored-by: grunt-claude-bot <308083480+grunt-claude-bot@users.noreply.github.com>
Syncs develop with everything already shipped: Release v4.10.4 (#244)
and Release v4.10.6 (#253), which develop was missing entirely (develop
had been stale since before v4.10.4). Brings in the ReLinker native-lib
crash fix, the BWSender flaky-test fix, the ghost-launcher-icon crash
fix, and the BreadActivity NPE fix.

Conflicts resolved:
- app/build.gradle.kts: kept main's v4.10.6 (202506345) over develop's
  older v4.10.5
- gradle/libs.versions.toml: kept the ReLinker dependency addition

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…at (#254)

Co-authored-by: grunt-claude-bot <308083480+grunt-claude-bot@users.noreply.github.com>
* update Fallinmoji v1.6.0

bump version

* Update .gitignore

---------

Co-authored-by: grunt-claude-bot <308083480+grunt-claude-bot@users.noreply.github.com>
…ce logic

Covers previously-untested Base58, TypesConverter, BytesUtil, BRCompressor,
and BRDateUtil classes, plus the GameKoinModule DI wiring and GdxGameView's
game-exit JSON parsing/social-share dispatch logic (GameExitData and
handleGameExit widened from private to internal to make them testable).
kcw-grunt
kcw-grunt previously approved these changes Jul 30, 2026

@kcw-grunt kcw-grunt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

kcw-grunt
kcw-grunt previously approved these changes Jul 30, 2026

@kcw-grunt kcw-grunt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

* di: register InAppReviewService in AppModule

Wires the previously-dormant InAppReviewService into Koin using the
existing BrainwalletApp.breadContext activity tracker. No call sites
added yet — showInAppReviewDialogIfNeeded() is not invoked anywhere,
so behavior is unchanged until it's called from the app.

* feat: activate InAppReviewService and wire up review prompts

Registers InAppReviewService in Koin DI and calls
showInAppReviewDialogIfNeeded() from four placements: after a
successful send, the game hub exit flow, the balance-visibility
toggle, and two tutorial pages. Fixes several placement bugs found
along the way (broken suspend-context usage, unresolved DI
references, malformed syntax, and an unreachable branch in
GameHubViewModel), and adds unit test coverage for the service's
gating and Play Core success/failure branches.

@kcw-grunt kcw-grunt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM...added request review

@kcw-grunt
kcw-grunt merged commit 787d0b2 into main Jul 31, 2026
2 checks passed
@kcw-grunt
kcw-grunt deleted the release/v4.11.0 branch July 31, 2026 10:17
@grunt-claude-bot grunt-claude-bot mentioned this pull request Aug 7, 2026
11 tasks
kcw-grunt added a commit that referenced this pull request Aug 8, 2026
* docs: standardize release headers to bold version + PR + divider format (#254) (#256)

Co-authored-by: grunt-claude-bot <308083480+grunt-claude-bot@users.noreply.github.com>

* 🚀 [Release v4.11.0] (#259)

* Revert "Updated the APIManager"

This reverts commit 4e252ac29cfb6c3ab26ae5ea4a8f6de154311f2e.

# Conflicts:
#	app/src/main/java/com/brainwallet/tools/manager/APIManager.kt

* Reverted the Kotlin APIManager.

* Add version and code to welcome screen

* reset padding

* Revert "Updated the APIManager"

This reverts commit 4e252ac29cfb6c3ab26ae5ea4a8f6de154311f2e.

# Conflicts:
#	app/src/main/java/com/brainwallet/tools/manager/APIManager.kt

* Reverted the Kotlin APIManager.

* fix: fix crash when FragmentSignal dismissed

* fix: fix sync after wipe

* fix: fix wrong lifecycle to trigger callback at FragmentSignal

* Update issue templates

* updated core changes

per @andhikayuana

* Rename .java to .kt

* chore: refactor BRApiManager & APIClient

* chore: remove unused part at APIClient

* feat: wip new peer discovery

* feat: implement selected peer ip address from cache (fetched from API)

* feat: implement selected peer ip address from cache (fetched from API)

* feat: filter out peers with NODE_NETWORK, NODE_BLOOM

* fix: race condition when clear shared prefs values after wipeAll

* Updating the core library

from the new peer discovery (v4.2.0)

* Chore/revert pre peer discovery (Android) (#69)

* chore: update core submodule

* chore: resolve conflict

* Update build.gradle.kts

version and code bump

* chore: for now at BRPeerManager.wrapConnectV2 only using connect, since the core using hardcoded peers

* fix: fix write down confirm screen (#63)

* fix: fix write down confirm screen

* fix: fix allow seed word item not unique

* chore: cherry picked and adjust from
- f2fa8e1e4fb9c7429fa86461b24b4463a7969ecf
- 98644c425b2fdae7b8b424708fb1a61ad983a9d8
- 93969278da8f95adc0c9f0f8411c8a27876a4d77
- 7ad4b9853b7d1bf7ddbaa576242d8800615a48fb
- 8e57d2a67420565b40b753dec5a533776da4821f

* fix: fix crash can't parse response inside LtcRepository.fetchRates

* fix: fix crash (failed parse) when SelectedPeersRepository.fetchSelectedPeers got unsuccessful response

* code bump

* fix: ConcurrentModificationException at BRPeerManager.txStatusUpdate

* feat: implement new API

* code bump

---------

Co-authored-by: Kerry Washington <mrkerrywashington@icloud.com>

* feat: remove unused activity (ImportActivity) at AndroidManifest.xml (#71)

* fix: fix crash IllegalStateException: cannot make a new request because the previous response is still open (#73)

* code bump

* Feat/move tx fee (#74)

* chore: add new translations at strings.xml

* feat: move network fee to HomeSettingDrawerSheet & remove unused code

* fix: fix dismiss allow state loss (#76)

* fix: fix typo at strings.xml (#75)

* feat: new UI for receive and topup flow (moonpay integration) (#72)

* feat: [WIP][UI] new UI for receive and topup flow

* feat: [WIP][UI] implement copy address and some refactor

* feat: replace webview using CustomTabsIntent from androidx.browser

* feat: replace webview using CustomTabsIntent from androidx.browser

* feat: add PickerWheel

* chore: rename param at QRUtils.generateQR

* chore: revert default startDestination at BrainwalletActivity

* feat: wip moonpay integration

* feat: wip moonpay integration

* chore: new UI for ReceiveDialog

* chore: parse error from response API at BrainwalletViewModel

* chore: add /moonpay/buy-quote and remove dev base url

* chore: make LegacyNavigation.showMoonPayWidget receive params for the widget url

* chore: add GetMoonpayBuyQuoteResponse

* chore: wip moonpay integration to call buy-quote

* fix: fix wheel picker for IDR at ReceiveDialog

* fix: fix invalid signature

* feat: moonpay integration at onboarding flow at BuyLitecoinScreen also fix some stuffs

* chore: replace base url for moonpay buy integration when debug

* chore: introduce LocalCacheSource.kt and cache fetch limits

* chore: adjustment receive dialog UI
- debounce fiat currency to 2s
- increment in 10
- remove decimal places
- default value to 10% of range

* chore: reorder bottom navigation item and add new strings

* chore: add new translations

* chore: refactor UI for buy and receive dialog

* chore: cleanup ReceiveDialogViewModel

* chore: using MoonpayBuyWidget

* chore: adjustment moonpaywidget

* chore: for now moonpay widget using CustomTabsIntent

* version and code bump

* Added support url (#81)

- changed the language
- code bump

* version and code bump

* Revert from eda0f532 & cherry pick (#86)

* version bump

* feat: new UI for receive and topup flow (moonpay integration) (#72)

* feat: [WIP][UI] new UI for receive and topup flow

* feat: [WIP][UI] implement copy address and some refactor

* feat: replace webview using CustomTabsIntent from androidx.browser

* feat: replace webview using CustomTabsIntent from androidx.browser

* feat: add PickerWheel

* chore: rename param at QRUtils.generateQR

* chore: revert default startDestination at BrainwalletActivity

* feat: wip moonpay integration

* feat: wip moonpay integration

* chore: new UI for ReceiveDialog

* chore: parse error from response API at BrainwalletViewModel

* chore: add /moonpay/buy-quote and remove dev base url

* chore: make LegacyNavigation.showMoonPayWidget receive params for the widget url

* chore: add GetMoonpayBuyQuoteResponse

* chore: wip moonpay integration to call buy-quote

* fix: fix wheel picker for IDR at ReceiveDialog

* fix: fix invalid signature

* feat: moonpay integration at onboarding flow at BuyLitecoinScreen also fix some stuffs

* chore: replace base url for moonpay buy integration when debug

* chore: introduce LocalCacheSource.kt and cache fetch limits

* chore: adjustment receive dialog UI
- debounce fiat currency to 2s
- increment in 10
- remove decimal places
- default value to 10% of range

* chore: reorder bottom navigation item and add new strings

* chore: add new translations

* chore: refactor UI for buy and receive dialog

* chore: cleanup ReceiveDialogViewModel

* chore: using MoonpayBuyWidget

* chore: adjustment moonpaywidget

* chore: for now moonpay widget using CustomTabsIntent

* chore: set allowSpend to false when recommend rescan click

* fix: add delete transaction data from local database

* Removed chatty event

* chore: add analytics at BRWalletManager.publishCallback

* chore: make sure calculation and static fee same as iOS, add setting for selected fee type

---------

Co-authored-by: Kerry Washington <mrkerrywashington@icloud.com>

* build bump

* chore: open bread activity first then open moonpay widget (#88)

* Adjustment for circleci (#89)

* chore: wip adjustment for screengrab

* chore: [circleci] adjust config.yml

* chore: [circleci] update config.yml, Fastfile, Gemfile.lock, RecoverWalletScreenGrabsTest.kt

* chore: [circleci] for now just unit-test

* fix: android: Footer version label is obfuscated (#92)

* fix: android: Footer version label is obfuscated

* fix: [#92] android: Footer version label is obfuscated

* fix: You saved it right screen reset button covers words (#93)

* fix: [#84] change seed words layout to lazy vertical grid

* fix: [#84] refactor seed words layout

* tiny resizing (#94)

* code and version bump

* change break (#97)

adds a android user agent and externalID

* build code number

fix: [#96] remove bottom_nav_menu_us and just using bottom_nav_menu for consistency (#98)

* fix: [#137] fix: Reset fiat options in Buy / Receive modal (#99)

* Chore/update device data (#100)

* change break

adds a android user agent and externalID

* Update ReceiveDialogViewModel.kt

* chore: refactor request params for fetchMoonpaySignedUrl

---------

Co-authored-by: andhikayuana <andhikayuana@gmail.com>

* Add agent string obfuscation (#103)

* updated metadata (#105)

* chore: remove screen lock detection (#106)

* 🧰  Fx/seed words UI polish (#108)

* changed to tap

* Added instruction label

-added localizations

* Added 'empty string for when confirm is completed

* version and code bump

* fix typo

replaced click file with mp3
added error sound

* ❇️ Feat/add polish punjabi farsi (#109)

* changed to tap

* Added instruction label

-added localizations

* Added 'empty string for when confirm is completed

* version and code bump

* fix typo

replaced click file with mp3
added error sound

* added 3 languages

* Removed unused audio files

* polished tests

* removed unused asset pack

* code bump

* fix: fix YourSeedProveItState.isWordUsedCorrectly (#111)

* Upgrade targetSdk 36 (#113)

* chore: change drawable with density for brainwallet_logotype_white

* chore: adjustment WelcomeScreen.kt

* chore: adjustment for targetSdk 36 also support 16KB page size

* feat(#195): adopt koin annotation for dependency injection (#120)

* Create PULL_REQUEST_TEMPLATE.md

Create PULL_REQUEST_TEMPLATE.md

* bump for test (#121)

* bump for test

* Updated the template

* polishes

* feat(#174): initiate games module (#119)

* Force pushed the version and code bump and catch up with Prod.

* 🚀[Release v4.7.2] Merge into Develop (#127)

* 🚀[Release v4.4.7] Merge into Main  (#70)

* Revert "Updated the APIManager"

This reverts commit 4e252ac29cfb6c3ab26ae5ea4a8f6de154311f2e.

# Conflicts:
#	app/src/main/java/com/brainwallet/tools/manager/APIManager.kt

* Reverted the Kotlin APIManager.

* Add version and code to welcome screen

* reset padding

* Revert "Updated the APIManager"

This reverts commit 4e252ac29cfb6c3ab26ae5ea4a8f6de154311f2e.

# Conflicts:
#	app/src/main/java/com/brainwallet/tools/manager/APIManager.kt

* Reverted the Kotlin APIManager.

* fix: fix crash when FragmentSignal dismissed

* fix: fix sync after wipe

* fix: fix wrong lifecycle to trigger callback at FragmentSignal

* Update issue templates

* updated core changes

per @andhikayuana

* Rename .java to .kt

* chore: refactor BRApiManager & APIClient

* chore: remove unused part at APIClient

* feat: wip new peer discovery

* feat: implement selected peer ip address from cache (fetched from API)

* feat: implement selected peer ip address from cache (fetched from API)

* feat: filter out peers with NODE_NETWORK, NODE_BLOOM

* fix: race condition when clear shared prefs values after wipeAll

* Updating the core library

from the new peer discovery (v4.2.0)

* Chore/revert pre peer discovery (Android) (#69)

* chore: update core submodule

* chore: resolve conflict

* Update build.gradle.kts

version and code bump

* chore: for now at BRPeerManager.wrapConnectV2 only using connect, since the core using hardcoded peers

* fix: fix write down confirm screen (#63)

* fix: fix write down confirm screen

* fix: fix allow seed word item not unique

* chore: cherry picked and adjust from
- f2fa8e1e4fb9c7429fa86461b24b4463a7969ecf
- 98644c425b2fdae7b8b424708fb1a61ad983a9d8
- 93969278da8f95adc0c9f0f8411c8a27876a4d77
- 7ad4b9853b7d1bf7ddbaa576242d8800615a48fb
- 8e57d2a67420565b40b753dec5a533776da4821f

* fix: fix crash can't parse response inside LtcRepository.fetchRates

* fix: fix crash (failed parse) when SelectedPeersRepository.fetchSelectedPeers got unsuccessful response

* code bump

* fix: ConcurrentModificationException at BRPeerManager.txStatusUpdate

* feat: implement new API

* code bump

---------

Co-authored-by: Kerry Washington <mrkerrywashington@icloud.com>

---------

Co-authored-by: andhikayuana <andhikayuana@gmail.com>

* 🚀[Release v4.5.0] Merge into Main  (#78)

* Revert "Updated the APIManager"

This reverts commit 4e252ac29cfb6c3ab26ae5ea4a8f6de154311f2e.

# Conflicts:
#	app/src/main/java/com/brainwallet/tools/manager/APIManager.kt

* Reverted the Kotlin APIManager.

* Add version and code to welcome screen

* reset padding

* Revert "Updated the APIManager"

This reverts commit 4e252ac29cfb6c3ab26ae5ea4a8f6de154311f2e.

# Conflicts:
#	app/src/main/java/com/brainwallet/tools/manager/APIManager.kt

* Reverted the Kotlin APIManager.

* fix: fix crash when FragmentSignal dismissed

* fix: fix sync after wipe

* fix: fix wrong lifecycle to trigger callback at FragmentSignal

* Update issue templates

* updated core changes

per @andhikayuana

* Rename .java to .kt

* chore: refactor BRApiManager & APIClient

* chore: remove unused part at APIClient

* feat: wip new peer discovery

* feat: implement selected peer ip address from cache (fetched from API)

* feat: implement selected peer ip address from cache (fetched from API)

* feat: filter out peers with NODE_NETWORK, NODE_BLOOM

* fix: race condition when clear shared prefs values after wipeAll

* Updating the core library

from the new peer discovery (v4.2.0)

* Chore/revert pre peer discovery (Android) (#69)

* chore: update core submodule

* chore: resolve conflict

* Update build.gradle.kts

version and code bump

* chore: for now at BRPeerManager.wrapConnectV2 only using connect, since the core using hardcoded peers

* fix: fix write down confirm screen (#63)

* fix: fix write down confirm screen

* fix: fix allow seed word item not unique

* chore: cherry picked and adjust from
- f2fa8e1e4fb9c7429fa86461b24b4463a7969ecf
- 98644c425b2fdae7b8b424708fb1a61ad983a9d8
- 93969278da8f95adc0c9f0f8411c8a27876a4d77
- 7ad4b9853b7d1bf7ddbaa576242d8800615a48fb
- 8e57d2a67420565b40b753dec5a533776da4821f

* fix: fix crash can't parse response inside LtcRepository.fetchRates

* fix: fix crash (failed parse) when SelectedPeersRepository.fetchSelectedPeers got unsuccessful response

* code bump

* fix: ConcurrentModificationException at BRPeerManager.txStatusUpdate

* feat: implement new API

* code bump

---------

Co-authored-by: Kerry Washington <mrkerrywashington@icloud.com>

* feat: remove unused activity (ImportActivity) at AndroidManifest.xml (#71)

* fix: fix crash IllegalStateException: cannot make a new request because the previous response is still open (#73)

* code bump

* Feat/move tx fee (#74)

* chore: add new translations at strings.xml

* feat: move network fee to HomeSettingDrawerSheet & remove unused code

* fix: fix dismiss allow state loss (#76)

* fix: fix typo at strings.xml (#75)

* feat: new UI for receive and topup flow (moonpay integration) (#72)

* feat: [WIP][UI] new UI for receive and topup flow

* feat: [WIP][UI] implement copy address and some refactor

* feat: replace webview using CustomTabsIntent from androidx.browser

* feat: replace webview using CustomTabsIntent from androidx.browser

* feat: add PickerWheel

* chore: rename param at QRUtils.generateQR

* chore: revert default startDestination at BrainwalletActivity

* feat: wip moonpay integration

* feat: wip moonpay integration

* chore: new UI for ReceiveDialog

* chore: parse error from response API at BrainwalletViewModel

* chore: add /moonpay/buy-quote and remove dev base url

* chore: make LegacyNavigation.showMoonPayWidget receive params for the widget url

* chore: add GetMoonpayBuyQuoteResponse

* chore: wip moonpay integration to call buy-quote

* fix: fix wheel picker for IDR at ReceiveDialog

* fix: fix invalid signature

* feat: moonpay integration at onboarding flow at BuyLitecoinScreen also fix some stuffs

* chore: replace base url for moonpay buy integration when debug

* chore: introduce LocalCacheSource.kt and cache fetch limits

* chore: adjustment receive dialog UI
- debounce fiat currency to 2s
- increment in 10
- remove decimal places
- default value to 10% of range

* chore: reorder bottom navigation item and add new strings

* chore: add new translations

* chore: refactor UI for buy and receive dialog

* chore: cleanup ReceiveDialogViewModel

* chore: using MoonpayBuyWidget

* chore: adjustment moonpaywidget

* chore: for now moonpay widget using CustomTabsIntent

* version and code bump

---------

Co-authored-by: andhikayuana <andhikayuana@gmail.com>

* 🚀[Release v4.5.4] Merge into Main (#87)

* Revert "Updated the APIManager"

This reverts commit 4e252ac29cfb6c3ab26ae5ea4a8f6de154311f2e.

# Conflicts:
#	app/src/main/java/com/brainwallet/tools/manager/APIManager.kt

* Reverted the Kotlin APIManager.

* Add version and code to welcome screen

* reset padding

* Revert "Updated the APIManager"

This reverts commit 4e252ac29cfb6c3ab26ae5ea4a8f6de154311f2e.

# Conflicts:
#	app/src/main/java/com/brainwallet/tools/manager/APIManager.kt

* Reverted the Kotlin APIManager.

* fix: fix crash when FragmentSignal dismissed

* fix: fix sync after wipe

* fix: fix wrong lifecycle to trigger callback at FragmentSignal

* Update issue templates

* updated core changes

per @andhikayuana

* Rename .java to .kt

* chore: refactor BRApiManager & APIClient

* chore: remove unused part at APIClient

* feat: wip new peer discovery

* feat: implement selected peer ip address from cache (fetched from API)

* feat: implement selected peer ip address from cache (fetched from API)

* feat: filter out peers with NODE_NETWORK, NODE_BLOOM

* fix: race condition when clear shared prefs values after wipeAll

* Updating the core library

from the new peer discovery (v4.2.0)

* Chore/revert pre peer discovery (Android) (#69)

* chore: update core submodule

* chore: resolve conflict

* Update build.gradle.kts

version and code bump

* chore: for now at BRPeerManager.wrapConnectV2 only using connect, since the core using hardcoded peers

* fix: fix write down confirm screen (#63)

* fix: fix write down confirm screen

* fix: fix allow seed word item not unique

* chore: cherry picked and adjust from
- f2fa8e1e4fb9c7429fa86461b24b4463a7969ecf
- 98644c425b2fdae7b8b424708fb1a61ad983a9d8
- 93969278da8f95adc0c9f0f8411c8a27876a4d77
- 7ad4b9853b7d1bf7ddbaa576242d8800615a48fb
- 8e57d2a67420565b40b753dec5a533776da4821f

* fix: fix crash can't parse response inside LtcRepository.fetchRates

* fix: fix crash (failed parse) when SelectedPeersRepository.fetchSelectedPeers got unsuccessful response

* code bump

* fix: ConcurrentModificationException at BRPeerManager.txStatusUpdate

* feat: implement new API

* code bump

---------

Co-authored-by: Kerry Washington <mrkerrywashington@icloud.com>

* feat: remove unused activity (ImportActivity) at AndroidManifest.xml (#71)

* fix: fix crash IllegalStateException: cannot make a new request because the previous response is still open (#73)

* code bump

* Feat/move tx fee (#74)

* chore: add new translations at strings.xml

* feat: move network fee to HomeSettingDrawerSheet & remove unused code

* fix: fix dismiss allow state loss (#76)

* fix: fix typo at strings.xml (#75)

* feat: new UI for receive and topup flow (moonpay integration) (#72)

* feat: [WIP][UI] new UI for receive and topup flow

* feat: [WIP][UI] implement copy address and some refactor

* feat: replace webview using CustomTabsIntent from androidx.browser

* feat: replace webview using CustomTabsIntent from androidx.browser

* feat: add PickerWheel

* chore: rename param at QRUtils.generateQR

* chore: revert default startDestination at BrainwalletActivity

* feat: wip moonpay integration

* feat: wip moonpay integration

* chore: new UI for ReceiveDialog

* chore: parse error from response API at BrainwalletViewModel

* chore: add /moonpay/buy-quote and remove dev base url

* chore: make LegacyNavigation.showMoonPayWidget receive params for the widget url

* chore: add GetMoonpayBuyQuoteResponse

* chore: wip moonpay integration to call buy-quote

* fix: fix wheel picker for IDR at ReceiveDialog

* fix: fix invalid signature

* feat: moonpay integration at onboarding flow at BuyLitecoinScreen also fix some stuffs

* chore: replace base url for moonpay buy integration when debug

* chore: introduce LocalCacheSource.kt and cache fetch limits

* chore: adjustment receive dialog UI
- debounce fiat currency to 2s
- increment in 10
- remove decimal places
- default value to 10% of range

* chore: reorder bottom navigation item and add new strings

* chore: add new translations

* chore: refactor UI for buy and receive dialog

* chore: cleanup ReceiveDialogViewModel

* chore: using MoonpayBuyWidget

* chore: adjustment moonpaywidget

* chore: for now moonpay widget using CustomTabsIntent

* version and code bump

* Added support url (#81)

- changed the language
- code bump

* version and code bump

* Revert from eda0f532 & cherry pick (#86)

* version bump

* feat: new UI for receive and topup flow (moonpay integration) (#72)

* feat: [WIP][UI] new UI for receive and topup flow

* feat: [WIP][UI] implement copy address and some refactor

* feat: replace webview using CustomTabsIntent from androidx.browser

* feat: replace webview using CustomTabsIntent from androidx.browser

* feat: add PickerWheel

* chore: rename param at QRUtils.generateQR

* chore: revert default startDestination at BrainwalletActivity

* feat: wip moonpay integration

* feat: wip moonpay integration

* chore: new UI for ReceiveDialog

* chore: parse error from response API at BrainwalletViewModel

* chore: add /moonpay/buy-quote and remove dev base url

* chore: make LegacyNavigation.showMoonPayWidget receive params for the widget url

* chore: add GetMoonpayBuyQuoteResponse

* chore: wip moonpay integration to call buy-quote

* fix: fix wheel picker for IDR at ReceiveDialog

* fix: fix invalid signature

* feat: moonpay integration at onboarding flow at BuyLitecoinScreen also fix some stuffs

* chore: replace base url for moonpay buy integration when debug

* chore: introduce LocalCacheSource.kt and cache fetch limits

* chore: adjustment receive dialog UI
- debounce fiat currency to 2s
- increment in 10
- remove decimal places
- default value to 10% of range

* chore: reorder bottom navigation item and add new strings

* chore: add new translations

* chore: refactor UI for buy and receive dialog

* chore: cleanup ReceiveDialogViewModel

* chore: using MoonpayBuyWidget

* chore: adjustment moonpaywidget

* chore: for now moonpay widget using CustomTabsIntent

* chore: set allowSpend to false when recommend rescan click

* fix: add delete transaction data from local database

* Removed chatty event

* chore: add analytics at BRWalletManager.publishCallback

* chore: make sure calculation and static fee same as iOS, add setting for selected fee type

---------

Co-authored-by: Kerry Washington <mrkerrywashington@icloud.com>

* build bump

* Updated README

* code bump

* chore: open bread activity first then open moonpay widget (#88)

* code bump

---------

Co-authored-by: andhikayuana <andhikayuana@gmail.com>

* 🚀[Release v4.5.5] Merge into Main (#101)

* Revert "Updated the APIManager"

This reverts commit 4e252ac29cfb6c3ab26ae5ea4a8f6de154311f2e.

# Conflicts:
#	app/src/main/java/com/brainwallet/tools/manager/APIManager.kt

* Reverted the Kotlin APIManager.

* Add version and code to welcome screen

* reset padding

* Revert "Updated the APIManager"

This reverts commit 4e252ac29cfb6c3ab26ae5ea4a8f6de154311f2e.

# Conflicts:
#	app/src/main/java/com/brainwallet/tools/manager/APIManager.kt

* Reverted the Kotlin APIManager.

* fix: fix crash when FragmentSignal dismissed

* fix: fix sync after wipe

* fix: fix wrong lifecycle to trigger callback at FragmentSignal

* Update issue templates

* updated core changes

per @andhikayuana

* Rename .java to .kt

* chore: refactor BRApiManager & APIClient

* chore: remove unused part at APIClient

* feat: wip new peer discovery

* feat: implement selected peer ip address from cache (fetched from API)

* feat: implement selected peer ip address from cache (fetched from API)

* feat: filter out peers with NODE_NETWORK, NODE_BLOOM

* fix: race condition when clear shared prefs values after wipeAll

* Updating the core library

from the new peer discovery (v4.2.0)

* Chore/revert pre peer discovery (Android) (#69)

* chore: update core submodule

* chore: resolve conflict

* Update build.gradle.kts

version and code bump

* chore: for now at BRPeerManager.wrapConnectV2 only using connect, since the core using hardcoded peers

* fix: fix write down confirm screen (#63)

* fix: fix write down confirm screen

* fix: fix allow seed word item not unique

* chore: cherry picked and adjust from
- f2fa8e1e4fb9c7429fa86461b24b4463a7969ecf
- 98644c425b2fdae7b8b424708fb1a61ad983a9d8
- 93969278da8f95adc0c9f0f8411c8a27876a4d77
- 7ad4b9853b7d1bf7ddbaa576242d8800615a48fb
- 8e57d2a67420565b40b753dec5a533776da4821f

* fix: fix crash can't parse response inside LtcRepository.fetchRates

* fix: fix crash (failed parse) when SelectedPeersRepository.fetchSelectedPeers got unsuccessful response

* code bump

* fix: ConcurrentModificationException at BRPeerManager.txStatusUpdate

* feat: implement new API

* code bump

---------

Co-authored-by: Kerry Washington <mrkerrywashington@icloud.com>

* feat: remove unused activity (ImportActivity) at AndroidManifest.xml (#71)

* fix: fix crash IllegalStateException: cannot make a new request because the previous response is still open (#73)

* code bump

* Feat/move tx fee (#74)

* chore: add new translations at strings.xml

* feat: move network fee to HomeSettingDrawerSheet & remove unused code

* fix: fix dismiss allow state loss (#76)

* fix: fix typo at strings.xml (#75)

* feat: new UI for receive and topup flow (moonpay integration) (#72)

* feat: [WIP][UI] new UI for receive and topup flow

* feat: [WIP][UI] implement copy address and some refactor

* feat: replace webview using CustomTabsIntent from androidx.browser

* feat: replace webview using CustomTabsIntent from androidx.browser

* feat: add PickerWheel

* chore: rename param at QRUtils.generateQR

* chore: revert default startDestination at BrainwalletActivity

* feat: wip moonpay integration

* feat: wip moonpay integration

* chore: new UI for ReceiveDialog

* chore: parse error from response API at BrainwalletViewModel

* chore: add /moonpay/buy-quote and remove dev base url

* chore: make LegacyNavigation.showMoonPayWidget receive params for the widget url

* chore: add GetMoonpayBuyQuoteResponse

* chore: wip moonpay integration to call buy-quote

* fix: fix wheel picker for IDR at ReceiveDialog

* fix: fix invalid signature

* feat: moonpay integration at onboarding flow at BuyLitecoinScreen also fix some stuffs

* chore: replace base url for moonpay buy integration when debug

* chore: introduce LocalCacheSource.kt and cache fetch limits

* chore: adjustment receive dialog UI
- debounce fiat currency to 2s
- increment in 10
- remove decimal places
- default value to 10% of range

* chore: reorder bottom navigation item and add new strings

* chore: add new translations

* chore: refactor UI for buy and receive dialog

* chore: cleanup ReceiveDialogViewModel

* chore: using MoonpayBuyWidget

* chore: adjustment moonpaywidget

* chore: for now moonpay widget using CustomTabsIntent

* version and code bump

* Added support url (#81)

- changed the language
- code bump

* version and code bump

* Revert from eda0f532 & cherry pick (#86)

* version bump

* feat: new UI for receive and topup flow (moonpay integration) (#72)

* feat: [WIP][UI] new UI for receive and topup flow

* feat: [WIP][UI] implement copy address and some refactor

* feat: replace webview using CustomTabsIntent from androidx.browser

* feat: replace webview using CustomTabsIntent from androidx.browser

* feat: add PickerWheel

* chore: rename param at QRUtils.generateQR

* chore: revert default startDestination at BrainwalletActivity

* feat: wip moonpay integration

* feat: wip moonpay integration

* chore: new UI for ReceiveDialog

* chore: parse error from response API at BrainwalletViewModel

* chore: add /moonpay/buy-quote and remove dev base url

* chore: make LegacyNavigation.showMoonPayWidget receive params for the widget url

* chore: add GetMoonpayBuyQuoteResponse

* chore: wip moonpay integration to call buy-quote

* fix: fix wheel picker for IDR at ReceiveDialog

* fix: fix invalid signature

* feat: moonpay integration at onboarding flow at BuyLitecoinScreen also fix some stuffs

* chore: replace base url for moonpay buy integration when debug

* chore: introduce LocalCacheSource.kt and cache fetch limits

* chore: adjustment receive dialog UI
- debounce fiat currency to 2s
- increment in 10
- remove decimal places
- default value to 10% of range

* chore: reorder bottom navigation item and add new strings

* chore: add new translations

* chore: refactor UI for buy and receive dialog

* chore: cleanup ReceiveDialogViewModel

* chore: using MoonpayBuyWidget

* chore: adjustment moonpaywidget

* chore: for now moonpay widget using CustomTabsIntent

* chore: set allowSpend to false when recommend rescan click

* fix: add delete transaction data from local database

* Removed chatty event

* chore: add analytics at BRWalletManager.publishCallback

* chore: make sure calculation and static fee same as iOS, add setting for selected fee type

---------

Co-authored-by: Kerry Washington <mrkerrywashington@icloud.com>

* build bump

* chore: open bread activity first then open moonpay widget (#88)

* Adjustment for circleci (#89)

* chore: wip adjustment for screengrab

* chore: [circleci] adjust config.yml

* chore: [circleci] update config.yml, Fastfile, Gemfile.lock, RecoverWalletScreenGrabsTest.kt

* chore: [circleci] for now just unit-test

* fix: android: Footer version label is obfuscated (#92)

* fix: android: Footer version label is obfuscated

* fix: [#92] android: Footer version label is obfuscated

* fix: You saved it right screen reset button covers words (#93)

* fix: [#84] change seed words layout to lazy vertical grid

* fix: [#84] refactor seed words layout

* tiny resizing (#94)

* code and version bump

* change break (#97)

adds a android user agent and externalID

* build code number

fix: [#96] remove bottom_nav_menu_us and just using bottom_nav_menu for consistency (#98)

* fix: [#137] fix: Reset fiat options in Buy / Receive modal (#99)

* Chore/update device data (#100)

* change break

adds a android user agent and externalID

* Update ReceiveDialogViewModel.kt

* chore: refactor request params for fetchMoonpaySignedUrl

---------

Co-authored-by: andhikayuana <andhikayuana@gmail.com>

* Update build.gradle.kts

---------

Co-authored-by: andhikayuana <andhikayuana@gmail.com>

* 🚀[Release v4.6.0] Merge into Main (#104)

* Revert "Updated the APIManager"

This reverts commit 4e252ac29cfb6c3ab26ae5ea4a8f6de154311f2e.

# Conflicts:
#	app/src/main/java/com/brainwallet/tools/manager/APIManager.kt

* Reverted the Kotlin APIManager.

* Add version and code to welcome screen

* reset padding

* Revert "Updated the APIManager"

This reverts commit 4e252ac29cfb6c3ab26ae5ea4a8f6de154311f2e.

# Conflicts:
#	app/src/main/java/com/brainwallet/tools/manager/APIManager.kt

* Reverted the Kotlin APIManager.

* fix: fix crash when FragmentSignal dismissed

* fix: fix sync after wipe

* fix: fix wrong lifecycle to trigger callback at FragmentSignal

* Update issue templates

* updated core changes

per @andhikayuana

* Rename .java to .kt

* chore: refactor BRApiManager & APIClient

* chore: remove unused part at APIClient

* feat: wip new peer discovery

* feat: implement selected peer ip address from cache (fetched from API)

* feat: implement selected peer ip address from cache (fetched from API)

* feat: filter out peers with NODE_NETWORK, NODE_BLOOM

* fix: race condition when clear shared prefs values after wipeAll

* Updating the core library

from the new peer discovery (v4.2.0)

* Chore/revert pre peer discovery (Android) (#69)

* chore: update core submodule

* chore: resolve conflict

* Update build.gradle.kts

version and code bump

* chore: for now at BRPeerManager.wrapConnectV2 only using connect, since the core using hardcoded peers

* fix: fix write down confirm screen (#63)

* fix: fix write down confirm screen

* fix: fix allow seed word item not unique

* chore: cherry picked and adjust from
- f2fa8e1e4fb9c7429fa86461b24b4463a7969ecf
- 98644c425b2fdae7b8b424708fb1a61ad983a9d8
- 93969278da8f95adc0c9f0f8411c8a27876a4d77
- 7ad4b9853b7d1bf7ddbaa576242d8800615a48fb
- 8e57d2a67420565b40b753dec5a533776da4821f

* fix: fix crash can't parse response inside LtcRepository.fetchRates

* fix: fix crash (failed parse) when SelectedPeersRepository.fetchSelectedPeers got unsuccessful response

* code bump

* fix: ConcurrentModificationException at BRPeerManager.txStatusUpdate

* feat: implement new API

* code bump

---------

Co-authored-by: Kerry Washington <mrkerrywashington@icloud.com>

* feat: remove unused activity (ImportActivity) at AndroidManifest.xml (#71)

* fix: fix crash IllegalStateException: cannot make a new request because the previous response is still open (#73)

* code bump

* Feat/move tx fee (#74)

* chore: add new translations at strings.xml

* feat: move network fee to HomeSettingDrawerSheet & remove unused code

* fix: fix dismiss allow state loss (#76)

* fix: fix typo at strings.xml (#75)

* feat: new UI for receive and topup flow (moonpay integration) (#72)

* feat: [WIP][UI] new UI for receive and topup flow

* feat: [WIP][UI] implement copy address and some refactor

* feat: replace webview using CustomTabsIntent from androidx.browser

* feat: replace webview using CustomTabsIntent from androidx.browser

* feat: add PickerWheel

* chore: rename param at QRUtils.generateQR

* chore: revert default startDestination at BrainwalletActivity

* feat: wip moonpay integration

* feat: wip moonpay integration

* chore: new UI for ReceiveDialog

* chore: parse error from response API at BrainwalletViewModel

* chore: add /moonpay/buy-quote and remove dev base url

* chore: make LegacyNavigation.showMoonPayWidget receive params for the widget url

* chore: add GetMoonpayBuyQuoteResponse

* chore: wip moonpay integration to call buy-quote

* fix: fix wheel picker for IDR at ReceiveDialog

* fix: fix invalid signature

* feat: moonpay integration at onboarding flow at BuyLitecoinScreen also fix some stuffs

* chore: replace base url for moonpay buy integration when debug

* chore: introduce LocalCacheSource.kt and cache fetch limits

* chore: adjustment receive dialog UI
- debounce fiat currency to 2s
- increment in 10
- remove decimal places
- default value to 10% of range

* chore: reorder bottom navigation item and add new strings

* chore: add new translations

* chore: refactor UI for buy and receive dialog

* chore: cleanup ReceiveDialogViewModel

* chore: using MoonpayBuyWidget

* chore: adjustment moonpaywidget

* chore: for now moonpay widget using CustomTabsIntent

* version and code bump

* Added support url (#81)

- changed the language
- code bump

* version and code bump

* Revert from eda0f532 & cherry pick (#86)

* version bump

* feat: new UI for receive and topup flow (moonpay integration) (#72)

* feat: [WIP][UI] new UI for receive and topup flow

* feat: [WIP][UI] implement copy address and some refactor

* feat: replace webview using CustomTabsIntent from androidx.browser

* feat: replace webview using CustomTabsIntent from androidx.browser

* feat: add PickerWheel

* chore: rename param at QRUtils.generateQR

* chore: revert default startDestination at BrainwalletActivity

* feat: wip moonpay integration

* feat: wip moonpay integration

* chore: new UI for ReceiveDialog

* chore: parse error from response API at BrainwalletViewModel

* chore: add /moonpay/buy-quote and remove dev base url

* chore: make LegacyNavigation.showMoonPayWidget receive params for the widget url

* chore: add GetMoonpayBuyQuoteResponse

* chore: wip moonpay integration to call buy-quote

* fix: fix wheel picker for IDR at ReceiveDialog

* fix: fix invalid signature

* feat: moonpay integration at onboarding flow at BuyLitecoinScreen also fix some stuffs

* chore: replace base url for moonpay buy integration when debug

* chore: introduce LocalCacheSource.kt and cache fetch limits

* chore: adjustment receive dialog UI
- debounce fiat currency to 2s
- increment in 10
- remove decimal places
- default value to 10% of range

* chore: reorder bottom navigation item and add new strings

* chore: add new translations

* chore: refactor UI for buy and receive dialog

* chore: cleanup ReceiveDialogViewModel

* chore: using MoonpayBuyWidget

* chore: adjustment moonpaywidget

* chore: for now moonpay widget using CustomTabsIntent

* chore: set allowSpend to false when recommend rescan click

* fix: add delete transaction data from local database

* Removed chatty event

* chore: add analytics at BRWalletManager.publishCallback

* chore: make sure calculation and static fee same as iOS, add setting for selected fee type

---------

Co-authored-by: Kerry Washington <mrkerrywashington@icloud.com>

* build bump

* chore: open bread activity first then open moonpay widget (#88)

* Adjustment for circleci (#89)

* chore: wip adjustment for screengrab

* chore: [circleci] adjust config.yml

* chore: [circleci] update config.yml, Fastfile, Gemfile.lock, RecoverWalletScreenGrabsTest.kt

* chore: [circleci] for now just unit-test

* fix: android: Footer version label is obfuscated (#92)

* fix: android: Footer version label is obfuscated

* fix: [#92] android: Footer version label is obfuscated

* fix: You saved it right screen reset button covers words (#93)

* fix: [#84] change seed words layout to lazy vertical grid

* fix: [#84] refactor seed words layout

* tiny resizing (#94)

* code and version bump

* change break (#97)

adds a android user agent and externalID

* build code number

fix: [#96] remove bottom_nav_menu_us and just using bottom_nav_menu for consistency (#98)

* fix: [#137] fix: Reset fiat options in Buy / Receive modal (#99)

* Chore/update device data (#100)

* change break

adds a android user agent and externalID

* Update ReceiveDialogViewModel.kt

* chore: refactor request params for fetchMoonpaySignedUrl

---------

Co-authored-by: andhikayuana <andhikayuana@gmail.com>

* Add agent string obfuscation (#103)

* version bump

* code bump

---------

Co-authored-by: andhikayuana <andhikayuana@gmail.com>

* 🚀[Release v4.6.1] Merge into Main (#107)

* Revert "Updated the APIManager"

This reverts commit 4e252ac29cfb6c3ab26ae5ea4a8f6de154311f2e.

# Conflicts:
#	app/src/main/java/com/brainwallet/tools/manager/APIManager.kt

* Reverted the Kotlin APIManager.

* Add version and code to welcome screen

* reset padding

* Revert "Updated the APIManager"

This reverts commit 4e252ac29cfb6c3ab26ae5ea4a8f6de154311f2e.

# Conflicts:
#	app/src/main/java/com/brainwallet/tools/manager/APIManager.kt

* Reverted the Kotlin APIManager.

* fix: fix crash when FragmentSignal dismissed

* fix: fix sync after wipe

* fix: fix wrong lifecycle to trigger callback at FragmentSignal

* Update issue templates

* updated core changes

per @andhikayuana

* Rename .java to .kt

* chore: refactor BRApiManager & APIClient

* chore: remove unused part at APIClient

* feat: wip new peer discovery

* feat: implement selected peer ip address from cache (fetched from API)

* feat: implement selected peer ip address from cache (fetched from API)

* feat: filter out peers with NODE_NETWORK, NODE_BLOOM

* fix: race condition when clear shared prefs values after wipeAll

* Updating the core library

from the new peer discovery (v4.2.0)

* Chore/revert pre peer discovery (Android) (#69)

* chore: update core submodule

* chore: resolve conflict

* Update build.gradle.kts

version and code bump

* chore: for now at BRPeerManager.wrapConnectV2 only using connect, since the core using hardcoded peers

* fix: fix write down confirm screen (#63)

* fix: fix write down confirm screen

* fix: fix allow seed word item not unique

* chore: cherry picked and adjust from
- f2fa8e1e4fb9c7429fa86461b24b4463a7969ecf
- 98644c425b2fdae7b8b424708fb1a61ad983a9d8
- 93969278da8f95adc0c9f0f8411c8a27876a4d77
- 7ad4b9853b7d1bf7ddbaa576242d8800615a48fb
- 8e57d2a67420565b40b753dec5a533776da4821f

* fix: fix crash can't parse response inside LtcRepository.fetchRates

* fix: fix crash (failed parse) when SelectedPeersRepository.fetchSelectedPeers got unsuccessful response

* code bump

* fix: ConcurrentModificationException at BRPeerManager.txStatusUpdate

* feat: implement new API

* code bump

---------

Co-authored-by: Kerry Washington <mrkerrywashington@icloud.com>

* feat: remove unused activity (ImportActivity) at AndroidManifest.xml (#71)

* fix: fix crash IllegalStateException: cannot make a new request because the previous response is still open (#73)

* code bump

* Feat/move tx fee (#74)

* chore: add new translations at strings.xml

* feat: move network fee to HomeSettingDrawerSheet & remove unused code

* fix: fix dismiss allow state loss (#76)

* fix: fix typo at strings.xml (#75)

* feat: new UI for receive and topup flow (moonpay integration) (#72)

* feat: [WIP][UI] new UI for receive and topup flow

* feat: [WIP][UI] implement copy address and some refactor

* feat: replace webview using CustomTabsIntent from androidx.browser

* feat: replace webview using CustomTabsIntent from androidx.browser

* feat: add PickerWheel

* chore: rename param at QRUtils.generateQR

* chore: revert default startDestination at BrainwalletActivity

* feat: wip moonpay integration

* feat: wip moonpay integration

* chore: new UI for ReceiveDialog

* chore: parse error from response API at BrainwalletViewModel

* chore: add /moonpay/buy-quote and remove dev base url

* chore: make LegacyNavigation.showMoonPayWidget receive params for the widget url

* chore: add GetMoonpayBuyQuoteResponse

* chore: wip moonpay integration to call buy-quote

* fix: fix wheel picker for IDR at ReceiveDialog

* fix: fix invalid signature

* feat: moonpay integration at onboarding flow at BuyLitecoinScreen also fix some stuffs

* chore: replace base url for moonpay buy integration when debug

* chore: introduce LocalCacheSource.kt and cache fetch limits

* chore: adjustment receive dialog UI
- debounce fiat currency to 2s
- increment in 10
- remove decimal places
- default value to 10% of range

* chore: reorder bottom navigation item and add new strings

* chore: add new translations

* chore: refactor UI for buy and receive dialog

* chore: cleanup ReceiveDialogViewModel

* chore: using MoonpayBuyWidget

* chore: adjustment moonpaywidget

* chore: for now moonpay widget using CustomTabsIntent

* version and code bump

* Added support url (#81)

- changed the language
- code bump

* version and code bump

* Revert from eda0f532 & cherry pick (#86)

* version bump

* feat: new UI for receive and topup flow (moonpay integration) (#72)

* feat: [WIP][UI] new UI for receive and topup flow

* feat: [WIP][UI] implement copy address and some refactor

* feat: replace webview using CustomTabsIntent from androidx.browser

* feat: replace webview using CustomTabsIntent from androidx.browser

* feat: add PickerWheel

* chore: rename param at QRUtils.generateQR

* chore: revert default startDestination at BrainwalletActivity

* feat: wip moonpay integration

* feat: wip moonpay integration

* chore: new UI for ReceiveDialog

* chore: parse error from response API at BrainwalletViewModel

* chore: add /moonpay/buy-quote and remove dev base url

* chore: make LegacyNavigation.showMoonPayWidget receive params for the widget url

* chore: add GetMoonpayBuyQuoteResponse

* chore: wip moonpay integration to call buy-quote

* fix: fix wheel picker for IDR at ReceiveDialog

* fix: fix invalid signature

* feat: moonpay integration at onboarding flow at BuyLitecoinScreen also fix some stuffs

* chore: replace base url for moonpay buy integration when debug

* chore: introduce LocalCacheSource.kt and cache fetch limits

* chore: adjustment receive dialog UI
- debounce fiat currency to 2s
- increment in 10
- remove decimal places
- default value to 10% of range

* chore: reorder bottom navigation item and add new strings

* chore: add new translations

* chore: refactor UI for buy and receive dialog

* chore: cleanup ReceiveDialogViewModel

* chore: using MoonpayBuyWidget

* chore: adjustment moonpaywidget

* chore: for now moonpay widget using CustomTabsIntent

* chore: set allowSpend to false when recommend rescan click

* fix: add delete transaction data from local database

* Removed chatty event

* chore: add analytics at BRWalletManager.publishCallback

* chore: make sure calculation and static fee same as iOS, add setting for selected fee type

---------

Co-authored-by: Kerry Washington <mrkerrywashington@icloud.com>

* build bump

* chore: open bread activity first then open moonpay widget (#88)

* Adjustment for circleci (#89)

* chore: wip adjustment for screengrab

* chore: [circleci] adjust config.yml

* chore: [circleci] update config.yml, Fastfile, Gemfile.lock, RecoverWalletScreenGrabsTest.kt

* chore: [circleci] for now just unit-test

* fix: android: Footer version label is obfuscated (#92)

* fix: android: Footer version label is obfuscated

* fix: [#92] android: Footer version label is obfuscated

* fix: You saved it right screen reset button covers words (#93)

* fix: [#84] change seed words layout to lazy vertical grid

* fix: [#84] refactor seed words layout

* tiny resizing (#94)

* code and version bump

* change break (#97)

adds a android user agent and externalID

* build code number

fix: [#96] remove bottom_nav_menu_us and just using bottom_nav_menu for consistency (#98)

* fix: [#137] fix: Reset fiat options in Buy / Receive modal (#99)

* Chore/update device data (#100)

* change break

adds a android user agent and externalID

* Update ReceiveDialogViewModel.kt

* chore: refactor request params for fetchMoonpaySignedUrl

---------

Co-authored-by: andhikayuana <andhikayuana@gmail.com>

* Add agent string obfuscation (#103)

* updated metadata (#105)

* chore: remove screen lock detection (#106)

* build bump

---------

Co-authored-by: andhikayuana <andhikayuana@gmail.com>

* 🚀[Release v4.6.2] Merge into Main (#110)

* Revert "Updated the APIManager"

This reverts commit 4e252ac29cfb6c3ab26ae5ea4a8f6de154311f2e.

# Conflicts:
#	app/src/main/java/com/brainwallet/tools/manager/APIManager.kt

* Reverted the Kotlin APIManager.

* Add version and code to welcome screen

* reset padding

* Revert "Updated the APIManager"

This reverts commit 4e252ac29cfb6c3ab26ae5ea4a8f6de154311f2e.

# Conflicts:
#	app/src/main/java/com/brainwallet/tools/manager/APIManager.kt

* Reverted the Kotlin APIManager.

* fix: fix crash when FragmentSignal dismissed

* fix: fix sync after wipe

* fix: fix wrong lifecycle to trigger callback at FragmentSignal

* Update issue templates

* updated core changes

per @andhikayuana

* Rename .java to .kt

* chore: refactor BRApiManager & APIClient

* chore: remove unused part at APIClient

* feat: wip new peer discovery

* feat: implement selected peer ip address from cache (fetched from API)

* feat: implement selected peer ip address from cache (fetched from API)

* feat: filter out peers with NODE_NETWORK, NODE_BLOOM

* fix: race condition when clear shared prefs values after wipeAll

* Updating the core library

from the new peer discovery (v4.2.0)

* Chore/revert pre peer discovery (Android) (#69)

* chore: update core submodule

* chore: resolve conflict

* Update build.gradle.kts

version and code bump

* chore: for now at BRPeerManager.wrapConnectV2 only using connect, since the core using hardcoded peers

* fix: fix write down confirm screen (#63)

* fix: fix write down confirm screen

* fix: fix allow seed word item not unique

* chore: cherry picked and adjust from
- f2fa8e1e4fb9c7429fa86461b24b4463a7969ecf
- 98644c425b2fdae7b8b424708fb1a61ad983a9d8
- 93969278da8f95adc0c9f0f8411c8a27876a4d77
- 7ad4b9853b7d1bf7ddbaa576242d8800615a48fb
- 8e57d2a67420565b40b753dec5a533776da4821f

* fix: fix crash can't parse response inside LtcRepository.fetchRates

* fix: fix crash (failed parse) when SelectedPeersRepository.fetchSelectedPeers got unsuccessful response

* code bump

* fix: ConcurrentModificationException at BRPeerManager.txStatusUpdate

* feat: implement new API

* code bump

---------

Co-authored-by: Kerry Washington <mrkerrywashington@icloud.com>

* feat: remove unused activity (ImportActivity) at AndroidManifest.xml (#71)

* fix: fix crash IllegalStateException: cannot make a new request because the previous response is still open (#73)

* code bump

* Feat/move tx fee (#74)

* chore: add new translations at strings.xml

* feat: move network fee to HomeSettingDrawerSheet & remove unused code

* fix: fix dismiss allow state loss (#76)

* fix: fix typo at strings.xml (#75)

* feat: new UI for receive and topup flow (moonpay integration) (#72)

* feat: [WIP][UI] new UI for receive and topup flow

* feat: [WIP][UI] implement copy address and some refactor

* feat: replace webview using CustomTabsIntent from androidx.browser

* feat: replace webview using CustomTabsIntent from androidx.browser

* feat: add PickerWheel

* chore: rename param at QRUtils.generateQR

* chore: revert default startDestination at BrainwalletActivity

* feat: wip moonpay integration

* feat: wip moonpay integration

* chore: new UI for ReceiveDialog

* chore: parse error from response API at BrainwalletViewModel

* chore: add /moonpay/buy-quote and remove dev base url

* chore: make LegacyNavigation.showMoonPayWidget receive params for the widget url

* chore: add GetMoonpayBuyQuoteResponse

* chore: wip moonpay integration to call buy-quote

* fix: fix wheel picker for IDR at ReceiveDialog

* fix: fix invalid signature

* feat: moonpay integration at onboarding flow at BuyLitecoinScreen also fix some stuffs

* chore: replace base url for moonpay buy integration when debug

* chore: introduce LocalCacheSource.kt and cache fetch limits

* chore: adjustment receive dialog UI
- debounce fiat currency to 2s
- increment in 10
- remove decimal places
- default value to 10% of range

* chore: reorder bottom navigation item and add new strings

* chore: add new translations

* chore: refactor UI for buy and receive dialog

* chore: cleanup ReceiveDialogViewModel

* chore: using MoonpayBuyWidget

* chore: adjustment moonpaywidget

* chore: for now moonpay widget using CustomTabsIntent

* version and code bump

* Added support url (#81)

- changed the language
- code bump

* version and code bump

* Revert from eda0f532 & cherry pick (#86)

* version bump

* feat: new UI for receive and topup flow (moonpay integration) (#72)

* feat: [WIP][UI] new UI for receive and topup flow

* feat: [WIP][UI] implement copy address and some refactor

* feat: replace webview using CustomTabsIntent from androidx.browser

* feat: replace webview using CustomTabsIntent from androidx.browser

* feat: add PickerWheel

* chore: rename param at QRUtils.generateQR

* chore: revert default startDestination at BrainwalletActivity

* feat: wip moonpay integration

* feat: wip moonpay integration

* chore: new UI for ReceiveDialog

* chore: parse error from response API at BrainwalletViewModel

* chore: add /moonpay/buy-quote and remove dev base url

* chore: make LegacyNavigation.showMoonPayWidget receive params for the widget url

* chore: add GetMoonpayBuyQuoteResponse

* chore: wip moonpay integration to call buy-quote

* fix: fix wheel picker for IDR at ReceiveDialog

* fix: fix invalid signature

* feat: moonpay integration at onboarding flow at BuyLitecoinScreen also fix some stuffs

* chore: replace base url for moonpay buy integration when debug

* chore: introduce LocalCacheSource.kt and cache fetch limits

* chore: adjustment receive dialog UI
- debounce fiat currency to 2s
- increment in 10
- remove decimal places
- default value to 10% of range

* chore: reorder bottom navigation item and add new strings

* chore: add new translations

* chore: refactor UI for buy and receive dialog

* chore: cleanup ReceiveDialogViewModel

* chore: using MoonpayBuyWidget

* chore: adjustment moonpaywidget

* chore: for now moonpay widget using CustomTabsIntent

* chore: set allowSpend to false when recommend rescan click

* fix: add delete transaction data from local database

* Removed chatty event

* chore: add analytics at BRWalletManager.publishCallback

* chore: make sure calculation and static fee same as iOS, add setting for selected fee type

---------

Co-authored-by: Kerry Washington <mrkerrywashington@icloud.com>

* build bump

* chore: open bread activity first then open moonpay widget (#88)

* Adjustment for circleci (#89)

* chore: wip adjustment for screengrab

* chore: [circleci] adjust config.yml

* chore: [circleci] update config.yml, Fastfile, Gemfile.lock, RecoverWalletScreenGrabsTest.kt

* chore: [circleci] for now just unit-test

* fix: android: Footer version label is obfuscated (#92)

* fix: android: Footer version label is obfuscated

* fix: [#92] android: Footer version label is obfuscated

* fix: You saved it right screen reset button covers words (#93)

* fix: [#84] change seed words layout to lazy vertical grid

* fix: [#84] refactor seed words layout

* tiny resizing (#94)

* code and version bump

* change break (#97)

adds a android user agent and externalID

* build code number

fix: [#96] remove bottom_nav_menu_us and just using bottom_nav_menu for consistency (#98)

* fix: [#137] fix: Reset fiat options in Buy / Receive modal (#99)

* Chore/update device data (#100)

* change break

adds a android user agent and externalID

* Update ReceiveDialogViewModel.kt

* chore: refactor request params for fetchMoonpaySignedUrl

---------

Co-authored-by: andhikayuana <andhikayuana@gmail.com>

* Add agent string obfuscation (#103)

* updated metadata (#105)

* chore: remove screen lock detection (#106)

* changed to tap

* Added instruction label

-added localizations

* Added 'empty string for when confirm is completed

* version and code bump

* fix typo

replaced click file with mp3
added error sound

* added 3 languages

* 🧰  Fx/seed words UI polish (#108)

* changed to tap

* Added instruction label

-added localizations

* Added 'empty string for when confirm is completed

* version and code bump

* fix typo

replaced click file with mp3
added error sound

* Removed unused audio files

* polished tests

* removed unused asset pack

* code bump

* code bump

* ❇️ Feat/add polish punjabi farsi (#109)

* changed to tap

* Added instruction label

-added localizations

* Added 'empty string for when confirm is completed

* version and code bump

* fix typo

replaced click file with mp3
added error sound

* added 3 languages

* Removed unused audio files

* polished tests

* removed unused asset pack

* code bump

* broke out completion of the seed phrase and navigation

- Feedback was a user could complete seed phrase and not tap "Game and Sync"
- Forced users to start all over
- Saved a correct seed phrase confirmation into memory

* code bump

* fix for

https://console.firebase.google.com/project/brainwallet-mobile/crashlytics/app/android:ltd.grunt.brainwallet/issues/1386f366ab35e9112a6b742d629bb0be?time=last-seven-days&types=crash&sessionEventKey=685DA96C00BF00015A7AFEA30E0DB49C_2098799426616143441

* measure where users tap

* code bump

* fix: fix YourSeedProveItState.isWordUsedCorrectly

* Cleaned commented out BuyLitecoinscreen

* code bump

---------

Co-authored-by: andhikayuana <andhikayuana@gmail.com>

* 🚀[Release v4.7.0] Merge into Main  (#115)

* Revert "Updated the APIManager"

This reverts commit 4e252ac29cfb6c3ab26ae5ea4a8f6de154311f2e.

# Conflicts:
#	app/src/main/java/com/brainwallet/tools/manager/APIManager.kt

* Reverted the Kotlin APIManager.

* Add version and code to welcome screen

* reset padding

* Revert "Updated the APIManager"

This reverts commit 4e252ac29cfb6c3ab26ae5ea4a8f6de154311f2e.

# Conflicts:
#	app/src/main/java/com/brainwallet/tools/manager/APIManager.kt

* Reverted the Kotlin APIManager.

* fix: fix crash when FragmentSignal dismissed

* fix: fix sync after wipe

* fix: fix wrong lifecycle to trigger callback at FragmentSignal

* Update issue templates

* updated core changes

per @andhikayuana

* Rename .java to .kt

* chore: refactor BRApiManager & APIClient

* chore: remove unused part at APIClient

* feat: wip new peer discovery

* feat: implement selected peer ip address from cache (fetched from API)

* feat: implement selected peer ip address from cache (fetched from API)

* feat: filter out peers with NODE_NETWORK, NODE_BLOOM

* fix: race condition when clear shared prefs values after wipeAll

* Updating the core library

from the new peer discovery (v4.2.0)

* Chore/revert pre peer discovery (Android) (#69)

* chore: update core submodule

* chore: resolve conflict

* Update build.gradle.kts

version and code bump

* chore: for now at BRPeerManager.wrapConnectV2 only using connect, since the core using hardcoded peers

* fix: fix write down confirm screen (#63)

* fix: fix write down confirm screen

* fix: fix allow seed word item not unique

* chore: cherry picked and adjust from
- f2fa8e1e4fb9c7429fa86461b24b4463a7969ecf
- 98644c425b2fdae7b8b424708fb1a61ad983a9d8
- 93969278da8f95adc0c9f0f8411c8a27876a4d77
- 7ad4b9853b7d1bf7ddbaa576242d8800615a48fb
- 8e57d2a67420565b40b753dec5a533776da4821f

* fix: fix crash can't parse response inside LtcRepository.fetchRates

* fix: fix crash (failed parse) when SelectedPeersRepository.fetchSelectedPeers got unsuccessful response

* code bump

* fix: ConcurrentModificationException at BRPeerManager.txStatusUpdate

* feat: implement new API

* code bump

---------

Co-authored-by: Kerry Washington <mrkerrywashington@icloud.com>

* feat: remove unused activity (ImportActivity) at AndroidManifest.xml (#71)

* fix: fix crash IllegalStateException: cannot make a new request because the previous response is still open (#73)

* code bump

* Feat/move tx fee (#74)

* chore: add new translations at strings.xml

* feat: move network fee to HomeSettingDrawerSheet & remove unused code

* fix: fix dismiss allow state loss (#76)

* fix: fix typo at strings.xml (#75)

* feat: new UI for receive and topup flow (moonpay integration) (#72)

* feat: [WIP][UI] new UI for receive and topup flow

* feat: [WIP][UI] implement copy address and some refactor

* feat: replace webview using CustomTabsIntent from androidx.browser

* feat: replace webview using CustomTabsIntent from androidx.browser

* feat: add PickerWheel

* chore: rename param at QRUtils.generateQR

* chore: revert default startDestination at BrainwalletActivity

* feat: wip moonpay integration

* feat: wip moonpay integration

* chore: new UI for ReceiveDialog

* chore: parse error from response API at BrainwalletViewModel

* chore: add /moonpay/buy-quote and remove dev base url

* chore: make LegacyNavigation.showMoonPayWidget receive params for the widget url

* chore: add GetMoonpayBuyQuoteResponse

* chore: wip moonpay integration to call buy-quote

* fix: fix wheel picker for IDR at ReceiveDialog

* fix: fix invalid signature

* feat: moonpay integration at onboarding flow at BuyLitecoinScreen also fix some stuffs

* chore: replace base url for moonpay buy integration when debug

* chore: introduce LocalCacheSource.kt and cache fetch limits

* chore: adjustment receive dialog UI
- debounce fiat currency to 2s
- increment in 10
- remove decimal places
- default value to 10% of range

* chore: reorder bottom navigation item and add new strings

* chore: add new translations

* chore: refactor UI for buy and receive dialog

* chore: cleanup ReceiveDialogViewModel

* chore: using MoonpayBuyWidget

* chore: adjustment moonpaywidget

* chore: for now moonpay widget using CustomTabsIntent

* version and code bump

* Added support url (#81)

- changed the language
- code bump

* version and code bump

* Revert from eda0f532 & cherry pick (#86)

* version bump

* feat: new UI for receive and topup flow (moonpay integration) (#72)

* feat: [WIP][UI] new UI for receive and topup flow

* feat: [WIP][UI] implement copy address and some refactor

* feat: replace webview using CustomTabsIntent from androidx.browser

* feat: replace webview using CustomTabsIntent from androidx.browser

* feat: add PickerWheel

* chore: rename param at QRUtils.generateQR

* chore: revert default startDestination at BrainwalletActivity

* feat: wip moonpay integration

* feat: wip moonpay integration

* chore: new UI for ReceiveDialog

* chore: parse error from response API at BrainwalletViewModel

* chore: add /moonpay/buy-quote and remove dev base url

* chore: make LegacyNavigation.showMoonPayWidget receive params for the widget url

* chore: add GetMoonpayBuyQuoteResponse

* chore: wip moonpay integration to call buy-quote

* fix: fix wheel picker for IDR at ReceiveDialog

* fix: fix invalid signature

* feat: moonpay integration at onboarding flow at BuyLitecoinScreen also fix some stuffs

* chore: replace base url for moonpay buy integration when debug

* chore: introduce LocalCacheSource.kt and cache fetch limits

* chore: adjustment receive dialog UI
- debounce fiat currency to 2s
- increment in 10
- remove decimal places
- default value to 10% of range

* chore: reorder bottom navigation item and add new strings

* chore: add new translations

* chore: refactor UI for buy and receive dialog

* chore: cleanup ReceiveDialogViewModel

* chore: using MoonpayBuyWidget

* chore: adjustment moonpaywidget

* chore: for now moonpay widget using CustomTabsIntent

* chore: set allowSpend to false when recommend rescan click

* fix: add delete transaction data from local database

* Removed chatty event

* chore: add analytics at BRWalletManager.publishCallback

* chore: make sure calculation and static fee same as iOS, add setting for selected fee type

---------

Co-authored-by: Kerry Washington <mrkerrywashington@icloud.com>

* build bump

* chore: open bread activity first then open moonpay widget (#88)

* Adjustment for circleci (#89)

* chore: wip adjustment for screengrab

* chore: [circleci] adjust config.yml

* chore: [circleci] update config.yml, Fastfile, Gemfile.lock, RecoverWalletScreenGrabsTest.kt

* chore: [circleci] for now just unit-test

* fix: android: Footer version label is obfuscated (#92)

* fix: android: Footer version label is obfuscated

* fix: [#92] android: Footer version label is obfuscated

* fix: You saved it right screen reset button covers words (#93)

* fix: [#84] change seed words layout to lazy vertical grid

* fix: [#84] refactor seed words layout

* tiny resizing (#94)

* code and version bump

* change break (#97)

adds a android user agent and externalID

* build code number

fix: [#96] remove bottom_nav_menu_us and just using bottom_nav_menu for consistency (#98)

* fix: [#137] fix: Reset fiat options in Buy / Receive modal (#99)

* Chore/update device data (#100)

* change break

adds a android user agent and externalID

* Update ReceiveDialogViewModel.kt

* chore: refactor request params for fetchMoonpaySignedUrl

---------

Co-authored-by: andhikayuana <andhikayuana@gmail.com>

* Add agent string obfuscation (#103)

* updated metadata (#105)

* chore: remove screen lock detection (#106)

* 🧰  Fx/seed words UI polish (#108)

* changed to tap

* Added instruction label

-added localizations

* Added 'empty string for when confirm is completed

* version and code bump

* fix typo

replaced click file with mp3
added error sound

* ❇️ Feat/add polish punjabi farsi (#109)

* changed to tap

* Added instruction label

-added localizations

* Added 'empty string for when confirm is completed

* version and code bump

* fix typo

replaced click file with mp3
added error sound

* added 3 languages

* Removed unused audio files

* polished tests

* removed unused asset pack

* code bump

* fix: fix YourSeedProveItState.isWordUsedCorrectly (#111)

* Upgrade targetSdk 36 (#113)

* chore: change drawable with density for brainwallet_logotype_white

* chore: adjustment WelcomeScreen.kt

* chore: adjustment for targetSdk 36 also support 16KB page size

* bump

clean extra semicolon

* Update pro-guard-rules

* Updated the version

---------

Co-authored-by: andhikayuana <andhikayuana@gmail.com>

* Updated games module to v1.1.0

* Updated the games submodule

* Renamed and tested with user skips

---------

Co-authored-by: andhikayuana <andhikayuana@gmail.com>

* Fix(#227): Crash when launching MoonPay Widget (#126)

Refactored the MoonPay widget integration to a dedicated Composable
(`MoonPayWidgetLauncher`) to ensure proper state handling and loading
behavior.

- Added `MoonPayWidgetLauncher.kt` with Composable and ViewModel
  for managing signed URL fetch and Custom Tab launch.
- Ensures loading state covers the whole screen, preventing UI crashes.
- Removed legacy static method `LegacyNavigation.showMoonPayWidget`.
- Updated `ReceiveDialog.kt` and `BuyLitecoinScreen.kt` to use the new
  Composable.
- Minor cleanup in `LegacyNavigation.kt`.

* feat(#138): Improve Unlock Screen UI and add dark mode toggle (#122)

* Redesign welcome screen (#123)

* Redesign welcome screen

* Redesign ready screen

* 🚀[Release v4.7.2] Merge into Develop (#127)

* 🚀[Release v4.4.7] Merge into Main  (#70)

* Revert "Updated the APIManager"

This reverts commit 4e252ac29cfb6c3ab26ae5ea4a8f6de154311f2e.

# Conflicts:
#	app/src/main/java/com/brainwallet/tools/manager/APIManager.kt

* Reverted the Kotlin APIManager.

* Add version and code to welcome screen

* reset padding

* Revert "Updated the APIManager"

This reverts commit 4e252ac29cfb6c3ab26ae5ea4a8f6de154311f2e.

# Conflicts:
#	a…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants