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
@@ -12,7 +12,7 @@ class DisclaimerPage extends BasePage {
final bool isReadOnly;
@override
String get title => 'Terms of Use';
String get title => 'Terms of Service';
@override
Widget? leading(BuildContext context) => isReadOnly ? super.leading(context) : null;
@@ -67,7 +67,7 @@ class DisclaimerBodyState extends State<DisclaimerPageBody> {
children: <Widget>[
Expanded(
child: Text(
'Terms and conditions',
'Terms of Service',
textAlign: TextAlign.center,
style: Theme.of(context).textTheme.titleLarge?.copyWith(
fontSize: 20.0,
@@ -84,7 +84,7 @@ class DisclaimerBodyState extends State<DisclaimerPageBody> {
children: <Widget>[
Expanded(
child: Text(
'Legal Disclaimer\nAnd\nTerms of Use',
'Legal Disclaimer\nand\nTerms of Service',
textAlign: TextAlign.center,
style: Theme.of(context).textTheme.bodySmall?.copyWith(
fontWeight: FontWeight.bold,
@@ -170,7 +170,7 @@ class DisclaimerBodyState extends State<DisclaimerPageBody> {
: null,
),
Text(
'I agree to Terms of Use',
'I agree to the Terms of Service',
style: Theme.of(context).textTheme.bodyMedium?.copyWith(
fontWeight: FontWeight.bold,
),
+1 -1
View File
@@ -115,7 +115,7 @@ class RootState extends State<Root> with WidgetsBindingObserver {
handleDeepLinking(await getInitialUri());
if (widget.initialQuickAction != null) {
final uri = Uri.parse('hashwallet://quickaction/${widget.initialQuickAction}');
final uri = Uri.parse('hashbags://quickaction/${widget.initialQuickAction}');
handleDeepLinking(uri);
}
@@ -75,7 +75,7 @@ abstract class WalletKitServiceBase with Store {
description: 'Hash Bags',
url: 'https://github.com/Such-Software/hash-wallet',
icons: ['https://github.com/Such-Software/hash-wallet/raw/dev/assets/images/app_logo.png'],
redirect: Redirect(native: 'hashwallet://'),
redirect: Redirect(native: 'hashbags://'),
),
);