CW-1076-payjoin-ux-enhancements (#2282)

* feat: Add Payjoin Unavailable bottom sheet * feat: Add Payjoin Info Card to Dashboard * feat: Open payjoin docs on learn more

Konstantin Ullrich committed May 24, 2025 at 03:24 UTC 939e5d9279604272559f6df911bc326ed7677eab
36 files changed +479 -148
lib/entities/preferences_key.dart
+1
@@ -83,6 +83,7 @@ class PreferencesKey {
83 static const lookupsENS = 'looks_up_ens';
84 static const lookupsWellKnown = 'looks_up_well_known';
85 static const usePayjoin = 'use_payjoin';
86 + static const showPayjoinCard = 'show_payjoin_card';
87 static const showCameraConsent = 'show_camera_consent';
88 static const showDecredInfoCard = 'show_decred_info_card';
89
lib/src/screens/dashboard/pages/address_page.dart
+7 -7
@@ -150,13 +150,13 @@ class AddressPage extends BasePage {
150 Expanded(
151 child: Observer(
152 builder: (_) => QRWidget(
153 - formKey: _formKey,
154 - addressListViewModel: addressListViewModel,
155 - amountTextFieldFocusNode: _cryptoAmountFocus,
156 - amountController: _amountController,
157 - isLight: dashboardViewModel.settingsStore.currentTheme.type ==
158 - ThemeType.light,
159 - ))),
153 + formKey: _formKey,
154 + addressListViewModel: addressListViewModel,
155 + amountTextFieldFocusNode: _cryptoAmountFocus,
156 + amountController: _amountController,
157 + currentTheme:
158 + dashboardViewModel.settingsStore.currentTheme,
159 + ))),
160 SizedBox(height: 16),
161 Observer(builder: (_) {
162 if (addressListViewModel.hasAddressList) {
lib/src/screens/dashboard/pages/balance/crypto_balance_widget.dart
+48
@@ -325,6 +325,39 @@ class CryptoBalanceWidget extends StatelessWidget {
325 ),
326 ),
327 ],
328 + if (dashboardViewModel.showPayjoinCard) ...[
329 + SizedBox(height: 10),
330 + Padding(
331 + padding: const EdgeInsets.fromLTRB(16, 0, 16, 8),
332 + child: InfoCard(
333 + title: "Payjoin",
334 + description: S.of(context).payjoin_card_content,
335 + hintWidget: GestureDetector(
336 + behavior: HitTestBehavior.opaque,
337 + onTap: () => launchUrl(
338 + Uri.parse("https://docs.cakewallet.com/cryptos/bitcoin/#payjoin"),
339 + mode: LaunchMode.externalApplication,
340 + ),
341 + child: Text(
342 + S.of(context).learn_more,
343 + style: TextStyle(
344 + fontSize: 12,
345 + fontFamily: 'Lato',
346 + fontWeight: FontWeight.w400,
347 + color: Theme.of(context).extension<BalancePageTheme>()!.labelTextColor,
348 + height: 1,
349 + ),
350 + softWrap: true,
351 + ),
352 + ),
353 + image: 'assets/images/payjoin.png',
354 + leftButtonTitle: S.of(context).litecoin_mweb_dismiss,
355 + rightButtonTitle: S.of(context).enable,
356 + leftButtonAction: () => dashboardViewModel.dismissPayjoin(),
357 + rightButtonAction: () => _enablePayjoin(context),
358 + ),
359 + ),
360 + ],
361 ],
362 );
363 }),
@@ -363,6 +396,21 @@ class CryptoBalanceWidget extends StatelessWidget {
396 }
397
398 return dashboardViewModel.setSilentPaymentsScanning(newValue);
399 + }
400 +
401 + void _enablePayjoin(BuildContext context) {
402 + showPopUp<void>(
403 + context: context,
404 + builder: (BuildContext context) => AlertWithOneAction(
405 + alertTitle: S.of(context).payjoin_enabling_popup_title,
406 + alertContent: S.of(context).payjoin_enabling_popup_content,
407 + buttonText: S.of(context).ok,
408 + buttonAction: () {
409 + Navigator.of(context).pop();
410 + },
411 + ));
412 +
413 + dashboardViewModel.enablePayjoin();
414 }
415
416 Future<void> _enableMweb(BuildContext context) async {
lib/src/screens/receive/receive_page.dart
+40 -53
@@ -1,29 +1,14 @@
1 -import 'package:cake_wallet/src/screens/nano_accounts/nano_account_list_page.dart';
1 +import 'package:cake_wallet/generated/i18n.dart';
2 +import 'package:cake_wallet/src/screens/base_page.dart';
3 import 'package:cake_wallet/src/screens/receive/widgets/address_list.dart';
4 +import 'package:cake_wallet/src/screens/receive/widgets/qr_widget.dart';
5 +import 'package:cake_wallet/src/widgets/gradient_background.dart';
6 import 'package:cake_wallet/src/widgets/keyboard_done_button.dart';
7 import 'package:cake_wallet/themes/extensions/balance_page_theme.dart';
8 import 'package:cake_wallet/themes/extensions/keyboard_theme.dart';
6 -import 'package:cake_wallet/themes/extensions/receive_page_theme.dart';
7 -import 'package:cake_wallet/src/widgets/gradient_background.dart';
8 -import 'package:cake_wallet/src/widgets/section_divider.dart';
9 -import 'package:cake_wallet/themes/theme_base.dart';
9 import 'package:cake_wallet/utils/share_util.dart';
11 -import 'package:cake_wallet/utils/show_pop_up.dart';
12 -import 'package:cw_core/wallet_type.dart';
13 -import 'package:flutter/material.dart';
14 -import 'package:flutter_mobx/flutter_mobx.dart';
15 -import 'package:cake_wallet/routes.dart';
16 -import 'package:cake_wallet/generated/i18n.dart';
17 -import 'package:cake_wallet/di.dart';
18 -import 'package:cake_wallet/src/screens/base_page.dart';
19 -import 'package:cake_wallet/src/screens/monero_accounts/monero_account_list_page.dart';
20 -import 'package:cake_wallet/src/screens/receive/widgets/header_tile.dart';
21 -import 'package:cake_wallet/src/screens/receive/widgets/address_cell.dart';
22 -import 'package:cake_wallet/view_model/wallet_address_list/wallet_account_list_header.dart';
23 -import 'package:cake_wallet/view_model/wallet_address_list/wallet_address_list_header.dart';
24 -import 'package:cake_wallet/view_model/wallet_address_list/wallet_address_list_item.dart';
10 import 'package:cake_wallet/view_model/wallet_address_list/wallet_address_list_view_model.dart';
26 -import 'package:cake_wallet/src/screens/receive/widgets/qr_widget.dart';
11 +import 'package:flutter/material.dart';
12 import 'package:keyboard_actions/keyboard_actions.dart';
13
14 class ReceivePage extends BasePage {
@@ -55,24 +40,23 @@ class ReceivePage extends BasePage {
40 final FocusNode _cryptoAmountFocus;
41
42 @override
58 - Widget middle(BuildContext context) {
59 - return Text(
60 - title,
61 - style: TextStyle(
43 + Widget middle(BuildContext context) => Text(
44 + title,
45 + style: TextStyle(
46 fontSize: 18.0,
47 fontWeight: FontWeight.bold,
48 fontFamily: 'Lato',
65 - color: pageIconColor(context)),
66 - );
67 - }
49 + color: pageIconColor(context),
50 + ),
51 + );
52
53 @override
54 Widget Function(BuildContext, Widget) get rootWrapper =>
71 - (BuildContext context, Widget scaffold) => GradientBackground(scaffold: scaffold);
55 + (BuildContext context, Widget scaffold) =>
56 + GradientBackground(scaffold: scaffold);
57
58 @override
74 - Widget trailing(BuildContext context) {
75 - return Material(
59 + Widget trailing(BuildContext context) => Material(
60 color: Colors.transparent,
61 child: Semantics(
62 label: S.of(context).share,
@@ -82,27 +66,25 @@ class ReceivePage extends BasePage {
66 highlightColor: Colors.transparent,
67 splashColor: Colors.transparent,
68 iconSize: 25,
85 - onPressed: () {
86 - ShareUtil.share(
87 - text: addressListViewModel.uri.toString(),
88 - context: context,
89 - );
90 - },
69 + onPressed: () => ShareUtil.share(
70 + text: addressListViewModel.uri.toString(),
71 + context: context,
72 + ),
73 icon: Icon(
74 Icons.share,
75 size: 20,
76 color: pageIconColor(context),
77 ),
78 ),
97 - ));
98 - }
79 + ),
80 + );
81
82 @override
101 - Widget body(BuildContext context) {
102 - return KeyboardActions(
83 + Widget body(BuildContext context) => KeyboardActions(
84 config: KeyboardActionsConfig(
85 keyboardActionsPlatform: KeyboardActionsPlatform.IOS,
105 - keyboardBarColor: Theme.of(context).extension<KeyboardTheme>()!.keyboardBarColor,
86 + keyboardBarColor:
87 + Theme.of(context).extension<KeyboardTheme>()!.keyboardBarColor,
88 nextFocus: false,
89 actions: [
90 KeyboardActionsItem(
@@ -121,23 +103,28 @@ class ReceivePage extends BasePage {
103 heroTag: _heroTag,
104 amountTextFieldFocusNode: _cryptoAmountFocus,
105 amountController: _amountController,
124 - isLight: currentTheme.type == ThemeType.light,
125 - ),
106 + currentTheme: currentTheme),
107 ),
127 - AddressList(addressListViewModel: addressListViewModel, currentTheme: currentTheme),
108 + AddressList(
109 + addressListViewModel: addressListViewModel,
110 + currentTheme: currentTheme),
111 Padding(
112 padding: EdgeInsets.fromLTRB(24, 24, 24, 32),
113 child: Text(
131 - addressListViewModel.isSilentPayments
132 - ? S.of(context).silent_payments_disclaimer
133 - : S.of(context).electrum_address_disclaimer,
134 - textAlign: TextAlign.center,
135 - style: TextStyle(
136 - fontSize: 15,
137 - color: Theme.of(context).extension<BalancePageTheme>()!.labelTextColor)),
114 + addressListViewModel.isSilentPayments
115 + ? S.of(context).silent_payments_disclaimer
116 + : S.of(context).electrum_address_disclaimer,
117 + textAlign: TextAlign.center,
118 + style: TextStyle(
119 + fontSize: 15,
120 + color: Theme.of(context)
121 + .extension<BalancePageTheme>()!
122 + .labelTextColor,
123 + ),
124 + ),
125 ),
126 ],
127 ),
141 - ));
142 - }
128 + ),
129 + );
130 }
lib/src/screens/receive/widgets/qr_widget.dart
+151 -58
@@ -1,30 +1,32 @@
1 import 'package:cake_wallet/entities/qr_view_data.dart';
2 +import 'package:cake_wallet/generated/i18n.dart';
3 +import 'package:cake_wallet/routes.dart';
4 +import 'package:cake_wallet/src/screens/exchange/widgets/currency_picker.dart';
5 +import 'package:cake_wallet/src/screens/receive/widgets/currency_input_field.dart';
6 +import 'package:cake_wallet/src/screens/receive/widgets/qr_image.dart';
7 +import 'package:cake_wallet/src/widgets/bottom_sheet/info_bottom_sheet_widget.dart';
8 import 'package:cake_wallet/src/widgets/primary_button.dart';
9 import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
10 +import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
11 import 'package:cake_wallet/themes/extensions/picker_theme.dart';
12 import 'package:cake_wallet/themes/extensions/qr_code_theme.dart';
6 -import 'package:cake_wallet/routes.dart';
7 -import 'package:cake_wallet/src/screens/exchange/widgets/currency_picker.dart';
8 -import 'package:cake_wallet/src/screens/receive/widgets/currency_input_field.dart';
13 import 'package:cake_wallet/themes/theme_base.dart';
14 import 'package:cake_wallet/utils/address_formatter.dart';
15 import 'package:cake_wallet/utils/brightness_util.dart';
16 import 'package:cake_wallet/utils/responsive_layout_util.dart';
17 import 'package:cake_wallet/utils/show_bar.dart';
18 import 'package:cake_wallet/utils/show_pop_up.dart';
19 +import 'package:cake_wallet/view_model/wallet_address_list/wallet_address_list_view_model.dart';
20 import 'package:cw_core/crypto_currency.dart';
21 import 'package:flutter/material.dart';
22 import 'package:flutter/services.dart';
23 import 'package:flutter_mobx/flutter_mobx.dart';
19 -import 'package:cake_wallet/generated/i18n.dart';
20 -import 'package:cake_wallet/src/screens/receive/widgets/qr_image.dart';
21 -import 'package:cake_wallet/view_model/wallet_address_list/wallet_address_list_view_model.dart';
22 -import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
24 +import 'package:url_launcher/url_launcher.dart';
25
26 class QRWidget extends StatelessWidget {
27 QRWidget({
28 required this.addressListViewModel,
27 - required this.isLight,
29 + required this.currentTheme,
30 this.qrVersion,
31 this.heroTag,
32 required this.amountController,
@@ -36,7 +38,7 @@ class QRWidget extends StatelessWidget {
38 final TextEditingController amountController;
39 final FocusNode? amountTextFieldFocusNode;
40 final GlobalKey<FormState> formKey;
39 - final bool isLight;
41 + final ThemeBase currentTheme;
42 final int? qrVersion;
43 final String? heroTag;
44
@@ -47,11 +49,14 @@ class QRWidget extends StatelessWidget {
49 @override
50 Widget build(BuildContext context) {
51 final copyImage = Image.asset('assets/images/copy_address.png',
50 - color: Theme.of(context).extension<QRCodeTheme>()!.qrWidgetCopyButtonColor);
52 + color: Theme.of(context)
53 + .extension<QRCodeTheme>()!
54 + .qrWidgetCopyButtonColor);
55
56 // This magic number for wider screen sets the text input focus at center of the inputfield
53 - final _width =
54 - responsiveLayoutUtil.shouldRenderMobileUI ? MediaQuery.of(context).size.width : 500;
57 + final _width = responsiveLayoutUtil.shouldRenderMobileUI
58 + ? MediaQuery.of(context).size.width
59 + : 500;
60
61 return Center(
62 child: SingleChildScrollView(
@@ -69,7 +74,9 @@ class QRWidget extends StatelessWidget {
74 style: TextStyle(
75 fontSize: 14,
76 fontWeight: FontWeight.w500,
72 - color: Theme.of(context).extension<DashboardPageTheme>()!.textColor),
77 + color: Theme.of(context)
78 + .extension<DashboardPageTheme>()!
79 + .textColor),
80 ),
81 ),
82 Row(
@@ -82,7 +89,8 @@ class QRWidget extends StatelessWidget {
89 onTap: () {
90 BrightnessUtil.changeBrightnessForFunction(
91 () async {
85 - await Navigator.pushNamed(context, Routes.fullscreenQR,
92 + await Navigator.pushNamed(
93 + context, Routes.fullscreenQR,
94 arguments: QrViewData(
95 data: addressUri.toString(),
96 heroTag: heroTag,
@@ -97,7 +105,8 @@ class QRWidget extends StatelessWidget {
105 padding: EdgeInsets.zero,
106 decoration: BoxDecoration(
107 border: Border(top: BorderSide.none),
100 - borderRadius: BorderRadius.all(Radius.circular(5)),
108 + borderRadius:
109 + BorderRadius.all(Radius.circular(5)),
110 color: Colors.white,
111 ),
112 child: Column(
@@ -111,10 +120,64 @@ class QRWidget extends StatelessWidget {
120 ),
121 ),
122 ),
114 - if (addressListViewModel.payjoinEndpoint.isNotEmpty &&
115 - !addressListViewModel.isSilentPayments) ...[
123 + if (addressListViewModel
124 + .isPayjoinUnavailable &&
125 + !addressListViewModel
126 + .isSilentPayments) ...[
127 + GestureDetector(
128 + onTap: () =>
129 + _onPayjoinInactivePressed(context),
130 + child: Row(
131 + mainAxisAlignment:
132 + MainAxisAlignment.center,
133 + children: [
134 + Padding(
135 + padding: EdgeInsets.only(
136 + top: 4,
137 + bottom: 4,
138 + right: 4,
139 + ),
140 + child: Image.asset(
141 + 'assets/images/payjoin.png',
142 + width: 20,
143 + ),
144 + ),
145 + Text(
146 + S.of(context).payjoin_unavailable,
147 + style: TextStyle(
148 + fontSize: 12,
149 + fontWeight: FontWeight.w600,
150 + color: Color.fromARGB(
151 + 255, 139, 137, 139),
152 + ),
153 + ),
154 + Padding(
155 + padding: EdgeInsets.only(
156 + top: 4,
157 + bottom: 4,
158 + left: 4,
159 + ),
160 + child: CircleAvatar(
161 + radius: 7,
162 + backgroundColor: Colors.black,
163 + child: Icon(
164 + Icons.question_mark,
165 + size: 10,
166 + color: Colors.white,
167 + ),
168 + ),
169 + ),
170 + ],
171 + ),
172 + ),
173 + ],
174 + if (addressListViewModel
175 + .payjoinEndpoint.isNotEmpty &&
176 + !addressListViewModel
177 + .isSilentPayments) ...[
178 Row(
117 - mainAxisAlignment: MainAxisAlignment.center,
179 + mainAxisAlignment:
180 + MainAxisAlignment.center,
181 children: [
182 Padding(
183 padding: EdgeInsets.only(
@@ -151,37 +214,43 @@ class QRWidget extends StatelessWidget {
214 ),
215 ],
216 ),
154 - Observer(builder: (_) {
155 - return Padding(
156 - padding: EdgeInsets.only(top: 10),
157 - child: Row(
158 - children: <Widget>[
159 - Expanded(
160 - child: Form(
161 - key: formKey,
162 - child: CurrencyAmountTextField(
163 - selectedCurrency: _currencyName,
164 - amountFocusNode: amountTextFieldFocusNode,
165 - amountController: amountController,
166 - padding: EdgeInsets.only(top: 20, left: _width / 4),
167 - currentTheme: isLight ? ThemeType.light : ThemeType.dark,
168 - isAmountEditable: true,
169 - tag: addressListViewModel.selectedCurrency.tag,
170 - onTapPicker: () => _presentPicker(context),
171 - isPickerEnable: true)),
172 - ),
173 - ],
174 - ),
175 - );
176 - }),
177 - Divider(height: 1, color: Theme.of(context).extension<PickerTheme>()!.dividerColor),
217 + Observer(
218 + builder: (_) => Padding(
219 + padding: EdgeInsets.only(top: 10),
220 + child: Row(
221 + children: <Widget>[
222 + Expanded(
223 + child: Form(
224 + key: formKey,
225 + child: CurrencyAmountTextField(
226 + selectedCurrency: _currencyName,
227 + amountFocusNode: amountTextFieldFocusNode,
228 + amountController: amountController,
229 + padding:
230 + EdgeInsets.only(top: 20, left: _width / 4),
231 + currentTheme: currentTheme.type,
232 + isAmountEditable: true,
233 + tag: addressListViewModel.selectedCurrency.tag,
234 + onTapPicker: () => _presentPicker(context),
235 + isPickerEnable: true,
236 + ),
237 + ),
238 + ),
239 + ],
240 + ),
241 + )),
242 + Divider(
243 + height: 1,
244 + color:
245 + Theme.of(context).extension<PickerTheme>()!.dividerColor),
246 Padding(
247 padding: EdgeInsets.only(top: 20, bottom: 8),
248 child: Builder(
249 builder: (context) => Observer(
250 builder: (context) => GestureDetector(
251 onTap: () {
184 - Clipboard.setData(ClipboardData(text: addressUri.address));
252 + Clipboard.setData(
253 + ClipboardData(text: addressUri.address));
254 showBar<void>(context, S.of(context).copied_to_clipboard);
255 },
256 child: Row(
@@ -189,17 +258,16 @@ class QRWidget extends StatelessWidget {
258 crossAxisAlignment: CrossAxisAlignment.start,
259 children: <Widget>[
260 Expanded(
192 - child: AddressFormatter.buildSegmentedAddress(
193 - address: addressUri.address,
194 - walletType: addressListViewModel.type,
195 - textAlign: TextAlign.center,
196 - evenTextStyle: TextStyle(
197 - fontSize: 15,
198 - fontWeight: FontWeight.w500,
199 - color: Theme.of(context).extension<DashboardPageTheme>()!.textColor,
200 - ),
201 - ),
202 - ),
261 + child: AddressFormatter.buildSegmentedAddress(
262 + address: addressUri.address,
263 + walletType: addressListViewModel.type,
264 + textAlign: TextAlign.center,
265 + evenTextStyle: TextStyle(
266 + fontSize: 15,
267 + fontWeight: FontWeight.w500,
268 + color: Theme.of(context)
269 + .extension<DashboardPageTheme>()!
270 + .textColor))),
271 Padding(
272 padding: EdgeInsets.only(left: 12),
273 child: copyImage,
@@ -212,12 +280,14 @@ class QRWidget extends StatelessWidget {
280 ),
281 Observer(
282 builder: (_) => Offstage(
215 - offstage: addressListViewModel.payjoinEndpoint.isEmpty || addressListViewModel.isSilentPayments,
283 + offstage: addressListViewModel.payjoinEndpoint.isEmpty ||
284 + addressListViewModel.isSilentPayments,
285 child: Padding(
286 padding: EdgeInsets.only(top: 12),
287 child: PrimaryImageButton(
288 onPressed: () {
220 - Clipboard.setData(ClipboardData(text: addressUri.toString()));
289 + Clipboard.setData(
290 + ClipboardData(text: addressUri.toString()));
291 showBar<void>(context, S.of(context).copied_to_clipboard);
292 },
293 image: Image.asset(
@@ -226,7 +296,9 @@ class QRWidget extends StatelessWidget {
296 ),
297 text: S.of(context).copy_payjoin_address,
298 color: Theme.of(context).cardColor,
229 - textColor: Theme.of(context).extension<CakeTextTheme>()!.buttonTextColor,
299 + textColor: Theme.of(context)
300 + .extension<CakeTextTheme>()!
301 + .buttonTextColor,
302 ),
303 ),
304 ),
@@ -239,7 +311,9 @@ class QRWidget extends StatelessWidget {
311
312 String get _currencyName {
313 if (addressListViewModel.selectedCurrency is CryptoCurrency) {
242 - return (addressListViewModel.selectedCurrency as CryptoCurrency).title.toUpperCase();
314 + return (addressListViewModel.selectedCurrency as CryptoCurrency)
315 + .title
316 + .toUpperCase();
317 }
318 return addressListViewModel.selectedCurrency.name.toUpperCase();
319 }
@@ -257,4 +331,23 @@ class QRWidget extends StatelessWidget {
331 // update amount if currency changed
332 addressListViewModel.changeAmount(amountController.text);
333 }
334 +
335 + void _onPayjoinInactivePressed(BuildContext context) {
336 + showModalBottomSheet(
337 + context: context,
338 + builder: (context) => InfoBottomSheet(
339 + titleText: S.of(context).payjoin_unavailable_sheet_title,
340 + content: S.of(context).payjoin_unavailable_sheet_content,
341 + currentTheme: currentTheme,
342 + isTwoAction: true,
343 + leftButtonText: S.of(context).learn_more,
344 + actionLeftButton: () => launchUrl(
345 + Uri.parse("https://docs.cakewallet.com/cryptos/bitcoin/#payjoin"),
346 + mode: LaunchMode.externalApplication,
347 + ),
348 + rightButtonText: S.of(context).ok,
349 + actionRightButton: () => Navigator.of(context).pop(),
350 + ),
351 + );
352 + }
353 }
lib/store/settings_store.dart
+11
@@ -122,6 +122,7 @@ abstract class SettingsStoreBase with Store {
122 required this.lookupsENS,
123 required this.lookupsWellKnown,
124 required this.usePayjoin,
125 + required this.showPayjoinCard,
126 required this.customBitcoinFeeRate,
127 required this.silentPaymentsCardDisplay,
128 required this.silentPaymentsAlwaysScan,
@@ -489,6 +490,11 @@ abstract class SettingsStoreBase with Store {
490 (bool usePayjoin) =>
491 _sharedPreferences.setBool(PreferencesKey.usePayjoin, usePayjoin));
492
493 + reaction(
494 + (_) => showPayjoinCard,
495 + (bool showPayjoinCard) => _sharedPreferences.setBool(
496 + PreferencesKey.showPayjoinCard, showPayjoinCard));
497 +
498 // secure storage keys:
499 reaction(
500 (_) => allowBiometricalAuthentication,
@@ -811,6 +817,9 @@ abstract class SettingsStoreBase with Store {
817 @observable
818 bool usePayjoin;
819
820 + @observable
821 + bool showPayjoinCard;
822 +
823 @observable
824 SyncMode currentSyncMode;
825
@@ -1019,6 +1028,7 @@ abstract class SettingsStoreBase with Store {
1028 final lookupsENS = sharedPreferences.getBool(PreferencesKey.lookupsENS) ?? true;
1029 final lookupsWellKnown = sharedPreferences.getBool(PreferencesKey.lookupsWellKnown) ?? true;
1030 final usePayjoin = sharedPreferences.getBool(PreferencesKey.usePayjoin) ?? false;
1031 + final showPayjoinCard = sharedPreferences.getBool(PreferencesKey.showPayjoinCard) ?? true;
1032 final customBitcoinFeeRate = sharedPreferences.getInt(PreferencesKey.customBitcoinFeeRate) ?? 1;
1033 final silentPaymentsCardDisplay =
1034 sharedPreferences.getBool(PreferencesKey.silentPaymentsCardDisplay) ?? true;
@@ -1322,6 +1332,7 @@ abstract class SettingsStoreBase with Store {
1332 lookupsENS: lookupsENS,
1333 lookupsWellKnown: lookupsWellKnown,
1334 usePayjoin: usePayjoin,
1335 + showPayjoinCard: showPayjoinCard,
1336 customBitcoinFeeRate: customBitcoinFeeRate,
1337 silentPaymentsCardDisplay: silentPaymentsCardDisplay,
1338 silentPaymentsAlwaysScan: silentPaymentsAlwaysScan,
lib/view_model/dashboard/dashboard_view_model.dart
+18 -1
@@ -33,7 +33,6 @@ import 'package:cake_wallet/view_model/dashboard/payjoin_transaction_list_item.d
33 import 'package:cake_wallet/view_model/dashboard/trade_list_item.dart';
34 import 'package:cake_wallet/view_model/dashboard/transaction_list_item.dart';
35 import 'package:cake_wallet/view_model/settings/sync_mode.dart';
36 -import 'package:cake_wallet/wallet_type_utils.dart';
36 import 'package:cake_wallet/wownero/wownero.dart' as wow;
37 import 'package:cryptography/cryptography.dart';
38 import 'package:cw_core/balance.dart';
@@ -559,6 +558,12 @@ abstract class DashboardViewModelBase with Store {
558 @observable
559 late bool showDecredInfoCard;
560
561 + @computed
562 + bool get showPayjoinCard =>
563 + wallet.type == WalletType.bitcoin &&
564 + settingsStore.showPayjoinCard &&
565 + !settingsStore.usePayjoin;
566 +
567 @observable
568 bool backgroundSyncEnabled = false;
569
@@ -764,6 +769,18 @@ abstract class DashboardViewModelBase with Store {
769 sharedPreferences.setBool(PreferencesKey.showDecredInfoCard, false);
770 }
771
772 + @action
773 + void dismissPayjoin() {
774 + settingsStore.showPayjoinCard = false;
775 + }
776 +
777 + @action
778 + void enablePayjoin() {
779 + settingsStore.usePayjoin = true;
780 + settingsStore.showPayjoinCard = false;
781 + bitcoin!.updatePayjoinState(wallet, true);
782 + }
783 +
784 BalanceViewModel balanceViewModel;
785
786 AppStore appStore;
lib/view_model/wallet_address_list/wallet_address_list_view_model.dart
+6
@@ -310,6 +310,12 @@ abstract class WalletAddressListViewModelBase extends WalletChangeListenerViewMo
310 ? bitcoin!.getPayjoinEndpoint(wallet)
311 : "";
312
313 + @computed
314 + bool get isPayjoinUnavailable =>
315 + wallet.type == WalletType.bitcoin &&
316 + _settingsStore.usePayjoin &&
317 + payjoinEndpoint.isEmpty;
318 +
319 @computed
320 PaymentURI get uri {
321 switch (wallet.type) {
res/values/strings_ar.arb
+7 -1
@@ -548,10 +548,16 @@
548 "password": "كلمة المرور",
549 "paste": "لصق",
550 "pause_wallet_creation": ".ﺎﻴًﻟﺎﺣ ﺎﺘًﻗﺆﻣ ﺔﻔﻗﻮﺘﻣ Haven Wallet ءﺎﺸﻧﺇ ﻰﻠﻋ ﺓﺭﺪﻘﻟﺍ",
551 + "payjoin_card_content": "Payjoin هي ميزة جديدة للحفاظ على الخصوصية وتوفير الرسوم في Bitcoin.",
552 "payjoin_details": "Payjoin تفاصيل",
553 "payjoin_enabled": "Payjoin تمكين",
554 + "payjoin_enabling_popup_content": "يمكنك التبديل Payjoin ضمن القائمة → الخصوصية ← استخدام Payjoin لتمكينه أو تعطيله لاحقًا.",
555 + "payjoin_enabling_popup_title": "تمكين Payjoin",
556 "payjoin_request_awaiting_tx": "في انتظار المعاملة",
557 "payjoin_request_in_progress": "في تَقَدم",
558 + "payjoin_unavailable": "Payjoin غير متوفر",
559 + "payjoin_unavailable_sheet_content": "يتطلب استلام معاملة Payjoin أن تكون Bitcoin جاهزًا للاستخدام.",
560 + "payjoin_unavailable_sheet_title": "لماذا Payjoin غير متوفر؟",
561 "payment_id": "معرف الدفع:",
562 "payment_was_received": "تم استلام الدفع الخاص بك.",
563 "pending": " (في الإنتظار)",
@@ -1071,4 +1077,4 @@
1077 "you_will_send": "تحويل من",
1078 "youCanGoBackToYourDapp": "يمكنك العودة إلى DAPP الخاص بك الآن",
1079 "yy": "YY"
1074 -}
\ No newline at end of file
1080 +}
res/values/strings_bg.arb
+7 -1
@@ -548,10 +548,16 @@
548 "password": "Парола",
549 "paste": "Поставяне",
550 "pause_wallet_creation": "Възможността за създаване на Haven Wallet в момента е на пауза.",
551 + "payjoin_card_content": "Payjoin е нова функция за запазване на поверителност и пестене на такси в Bitcoin.",
552 "payjoin_details": "Payjoin подробности",
553 "payjoin_enabled": "Payjoin enabled",
554 + "payjoin_enabling_popup_content": "Можете да превключвате Payjoin под меню → поверителност → Използвайте Payjoin, за да го активирате или деактивирате по -късно.",
555 + "payjoin_enabling_popup_title": "Активиране Payjoin",
556 "payjoin_request_awaiting_tx": "В очакване на транзакция",
557 "payjoin_request_in_progress": "В ход",
558 + "payjoin_unavailable": "Payjoin недостъпно",
559 + "payjoin_unavailable_sheet_content": "Получаването на Payjoin транзакция изисква да имате готови за биткойн. \\ N \\ nas скоро, когато портфейлът ви има средства, Payjoin ще бъде активиран автоматично.",
560 + "payjoin_unavailable_sheet_title": "Защо Payjoin не е наличен?",
561 "payment_id": "Payment ID: ",
562 "payment_was_received": "Плащането бе получено.",
563 "pending": " (чакащи)",
@@ -1071,4 +1077,4 @@
1077 "you_will_send": "Обръщане от",
1078 "youCanGoBackToYourDapp": "Можете да се върнете при вашия Dapp сега",
1079 "yy": "гг"
1074 -}
\ No newline at end of file
1080 +}
res/values/strings_cs.arb
+7 -1
@@ -548,10 +548,16 @@
548 "password": "Heslo",
549 "paste": "Vložit",
550 "pause_wallet_creation": "Možnost vytvářet Haven Wallet je momentálně pozastavena.",
551 + "payjoin_card_content": "Payjoin je nová funkce ochrany soukromí a úspory poplatků v bitcoinech.",
552 "payjoin_details": "%%TE podrobnosti",
553 "payjoin_enabled": "Payjoin povoleno",
554 + "payjoin_enabling_popup_content": "Můžete přepínat Payjoin v nabídce → Ochrana osobních údajů → Použít Payjoin, abyste jej povolili později.",
555 + "payjoin_enabling_popup_title": "Povolení Payjoin",
556 "payjoin_request_awaiting_tx": "Čeká na transakci",
557 "payjoin_request_in_progress": "Probíhá",
558 + "payjoin_unavailable": "Payjoin nedostupné",
559 + "payjoin_unavailable_sheet_content": "Přijetí transakce Payjoin vyžaduje, abyste měli bitcoin připraveni k použití. \\ N \\ NAS, jakmile má vaše peněženka finanční prostředky, Payjoin bude automaticky povoleno.",
560 + "payjoin_unavailable_sheet_title": "Proč je Payjoin nedostupný?",
561 "payment_id": "ID platby: ",
562 "payment_was_received": "Vaše platba byla přijata.",
563 "pending": " (čeká)",
@@ -1071,4 +1077,4 @@
1077 "you_will_send": "Směnit z",
1078 "youCanGoBackToYourDapp": "Nyní se můžete vrátit do svého dappu",
1079 "yy": "YY"
1074 -}
\ No newline at end of file
1080 +}
res/values/strings_de.arb
+7 -1
@@ -548,10 +548,16 @@
548 "password": "Passwort",
549 "paste": "Einfügen",
550 "pause_wallet_creation": "Die Möglichkeit, Haven Wallet zu erstellen, ist derzeit pausiert.",
551 + "payjoin_card_content": "Payjoin ist eine neue Feature für Privatsphäre und Gebühren in Bitcoin.",
552 "payjoin_details": "Payjoin Details",
553 "payjoin_enabled": "Payjoin aktiv",
554 + "payjoin_enabling_popup_content": "Sie können Payjoin unter dem Menü → Privatsphäre → Payjoin verwenden, um es später zu aktivieren oder zu deaktivieren.",
555 + "payjoin_enabling_popup_title": "Aktiviere Payjoin",
556 "payjoin_request_awaiting_tx": "Warten auf die Transaktion",
557 "payjoin_request_in_progress": "Im Gange",
558 + "payjoin_unavailable": "Payjoin nicht verfügbar",
559 + "payjoin_unavailable_sheet_content": "Wenn Sie eine Payjoin-Transaktion erhalten, müssen Sie bereits Bitcoin im Wallet haben.",
560 + "payjoin_unavailable_sheet_title": "Warum ist Payjoin nicht verfügbar?",
561 "payment_id": "Zahlungs-ID: ",
562 "payment_was_received": "Ihre Zahlung ist eingegangen.",
563 "pending": " (ausstehend)",
@@ -1074,4 +1080,4 @@
1080 "you_will_send": "Konvertieren von",
1081 "youCanGoBackToYourDapp": "Sie können jetzt zu Ihrem Dapp zurückkehren",
1082 "yy": "YY"
1077 -}
\ No newline at end of file
1083 +}
res/values/strings_en.arb
+7 -1
@@ -549,10 +549,16 @@
549 "password": "Password",
550 "paste": "Paste",
551 "pause_wallet_creation": "Ability to create Haven Wallet is currently paused.",
552 + "payjoin_card_content": "Payjoin is a new privacy-preserving and fee-saving feature in Bitcoin.",
553 "payjoin_details": "Payjoin details",
554 "payjoin_enabled": "Payjoin enabled",
555 + "payjoin_enabling_popup_content": "You can toggle Payjoin under Menu → Privacy → Use Payjoin to enable or disable it later.",
556 + "payjoin_enabling_popup_title": "Enabling Payjoin",
557 "payjoin_request_awaiting_tx": "Awaiting Transaction",
558 "payjoin_request_in_progress": "In Progress",
559 + "payjoin_unavailable": "Payjoin unavailable",
560 + "payjoin_unavailable_sheet_content": "Receiving a Payjoin transaction requires you to have Bitcoin ready to use.\n\nAs soon as your wallet has funds, Payjoin will be automatically enabled.",
561 + "payjoin_unavailable_sheet_title": "Why is Payjoin unavailable?",
562 "payment_id": "Payment ID: ",
563 "payment_was_received": "Your payment was received.",
564 "pending": " (pending)",
@@ -1072,4 +1078,4 @@
1078 "you_will_send": "Convert from",
1079 "youCanGoBackToYourDapp": "You can go back to your dApp now",
1080 "yy": "YY"
1075 -}
\ No newline at end of file
1081 +}
res/values/strings_es.arb
+7 -1
@@ -548,10 +548,16 @@
548 "password": "Contraseña",
549 "paste": "Pegar",
550 "pause_wallet_creation": "La capacidad para crear Haven Wallet está actualmente pausada.",
551 + "payjoin_card_content": "Payjoin es una nueva función de preservación de la privacidad y ahorro de tarifas en Bitcoin.",
552 "payjoin_details": "Payjoin detalles",
553 "payjoin_enabled": "Payjoin activado",
554 + "payjoin_enabling_popup_content": "Puede alternar Payjoin en menú → privacidad → usar Payjoin para habilitarlo o deshabilitarlo más tarde.",
555 + "payjoin_enabling_popup_title": "Habilitando Payjoin",
556 "payjoin_request_awaiting_tx": "Esperando transacción",
557 "payjoin_request_in_progress": "En curso",
558 + "payjoin_unavailable": "Payjoin no disponible",
559 + "payjoin_unavailable_sheet_content": "Recibir una transacción Payjoin requiere que tenga Bitcoin listo para usar. \\ N \\ nas pronto como su billetera tenga fondos, Payjoin estará habilitado automáticamente.",
560 + "payjoin_unavailable_sheet_title": "¿Por qué no está disponible Payjoin?",
561 "payment_id": "ID de pago: ",
562 "payment_was_received": "Su pago fue recibido.",
563 "pending": " (pendiente)",
@@ -1072,4 +1078,4 @@
1078 "you_will_send": "Convertir de",
1079 "youCanGoBackToYourDapp": "Puedes volver a tu dapp ahora",
1080 "yy": "YY"
1075 -}
\ No newline at end of file
1081 +}
res/values/strings_fr.arb
+7 -1
@@ -548,10 +548,16 @@
548 "password": "Mot de passe",
549 "paste": "Coller",
550 "pause_wallet_creation": "La possibilité de créer Haven Wallet est actuellement suspendue.",
551 + "payjoin_card_content": "Payjoin est une nouvelle fonctionnalité de préservation de la confidentialité et d'économie de frais dans Bitcoin.",
552 "payjoin_details": "Payjoin détails",
553 "payjoin_enabled": "Payjoin activé",
554 + "payjoin_enabling_popup_content": "Vous pouvez basculer Payjoin sous le menu → Confidentialité → Utiliser Payjoin pour l'activer ou le désactiver plus tard.",
555 + "payjoin_enabling_popup_title": "Activer Payjoin",
556 "payjoin_request_awaiting_tx": "En attente de transaction",
557 "payjoin_request_in_progress": "En cours",
558 + "payjoin_unavailable": "Payjoin indisponible",
559 + "payjoin_unavailable_sheet_content": "La réception d'une transaction Payjoin vous oblige à avoir un bitcoin prêt à l'emploi. \\ N \\ nas dès que votre portefeuille a des fonds, Payjoin sera automatiquement activé.",
560 + "payjoin_unavailable_sheet_title": "Pourquoi Payjoin n'est-il pas disponible?",
561 "payment_id": "ID de Paiement : ",
562 "payment_was_received": "Votre paiement a été reçu.",
563 "pending": " (en attente)",
@@ -1071,4 +1077,4 @@
1077 "you_will_send": "Convertir depuis",
1078 "youCanGoBackToYourDapp": "Vous pouvez retourner à votre Dapp maintenant",
1079 "yy": "AA"
1074 -}
\ No newline at end of file
1080 +}
res/values/strings_ha.arb
+7 -1
@@ -550,10 +550,16 @@
550 "password": "Kalmar wucewa",
551 "paste": "Manna",
552 "pause_wallet_creation": "A halin yanzu an dakatar da ikon ƙirƙirar Haven Wallet.",
553 + "payjoin_card_content": "Payjoin Shin sabon salo ne da adana sirri da biyan kuɗi a cikin Bitcoin.",
554 "payjoin_details": "Payjoin LIT LOCEC LOcciya",
555 "payjoin_enabled": "Payjoin An kunna",
556 + "payjoin_enabling_popup_content": "Kuna iya juyawa Payjoin a ƙarƙashin menu → Sirrin Sirri → Amfani Payjoin don kunna ko musaki shi daga baya.",
557 + "payjoin_enabling_popup_title": "Samu Payjoin",
558 "payjoin_request_awaiting_tx": "Jiran ma'amala",
559 "payjoin_request_in_progress": "Ana kai",
560 + "payjoin_unavailable": "Payjoin Babu",
561 + "payjoin_unavailable_sheet_content": "Karɓar A Payjoin Ma'amala yana buƙatar ku sami Bitcoin shirye don amfani. \\ N \\ n5 da zaran kamar walat ɗinku yana da kuɗi, Payjoin za'a kunna ta atomatik.",
562 + "payjoin_unavailable_sheet_title": "Me yasa Payjoin rasaa?",
563 "payment_id": "ID na biyan kuɗi:",
564 "payment_was_received": "An karɓi kuɗin ku.",
565 "pending": "(pending)",
@@ -1073,4 +1079,4 @@
1079 "you_will_send": "Maida daga",
1080 "youCanGoBackToYourDapp": "Kuna iya komawa zuwa DPP ɗinku yanzu",
1081 "yy": "YY"
1076 -}
\ No newline at end of file
1082 +}
res/values/strings_hi.arb
+8 -2
@@ -548,13 +548,19 @@
548 "password": "पारण शब्द",
549 "paste": "पेस्ट करें",
550 "pause_wallet_creation": "हेवन वॉलेट बनाने की क्षमता फिलहाल रुकी हुई है।",
551 + "payjoin_card_content": "Payjoin बिटकॉइन में एक नई गोपनीयता-संरक्षण और शुल्क-बचत सुविधा है।",
552 "payjoin_details": "Payjoin विवरण",
553 "payjoin_enabled": "Payjoin सक्षम",
554 + "payjoin_enabling_popup_content": "आप मेनू → गोपनीयता → के तहत Payjoin टॉगल कर सकते हैं → बाद में इसे सक्षम या अक्षम करने के लिए Payjoin का उपयोग करें।",
555 + "payjoin_enabling_popup_title": "सक्षम Payjoin",
556 "payjoin_request_awaiting_tx": "लेन -देन का इंतजार",
557 "payjoin_request_in_progress": "प्रगति पर है",
558 + "payjoin_unavailable": "Payjoin अनुपलब्ध",
559 + "payjoin_unavailable_sheet_content": "Payjoin लेन -देन प्राप्त करने के लिए आपको बिटकॉइन का उपयोग करने के लिए तैयार होना आवश्यक है। जैसे ही आपके वॉलेट में धन है, \\ n \\ nas, Payjoin स्वचालित रूप से सक्षम हो जाएगा।",
560 + "payjoin_unavailable_sheet_title": "Payjoin अनुपलब्ध क्यों है?",
561 "payment_id": "भुगतान ID: ",
556 - "Payment_was_received": "आपका भुगतान प्राप्त हो गया था।",
562 "payment_was_received": "आपका भुगतान प्राप्त हुआ था।",
563 + "Payment_was_received": "आपका भुगतान प्राप्त हो गया था।",
564 "pending": " (अपूर्ण)",
565 "percentageOf": "${amount} का",
566 "pin_at_top": "शीर्ष पर ${token} पिन करें",
@@ -1073,4 +1079,4 @@
1079 "you_will_send": "से रूपांतरित करें",
1080 "youCanGoBackToYourDapp": "अब आप अपने DAPP पर वापस जा सकते हैं",
1081 "yy": "वाईवाई"
1076 -}
\ No newline at end of file
1082 +}
res/values/strings_hr.arb
+7 -1
@@ -548,10 +548,16 @@
548 "password": "Lozinka",
549 "paste": "Zalijepi",
550 "pause_wallet_creation": "Mogućnost stvaranja novčanika Haven trenutno je pauzirana.",
551 + "payjoin_card_content": "Payjoin je nova značajka za čuvanje privatnosti i ušteda naknada u Bitcoin-u.",
552 "payjoin_details": "Payjoin Pojedinosti",
553 "payjoin_enabled": "Payjoin Omogućeno",
554 + "payjoin_enabling_popup_content": "Možete prebaciti Payjoin u izborniku → Privatnost → Koristite Payjoin da biste ga omogućili ili onemogućili kasnije.",
555 + "payjoin_enabling_popup_title": "Omogućavanje Payjoin",
556 "payjoin_request_awaiting_tx": "Čekajući transakciju",
557 "payjoin_request_in_progress": "U toku",
558 + "payjoin_unavailable": "Payjoin nedostupno",
559 + "payjoin_unavailable_sheet_content": "Primanje Payjoin Transakcije zahtijeva da Bitcoin bude spreman za upotrebu. \\ N \\ NAS čim vaš novčanik ima sredstva, Payjoin će biti automatski omogućen.",
560 + "payjoin_unavailable_sheet_title": "Zašto je Payjoin nedostupno?",
561 "payment_id": "ID plaćanja: ",
562 "payment_was_received": "Vaša uplata je primljena.",
563 "pending": " (u tijeku)",
@@ -1071,4 +1077,4 @@
1077 "you_will_send": "Razmijeni iz",
1078 "youCanGoBackToYourDapp": "Sada se možete vratiti na svoj dapp",
1079 "yy": "GG"
1074 -}
\ No newline at end of file
1080 +}
res/values/strings_hy.arb
+7 -1
@@ -547,10 +547,16 @@
547 "password": "Գաղտնաբառ",
548 "paste": "Տեղադրել",
549 "pause_wallet_creation": "Հնարավորություն ստեղծել Haven Դրամապանակ ընթացիկ դադարեցված է",
550 + "payjoin_card_content": "Payjoin- ն նոր գաղտնիության պահպանման եւ վճարների պահպանման առանձնահատկություն է Bitcoin- ում:",
551 "payjoin_details": "Payjoin Մանրամասն",
552 "payjoin_enabled": "Payjoin միացված",
553 + "payjoin_enabling_popup_content": "Կարող եք անցնել Payjoin ընտրացանկի ներքո → Գաղտնիության → Օգտագործեք Payjoin, միացնելու կամ անջատելու այն ավելի ուշ:",
554 + "payjoin_enabling_popup_title": "Միացնել Payjoin",
555 "payjoin_request_awaiting_tx": "Սպասում է գործարքին",
556 "payjoin_request_in_progress": "Ընթացքի մեջ",
557 + "payjoin_unavailable": "Payjoin անհասանելի",
558 + "payjoin_unavailable_sheet_content": "A Payjoin գործարք ստանալը պահանջում է, որ դուք պատրաստեք Bitcoin- ը պատրաստելու համար:",
559 + "payjoin_unavailable_sheet_title": "Ինչու է Payjoin անհասանելի:",
560 "payment_id": "Վճարման հերթական համար",
561 "payment_was_received": "Վճարումը ստացված է",
562 "pending": " (մշակվում է)",
@@ -1069,4 +1075,4 @@
1075 "you_will_send": "Փոխանակեք",
1076 "youCanGoBackToYourDapp": "Այժմ կարող եք վերադառնալ ձեր DAPP- ին",
1077 "yy": "ՏՏ"
1072 -}
\ No newline at end of file
1078 +}
res/values/strings_id.arb
+7 -1
@@ -550,10 +550,16 @@
550 "password": "Kata Sandi",
551 "paste": "Tempel",
552 "pause_wallet_creation": "Kemampuan untuk membuat Haven Wallet saat ini dijeda.",
553 + "payjoin_card_content": "Payjoin adalah fitur pemeliharaan privasi dan hemat biaya baru di Bitcoin.",
554 "payjoin_details": "Payjoin detail",
555 "payjoin_enabled": "Payjoin diaktifkan",
556 + "payjoin_enabling_popup_content": "Anda dapat beralih Payjoin di bawah menu → Privasi → Gunakan Payjoin untuk mengaktifkan atau menonaktifkannya nanti.",
557 + "payjoin_enabling_popup_title": "Mengaktifkan Payjoin",
558 "payjoin_request_awaiting_tx": "Menunggu transaksi",
559 "payjoin_request_in_progress": "Sedang berlangsung",
560 + "payjoin_unavailable": "Payjoin tidak tersedia",
561 + "payjoin_unavailable_sheet_content": "Menerima Payjoin transaksi mengharuskan Anda untuk menyiapkan bitcoin. \\ N \\ nas segera setelah dompet Anda memiliki dana, Payjoin akan diaktifkan secara otomatis.",
562 + "payjoin_unavailable_sheet_title": "Mengapa Payjoin tidak tersedia?",
563 "payment_id": "ID Pembayaran: ",
564 "payment_was_received": "Pembayaran Anda telah diterima.",
565 "pending": " (pending)",
@@ -1074,4 +1080,4 @@
1080 "you_will_send": "Konversi dari",
1081 "youCanGoBackToYourDapp": "Anda dapat kembali ke dapp Anda sekarang",
1082 "yy": "YY"
1077 -}
\ No newline at end of file
1083 +}
res/values/strings_it.arb
+7 -1
@@ -549,10 +549,16 @@
549 "password": "Password",
550 "paste": "Incolla",
551 "pause_wallet_creation": "La possibilità di creare Wallet Haven è attualmente sospesa.",
552 + "payjoin_card_content": "Payjoin è una nuova funzionalità di conservazione della privacy e di risparmio di tasse in Bitcoin.",
553 "payjoin_details": "Payjoin dettagli",
554 "payjoin_enabled": "Payjoin abilitato",
555 + "payjoin_enabling_popup_content": "È possibile attivare Payjoin sotto menu → privacy → usa Payjoin per abilitarlo o disabilitarlo in seguito.",
556 + "payjoin_enabling_popup_title": "Abilitazione Payjoin",
557 "payjoin_request_awaiting_tx": "In attesa di transazione",
558 "payjoin_request_in_progress": "In corso",
559 + "payjoin_unavailable": "Payjoin non disponibile",
560 + "payjoin_unavailable_sheet_content": "La ricezione di una transazione Payjoin richiede di avere Bitcoin pronto per l'uso. \\ Ns non appena il tuo portafoglio ha fondi, Payjoin verrà automaticamente abilitato.",
561 + "payjoin_unavailable_sheet_title": "Perché Payjoin non è disponibile?",
562 "payment_id": "ID Pagamento: ",
563 "payment_was_received": "Il tuo pagamento è stato ricevuto.",
564 "pending": " (non confermati)",
@@ -1073,4 +1079,4 @@
1079 "you_will_send": "Conveti da",
1080 "youCanGoBackToYourDapp": "Puoi tornare al tuo DApp ora",
1081 "yy": "YY"
1076 -}
\ No newline at end of file
1082 +}
res/values/strings_ja.arb
+7 -1
@@ -549,10 +549,16 @@
549 "password": "パスワード",
550 "paste": "ペースト",
551 "pause_wallet_creation": "Haven Wallet を作成する機能は現在一時停止されています。",
552 + "payjoin_card_content": "Payjoinは、Bitcoinの新しいプライバシーを提供し、有料の機能です。",
553 "payjoin_details": "Payjoin 詳細",
554 "payjoin_enabled": "Payjoin enabled",
555 + "payjoin_enabling_popup_content": "メニュー→[プライバシー]→[ Payjoinを使用して、後で有効または無効にすることもできます。",
556 + "payjoin_enabling_popup_title": "Payjoinを有効にする",
557 "payjoin_request_awaiting_tx": "トランザクションを待っています",
558 "payjoin_request_in_progress": "進行中",
559 + "payjoin_unavailable": "Payjoin利用できません",
560 + "payjoin_unavailable_sheet_content": "Payjoinトランザクションを受信するには、ビットコインを使用できるようにする必要があります。\\ n \\ nasのウォレットに資金があるとすぐに、 Payjoinが自動的に有効になります。",
561 + "payjoin_unavailable_sheet_title": "Payjoinが利用できないのはなぜですか?",
562 "payment_id": "支払いID: ",
563 "payment_was_received": "お支払いを受け取りました。",
564 "pending": " (保留中)",
@@ -1072,4 +1078,4 @@
1078 "you_will_send": "から変換",
1079 "youCanGoBackToYourDapp": "あなたは今あなたのダップに戻ることができます",
1080 "yy": "YY"
1075 -}
\ No newline at end of file
1081 +}
res/values/strings_ko.arb
+7 -1
@@ -549,10 +549,16 @@
549 "password": "비밀번호",
550 "paste": "붙여넣기",
551 "pause_wallet_creation": "현재 Haven 지갑 생성 기능이 일시 중지되었습니다.",
552 + "payjoin_card_content": "Payjoin는 Bitcoin의 새로운 개인 정보 보호 및 수수료 절약 기능입니다.",
553 "payjoin_details": "Payjoin 세부 정보",
554 "payjoin_enabled": "Payjoin enabled",
555 + "payjoin_enabling_popup_content": "메뉴 → 개인 정보 → → Payjoin를 사용하여 나중에 활성화하거나 비활성화 할 수 있습니다.",
556 + "payjoin_enabling_popup_title": "활성화 Payjoin",
557 "payjoin_request_awaiting_tx": "거래를 기다리고 있습니다",
558 "payjoin_request_in_progress": "진행 중",
559 + "payjoin_unavailable": "Payjoin Aailable",
560 + "payjoin_unavailable_sheet_content": "Payjoin 트랜잭션을 수신하려면 비트 코인을 사용할 준비가되어 있어야합니다. \\ n \\ nas 지갑이 자금이 자금이 있으면 Payjoin가 자동으로 활성화됩니다.",
561 + "payjoin_unavailable_sheet_title": "Payjoin를 사용할 수없는 이유는 무엇입니까?",
562 "payment_id": "결제 ID: ",
563 "payment_was_received": "결제가 접수되었습니다.",
564 "pending": " (대기 중)",
@@ -1072,4 +1078,4 @@
1078 "you_will_send": "전환 출처",
1079 "youCanGoBackToYourDapp": "이제 dApp으로 돌아갈 수 있습니다",
1080 "yy": "YY"
1075 -}
\ No newline at end of file
1081 +}
res/values/strings_my.arb
+7 -1
@@ -548,10 +548,16 @@
548 "password": "စကားဝှက်",
549 "paste": "ငါးပိ",
550 "pause_wallet_creation": "Haven Wallet ဖန်တီးနိုင်မှုကို လောလောဆယ် ခေတ္တရပ်ထားသည်။",
551 + "payjoin_card_content": "Payjoin Bitcoin တွင် privacy ကိုထိန်းသိမ်းထားခြင်းနှင့်အခကြေးငွေသက်သာသည့်အင်္ဂါရပ်အသစ်တစ်ခုဖြစ်သည်။",
552 "payjoin_details": "Payjoin အသေးစိတ်အချက်အလက်များ %% အသေးစိတ်အချက်အလက်များ",
553 "payjoin_enabled": "Payjoin enabled",
554 + "payjoin_enabling_popup_content": "menu Payjoin Payjoin Payjoin Payjoin Payjoin → privacy → enable လုပ်ရန် Payjoin Payjoin ကိုသုံးပါ။",
555 + "payjoin_enabling_popup_title": "Payjoin Payjoin enable",
556 "payjoin_request_awaiting_tx": "ငွေပေးငွေယူစောင့်ဆိုင်း",
557 "payjoin_request_in_progress": "ဆောင်ရွက်ဆဲဖြစ်သည်",
558 + "payjoin_unavailable": "Payjoin မရနိုင်သော",
559 + "payjoin_unavailable_sheet_content": "Payjoin ငွေပေးချေမှုကိုလက်ခံရန်သင့်အား Bitcoin ကိုအသုံးပြုရန်အဆင်သင့်ဖြစ်ရန်လိုအပ်သည်။ \\ n \\ ns ပိုက်ဆံအိတ်သည်ရန်ပုံငွေများရှိပါက Payjoin သည်အလိုအလျောက်ဖွင့်ထားလိမ့်မည်။",
560 + "payjoin_unavailable_sheet_title": "Payjoin Payjoin မရနိုင်ပါကဘာကြောင့်လဲ။",
561 "payment_id": "ငွေပေးချေမှု ID:",
562 "payment_was_received": "သင့်ငွေပေးချေမှုကို လက်ခံရရှိခဲ့သည်။",
563 "pending": " (ဆိုင်းငံ့)",
@@ -1071,4 +1077,4 @@
1077 "you_will_send": "မှပြောင်းပါ။",
1078 "youCanGoBackToYourDapp": "သငျသညျယခုသင်၏ dapp ကိုပြန်သွားနိုင်ပါတယ်",
1079 "yy": "YY"
1074 -}
\ No newline at end of file
1080 +}
res/values/strings_nl.arb
+7 -1
@@ -548,10 +548,16 @@
548 "password": "Wachtwoord",
549 "paste": "Plakken",
550 "pause_wallet_creation": "De mogelijkheid om Haven Wallet te maken is momenteel onderbroken.",
551 + "payjoin_card_content": "Payjoin is een nieuwe functie voor privacybehoud en fee-sparende functie in Bitcoin.",
552 "payjoin_details": "Payjoin details",
553 "payjoin_enabled": "Payjoin ingeschakeld",
554 + "payjoin_enabling_popup_content": "U kunt Payjoin onder menu → privacy → Privacy → gebruiken Payjoin om het later in te schakelen of uit te schakelen.",
555 + "payjoin_enabling_popup_title": "Payjoin Inschakelen",
556 "payjoin_request_awaiting_tx": "In afwachting van transactie",
557 "payjoin_request_in_progress": "In uitvoering",
558 + "payjoin_unavailable": "Payjoin niet beschikbaar",
559 + "payjoin_unavailable_sheet_content": "Het ontvangen van een Payjoin -transactie vereist dat u Bitcoin klaar hebt om te gebruiken. \\ N \\ NAS Zodra uw portemonnee geld heeft, wordt Payjoin automatisch ingeschakeld.",
560 + "payjoin_unavailable_sheet_title": "Waarom is Payjoin niet beschikbaar?",
561 "payment_id": "Betaling ID: ",
562 "payment_was_received": "Uw betaling is ontvangen.",
563 "pending": " (in afwachting)",
@@ -1072,4 +1078,4 @@
1078 "you_will_send": "Converteren van",
1079 "youCanGoBackToYourDapp": "U kunt nu terug naar uw DApp gaan",
1080 "yy": "JJ"
1075 -}
\ No newline at end of file
1081 +}
res/values/strings_pl.arb
+7 -1
@@ -548,10 +548,16 @@
548 "password": "Hasło",
549 "paste": "Wklej",
550 "pause_wallet_creation": "Możliwość utworzenia Portfela Haven jest obecnie wstrzymana.",
551 + "payjoin_card_content": "Payjoin to nowa funkcja wymagająca prywatności i oszczędzania opłat w Bitcoin.",
552 "payjoin_details": "Szczegóły Payjoin",
553 "payjoin_enabled": "Payjoin włączony",
554 + "payjoin_enabling_popup_content": "Możesz przełączać Payjoin w menu → Prywatność → Użyj Payjoin, aby włączyć lub wyłączyć później.",
555 + "payjoin_enabling_popup_title": "Włączanie Payjoin",
556 "payjoin_request_awaiting_tx": "Oczekiwanie na transakcję",
557 "payjoin_request_in_progress": "W toku",
558 + "payjoin_unavailable": "Payjoin niedostępny",
559 + "payjoin_unavailable_sheet_content": "Otrzymanie transakcji Payjoin wymaga przygotowania Bitcoin do użycia. \\ N \\ NAS, ponieważ portfel ma fundusze, Payjoin zostanie automatycznie włączony.",
560 + "payjoin_unavailable_sheet_title": "Dlaczego Payjoin jest niedostępny?",
561 "payment_id": "ID Płatności: ",
562 "payment_was_received": "Twoja płatność została otrzymana.",
563 "pending": " (w oczekiwaniu)",
@@ -1071,4 +1077,4 @@
1077 "you_will_send": "Konwertuj z",
1078 "youCanGoBackToYourDapp": "Możesz teraz wrócić do swojego dapp",
1079 "yy": "RR"
1074 -}
\ No newline at end of file
1080 +}
res/values/strings_pt.arb
+7 -1
@@ -550,10 +550,16 @@
550 "password": "Senha",
551 "paste": "Colar",
552 "pause_wallet_creation": "A capacidade de criar a Haven Wallet está atualmente pausada.",
553 + "payjoin_card_content": "Payjoin é um novo recurso de preservação de privacidade e economia de taxas no Bitcoin.",
554 "payjoin_details": "Payjoin detalhes",
555 "payjoin_enabled": "Payjoin habilitado",
556 + "payjoin_enabling_popup_content": "Você pode alternar Payjoin em Menu → Privacidade → Use Payjoin para habilitá -lo ou desativá -lo posteriormente.",
557 + "payjoin_enabling_popup_title": "Habilitando Payjoin",
558 "payjoin_request_awaiting_tx": "Aguardando transação",
559 "payjoin_request_in_progress": "Em andamento",
560 + "payjoin_unavailable": "Payjoin indisponível",
561 + "payjoin_unavailable_sheet_content": "O recebimento de uma transação Payjoin exige que você tenha o Bitcoin pronto para uso. \\ N \\ nas assim que sua carteira tiver fundos, Payjoin será ativado automaticamente.",
562 + "payjoin_unavailable_sheet_title": "Por que Payjoin não está disponível?",
563 "payment_id": "ID de pagamento: ",
564 "payment_was_received": "Seu pagamento foi recebido.",
565 "pending": " (pendente)",
@@ -1074,4 +1080,4 @@
1080 "you_will_send": "Converter de",
1081 "youCanGoBackToYourDapp": "Você pode voltar para o seu dapp agora",
1082 "yy": "aa"
1077 -}
\ No newline at end of file
1083 +}
res/values/strings_ru.arb
+7 -1
@@ -549,10 +549,16 @@
549 "password": "Пароль",
550 "paste": "Вставить",
551 "pause_wallet_creation": "Возможность создания Haven Wallet в настоящее время приостановлена.",
552 + "payjoin_card_content": "Payjoin-новая функция, поддерживающая конфиденциальность и сборы в биткойнах.",
553 "payjoin_details": "Payjoin подробности",
554 "payjoin_enabled": "Payjoin включено",
555 + "payjoin_enabling_popup_content": "Вы можете переключить Payjoin в меню → конфиденциальность → использовать Payjoin, чтобы включить или отключить его позже.",
556 + "payjoin_enabling_popup_title": "Включение Payjoin",
557 "payjoin_request_awaiting_tx": "В ожидании транзакции",
558 "payjoin_request_in_progress": "В ходе выполнения",
559 + "payjoin_unavailable": "Payjoin недоступен",
560 + "payjoin_unavailable_sheet_content": "Получение транзакции Payjoin требует, чтобы вы готовили биткойн для использования. \\ N \\ Nas, как только ваш кошелек получит средства, Payjoin будет автоматически включен.",
561 + "payjoin_unavailable_sheet_title": "Почему Payjoin недоступен?",
562 "payment_id": "ID платежа: ",
563 "payment_was_received": "Ваш платеж получен.",
564 "pending": " (в ожидании)",
@@ -1072,4 +1078,4 @@
1078 "you_will_send": "Конвертировать из",
1079 "youCanGoBackToYourDapp": "Вы можете вернуться к своему даппу сейчас",
1080 "yy": "ГГ"
1075 -}
\ No newline at end of file
1081 +}
res/values/strings_th.arb
+7 -1
@@ -548,10 +548,16 @@
548 "password": "รหัสผ่าน",
549 "paste": "วาง",
550 "pause_wallet_creation": "ขณะนี้ความสามารถในการสร้าง Haven Wallet ถูกหยุดชั่วคราว",
551 + "payjoin_card_content": "Payjoin เป็นฟีเจอร์การประหยัดความเป็นส่วนตัวและการประหยัดค่าธรรมเนียมใหม่ใน Bitcoin",
552 "payjoin_details": "Payjoin รายละเอียด",
553 "payjoin_enabled": "Payjoin เปิดใช้งาน",
554 + "payjoin_enabling_popup_content": "คุณสามารถสลับ Payjoin ภายใต้เมนู→ความเป็นส่วนตัว→ใช้ Payjoin เพื่อเปิดใช้งานหรือปิดการใช้งานในภายหลัง",
555 + "payjoin_enabling_popup_title": "เปิดใช้งาน Payjoin",
556 "payjoin_request_awaiting_tx": "รอธุรกรรม",
557 "payjoin_request_in_progress": "การดำเนินการ",
558 + "payjoin_unavailable": "Payjoin ไม่พร้อมใช้งาน",
559 + "payjoin_unavailable_sheet_content": "การรับธุรกรรม Payjoin จะต้องให้คุณมี Bitcoin พร้อมใช้งาน \\ n \\ nas เร็ว ๆ นี้เนื่องจากกระเป๋าเงินของคุณมีเงินทุน Payjoin จะเปิดใช้งานโดยอัตโนมัติ",
560 + "payjoin_unavailable_sheet_title": "ทำไม Payjoin ไม่พร้อมใช้งาน?",
561 "payment_id": "ID การชำระเงิน: ",
562 "payment_was_received": "การชำระเงินของคุณได้รับการรับทราบแล้ว",
563 "pending": " (อยู่ระหว่างดำเนินการ)",
@@ -1071,4 +1077,4 @@
1077 "you_will_send": "แปลงจาก",
1078 "youCanGoBackToYourDapp": "คุณสามารถกลับไปที่ dapp ของคุณได้ทันที",
1079 "yy": "ปี"
1074 -}
\ No newline at end of file
1080 +}
res/values/strings_tl.arb
+7 -1
@@ -548,10 +548,16 @@
548 "password": "Password",
549 "paste": "I-paste",
550 "pause_wallet_creation": "Kasalukuyang naka-pause ang kakayahang gumawa ng Haven Wallet.",
551 + "payjoin_card_content": "Payjoin ay isang bagong tampok na privacy-pag-iingat at pag-save ng bayad sa Bitcoin.",
552 "payjoin_details": "Mga detalye ng Payjoin",
553 "payjoin_enabled": "Payjoin pinagana",
554 + "payjoin_enabling_popup_content": "Maaari mong i -toggle Payjoin sa ilalim ng menu → privacy → gumamit ng Payjoin upang paganahin o huwag paganahin ito sa ibang pagkakataon.",
555 + "payjoin_enabling_popup_title": "Pagpapagana Payjoin",
556 "payjoin_request_awaiting_tx": "Naghihintay ng transaksyon",
557 "payjoin_request_in_progress": "Sa pag -unlad",
558 + "payjoin_unavailable": "Payjoin hindi magagamit",
559 + "payjoin_unavailable_sheet_content": "Ang pagtanggap ng isang Payjoin transaksyon ay nangangailangan sa iyo na handa nang gamitin ang bitcoin.",
560 + "payjoin_unavailable_sheet_title": "Bakit hindi magagamit ang Payjoin?",
561 "payment_id": "Payment ID: ",
562 "payment_was_received": "Natanggap ang iyong bayad.",
563 "pending": "(hindi pa tapos)",
@@ -1071,4 +1077,4 @@
1077 "you_will_send": "I-convert mula sa",
1078 "youCanGoBackToYourDapp": "Maaari kang bumalik sa iyong dapp ngayon",
1079 "yy": "YY"
1074 -}
\ No newline at end of file
1080 +}
res/values/strings_tr.arb
+7 -1
@@ -548,10 +548,16 @@
548 "password": "Parola",
549 "paste": "Yapıştır",
550 "pause_wallet_creation": "Haven Cüzdanı oluşturma yeteneği şu anda duraklatıldı.",
551 + "payjoin_card_content": "Payjoin, Bitcoin'de yeni bir gizliliği koruyan ve ücret tasarrufu sağlayan bir özelliktir.",
552 "payjoin_details": "Payjoin detaylar",
553 "payjoin_enabled": "Payjoin etkinleştirilmiş",
554 + "payjoin_enabling_popup_content": "Daha sonra etkinleştirmek veya devre dışı bırakmak için Menü → Gizlilik → Kullanın Payjoin kullanabilirsiniz.",
555 + "payjoin_enabling_popup_title": "Etkinleştirme Payjoin",
556 "payjoin_request_awaiting_tx": "İşlem bekliyor",
557 "payjoin_request_in_progress": "Devam etmekte",
558 + "payjoin_unavailable": "Payjoin mevcut değil",
559 + "payjoin_unavailable_sheet_content": "Bir Payjoin işlem almak, Bitcoin kullanıma hazır olmanızı gerektirir. \\ N \\ nas Cüzdanınızın fonları olduğu anda Payjoin otomatik olarak etkinleştirilir.",
560 + "payjoin_unavailable_sheet_title": "Payjoin Neden mevcut değil?",
561 "payment_id": "Ödeme ID'si: ",
562 "payment_was_received": "Ödemeniz alındı.",
563 "pending": " (bekleyen)",
@@ -1071,4 +1077,4 @@
1077 "you_will_send": "Biçiminden dönüştür:",
1078 "youCanGoBackToYourDapp": "Şimdi Dapp'ınıza geri dönebilirsin",
1079 "yy": "YY"
1074 -}
\ No newline at end of file
1080 +}
res/values/strings_uk.arb
+7 -1
@@ -548,10 +548,16 @@
548 "password": "Пароль",
549 "paste": "Вставити",
550 "pause_wallet_creation": "Можливість створення гаманця Haven зараз призупинено.",
551 + "payjoin_card_content": "Payjoin-це нова функція збереження конфіденційності та економії плати в Bitcoin.",
552 "payjoin_details": "Payjoin деталей",
553 "payjoin_enabled": "Payjoin увімкнено",
554 + "payjoin_enabling_popup_content": "Ви можете перемикатися Payjoin в меню → конфіденційність → використовувати Payjoin, щоб увімкнути або відключити його пізніше.",
555 + "payjoin_enabling_popup_title": "Увімкнення Payjoin",
556 "payjoin_request_awaiting_tx": "Чекає транзакції",
557 "payjoin_request_in_progress": "Триває",
558 + "payjoin_unavailable": "Payjoin недоступний",
559 + "payjoin_unavailable_sheet_content": "Отримання транзакції Payjoin вимагає, щоб ви біткойн готували до використання.",
560 + "payjoin_unavailable_sheet_title": "Чому Payjoin недоступний?",
561 "payment_id": "ID платежу: ",
562 "payment_was_received": "Ваш платіж отримано.",
563 "pending": " (в очікуванні)",
@@ -1072,4 +1078,4 @@
1078 "you_will_send": "Конвертувати з",
1079 "youCanGoBackToYourDapp": "Ви можете повернутися до свого DAPP зараз",
1080 "yy": "YY"
1075 -}
\ No newline at end of file
1081 +}
res/values/strings_ur.arb
+7 -1
@@ -550,10 +550,16 @@
550 "password": "پاس ورڈ",
551 "paste": "چسپاں کریں۔",
552 "pause_wallet_creation": "Haven Wallet ۔ﮯﮨ ﻑﻮﻗﻮﻣ ﻝﺎﺤﻟﺍ ﯽﻓ ﺖﯿﻠﮨﺍ ﯽﮐ ﮯﻧﺎﻨﺑ",
553 + "payjoin_card_content": "Payjoin بٹ کوائن میں پرائیویسی کو محفوظ رکھنے اور فیس بچانے کی ایک نئی خصوصیت ہے۔",
554 "payjoin_details": "Payjoin تفصیلات",
555 "payjoin_enabled": "Payjoin فعال",
556 + "payjoin_enabling_popup_content": "آپ Payjoin مینو → پرائیویسی → Payjoin Payjoin Payjoin کو بعد میں فعال کرنے یا غیر فعال کرنے کے لئے Payjoin Payjoin کا استعمال کریں۔",
557 + "payjoin_enabling_popup_title": "Payjoin کو چالو کرنا",
558 "payjoin_request_awaiting_tx": "لین دین کے منتظر",
559 "payjoin_request_in_progress": "پیشرفت میں",
560 + "payjoin_unavailable": "Payjoin دستیاب نہیں",
561 + "payjoin_unavailable_sheet_content": "Payjoin ٹرانزیکشن وصول کرنے کے ل you آپ کو بٹ کوائن کو استعمال کرنے کے لئے تیار کرنے کی ضرورت ہوتی ہے۔ \\ n \\ nas جیسے ہی آپ کے بٹوے میں فنڈز ہوں گے ، Payjoin خود بخود فعال ہوجائیں گے۔",
562 + "payjoin_unavailable_sheet_title": "Payjoin دستیاب کیوں نہیں ہے؟",
563 "payment_id": "ادائیگی کی شناخت:",
564 "payment_was_received": "آپ کی ادائیگی موصول ہو گئی۔",
565 "pending": " (زیر التواء)",
@@ -1073,4 +1079,4 @@
1079 "you_will_send": "سے تبدیل کریں۔",
1080 "youCanGoBackToYourDapp": "اب آپ اپنے ڈی اے پی پی پر واپس جاسکتے ہیں",
1081 "yy": "YY"
1076 -}
\ No newline at end of file
1082 +}
res/values/strings_vi.arb
+7 -1
@@ -546,10 +546,16 @@
546 "password": "Mật khẩu",
547 "paste": "Dán",
548 "pause_wallet_creation": "Khả năng tạo ví Haven hiện đang bị tạm dừng.",
549 + "payjoin_card_content": "Payjoin là một tính năng bảo tồn quyền riêng tư mới và tiết kiệm phí trong Bitcoin.",
550 "payjoin_details": "Payjoin chi tiết",
551 "payjoin_enabled": "Payjoin Bật",
552 + "payjoin_enabling_popup_content": "Bạn có thể chuyển đổi Payjoin trong Menu → Quyền riêng tư → Sử dụng Payjoin để bật hoặc tắt nó sau.",
553 + "payjoin_enabling_popup_title": "Cho phép Payjoin",
554 "payjoin_request_awaiting_tx": "Đang chờ giao dịch",
555 "payjoin_request_in_progress": "Trong tiến trình",
556 + "payjoin_unavailable": "Payjoin Không có sẵn",
557 + "payjoin_unavailable_sheet_content": "Nhận một giao dịch Payjoin yêu cầu bạn sẵn sàng sử dụng bitcoin. \\ N \\ nas sớm khi ví của bạn có tiền, Payjoin sẽ được bật tự động.",
558 + "payjoin_unavailable_sheet_title": "Tại sao Payjoin không có sẵn?",
559 "payment_id": "ID thanh toán: ",
560 "payment_was_received": "Thanh toán của bạn đã được nhận.",
561 "pending": " (đang chờ)",
@@ -1068,4 +1074,4 @@
1074 "you_will_send": "Chuyển đổi từ",
1075 "youCanGoBackToYourDapp": "Bạn có thể quay lại DAPP của mình ngay bây giờ",
1076 "yy": "YY"
1071 -}
\ No newline at end of file
1077 +}
res/values/strings_yo.arb
+7 -1
@@ -549,10 +549,16 @@
549 "password": "Ọ̀rọ̀ aṣínà",
550 "paste": "Fikún ẹ̀dà yín",
551 "pause_wallet_creation": "Agbara lati ṣẹda Haven Wallet ti wa ni idaduro lọwọlọwọ.",
552 + "payjoin_card_content": "Payjoin jẹ ẹya-itọju aṣiri tuntun ati ẹya fifipamọ owo sisan ni Bitcoin.",
553 "payjoin_details": "Payjoin awọn alaye",
554 "payjoin_enabled": "Payjoin ṣiṣẹ",
555 + "payjoin_enabling_popup_content": "O le to Payjoin labẹ akojọ aṣayan → lo Payjoin lati ṣiṣẹ tabi mu kuro nigbamii.",
556 + "payjoin_enabling_popup_title": "Mu ṣiṣẹ Payjoin",
557 "payjoin_request_awaiting_tx": "O duro de idunadura",
558 "payjoin_request_in_progress": "Ni ilọsiwaju",
559 + "payjoin_unavailable": "Payjoin ko si",
560 + "payjoin_unavailable_sheet_content": "Gbigba idunadura Payjoin iṣowo nbeere lati ni Bitcoin ṣetan lati lo. \\ N \\ NAS laipẹ bi apamọwọ rẹ ni owo, Payjoin yoo ṣiṣẹ laifọwọyi.",
561 + "payjoin_unavailable_sheet_title": "Kini idi ti Payjoin ko si?",
562 "payment_id": "Àmì ìdánimọ̀ àránṣẹ́: ",
563 "payment_was_received": "Àránṣẹ́ yín ti dé.",
564 "pending": " pípẹ́",
@@ -1072,4 +1078,4 @@
1078 "you_will_send": "Ṣe pàṣípààrọ̀ láti",
1079 "youCanGoBackToYourDapp": "O le pada si tapla rẹ bayi",
1080 "yy": "Ọd"
1075 -}
\ No newline at end of file
1081 +}
res/values/strings_zh.arb
+7 -1
@@ -548,10 +548,16 @@
548 "password": "密码",
549 "paste": "粘贴",
550 "pause_wallet_creation": "创建 Haven 钱包的功能当前已暂停。",
551 + "payjoin_card_content": "Payjoin是比特币中的新的隐私权和节省费用的功能。",
552 "payjoin_details": "Payjoin 细节",
553 "payjoin_enabled": "Payjoin启用",
554 + "payjoin_enabling_popup_content": "您可以在菜单下切换 Payjoin隐私→使用 Payjoin以后启用或禁用它。",
555 + "payjoin_enabling_popup_title": "启用 Payjoin",
556 "payjoin_request_awaiting_tx": "等待交易",
557 "payjoin_request_in_progress": "进行中",
558 + "payjoin_unavailable": "Payjoin不可用",
559 + "payjoin_unavailable_sheet_content": "接收 Payjoin Transaction需要您准备使用比特币。",
560 + "payjoin_unavailable_sheet_title": "为什么 Payjoin不可用?",
561 "payment_id": "付款 ID: ",
562 "payment_was_received": "您的付款已收到。",
563 "pending": " (待定)",
@@ -1071,4 +1077,4 @@
1077 "you_will_send": "转换自",
1078 "youCanGoBackToYourDapp": "您现在可以回到DAPP",
1079 "yy": "YY"
1074 -}
\ No newline at end of file
1080 +}