From e64676e86224aaa7e4f826acf60bd9cc97177348 Mon Sep 17 00:00:00 2001 From: reasje Date: Fri, 15 Mar 2024 19:32:34 +0330 Subject: [PATCH 1/5] feat: top-up notif title & text --- assets/flutter_i18n/en.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/assets/flutter_i18n/en.json b/assets/flutter_i18n/en.json index be9fe17e..187c1777 100644 --- a/assets/flutter_i18n/en.json +++ b/assets/flutter_i18n/en.json @@ -347,5 +347,7 @@ "auto_claim_execution_dialog_title": "Time Already Passed!", "auto_claim_execution_dialog_text": "The time for auto claim has elapsed. Would you like to execute auto claim now?", "execute": "Execute", - "auto_claim_scheduling_text": "Auto-claim will execute at {0} tomorrow" + "auto_claim_scheduling_text": "Auto-claim will execute at {0} tomorrow", + "mxc_top_up_notification_text": "Hey {0}! You added {1} MXC to your wallet today. Keep it growing!", + "mxc_top_up_notification_title": "Congrats on new Top-Up" } \ No newline at end of file From 27e7ad1fae7905fc12b2625aa1a6db425204cc31 Mon Sep 17 00:00:00 2001 From: reasje Date: Fri, 15 Mar 2024 19:33:18 +0330 Subject: [PATCH 2/5] refactor: show notif helper func --- lib/common/components/components.dart | 1 + lib/common/components/notification.dart | 9 +++++++++ 2 files changed, 10 insertions(+) create mode 100644 lib/common/components/notification.dart diff --git a/lib/common/components/components.dart b/lib/common/components/components.dart index 1ff72247..c7ecee0f 100644 --- a/lib/common/components/components.dart +++ b/lib/common/components/components.dart @@ -5,3 +5,4 @@ export 'balance_panel/balance.dart'; export 'snack_bar.dart'; export 'list/list.dart'; export 'property_item.dart'; +export 'notification.dart'; diff --git a/lib/common/components/notification.dart b/lib/common/components/notification.dart new file mode 100644 index 00000000..56668ca2 --- /dev/null +++ b/lib/common/components/notification.dart @@ -0,0 +1,9 @@ +import 'package:datadashwallet/core/core.dart'; + +showNotification(String title, String? text) { + AXSNotification().showNotification(title, text); +} + +showLowPriorityNotification(String title, String? text) { + AXSNotification().showLowPriorityNotification(title, text); +} From a25de6d1464a597a39a038429541a11b3bd19d08 Mon Sep 17 00:00:00 2001 From: reasje Date: Fri, 15 Mar 2024 20:05:01 +0330 Subject: [PATCH 3/5] feat: detect web socket mxc top up --- .../background_fetch_config_use_case.dart | 2 +- .../presentation/wallet_page_presenter.dart | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/lib/features/settings/subfeatures/notifications/domain/background_fetch_config_use_case.dart b/lib/features/settings/subfeatures/notifications/domain/background_fetch_config_use_case.dart index 6dfed4ce..eb494c29 100644 --- a/lib/features/settings/subfeatures/notifications/domain/background_fetch_config_use_case.dart +++ b/lib/features/settings/subfeatures/notifications/domain/background_fetch_config_use_case.dart @@ -156,7 +156,7 @@ class BackgroundFetchConfigUseCase extends ReactiveUseCase { if (expectedEpochOccurrence <= epochQuantity) { periodicalCallData = periodicalCallData.copyWith(lasEpoch: epochNumber); AXSNotification().showNotification("Epoch Achievement Alert!", - "Congratulations! The anticipated epoch you've been waiting for has just occurred. It's a significant milestone. Let's take the next steps forward.,"); + "Congratulations! The anticipated epoch you've been waiting for has just occurred. It's a significant milestone. Let's take the next steps forward."); } return periodicalCallData; diff --git a/lib/features/wallet/presentation/wallet_page_presenter.dart b/lib/features/wallet/presentation/wallet_page_presenter.dart index f5bdd2c0..df54323a 100644 --- a/lib/features/wallet/presentation/wallet_page_presenter.dart +++ b/lib/features/wallet/presentation/wallet_page_presenter.dart @@ -169,6 +169,28 @@ class WalletPresenter extends CompletePresenter { break; // coin transfer done case 'transaction': + final newMXCTx = WannseeTransactionModel.fromJson( + json.encode(event.payload['transactions'][0])); + + final newTx = TransactionModel.fromMXCTransaction( + newMXCTx, state.account!.address); + + if (newTx.token.symbol == Config.mxcName && + newTx.type == TransactionType.received) { + final decimal = newTx.token.decimals ?? Config.ethDecimals; + final formattedValue = + MXCFormatter.convertWeiToEth(newTx.value ?? '0', decimal); + showNotification( + translate('mxc_top_up_notification_title')!, + translate('mxc_top_up_notification_text')! + .replaceFirst( + '{0}', + state.account!.mns ?? + MXCFormatter.formatWalletAddress( + state.account!.address), + ) + .replaceFirst('{1}', formattedValue)); + } // Sometimes getting the tx list from remote right away, results in having the pending tx in the list too (Which shouldn't be) Future.delayed(const Duration(seconds: 3), () { getMXCTransactions(); From 71e05bd57cd2efbeb45f840269e4ba4a9b33e106 Mon Sep 17 00:00:00 2001 From: reasje Date: Mon, 18 Mar 2024 12:01:49 +0330 Subject: [PATCH 4/5] feat: privacy local pdf & miner hook text --- assets/flutter_i18n/en.json | 4 ++-- assets/pdf/privacy.pdf | Bin 0 -> 43959 bytes lib/features/common/app/launcher_use_case.dart | 16 ++++++++++++++++ .../subfeatures/about_page/about_page.dart | 1 + .../about_page/widgets/app_term.dart | 16 +++++++++------- .../subfeatures/dapp_hooks/dapp_hooks_page.dart | 3 ++- packages/shared | 2 +- pubspec.lock | 8 ++++++++ pubspec.yaml | 2 ++ 9 files changed, 41 insertions(+), 11 deletions(-) create mode 100644 assets/pdf/privacy.pdf diff --git a/assets/flutter_i18n/en.json b/assets/flutter_i18n/en.json index 187c1777..9e3e9534 100644 --- a/assets/flutter_i18n/en.json +++ b/assets/flutter_i18n/en.json @@ -334,10 +334,10 @@ "experiencing_issues": "Experiencing issues?", "background_service_solution": "Try re-enabling the app or check the battery optimization settings.", "dapp_hooks": "DApp hooks", - "wifi_hooks": "Wi-Fi hooks", + "wifi_hexagon_location_hooks": "Wi-Fi hexagon location hooks", "miner_hooks": "Miner hooks", "location_permission_required_title": "Location permission required.", - "location_permission_required_text": "Oops, location permission is denied, It's essential for us to have location permission in order for Wi-Fi hooks to perform actively, Please grant location permission by going to settings.", + "location_permission_required_text": "Oops, location permission is denied, It's essential for us to have location permission in order for Wi-Fi hexagon location hooks to perform actively, Please grant location permission by going to settings.", "open_settings": "Open settings", "service_launched_successfully": "{0} service launched successfully.", "unable_to_launch_service": "Unable to launch {0} service.", diff --git a/assets/pdf/privacy.pdf b/assets/pdf/privacy.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7464f96ee3ae8da71dedf0502373c229252047fe GIT binary patch literal 43959 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 launchUrlInPlatformDefaultWithString(Urls.telegram); void openWeChat() => launchUrlInPlatformDefaultWithString(Urls.weChat); + + void openAXSPrivacy(String path) async { + ByteData data = await rootBundle.load(path); + List bytes = data.buffer.asUint8List(); + String tempDir = (await getTemporaryDirectory()).path; + String tempFilePath = '$tempDir/${path.split('/').last}'; + File tempFile = File(tempFilePath); + await tempFile.writeAsBytes(bytes, flush: true); + openFile(tempFilePath); + } + + void openFile(String path) => OpenFile.open(path); } diff --git a/lib/features/settings/subfeatures/about_page/about_page.dart b/lib/features/settings/subfeatures/about_page/about_page.dart index ee66de2d..a825588c 100644 --- a/lib/features/settings/subfeatures/about_page/about_page.dart +++ b/lib/features/settings/subfeatures/about_page/about_page.dart @@ -45,6 +45,7 @@ class AboutPage extends HookConsumerWidget { const AppTerm( name: 'privacy_policy', externalLink: Urls.axsPrivacy, + isFile: true, ), ], ); diff --git a/lib/features/settings/subfeatures/about_page/widgets/app_term.dart b/lib/features/settings/subfeatures/about_page/widgets/app_term.dart index 1cd9bbac..2ecbccc4 100644 --- a/lib/features/settings/subfeatures/about_page/widgets/app_term.dart +++ b/lib/features/settings/subfeatures/about_page/widgets/app_term.dart @@ -6,22 +6,24 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:mxc_ui/mxc_ui.dart'; class AppTerm extends HookConsumerWidget { - const AppTerm({ - super.key, - required this.name, - required this.externalLink, - }); + const AppTerm( + {super.key, + required this.name, + required this.externalLink, + this.isFile = false}); final String name; final String externalLink; + final bool isFile; @override Widget build(BuildContext context, WidgetRef ref) { late final launcherUseCase = ref.read(launcherUseCaseProvider); return InkWell( - onTap: () => - launcherUseCase.launchUrlInExternalAppWithString(externalLink), + onTap: () => isFile + ? launcherUseCase.openAXSPrivacy(externalLink) + : launcherUseCase.launchUrlInExternalAppWithString(externalLink), child: Padding( padding: const EdgeInsets.symmetric(vertical: Sizes.spaceSmall), child: Row( diff --git a/lib/features/settings/subfeatures/dapp_hooks/dapp_hooks_page.dart b/lib/features/settings/subfeatures/dapp_hooks/dapp_hooks_page.dart index 0f509138..820f89d3 100644 --- a/lib/features/settings/subfeatures/dapp_hooks/dapp_hooks_page.dart +++ b/lib/features/settings/subfeatures/dapp_hooks/dapp_hooks_page.dart @@ -89,7 +89,7 @@ class DAppHooksPage extends HookConsumerWidget { children: [ MXCSwitchRowItem( key: const Key('wifiHookSwitch'), - title: translate('wifi_hooks'), + title: translate('wifi_hexagon_location_hooks'), value: dappHooksState.dAppHooksData!.wifiHooks.enabled, onChanged: dappHooksPresenter.changeWifiHooksEnabled, enabled: isSettingsChangeEnabled, @@ -120,6 +120,7 @@ class DAppHooksPage extends HookConsumerWidget { value: dappHooksState.dAppHooksData!.minerHooks.enabled, onChanged: dappHooksPresenter.changeMinerHooksEnabled, enabled: isMXCChains, + titleStyle: FontTheme.of(context).h6(), ), const SizedBox(height: Sizes.spaceNormal), MXCDropDown( diff --git a/packages/shared b/packages/shared index 93c2631d..8a3d5131 160000 --- a/packages/shared +++ b/packages/shared @@ -1 +1 @@ -Subproject commit 93c2631d37c6dd8b280213e583e1ba8a8a4ea9fe +Subproject commit 8a3d513146940f9f839fb1b01497535be6d7f3e2 diff --git a/pubspec.lock b/pubspec.lock index 4e7269e8..4aa35c14 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -983,6 +983,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.2" + open_file: + dependency: "direct main" + description: + name: open_file + sha256: a5a32d44acb7c899987d0999e1e3cbb0a0f1adebbf41ac813ec6d2d8faa0af20 + url: "https://pub.dev" + source: hosted + version: "3.3.2" open_mail_app: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 9ffa8947..5d7a8de0 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -73,6 +73,7 @@ dependencies: mxc_ui: path: packages/shared/ui network_info_plus: ^4.1.0 + open_file: ^3.3.2 open_mail_app: ^0.4.5 package_info_plus: ^4.2.0 path_provider: ^2.0.12 @@ -120,6 +121,7 @@ flutter: - assets/svg/settings/ - assets/lottie/ - assets/lottie/gestures/ + - assets/pdf/ # An image asset can refer to one or more resolution-specific "variants", see # https://flutter.dev/assets-and-images/#resolution-aware From 3306822285dd00257e4d368b31875c88c3c9397d Mon Sep 17 00:00:00 2001 From: reasje Date: Mon, 18 Mar 2024 12:08:23 +0330 Subject: [PATCH 5/5] fix: Comment top up detect --- .../presentation/wallet_page_presenter.dart | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/lib/features/wallet/presentation/wallet_page_presenter.dart b/lib/features/wallet/presentation/wallet_page_presenter.dart index df54323a..ea7f0b8e 100644 --- a/lib/features/wallet/presentation/wallet_page_presenter.dart +++ b/lib/features/wallet/presentation/wallet_page_presenter.dart @@ -169,28 +169,28 @@ class WalletPresenter extends CompletePresenter { break; // coin transfer done case 'transaction': - final newMXCTx = WannseeTransactionModel.fromJson( - json.encode(event.payload['transactions'][0])); - - final newTx = TransactionModel.fromMXCTransaction( - newMXCTx, state.account!.address); - - if (newTx.token.symbol == Config.mxcName && - newTx.type == TransactionType.received) { - final decimal = newTx.token.decimals ?? Config.ethDecimals; - final formattedValue = - MXCFormatter.convertWeiToEth(newTx.value ?? '0', decimal); - showNotification( - translate('mxc_top_up_notification_title')!, - translate('mxc_top_up_notification_text')! - .replaceFirst( - '{0}', - state.account!.mns ?? - MXCFormatter.formatWalletAddress( - state.account!.address), - ) - .replaceFirst('{1}', formattedValue)); - } + // final newMXCTx = WannseeTransactionModel.fromJson( + // json.encode(event.payload['transactions'][0])); + + // final newTx = TransactionModel.fromMXCTransaction( + // newMXCTx, state.account!.address); + + // if (newTx.token.symbol == Config.mxcName && + // newTx.type == TransactionType.received) { + // final decimal = newTx.token.decimals ?? Config.ethDecimals; + // final formattedValue = + // MXCFormatter.convertWeiToEth(newTx.value ?? '0', decimal); + // showNotification( + // translate('mxc_top_up_notification_title')!, + // translate('mxc_top_up_notification_text')! + // .replaceFirst( + // '{0}', + // state.account!.mns ?? + // MXCFormatter.formatWalletAddress( + // state.account!.address), + // ) + // .replaceFirst('{1}', formattedValue)); + // } // Sometimes getting the tx list from remote right away, results in having the pending tx in the list too (Which shouldn't be) Future.delayed(const Duration(seconds: 3), () { getMXCTransactions();