mirror of
https://github.com/Such-Software/hash-wallet.git
synced 2026-10-17 05:41:29 +02:00
Deep Cake scrub: gut user-visible refs, swap SVG asset contents
URL replacements throughout lib/: - support_view_model.dart: removed Cake's own support channels (email, website, forum, Telegram, Telegram bot). Only GitHub Issues + Releases remain. Third-party provider support links (ChangeNow, SideShift, SimpleSwap, Exolix, Trocador, Onramper, DFX, MoonPay, Robinhood, Kryptonim) kept — genuinely useful when a swap goes sideways. - transaction_details_view_model.dart + payjoin_details_view_model.dart: mempool.cakewallet.com -> mempool.space (canonical free public mempool, no affiliate). - services_updates_widget.dart: status.cakewallet.com -> our GH issues. - 8 widget/screen files: docs.cakewallet.com / blog / cakewallet.com help URLs repointed to github.com/Such-Software/hash-wallet (placeholder until we have our own docs; better than dead-linking to Cake's docs). User-facing text changes: - walletkit_service.dart: WalletKit metadata (name/description/url/icon/ redirect) all -> Hash Wallet / Such Software repo / hashwallet:// scheme. - di.dart: TrezorConnect callback URL + appName -> Hash Wallet. - vulnerable_seeds_popup.dart + haven_wallet_removal_popup.dart: copy rewritten to say 'Hash Wallet' instead of 'Cake Wallet', and point to GH issues instead of Cake's support email. - swap_provider_initial_preference_modal.dart: trailing 'Cake Wallet.' -> 'Hash Wallet.' Deep-link URL scheme cakewallet:// -> hashwallet:// in: - lib/main.dart, lib/src/screens/root/root.dart, lib/view_model/link_view_model.dart Means any cakewallet:// link from a payment QR / Trezor callback / shortcut now routes via hashwallet://. No existing user base so no migration needed. SVG asset swaps (content replaced, filenames kept so call-sites compile without rewriting): - assets/new-ui/cake_squircle_icon.svg -> hash_wallet/02_app_icon.svg - assets/new-ui/cakewallet-wordmark-light.svg -> hash_wallet/03_lockup_horizontal.svg (dark text for light backgrounds) - assets/new-ui/cakewallet-wordmark.svg -> hash_wallet/03_lockup_horizontal_dark.svg (light text for dark backgrounds) - apps_widget.dart: the conditional cakelabs-icon render became a SizedBox() no-op. The Apps tab is gutted anyway (placeholder content); this widget is also used elsewhere where the Cake Labs attribution badge is unwanted.
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="512" height="512">
|
||||
<title>Hash Wallet app icon</title>
|
||||
<desc>Hash Wallet app icon: brand-green rounded square with a centered white hash.</desc>
|
||||
<rect width="512" height="512" rx="112" fill="#1a5c38"/>
|
||||
<text x="256" y="390" font-family="ui-monospace, 'JetBrains Mono', 'Courier New', monospace" font-size="380" font-weight="700" fill="#ffffff" text-anchor="middle">#</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 489 B |
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 360 100" width="360" height="100">
|
||||
<title>Hash Wallet horizontal lockup</title>
|
||||
<desc>Hash Wallet logo with green-boxed hash mark on the left and Hash Wallet wordmark to the right.</desc>
|
||||
<rect x="10" y="18" width="64" height="64" rx="14" fill="#1a5c38"/>
|
||||
<text x="42" y="68" font-family="ui-monospace, 'JetBrains Mono', 'Courier New', monospace" font-size="48" font-weight="700" fill="#ffffff" text-anchor="middle">#</text>
|
||||
<text x="90" y="63" font-family="ui-monospace, 'JetBrains Mono', 'Courier New', monospace" font-size="32" font-weight="500" fill="#1a1a1a">Hash Wallet</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 682 B |
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 360 100" width="360" height="100">
|
||||
<title>Hash Wallet horizontal lockup (dark theme)</title>
|
||||
<desc>Hash Wallet logo with green-boxed hash mark on the left and a white wordmark to the right, intended for dark-theme backgrounds.</desc>
|
||||
<rect x="10" y="18" width="64" height="64" rx="14" fill="#1a5c38"/>
|
||||
<text x="42" y="68" font-family="ui-monospace, 'JetBrains Mono', 'Courier New', monospace" font-size="48" font-weight="700" fill="#ffffff" text-anchor="middle">#</text>
|
||||
<text x="90" y="63" font-family="ui-monospace, 'JetBrains Mono', 'Courier New', monospace" font-size="32" font-weight="500" fill="#ffffff">Hash Wallet</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 728 B |
+2
-2
@@ -435,8 +435,8 @@ Future<void> setup({
|
||||
|
||||
getIt.registerLazySingleton(() => BitboxViewModel());
|
||||
|
||||
getIt.registerLazySingleton(() => TrezorConnect("cakewallet://trezor_connect",
|
||||
appName: "Cake Wallet"));
|
||||
getIt.registerLazySingleton(() => TrezorConnect("hashwallet://trezor_connect",
|
||||
appName: "Hash Wallet"));
|
||||
getIt.registerLazySingleton(() => TrezorViewModel(getIt<TrezorConnect>()));
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -97,7 +97,7 @@ Future<void> runAppWithZone({Key? topLevelKey}) async {
|
||||
}
|
||||
|
||||
// Convert the shortcut type to a URI and add it to the stream
|
||||
final uri = Uri.parse('cakewallet://quickaction/$shortcutType');
|
||||
final uri = Uri.parse('hashwallet://quickaction/$shortcutType');
|
||||
quickActionsStream.sink.add(uri);
|
||||
});
|
||||
|
||||
|
||||
@@ -94,7 +94,7 @@ class AppsWidget extends StatelessWidget {
|
||||
),
|
||||
softWrap: true,
|
||||
),
|
||||
isCake == true ? CakeImageWidget(imageUrl: "assets/new-ui/cakelabs-icon.svg", color: Theme.of(context).colorScheme.onSurfaceVariant) : SizedBox(),
|
||||
SizedBox(),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 5),
|
||||
|
||||
@@ -26,7 +26,7 @@ class SwapProviderInitialPreferenceModal extends StatelessWidget {
|
||||
children: [
|
||||
CakeImageWidget(imageUrl:"assets/new-ui/exchange_providers.svg"),
|
||||
Text(
|
||||
"${S.of(context).swap_provider_initial_desc} Cake Wallet.",
|
||||
"${S.of(context).swap_provider_initial_desc} Hash Wallet.",
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
color: Theme.of(context).colorScheme.onSurfaceVariant, fontSize: 16),
|
||||
|
||||
@@ -670,9 +670,9 @@ class BalanceRowWidget extends StatelessWidget {
|
||||
}
|
||||
|
||||
void onPressedHelp() {
|
||||
var helpUri = Uri.parse("https://docs.cakewallet.com/cryptos/bitcoin#lightning");
|
||||
var helpUri = Uri.parse("https://github.com/Such-Software/hash-wallet");
|
||||
if (dashboardViewModel.type == WalletType.litecoin) {
|
||||
helpUri = Uri.parse("https://docs.cakewallet.com/cryptos/litecoin#mweb");
|
||||
helpUri = Uri.parse("https://github.com/Such-Software/hash-wallet");
|
||||
}
|
||||
|
||||
launchUrl(helpUri, mode: LaunchMode.externalApplication);
|
||||
|
||||
@@ -263,7 +263,7 @@ class CryptoBalanceWidget extends StatelessWidget {
|
||||
behavior: HitTestBehavior.opaque,
|
||||
onTap: () => launchUrl(
|
||||
Uri.parse(
|
||||
"https://docs.cakewallet.com/cryptos/bitcoin#silent-payments"),
|
||||
"https://github.com/Such-Software/hash-wallet"),
|
||||
mode: LaunchMode.externalApplication,
|
||||
),
|
||||
child: Row(
|
||||
@@ -319,7 +319,7 @@ class CryptoBalanceWidget extends StatelessWidget {
|
||||
hintWidget: GestureDetector(
|
||||
behavior: HitTestBehavior.opaque,
|
||||
onTap: () => launchUrl(
|
||||
Uri.parse("https://docs.cakewallet.com/cryptos/litecoin/#mweb"),
|
||||
Uri.parse("https://github.com/Such-Software/hash-wallet"),
|
||||
mode: LaunchMode.externalApplication,
|
||||
),
|
||||
child: Text(
|
||||
@@ -349,7 +349,7 @@ class CryptoBalanceWidget extends StatelessWidget {
|
||||
hintWidget: GestureDetector(
|
||||
behavior: HitTestBehavior.opaque,
|
||||
onTap: () => launchUrl(
|
||||
Uri.parse("https://docs.cakewallet.com/tutorials/zashi/#creating-a-new-zcash-wallet-on-cake"),
|
||||
Uri.parse("https://github.com/Such-Software/hash-wallet"),
|
||||
mode: LaunchMode.externalApplication,
|
||||
),
|
||||
child: Text(
|
||||
@@ -376,7 +376,7 @@ class CryptoBalanceWidget extends StatelessWidget {
|
||||
rightButtonTitle: S.of(context).learn_more,
|
||||
leftButtonAction: () => dashboardViewModel.dismissDecredInfoCard(),
|
||||
rightButtonAction: () => launchUrl(
|
||||
Uri.parse("https://docs.cakewallet.com/cryptos/decred/#spv-sync")),
|
||||
Uri.parse("https://github.com/Such-Software/hash-wallet")),
|
||||
),
|
||||
),
|
||||
],
|
||||
@@ -390,7 +390,7 @@ class CryptoBalanceWidget extends StatelessWidget {
|
||||
hintWidget: GestureDetector(
|
||||
behavior: HitTestBehavior.opaque,
|
||||
onTap: () => launchUrl(
|
||||
Uri.parse("https://docs.cakewallet.com/cryptos/bitcoin/#payjoin"),
|
||||
Uri.parse("https://github.com/Such-Software/hash-wallet"),
|
||||
mode: LaunchMode.externalApplication,
|
||||
),
|
||||
child: Row(
|
||||
|
||||
@@ -52,7 +52,7 @@ class TransactionsPage extends StatelessWidget {
|
||||
key: ValueKey('transactions_page_syncing_alert_card_key'),
|
||||
onTap: () {
|
||||
try {
|
||||
final uri = Uri.parse("https://docs.cakewallet.com/faq/funds-not-appearing");
|
||||
final uri = Uri.parse("https://github.com/Such-Software/hash-wallet");
|
||||
launchUrl(uri, mode: LaunchMode.externalApplication);
|
||||
} catch (_) {}
|
||||
},
|
||||
|
||||
@@ -311,7 +311,7 @@ class QRWidget extends StatelessWidget {
|
||||
footerType: FooterType.doubleActionButton,
|
||||
doubleActionLeftButtonText: S.of(context).learn_more,
|
||||
onLeftActionButtonPressed: () => launchUrl(
|
||||
Uri.parse("https://docs.cakewallet.com/cryptos/bitcoin/#payjoin"),
|
||||
Uri.parse("https://github.com/Such-Software/hash-wallet"),
|
||||
mode: LaunchMode.externalApplication),
|
||||
doubleActionRightButtonText: S.of(context).ok,
|
||||
onRightActionButtonPressed: () => Navigator.of(context).pop(),
|
||||
|
||||
@@ -115,7 +115,7 @@ class RootState extends State<Root> with WidgetsBindingObserver {
|
||||
handleDeepLinking(await getInitialUri());
|
||||
|
||||
if (widget.initialQuickAction != null) {
|
||||
final uri = Uri.parse('cakewallet://quickaction/${widget.initialQuickAction}');
|
||||
final uri = Uri.parse('hashwallet://quickaction/${widget.initialQuickAction}');
|
||||
handleDeepLinking(uri);
|
||||
}
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ class Setup2FAPage extends BasePage {
|
||||
Widget body(BuildContext context) {
|
||||
final cake2FAGuideTitle = 'Cake 2FA Guide';
|
||||
final cake2FAGuideUri =
|
||||
Uri.parse('https://docs.cakewallet.com/features/advanced/authentication/');
|
||||
Uri.parse('https://github.com/Such-Software/hash-wallet');
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
|
||||
@@ -26,7 +26,7 @@ class Setup2FAQRPage extends BasePage {
|
||||
final copyImage = Image.asset('assets/images/copy_content.png',
|
||||
height: 16, width: 16, color: Theme.of(context).colorScheme.onSurface);
|
||||
final cake2FAHowToUseUrl = Uri.parse(
|
||||
'https://docs.cakewallet.com/features/advanced/authentication/#enabling-cake-2fa');
|
||||
'https://github.com/Such-Software/hash-wallet');
|
||||
return Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 24),
|
||||
child: Column(
|
||||
|
||||
@@ -74,11 +74,11 @@ abstract class WalletKitServiceBase with Store {
|
||||
projectId: secrets.walletConnectProjectId,
|
||||
),
|
||||
metadata: const PairingMetadata(
|
||||
name: 'Cake Wallet',
|
||||
description: 'Cake Wallet',
|
||||
url: 'https://cakewallet.com',
|
||||
icons: ['https://cakewallet.com/assets/image/cake_logo.png'],
|
||||
redirect: Redirect(native: 'cakewallet://'),
|
||||
name: 'Hash Wallet',
|
||||
description: 'Hash Wallet',
|
||||
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://'),
|
||||
),
|
||||
);
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ class WelcomePage extends BasePage {
|
||||
@override
|
||||
Widget trailing(BuildContext context) {
|
||||
final Uri _url =
|
||||
Uri.parse('https://docs.cakewallet.com/get-started/setup/');
|
||||
Uri.parse('https://github.com/Such-Software/hash-wallet');
|
||||
return IconButton(
|
||||
icon: Icon(Icons.info_outline, size: 26,),
|
||||
onPressed: () async {
|
||||
|
||||
@@ -59,7 +59,7 @@ class HavenWalletRemovalPopup extends StatelessWidget {
|
||||
maxHeight: MediaQuery.of(context).size.height * 0.7,
|
||||
),
|
||||
child: Text(
|
||||
"It looks like you have Haven wallets in your list. Haven is getting removed in next release of Cake Wallet, and you currently have Haven in the following wallets:\n\n[${affectedWalletNames.join(", ")}]\n\nPlease move your funds to other wallet, as you will lose access to your Haven funds in next update.\n\nFor assistance, please use the in-app support or email support@cakewallet.com",
|
||||
"It looks like you have Haven wallets in your list. Haven is getting removed in the Hash Wallet fork, and you currently have Haven in the following wallets:\n\n[${affectedWalletNames.join(", ")}]\n\nPlease move your funds to other wallet, as you will lose access to your Haven funds in next update.\n\nFor assistance, please use the in-app support or open an issue at github.com/Such-Software/hash-wallet",
|
||||
style: Theme.of(context).textTheme.bodyMedium!.copyWith(
|
||||
decoration: TextDecoration.none,
|
||||
fontSize: 16.0,
|
||||
|
||||
@@ -113,7 +113,7 @@ class _ServicesUpdatesWidgetState extends State<ServicesUpdatesWidget> {
|
||||
try {
|
||||
launchUrl(
|
||||
Uri.parse(
|
||||
"https://status.cakewallet.com/",
|
||||
"https://github.com/Such-Software/hash-wallet/issues",
|
||||
),
|
||||
mode: LaunchMode.externalApplication);
|
||||
} catch (_) {}
|
||||
|
||||
@@ -59,7 +59,7 @@ class VulnerableSeedsPopup extends StatelessWidget {
|
||||
maxHeight: MediaQuery.of(context).size.height * 0.7,
|
||||
),
|
||||
child: Text(
|
||||
"Your Bitcoin wallet(s) below use a legacy seed format that is vulnerable, which MAY result in you losing money from these wallet(s) if no action is taken.\nWe recommend that you IMMEDIATELY create wallet(s) in Cake Wallet and immediately transfer the funds to these wallet(s).\nVulnerable wallet name(s):\n\n[${affectedWalletNames.join(", ")}]\n\nFor assistance, please use the in-app support or email support@cakewallet.com",
|
||||
"Your Bitcoin wallet(s) below use a legacy seed format that is vulnerable, which MAY result in you losing money from these wallet(s) if no action is taken.\nWe recommend that you IMMEDIATELY create wallet(s) in Hash Wallet and immediately transfer the funds to these wallet(s).\nVulnerable wallet name(s):\n\n[${affectedWalletNames.join(", ")}]\n\nFor assistance, please use the in-app support or open an issue at github.com/Such-Software/hash-wallet",
|
||||
style: Theme.of(context).textTheme.bodyMedium!.copyWith(
|
||||
decoration: TextDecoration.none,
|
||||
fontSize: 16.0,
|
||||
|
||||
@@ -29,7 +29,7 @@ class LinkViewModel {
|
||||
bool get isWalletConnectLink => currentLink?.authority == 'wc';
|
||||
bool get isNanoGptLink => currentLink?.scheme == 'nano-gpt';
|
||||
bool get isQuickActionLink =>
|
||||
currentLink?.scheme == 'cakewallet' && currentLink?.host == 'quickaction';
|
||||
currentLink?.scheme == 'hashwallet' && currentLink?.host == 'quickaction';
|
||||
|
||||
String? getRouteToGo() {
|
||||
if (isWalletConnectLink) {
|
||||
|
||||
@@ -83,7 +83,7 @@ abstract class PayjoinDetailsViewModelBase with Store {
|
||||
value: '${S.current.view_transaction_on}mempool.space',
|
||||
onTap: () async {
|
||||
try {
|
||||
final uri = Uri.parse('https://mempool.cakewallet.com/tx/${payjoinSession.txId!}');
|
||||
final uri = Uri.parse('https://mempool.space/tx/${payjoinSession.txId!}');
|
||||
if (await canLaunchUrl(uri))
|
||||
await launchUrl(uri, mode: LaunchMode.externalApplication);
|
||||
} catch (e) {}
|
||||
|
||||
@@ -15,42 +15,24 @@ abstract class SupportViewModelBase with Store {
|
||||
|
||||
SupportViewModelBase(this._appStore)
|
||||
: items = [
|
||||
// Hash Wallet: Cake's own support channels (email, website, forum,
|
||||
// Discord, Telegram, Telegram bot) gutted — those are Cake Labs
|
||||
// properties, not ours. Replaced with the only channel we have right
|
||||
// now: GitHub Issues. The third-party provider support links below
|
||||
// are kept because they're genuinely useful when a user has trouble
|
||||
// with a swap/buy via that provider.
|
||||
LinkListItem(
|
||||
title: 'Email',
|
||||
icon: 'assets/images/support_icon.png',
|
||||
linkTitle: 'support@cakewallet.com',
|
||||
link: 'mailto:support@cakewallet.com'),
|
||||
title: 'GitHub Issues',
|
||||
icon: 'assets/images/github.png',
|
||||
hasIconColor: true,
|
||||
linkTitle: 'github.com/Such-Software/hash-wallet/issues',
|
||||
link: 'https://github.com/Such-Software/hash-wallet/issues'),
|
||||
LinkListItem(
|
||||
title: 'Website',
|
||||
icon: 'assets/images/global.png',
|
||||
linkTitle: 'cakewallet.com',
|
||||
link: 'https://cakewallet.com'),
|
||||
LinkListItem(
|
||||
title: 'Forum',
|
||||
icon: 'assets/images/discourse.png',
|
||||
linkTitle: 'forum.cakewallet.com',
|
||||
link: 'https://forum.cakewallet.com'),
|
||||
LinkListItem(
|
||||
title: 'GitHub',
|
||||
title: 'GitHub Releases',
|
||||
icon: 'assets/images/github.png',
|
||||
hasIconColor: true,
|
||||
linkTitle: S.current.apk_update,
|
||||
link: 'https://github.com/cake-tech/cake_wallet/releases'),
|
||||
LinkListItem(
|
||||
title: 'Discord',
|
||||
icon: 'assets/images/discord.png',
|
||||
linkTitle: 'discord.gg/pwmWa6aFpX',
|
||||
link: 'https://discord.gg/pwmWa6aFpX'),
|
||||
LinkListItem(
|
||||
title: 'Telegram',
|
||||
icon: 'assets/images/Telegram.png',
|
||||
linkTitle: 't.me/cakewallet',
|
||||
link: 'https://t.me/cakewalletannouncements'),
|
||||
LinkListItem(
|
||||
title: 'Telegram Support Bot',
|
||||
icon: 'assets/images/Telegram.png',
|
||||
linkTitle: '@cakewallet_bot',
|
||||
link: 'https://t.me/cakewallet_bot'),
|
||||
link: 'https://github.com/Such-Software/hash-wallet/releases'),
|
||||
LinkListItem(
|
||||
title: 'ChangeNow',
|
||||
icon: 'assets/images/change_now.png',
|
||||
@@ -86,7 +68,7 @@ abstract class SupportViewModelBase with Store {
|
||||
icon: 'assets/images/onramper_dark.png',
|
||||
lightIcon: 'assets/images/onramper_light.png',
|
||||
linkTitle: 'View exchanges',
|
||||
link: 'https://docs.cakewallet.com/support/buy/#onramper'),
|
||||
link: 'https://onramper.com/'),
|
||||
LinkListItem(
|
||||
title: 'DFX',
|
||||
icon: 'assets/images/dfx_dark.png',
|
||||
@@ -114,7 +96,7 @@ abstract class SupportViewModelBase with Store {
|
||||
link: 'mailto:contact@support.kryptonim.com'),
|
||||
];
|
||||
|
||||
final docsUrl = 'https://docs.cakewallet.com';
|
||||
final docsUrl = 'https://github.com/Such-Software/hash-wallet';
|
||||
|
||||
String fetchUrl({String locale = "en", String authToken = ""}) {
|
||||
var supportUrl =
|
||||
@@ -126,7 +108,7 @@ abstract class SupportViewModelBase with Store {
|
||||
}
|
||||
|
||||
String get appVersion =>
|
||||
"${isMoneroOnly ? "Monero.com" : "Cake Wallet"} - ${_appStore.settingsStore.appVersion}";
|
||||
"${isMoneroOnly ? "Monero.com" : "Hash Wallet"} - ${_appStore.settingsStore.appVersion}";
|
||||
|
||||
String get fiatApiMode => _appStore.settingsStore.fiatApiMode.title;
|
||||
|
||||
|
||||
@@ -416,7 +416,7 @@ abstract class TransactionDetailsViewModelBase with Store {
|
||||
case WalletType.monero:
|
||||
return 'https://monero.com/tx/${txId}';
|
||||
case WalletType.bitcoin:
|
||||
return 'https://mempool.cakewallet.com/${wallet.isTestnet ? "testnet/" : ""}tx/${txId}';
|
||||
return 'https://mempool.space/${wallet.isTestnet ? "testnet/" : ""}tx/${txId}';
|
||||
case WalletType.litecoin:
|
||||
return bitcoin!.txIsMweb(transactionInfo)
|
||||
? "https://www.mwebexplorer.com/blocks/block/${transactionInfo.height}"
|
||||
|
||||
Reference in New Issue
Block a user