Legal + release-readiness pass for Hash Bags launch

Legal (aligned with the hosted hash.boats Terms & Privacy):
- Rewrite in-app Terms (assets/text/Terms_of_Use.txt): drop the false 'No Fiat
  Operations'/'No Embedded Applications' clauses; add MoonPay (optional, where
  available), Trocador swaps + ~1% fee disclosure, WalletConnect, sanctions/18+,
  Apple EULA rider, and PA + class/jury-waiver dispute terms.
- Reconcile PRIVACY.md with the canonical hosted policy.
- Add THIRD_PARTY_LICENSES.md; correct the blanket 'MIT' claim in README (app
  code MIT; bundles BSD-3/Apache-2.0/LGPL-3.0); fix README build-doc + LICENSE.md
  links and copyright year.
- Standardize in-app legal naming to 'Terms of Service'; add in-app links to
  hash.boats/terms and /privacy.

Release fixes:
- Align URL scheme hashwallet:// -> hashbags:// (matches registered scheme) so
  WalletConnect/Trezor/quick-action deep links work.
- Store-review gating: hide Buy action until a provider is available; hide the
  empty 'Apps' tab.
- Exclude removed chains (SOL/TRX/ZEC/DCR/ZANO + tokens) from swap pickers.
- Residual Cake branding: macOS CFBundleDisplayName and Windows Runner.rc
  (Hash Wallet -> Hash Bags); remove Android cakewallet://y.at leftover.
- Genericize internal-infra comments in CI workflows.
This commit is contained in:
jwinterm
2026-07-02 14:07:24 -04:00
parent 86b4040c9b
commit 784a082f15
17 changed files with 254 additions and 91 deletions
@@ -637,7 +637,10 @@ abstract class DashboardViewModelBase with Store {
appStore.settingsStore.shouldShowMarketPlaceInDashboard;
@computed
bool get showApps => appStore.settingsStore.shouldShowMarketPlaceInDashboard;
// Hash Bags: no Apps/marketplace content yet — hide the empty tab so the
// dashboard doesn't ship a nav destination that only says "No apps available
// yet." Re-enable (return the setting) once there is real content to show.
bool get showApps => false;
@computed
List<TradeListItem> get trades => tradesStore.trades.where((trade) {
@@ -122,12 +122,25 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with
super(appStore: _appStore) {
_useTorOnly = _settingsStore.exchangeStatus == ExchangeApiMode.torOnly;
_setProviders();
const excludeDepositCurrencies = [CryptoCurrency.btt];
// Hash Bags: chains removed from the wallet are not offered as swap targets.
const removedChainCurrencies = [
CryptoCurrency.sol,
CryptoCurrency.trx,
CryptoCurrency.zec,
CryptoCurrency.dcr,
CryptoCurrency.zano,
CryptoCurrency.usdcsol,
CryptoCurrency.usdtSol,
CryptoCurrency.usdcTrc20,
CryptoCurrency.usdttrc20,
];
const excludeDepositCurrencies = [CryptoCurrency.btt, ...removedChainCurrencies];
const excludeReceiveCurrencies = [
CryptoCurrency.xlm,
CryptoCurrency.xrp,
CryptoCurrency.bnb,
CryptoCurrency.btt
CryptoCurrency.btt,
...removedChainCurrencies,
];
_initialPairBasedOnWallet();
+12
View File
@@ -33,6 +33,18 @@ abstract class SupportViewModelBase with Store {
hasIconColor: true,
linkTitle: S.current.apk_update,
link: 'https://github.com/Such-Software/hash-wallet/releases'),
LinkListItem(
title: 'Privacy Policy',
icon: 'assets/images/privacy_menu.png',
hasIconColor: true,
linkTitle: 'hash.boats/privacy',
link: 'https://hash.boats/privacy'),
LinkListItem(
title: 'Terms of Service',
icon: 'assets/images/privacy_menu.png',
hasIconColor: true,
linkTitle: 'hash.boats/terms',
link: 'https://hash.boats/terms'),
LinkListItem(
title: 'ChangeNow',
icon: 'assets/images/change_now.png',