diff --git a/assets/images/main_actions/apps.svg b/assets/images/main_actions/apps.svg
new file mode 100644
index 000000000..320acc572
--- /dev/null
+++ b/assets/images/main_actions/apps.svg
@@ -0,0 +1,21 @@
+
diff --git a/assets/images/main_actions/charts.svg b/assets/images/main_actions/charts.svg
new file mode 100644
index 000000000..8bcb206fe
--- /dev/null
+++ b/assets/images/main_actions/charts.svg
@@ -0,0 +1,10 @@
+
diff --git a/assets/images/main_actions/contacts.svg b/assets/images/main_actions/contacts.svg
new file mode 100644
index 000000000..0a0a0e654
--- /dev/null
+++ b/assets/images/main_actions/contacts.svg
@@ -0,0 +1,10 @@
+
diff --git a/assets/images/main_actions/history.svg b/assets/images/main_actions/history.svg
new file mode 100644
index 000000000..7044ec6a9
--- /dev/null
+++ b/assets/images/main_actions/history.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/images/main_actions/home.svg b/assets/images/main_actions/home.svg
new file mode 100644
index 000000000..ac1b1d4af
--- /dev/null
+++ b/assets/images/main_actions/home.svg
@@ -0,0 +1,16 @@
+
diff --git a/assets/images/main_actions/wallets.svg b/assets/images/main_actions/wallets.svg
new file mode 100644
index 000000000..8ed9319c8
--- /dev/null
+++ b/assets/images/main_actions/wallets.svg
@@ -0,0 +1,11 @@
+
diff --git a/lib/entities/page_indicator_actions.dart b/lib/entities/page_indicator_actions.dart
new file mode 100644
index 000000000..476264a02
--- /dev/null
+++ b/lib/entities/page_indicator_actions.dart
@@ -0,0 +1,43 @@
+import 'package:cake_wallet/generated/i18n.dart';
+import 'package:cake_wallet/routes.dart';
+import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart';
+import 'package:flutter/material.dart';
+
+class PageIndicatorActions {
+ final String Function(BuildContext context) name;
+ final String image;
+ final Key key;
+ final bool Function(DashboardViewModel viewModel)? isEnabled;
+
+ PageIndicatorActions._({
+ required this.name,
+ required this.image,
+ required this.key,
+ this.isEnabled,
+ });
+
+ static List all = [
+ appsAction,
+ homeAction,
+ historyAction,
+ ];
+
+ static PageIndicatorActions appsAction = PageIndicatorActions._(
+ name: (context) => S.of(context).apps,
+ image: 'assets/images/main_actions/apps.svg',
+ key: ValueKey('dashboard_page_indicator_apps_action_button_key'),
+ isEnabled: (viewModel) => viewModel.shouldShowMarketPlaceInDashboard,
+ );
+
+ static PageIndicatorActions homeAction = PageIndicatorActions._(
+ name: (context) => S.of(context).home,
+ image: 'assets/images/main_actions/home.svg',
+ key: ValueKey('dashboard_page_indicator_home_action_button_key'),
+ );
+
+ static PageIndicatorActions historyAction = PageIndicatorActions._(
+ name: (context) => S.of(context).history,
+ image: 'assets/images/main_actions/history.svg',
+ key: ValueKey('dashboard_page_indicator_history_action_button_key'),
+ );
+}
diff --git a/lib/src/screens/dashboard/dashboard_page.dart b/lib/src/screens/dashboard/dashboard_page.dart
index 107024a77..15e0697b1 100644
--- a/lib/src/screens/dashboard/dashboard_page.dart
+++ b/lib/src/screens/dashboard/dashboard_page.dart
@@ -3,6 +3,7 @@ import 'package:cake_wallet/entities/preferences_key.dart';
import 'package:cake_wallet/di.dart';
import 'package:cake_wallet/src/screens/dashboard/desktop_widgets/desktop_sidebar_wrapper.dart';
import 'package:cake_wallet/src/screens/dashboard/pages/cake_features_page.dart';
+import 'package:cake_wallet/src/screens/dashboard/widgets/page_indicator.dart';
import 'package:cake_wallet/src/screens/wallet_connect/widgets/bottom_sheet/bottom_sheet_listener_widget.dart';
import 'package:cake_wallet/src/screens/wallet_connect/services/bottom_sheet_service.dart';
import 'package:cake_wallet/src/widgets/gradient_background.dart';
@@ -220,45 +221,34 @@ class _DashboardPageView extends BasePage {
child: Stack(
alignment: Alignment.bottomCenter,
children: [
- //new Expanded(
Observer(
builder: (context) {
return PageView.builder(
- key: ValueKey('dashboard_page_view_key'),
+ key: const ValueKey('dashboard_page_view_key'),
controller: controller,
+ physics: const BouncingScrollPhysics(),
itemCount: pages.length,
itemBuilder: (context, index) => pages[index],
);
},
),
- //),
Positioned(
child: Container(
alignment: Alignment.bottomCenter,
margin: EdgeInsets.only(bottom: 110),
- child: Observer(
- builder: (context) {
- return Semantics(
- button: false,
- label: 'Page Indicator',
- hint: 'Swipe to change page',
- excludeSemantics: true,
- child: SmoothPageIndicator(
- controller: controller,
- count: pages.length,
- effect: ColorTransitionEffect(
- spacing: 6.0,
- radius: 6.0,
- dotWidth: 6.0,
- dotHeight: 6.0,
- dotColor: Theme.of(context).colorScheme.primary.withOpacity(0.4),
- activeDotColor: Theme.of(context).colorScheme.primary,
- ),
- ),
- );
- },
+ child: Semantics(
+ container: true,
+ label: 'Page indicator',
+ hint: 'Swipe left or right to change page, or double tap buttons below to navigate directly.',
+ child: ExcludeSemantics(
+ excluding: false,
+ child: PageIndicator(
+ controller: controller,
+ dashboardViewModel: dashboardViewModel,
+ ),
),
),
+ ),
),
NavigationDock(
dashboardViewModel: dashboardViewModel,
@@ -277,7 +267,7 @@ class _DashboardPageView extends BasePage {
if (dashboardViewModel.shouldShowMarketPlaceInDashboard) {
pages.add(
Semantics(
- label: 'Cake ${S.of(context).features}',
+ label: S.of(context).apps,
child: CakeFeaturesPage(
dashboardViewModel: dashboardViewModel,
cakeFeaturesViewModel: getIt.get(),
@@ -288,7 +278,7 @@ class _DashboardPageView extends BasePage {
pages.add(Semantics(label: S.of(context).balance_page, child: balancePage));
pages.add(
Semantics(
- label: S.of(context).settings_transactions,
+ label: S.of(context).history,
child: TransactionsPage(dashboardViewModel: dashboardViewModel),
),
);
diff --git a/lib/src/screens/dashboard/pages/cake_features_page.dart b/lib/src/screens/dashboard/pages/cake_features_page.dart
index b2b361d1e..bd381a968 100644
--- a/lib/src/screens/dashboard/pages/cake_features_page.dart
+++ b/lib/src/screens/dashboard/pages/cake_features_page.dart
@@ -28,7 +28,7 @@ class CakeFeaturesPage extends StatelessWidget {
Padding(
padding: EdgeInsets.only(left: 24, top: 16),
child: Text(
- 'Cake ${S.of(context).features}',
+ S.of(context).apps,
style: Theme.of(context).textTheme.headlineSmall?.copyWith(
fontWeight: FontWeight.w500,
color: Theme.of(context).colorScheme.onSurface,
diff --git a/lib/src/screens/dashboard/pages/navigation_dock.dart b/lib/src/screens/dashboard/pages/navigation_dock.dart
index d3afd4e0c..c4ee6b09b 100644
--- a/lib/src/screens/dashboard/pages/navigation_dock.dart
+++ b/lib/src/screens/dashboard/pages/navigation_dock.dart
@@ -19,7 +19,7 @@ class NavigationDock extends StatelessWidget {
child: Observer(
builder: (_) {
return Container(
- height: 150,
+ height: 84,
alignment: Alignment.bottomCenter,
decoration: dashboardViewModel.settingsStore.backgroundImage.isEmpty
? BoxDecoration(
@@ -30,7 +30,6 @@ class NavigationDock extends StatelessWidget {
),
)
: null,
- //color: Colors.transparent,
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(50),
@@ -50,38 +49,51 @@ class NavigationDock extends StatelessWidget {
borderRadius: BorderRadius.circular(50.0),
color: Theme.of(context).colorScheme.surfaceContainer,
),
- child: Container(
- padding: EdgeInsets.symmetric(horizontal: 8),
- child: IntrinsicHeight(
- child: Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- children: MainActions.all
- .where((element) => element.canShow?.call(dashboardViewModel) ?? true)
- .map(
- (action) => Expanded(
- child: Semantics(
- button: true,
- enabled: (action.isEnabled?.call(dashboardViewModel) ?? true),
- child: ActionButton(
- key: action.key,
- image: Image.asset(action.image,
- height: 24,
- width: 24,
- color: Theme.of(context).colorScheme.primary),
- title: action.name(context),
- onClick: (action.isEnabled?.call(dashboardViewModel) ?? true)
- ? () async =>
- await action.onTap(context, dashboardViewModel)
- : null,
- textColor: action.isEnabled?.call(dashboardViewModel) ?? true
- ? null
- : Theme.of(context).colorScheme.onSurface,
+ padding: const EdgeInsets.symmetric(horizontal: 8),
+ child: ClipRect(
+ child: Row(
+ mainAxisSize: MainAxisSize.min,
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ crossAxisAlignment: CrossAxisAlignment.center,
+ children: MainActions.all
+ .where((element) =>
+ element.canShow?.call(dashboardViewModel) ??
+ true)
+ .map(
+ (action) => Expanded(
+ child: Semantics(
+ button: true,
+ enabled: (action.isEnabled
+ ?.call(dashboardViewModel) ??
+ true),
+ child: ActionButton(
+ key: action.key,
+ image: Image.asset(
+ action.image,
+ height: 24,
+ width: 24,
+ color:
+ Theme.of(context).colorScheme.primary,
),
+ title: action.name(context),
+ onClick: (action.isEnabled
+ ?.call(dashboardViewModel) ??
+ true)
+ ? () async => await action.onTap(
+ context, dashboardViewModel)
+ : null,
+ textColor: action.isEnabled
+ ?.call(dashboardViewModel) ??
+ true
+ ? null
+ : Theme.of(context)
+ .colorScheme
+ .onSurface,
),
),
- )
- .toList(),
- ),
+ ),
+ )
+ .toList(),
),
),
),
diff --git a/lib/src/screens/dashboard/widgets/action_button.dart b/lib/src/screens/dashboard/widgets/action_button.dart
index 535181da8..4569393a4 100644
--- a/lib/src/screens/dashboard/widgets/action_button.dart
+++ b/lib/src/screens/dashboard/widgets/action_button.dart
@@ -21,6 +21,11 @@ class ActionButton extends StatelessWidget {
@override
Widget build(BuildContext context) {
return TextButton(
+ style: TextButton.styleFrom(
+ padding: EdgeInsets.zero,
+ minimumSize: Size.zero,
+ tapTargetSize: MaterialTapTargetSize.shrinkWrap,
+ ),
onPressed: () {
if (route?.isNotEmpty ?? false) {
Navigator.of(context, rootNavigator: true).pushNamed(route!);
@@ -28,31 +33,32 @@ class ActionButton extends StatelessWidget {
onClick?.call();
}
},
- child: Container(
- color: Colors.transparent,
- padding: EdgeInsets.only(top: 5, bottom: 4, left: 0, right: 0),
- alignment: alignment,
- child: Column(
- mainAxisSize: MainAxisSize.max,
- crossAxisAlignment: CrossAxisAlignment.center,
- //mainAxisAlignment: MainAxisAlignment.center,
- children: [
- Container(
- alignment: Alignment.center,
- decoration: BoxDecoration(
- shape: BoxShape.circle),
- child: image,
- ),
- SizedBox(height: 4),
- Text(
- title,
- maxLines: 1,
- overflow: TextOverflow.visible,
- style: Theme.of(context).textTheme.labelSmall?.copyWith(
- color: textColor ?? Theme.of(context).colorScheme.onSurface),
- textAlign: TextAlign.center,
- )
- ],
+ child: SizedBox.expand(
+ child: Container(
+ color: Colors.transparent,
+ alignment: alignment,
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ mainAxisSize: MainAxisSize.min,
+ crossAxisAlignment: CrossAxisAlignment.center,
+ children: [
+ image,
+ const SizedBox(height: 4),
+ Flexible(
+ child: Text(
+ title,
+ maxLines: 1,
+ overflow: TextOverflow.fade,
+ softWrap: false,
+ textAlign: TextAlign.center,
+ style: Theme.of(context).textTheme.labelSmall?.copyWith(
+ color: textColor ??
+ Theme.of(context).colorScheme.onSurface,
+ ),
+ ),
+ ),
+ ],
+ ),
),
),
);
diff --git a/lib/src/screens/dashboard/widgets/header_row.dart b/lib/src/screens/dashboard/widgets/header_row.dart
index c501ef00a..f85a2cf6f 100644
--- a/lib/src/screens/dashboard/widgets/header_row.dart
+++ b/lib/src/screens/dashboard/widgets/header_row.dart
@@ -23,7 +23,7 @@ class HeaderRow extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
- S.of(context).transactions,
+ S.of(context).history,
style: Theme.of(context).textTheme.titleLarge?.copyWith(
fontWeight: FontWeight.w500,
color: Theme.of(context).colorScheme.onSurface),
diff --git a/lib/src/screens/dashboard/widgets/page_indicator.dart b/lib/src/screens/dashboard/widgets/page_indicator.dart
new file mode 100644
index 000000000..a894c4002
--- /dev/null
+++ b/lib/src/screens/dashboard/widgets/page_indicator.dart
@@ -0,0 +1,326 @@
+import 'dart:math' as math;
+import 'dart:ui';
+import 'package:cake_wallet/entities/page_indicator_actions.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_svg/flutter_svg.dart';
+import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart';
+
+class PageIndicator extends StatefulWidget {
+ const PageIndicator({
+ super.key,
+ required this.controller,
+ required this.dashboardViewModel,
+ });
+
+ final PageController controller;
+ final DashboardViewModel dashboardViewModel;
+
+ @override
+ State createState() => _PageIndicatorState();
+}
+
+class _PageIndicatorState extends State {
+ static const barHeight = 37.0;
+ static const iconWidth = 16.0;
+ static const iconHeight = 16.0;
+ static const iconSpacing = 5.0;
+ static const barHorizontalPadding = 4.0;
+ static const pillHorizontalPadding = 8.0;
+ static const edgePadding = 5.0;
+ static const barBorderRadius = 50.0;
+ static const pillBorderRadius = 50.0;
+ static const pageSwitchDuration = Duration(milliseconds: 300);
+ static const pillMoveDuration = Duration(milliseconds: 300);
+ static const pillResizeDuration = Duration(milliseconds: 200);
+ static const textStyle = TextStyle(
+ fontSize: 12,
+ fontWeight: FontWeight.w400,
+ );
+
+ late int selectedIndex;
+ late final VoidCallback _pageListener;
+
+ @override
+ void initState() {
+ super.initState();
+
+ selectedIndex = widget.controller.initialPage;
+
+ _pageListener = () {
+ final page = widget.controller.page;
+ if (page == null) return;
+
+ final rounded = page.round();
+ if (rounded != selectedIndex && mounted) {
+ setState(() {
+ selectedIndex = rounded;
+ });
+ }
+ };
+
+ widget.controller.addListener(_pageListener);
+ }
+
+ @override
+ void dispose() {
+ widget.controller.removeListener(_pageListener);
+ super.dispose();
+ }
+
+ void _onItemTap(int index) {
+ if (index == selectedIndex) return;
+ widget.controller.animateToPage(
+ index,
+ duration: pageSwitchDuration,
+ curve: Curves.easeOutCubic,
+ );
+ }
+
+ double _estimateItemWidthForAction(
+ BuildContext context, PageIndicatorActions action,
+ {Color? color}) {
+ final text = action.name(context);
+ final textPainter = TextPainter(
+ text: TextSpan(text: text, style: textStyle.copyWith(color: color)),
+ maxLines: 1,
+ textDirection: Directionality.of(context),
+ textScaler: MediaQuery.of(context).textScaler,
+ )..layout();
+ return iconWidth +
+ iconSpacing +
+ textPainter.width +
+ pillHorizontalPadding * 2;
+ }
+
+ @override
+ Widget build(BuildContext context) {
+
+ final visibleActions = PageIndicatorActions.all.where((action) {
+ return action.isEnabled?.call(widget.dashboardViewModel) ?? true;
+ }).toList();
+
+ // Don't show indicator if less than 2 actions
+ if (visibleActions.length < 2) return const SizedBox.shrink();
+
+ selectedIndex = selectedIndex.clamp(0, visibleActions.length - 1);
+
+ // Theme setup
+ final theme = Theme.of(context);
+ final backgroundColor = theme.colorScheme.surfaceContainer.withAlpha(122);
+ final pillColor = theme.colorScheme.onSurface.withAlpha(30);
+ final activeColor = theme.colorScheme.onSurface;
+ final inactiveColor = theme.colorScheme.primary;
+
+ // Size calculations
+ final screenWidth = MediaQuery.of(context).size.width;
+ final isRTL = Directionality.of(context) == TextDirection.rtl;
+
+ final pillWidth = _estimateItemWidthForAction(
+ context,
+ visibleActions[selectedIndex],
+ color: activeColor,
+ );
+
+ final actionWidths = [
+ for (final action in visibleActions)
+ _estimateItemWidthForAction(context, action, color: inactiveColor)
+ ];
+
+ final totalItemsWidth =
+ actionWidths.fold(0.0, (sum, width) => sum + width) +
+ barHorizontalPadding * 2;
+
+ final barWidth = math.min(totalItemsWidth, screenWidth * 0.95);
+
+ final count = visibleActions.length;
+ final firstLeft = edgePadding;
+ final secondLeft =
+ barWidth - (isRTL ? actionWidths.first : actionWidths[1]) - edgePadding;
+
+ final List positions;
+
+ if (count == 2) {
+ positions = [firstLeft, secondLeft];
+ } else {
+ final lastLeft = barWidth -
+ (isRTL ? actionWidths.first : actionWidths.last) -
+ edgePadding;
+
+ final centerLeft = (isRTL
+ ? actionWidths.last + edgePadding
+ : actionWidths.first + edgePadding);
+
+ positions = [firstLeft, centerLeft, lastLeft];
+ }
+
+ final left =
+ (isRTL ? positions.reversed.toList() : positions)[selectedIndex];
+ final currentAction = visibleActions[selectedIndex];
+
+ return Align(
+ alignment: Alignment.bottomCenter,
+ child: Padding(
+ padding: EdgeInsets.only(top: 10),
+ child: Container(
+ width: barWidth,
+ child: ClipRRect(
+ borderRadius: BorderRadius.circular(barBorderRadius),
+ child: BackdropFilter(
+ filter: ImageFilter.blur(sigmaX: 30, sigmaY: 30),
+ child: Container(
+ height: barHeight,
+ decoration: BoxDecoration(
+ color: backgroundColor,
+ borderRadius: BorderRadius.circular(barBorderRadius),
+ ),
+ child: Stack(
+ alignment: Alignment.center,
+ children: [
+ AnimatedPill(
+ left: left,
+ pillColor: pillColor,
+ currentAction: currentAction,
+ pillIconHeight: iconHeight,
+ pillIconWidth: iconWidth,
+ pillIconSpacing: iconSpacing,
+ pillBorderRadius: pillBorderRadius,
+ contentColor: activeColor,
+ estimateWidthForAction: pillWidth,
+ pillTextStyle: textStyle,
+ pillMoveDuration: pillMoveDuration,
+ pillResizeDuration: pillResizeDuration,
+ ),
+ Padding(
+ padding: const EdgeInsets.symmetric(
+ horizontal: barHorizontalPadding),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ for (int i = 0; i < visibleActions.length; i++)
+ Semantics(
+ button: true,
+ label: visibleActions[i].name(context),
+ value: i == selectedIndex ? 'Selected' : null,
+ hint: 'Double tap to open ${visibleActions[i].name(context)} page',
+ onTap: () => _onItemTap(i),
+ child: GestureDetector(
+ behavior: HitTestBehavior.translucent,
+ onTap: () => _onItemTap(i),
+ child: Container(
+ height: barHeight,
+ width: i == selectedIndex
+ ? pillWidth
+ : _estimateItemWidthForAction(
+ context, visibleActions[i]),
+ alignment: Alignment.center,
+ child: Row(
+ mainAxisSize: MainAxisSize.min,
+ children: [
+ TweenAnimationBuilder(
+ duration: const Duration(
+ milliseconds: 300),
+ curve: Curves.easeOutCubic,
+ tween: ColorTween(
+ begin: inactiveColor,
+ end: i == selectedIndex
+ ? activeColor
+ : inactiveColor,
+ ),
+ builder: (context, color, _) =>
+ SvgPicture.asset(
+ visibleActions[i].image,
+ width: iconWidth,
+ height: iconHeight,
+ colorFilter: ColorFilter.mode(
+ color!, BlendMode.srcIn),
+ ),
+ ),
+ SizedBox(width: iconSpacing),
+ TweenAnimationBuilder(
+ duration: const Duration(
+ milliseconds: 300),
+ curve: Curves.easeOutCubic,
+ tween: ColorTween(
+ begin: inactiveColor,
+ end: i == selectedIndex
+ ? activeColor
+ : inactiveColor,
+ ),
+ builder: (context, color, _) =>
+ Text(
+ visibleActions[i].name(context),
+ style: textStyle.copyWith(
+ color: color),
+ overflow: TextOverflow.fade,
+ softWrap: false,
+ ),
+ ),
+ ],
+ ),
+ ),
+ ),
+ ),
+ ],
+ ),
+ )
+ ],
+ )),
+ ),
+ ),
+ ),
+ ),
+ );
+ }
+}
+
+class AnimatedPill extends StatelessWidget {
+ const AnimatedPill({
+ super.key,
+ required this.left,
+ required this.pillColor,
+ required this.contentColor,
+ required this.pillIconHeight,
+ required this.pillIconWidth,
+ required this.pillBorderRadius,
+ required this.currentAction,
+ required this.estimateWidthForAction,
+ required this.pillIconSpacing,
+ required this.pillTextStyle,
+ required this.pillMoveDuration,
+ required this.pillResizeDuration,
+ });
+
+ final double left;
+ final Color pillColor;
+ final Color contentColor;
+ final double pillIconHeight;
+ final double pillIconWidth;
+ final double pillBorderRadius;
+ final PageIndicatorActions currentAction;
+ final double estimateWidthForAction;
+ final double pillIconSpacing;
+ final TextStyle pillTextStyle;
+ final Duration pillMoveDuration;
+ final Duration pillResizeDuration;
+
+ @override
+ Widget build(BuildContext context) {
+ return AnimatedPositioned(
+ duration: pillMoveDuration,
+ curve: Curves.easeOutCubic,
+ left: left,
+ top: 4,
+ bottom: 4,
+ child: AnimatedContainer(
+ duration: pillResizeDuration,
+ curve: Curves.easeOutCubic,
+ width: estimateWidthForAction,
+ decoration: BoxDecoration(
+ color: pillColor,
+ borderRadius: BorderRadius.circular(pillBorderRadius)),
+ clipBehavior: Clip.hardEdge,
+ alignment: Alignment.center,
+ ),
+ );
+ }
+}
diff --git a/lib/src/screens/settings/display_settings_page.dart b/lib/src/screens/settings/display_settings_page.dart
index 003e64d90..c28db5855 100644
--- a/lib/src/screens/settings/display_settings_page.dart
+++ b/lib/src/screens/settings/display_settings_page.dart
@@ -37,7 +37,7 @@ class DisplaySettingsPage extends BasePage {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SettingsSwitcherCell(
- title: S.of(context).show_market_place,
+ title: S.of(context).apps,
value: _displaySettingsViewModel.shouldShowMarketPlaceInDashboard,
onValueChange: (_, bool value) {
_displaySettingsViewModel.setShouldShowMarketPlaceInDashbaord(value);
diff --git a/pubspec_base.yaml b/pubspec_base.yaml
index dda4bea3d..274a97201 100644
--- a/pubspec_base.yaml
+++ b/pubspec_base.yaml
@@ -221,6 +221,7 @@ flutter:
- assets/images/hardware_wallet/
- assets/images/crypto/
- assets/images/stocks/
+ - assets/images/main_actions/
- assets/node_list.yml
- assets/haven_node_list.yml
- assets/bitcoin_electrum_server_list.yml
diff --git a/res/values/strings_ar.arb b/res/values/strings_ar.arb
index 22dec1012..33709eb3e 100644
--- a/res/values/strings_ar.arb
+++ b/res/values/strings_ar.arb
@@ -60,6 +60,7 @@
"approve": "ﺪﻤﺘﻌﻳ",
"approve_request": "الموافقة على الطلب",
"approve_tokens": "الموافقة على الرموز",
+ "apps": "تطبيقات",
"arbiscan_history": "تاريخ أربيسكان",
"arrive_in_this_address": "سيصل ${currency} ${tag}إلى هذا العنوان",
"ascending": "تصاعدي",
@@ -440,6 +441,8 @@
"hide": "يخفي",
"hide_details": "أخف التفاصيل",
"high_contrast_theme": "موضوع عالي التباين",
+ "history": "تاريخ",
+ "home": "بيت",
"home_screen_settings": "إعدادات الشاشة الرئيسية",
"how_to_connect": "كيفية الاتصال",
"how_to_use": " ﻞﻤﻌﺘﺴﺗ ﻒﻴﻛ",
diff --git a/res/values/strings_bg.arb b/res/values/strings_bg.arb
index 5ccf69bd9..0484cc66f 100644
--- a/res/values/strings_bg.arb
+++ b/res/values/strings_bg.arb
@@ -60,6 +60,7 @@
"approve": "Одобряване",
"approve_request": "Одобрете искане",
"approve_tokens": "Одобрете жетоните",
+ "apps": "Приложения",
"arbiscan_history": "Арбисканска история",
"arrive_in_this_address": "${currency} ${tag}ще отидат на този адрес",
"ascending": "Възходящ",
@@ -440,6 +441,8 @@
"hide": "Скрий",
"hide_details": "Скриване на подробностите",
"high_contrast_theme": "Тема с висок контраст",
+ "history": "История",
+ "home": "Начало",
"home_screen_settings": "Настройки на началния екран",
"how_to_connect": "Как да се свържа",
"how_to_use": "Как да използвам",
diff --git a/res/values/strings_cs.arb b/res/values/strings_cs.arb
index d34969614..e73b1f4bc 100644
--- a/res/values/strings_cs.arb
+++ b/res/values/strings_cs.arb
@@ -60,6 +60,7 @@
"approve": "Schvalovat",
"approve_request": "Schválit žádost",
"approve_tokens": "Schválit tokeny",
+ "apps": "Aplikace",
"arbiscan_history": "Arbiscan History",
"arrive_in_this_address": "${currency} ${tag}přijde na tuto adresu",
"ascending": "Vzestupné",
@@ -440,6 +441,8 @@
"hide": "Skrýt",
"hide_details": "Skrýt detaily",
"high_contrast_theme": "Téma s vysokým kontrastem",
+ "history": "Dějiny",
+ "home": "Domov",
"home_screen_settings": "Nastavení domovské obrazovky",
"how_to_connect": "Jak se připojit",
"how_to_use": "Jak používat",
diff --git a/res/values/strings_de.arb b/res/values/strings_de.arb
index b23850445..5ed7982cd 100644
--- a/res/values/strings_de.arb
+++ b/res/values/strings_de.arb
@@ -60,6 +60,7 @@
"approve": "Genehmigen",
"approve_request": "Anfrage genehmigen",
"approve_tokens": "Token genehmigen",
+ "apps": "Apps",
"arbiscan_history": "ArbiScan-Geschichte",
"arrive_in_this_address": "${currency} ${tag} wird an dieser Adresse ankommen",
"ascending": "Aufsteigend",
@@ -440,6 +441,8 @@
"hide": "Verstecken",
"hide_details": "Details ausblenden",
"high_contrast_theme": "Kontrastreiches Thema",
+ "history": "Geschichte",
+ "home": "Heim",
"home_screen_settings": "Einstellungen für den Startbildschirm",
"how_to_connect": "Anleitung",
"how_to_use": "Wie benutzt man",
diff --git a/res/values/strings_en.arb b/res/values/strings_en.arb
index f436f41ac..bd6d22559 100644
--- a/res/values/strings_en.arb
+++ b/res/values/strings_en.arb
@@ -60,6 +60,7 @@
"approve": "Approve",
"approve_request": "Approve Request",
"approve_tokens": "Approve tokens",
+ "apps": "Apps",
"arbiscan_history": "ArbiScan History",
"arrive_in_this_address": "${currency} ${tag}will arrive in this address",
"ascending": "Ascending",
@@ -440,6 +441,8 @@
"hide": "Hide",
"hide_details": "Hide Details",
"high_contrast_theme": "High Contrast Theme",
+ "history": "History",
+ "home": "Home",
"home_screen_settings": "Home screen settings",
"how_to_connect": "How to Connect",
"how_to_use": "How to use",
diff --git a/res/values/strings_es.arb b/res/values/strings_es.arb
index f3fd8c57d..0c28290b8 100644
--- a/res/values/strings_es.arb
+++ b/res/values/strings_es.arb
@@ -60,6 +60,7 @@
"approve": "Aprobar",
"approve_request": "Aprobar la solicitud",
"approve_tokens": "Aprobar tokens",
+ "apps": "Apps",
"arbiscan_history": "Historia de ArbiScan",
"arrive_in_this_address": "${currency} ${tag}llegará a esta dirección",
"ascending": "Ascendente",
@@ -440,6 +441,8 @@
"hide": "Ocultar",
"hide_details": "Ocultar detalles",
"high_contrast_theme": "Tema De Alto Contraste",
+ "history": "Historial",
+ "home": "Inicio",
"home_screen_settings": "Configuración de Pantalla de Inicio",
"how_to_connect": "Cómo conectar",
"how_to_use": "Cómo usar",
diff --git a/res/values/strings_fr.arb b/res/values/strings_fr.arb
index 67c62b7a4..94103b0e0 100644
--- a/res/values/strings_fr.arb
+++ b/res/values/strings_fr.arb
@@ -60,6 +60,7 @@
"approve": "Approuver",
"approve_request": "Approuver la demande",
"approve_tokens": "Approuver les jetons",
+ "apps": "Applications",
"arbiscan_history": "Historique d'ArbiScan",
"arrive_in_this_address": "${currency} ${tag}arrivera à cette adresse",
"ascending": "Ascendant",
@@ -440,6 +441,8 @@
"hide": "Cacher",
"hide_details": "Masquer les détails",
"high_contrast_theme": "Thème à contraste élevé",
+ "history": "Histoire",
+ "home": "Maison",
"home_screen_settings": "Paramètres de l'écran d'accueil",
"how_to_connect": "Comment se connecter",
"how_to_use": "Comment utiliser",
diff --git a/res/values/strings_gn.arb b/res/values/strings_gn.arb
index 583ce01f7..3b204e874 100644
--- a/res/values/strings_gn.arb
+++ b/res/values/strings_gn.arb
@@ -50,6 +50,7 @@
"anonpay_description": "Ojapo ${type}. Pe ojapyhytava ikatu ${method} oipurukuaa oimeraẽva criptomoneda oipytyvõva, ha ojejapyhyta viru ko billetera-pe.",
"apk_update": "APK ñembopyahu",
"approve": "Ñemoneĩ",
+ "apps": "Apps rehegua .",
"arrive_in_this_address": "${currency} ${tag} Og̃uahẽta ko dirección-pe",
"ascending": "yvateve",
"ask_each_time": "Eporandu opa jave",
@@ -331,6 +332,8 @@
"hidden_balance": "Mba’erepy ñemi",
"hide_details": "mba’e peteíteî ñemokañy",
"high_contrast_theme": "Mba’e hesakangue yvateva",
+ "history": "Tembiasakue",
+ "home": "Óga",
"home_screen_settings": "Ñemohenda pe jehechaha ñepyrũme",
"how_to_use": "Mba’éichapa ojeIpuru",
"how_to_use_card": "Mba’éichapa ojeiporu ko karjeta",
diff --git a/res/values/strings_ha.arb b/res/values/strings_ha.arb
index 5058e465a..bb26fed0e 100644
--- a/res/values/strings_ha.arb
+++ b/res/values/strings_ha.arb
@@ -60,6 +60,7 @@
"approve": "Amincewa",
"approve_request": "Amince da bukata",
"approve_tokens": "Amince da Alamu",
+ "apps": "Apps",
"arbiscan_history": "Tarihin Arbiscan",
"arrive_in_this_address": "${currency} ${tag} zai je wurin wannan adireshi",
"ascending": "Hau",
@@ -440,6 +441,8 @@
"hide": "Ɓoye",
"hide_details": "Ɓoye cikakkun bayanai",
"high_contrast_theme": "Babban Jigon Kwatance",
+ "history": "Tarihi",
+ "home": "Gida",
"home_screen_settings": "Saitunan allo na gida",
"how_to_connect": "Yadda ake haɗa",
"how_to_use": "Yadda ake amfani da shi",
diff --git a/res/values/strings_hi.arb b/res/values/strings_hi.arb
index 625b8e1b5..4c83c23a5 100644
--- a/res/values/strings_hi.arb
+++ b/res/values/strings_hi.arb
@@ -60,6 +60,7 @@
"approve": "मंज़ूरी देना",
"approve_request": "अनुरोध को स्वीकृत करें",
"approve_tokens": "टोकन को मंजूरी देना",
+ "apps": "ऐप्स",
"arbiscan_history": "अरबीस्कैन इतिहास",
"arrive_in_this_address": "${currency} ${tag}इस पते पर पहुंचेंगे",
"ascending": "आरोही",
@@ -440,6 +441,8 @@
"hide": "छिपाना",
"hide_details": "विवरण छुपाएं",
"high_contrast_theme": "उच्च कंट्रास्ट थीम",
+ "history": "इतिहास",
+ "home": "घर",
"home_screen_settings": "होम स्क्रीन सेटिंग्स",
"how_to_connect": "कनेक्ट कैसे करें",
"how_to_use": "का उपयोग कैसे करें",
diff --git a/res/values/strings_hr.arb b/res/values/strings_hr.arb
index 726e00bad..db714439e 100644
--- a/res/values/strings_hr.arb
+++ b/res/values/strings_hr.arb
@@ -60,6 +60,7 @@
"approve": "Odobriti",
"approve_request": "Odobriti zahtjev",
"approve_tokens": "Odobriti tokene",
+ "apps": "aplikacije",
"arbiscan_history": "Arbiskanska povijest",
"arrive_in_this_address": "${currency} ${tag}će stići na ovu adresu",
"ascending": "Uzlazni",
@@ -440,6 +441,8 @@
"hide": "Sakriti",
"hide_details": "Sakrij pojedinosti",
"high_contrast_theme": "Tema visokog kontrasta",
+ "history": "Povijest",
+ "home": "Dom",
"home_screen_settings": "Postavke početnog zaslona",
"how_to_connect": "Kako se povezati",
"how_to_use": "Kako koristiti",
diff --git a/res/values/strings_hy.arb b/res/values/strings_hy.arb
index b750b1e61..694a01ddf 100644
--- a/res/values/strings_hy.arb
+++ b/res/values/strings_hy.arb
@@ -60,6 +60,7 @@
"approve": "Հաստատել",
"approve_request": "Հաստատում է հայցը",
"approve_tokens": "Հաստատում է նշանները",
+ "apps": "Հավելվածներ",
"arbiscan_history": "Արբիսկանի պատմություն",
"arrive_in_this_address": "${currency} ${tag}կժամանի այս հասցեում",
"ascending": "Աճող",
@@ -440,6 +441,8 @@
"hide": "Թաքցնել",
"hide_details": "Թաքցնել մանրամասները",
"high_contrast_theme": "Բարձր հակադրության տեսք",
+ "history": "Պատմություն",
+ "home": "Տուն",
"home_screen_settings": "Գլխավոր էկրանի կարգավորումներ",
"how_to_connect": "Ինչպես միացնել",
"how_to_use": "Ինչպես օգտագործել",
diff --git a/res/values/strings_id.arb b/res/values/strings_id.arb
index 12489e80a..c6e197261 100644
--- a/res/values/strings_id.arb
+++ b/res/values/strings_id.arb
@@ -60,6 +60,7 @@
"approve": "Menyetujui",
"approve_request": "Menyetujui permintaan",
"approve_tokens": "Menyetujui token",
+ "apps": "Aplikasi",
"arbiscan_history": "Sejarah ArbiScan",
"arrive_in_this_address": "${currency} ${tag} akan tiba di alamat ini",
"ascending": "Naik",
@@ -440,6 +441,8 @@
"hide": "Bersembunyi",
"hide_details": "Sembunyikan Rincian",
"high_contrast_theme": "Tema Kontras Tinggi",
+ "history": "Sejarah",
+ "home": "Rumah",
"home_screen_settings": "Pengaturan layar awal",
"how_to_connect": "Cara terhubung",
"how_to_use": "Cara Penggunaan",
diff --git a/res/values/strings_it.arb b/res/values/strings_it.arb
index 55f676cf3..603c862a0 100644
--- a/res/values/strings_it.arb
+++ b/res/values/strings_it.arb
@@ -60,6 +60,7 @@
"approve": "Approvare",
"approve_request": "Approvare la richiesta",
"approve_tokens": "Approvare i token",
+ "apps": "App",
"arbiscan_history": "Storia dell'ArbiScan",
"arrive_in_this_address": "${currency} ${tag}arriverà a questo indirizzo",
"ascending": "Ascendente",
@@ -440,6 +441,8 @@
"hide": "Nascondi",
"hide_details": "Nascondi dettagli",
"high_contrast_theme": "Tema ad alto contrasto",
+ "history": "Storia",
+ "home": "Casa",
"home_screen_settings": "Impostazioni della schermata iniziale",
"how_to_connect": "Come connettersi",
"how_to_use": "Come usare",
diff --git a/res/values/strings_ja.arb b/res/values/strings_ja.arb
index 261943d25..9b47ef5f6 100644
--- a/res/values/strings_ja.arb
+++ b/res/values/strings_ja.arb
@@ -60,6 +60,7 @@
"approve": "承認する",
"approve_request": "リクエストを承認します",
"approve_tokens": "トークンを承認します",
+ "apps": "アプリ",
"arbiscan_history": "ArbiScan の歴史",
"arrive_in_this_address": "${currency} ${tag}はこの住所に到着します",
"ascending": "上昇",
@@ -441,6 +442,8 @@
"hide": "隠れる",
"hide_details": "詳細を非表示",
"high_contrast_theme": "ハイコントラストテーマ",
+ "history": "歴史",
+ "home": "家",
"home_screen_settings": "ホーム画面の設定",
"how_to_connect": "接続方法",
"how_to_use": "使い方",
diff --git a/res/values/strings_ko.arb b/res/values/strings_ko.arb
index f2f4cd597..be7f2106b 100644
--- a/res/values/strings_ko.arb
+++ b/res/values/strings_ko.arb
@@ -60,6 +60,7 @@
"approve": "승인",
"approve_request": "요청 승인",
"approve_tokens": "토큰을 승인합니다",
+ "apps": "앱",
"arbiscan_history": "ArbiScan 역사",
"arrive_in_this_address": "${currency} ${tag}이(가) 이 주소로 도착합니다",
"ascending": "오름차순",
@@ -440,6 +441,8 @@
"hide": "숨기기",
"hide_details": "세부 정보 숨기기",
"high_contrast_theme": "고대비 테마",
+ "history": "역사",
+ "home": "집",
"home_screen_settings": "홈 화면 설정",
"how_to_connect": "연결 방법",
"how_to_use": "사용 방법",
diff --git a/res/values/strings_my.arb b/res/values/strings_my.arb
index 39eabdfbc..2507dda1d 100644
--- a/res/values/strings_my.arb
+++ b/res/values/strings_my.arb
@@ -60,6 +60,7 @@
"approve": "လက်မခံပါ။",
"approve_request": "တောင်းဆိုမှုကိုအတည်ပြု",
"approve_tokens": "တိုကင်အတည်ပြု",
+ "apps": "အက်ပလီကေးများ",
"arbiscan_history": "arbiscan သမိုင်း",
"arrive_in_this_address": "${currency} ${tag}ဤလိပ်စာသို့ ရောက်ရှိပါမည်။",
"ascending": "တက်",
@@ -440,6 +441,8 @@
"hide": "သားရေ",
"hide_details": "အသေးစိတ်ကို ဝှက်ပါ။",
"high_contrast_theme": "အလင်းအမှောင် မြင့်မားသော အပြင်အဆင်",
+ "history": "သမိုင်း",
+ "home": "နေအိမ်",
"home_screen_settings": "ပင်မစခရင် ဆက်တင်များ",
"how_to_connect": "ဘယ်လိုချိတ်ဆက်ရမလဲ",
"how_to_use": "အသုံးပြုနည်း",
diff --git a/res/values/strings_nl.arb b/res/values/strings_nl.arb
index dd9ad4e3c..056908f1b 100644
--- a/res/values/strings_nl.arb
+++ b/res/values/strings_nl.arb
@@ -60,6 +60,7 @@
"approve": "Goedkeuren",
"approve_request": "Het verzoek goedkeuren",
"approve_tokens": "Tokens goedkeuren",
+ "apps": "Apps",
"arbiscan_history": "ArbiScan-geschiedenis",
"arrive_in_this_address": "${currency} ${tag}komt aan op dit adres",
"ascending": "Stijgend",
@@ -440,6 +441,8 @@
"hide": "Verbergen",
"hide_details": "Details verbergen",
"high_contrast_theme": "Thema met hoog contrast",
+ "history": "Geschiedenis",
+ "home": "Thuis",
"home_screen_settings": "Instellingen voor het startscherm",
"how_to_connect": "Hoe verbinding te maken",
"how_to_use": "Hoe te gebruiken",
diff --git a/res/values/strings_pl.arb b/res/values/strings_pl.arb
index 5b27af510..c2509f821 100644
--- a/res/values/strings_pl.arb
+++ b/res/values/strings_pl.arb
@@ -60,6 +60,7 @@
"approve": "Zatwierdzić",
"approve_request": "Zatwierdzić żądanie",
"approve_tokens": "Zatwierdzić tokeny",
+ "apps": "Aplikacje",
"arbiscan_history": "Historia ArbiScanu",
"arrive_in_this_address": "${currency} ${tag}dotrze na ten adres",
"ascending": "Wznoszący się",
@@ -439,6 +440,8 @@
"hide": "Ukryj",
"hide_details": "Ukryj szczegóły",
"high_contrast_theme": "Motyw wysokiego kontrastu",
+ "history": "Historia",
+ "home": "Dom",
"home_screen_settings": "Ustawienia ekranu głównego",
"how_to_connect": "Jak połączyć się",
"how_to_use": "Jak korzystać",
diff --git a/res/values/strings_pt.arb b/res/values/strings_pt.arb
index f8831534e..e1b7d4c5a 100644
--- a/res/values/strings_pt.arb
+++ b/res/values/strings_pt.arb
@@ -60,6 +60,7 @@
"approve": "Aprovar",
"approve_request": "Aprovar solicitação",
"approve_tokens": "Aprovar tokens",
+ "apps": "Aplicativos",
"arbiscan_history": "História do ArbiScan",
"arrive_in_this_address": "${currency} ${tag}chegará neste endereço",
"ascending": "Ascendente",
@@ -440,6 +441,8 @@
"hide": "Esconder",
"hide_details": "Ocultar detalhes",
"high_contrast_theme": "Tema de alto contraste",
+ "history": "História",
+ "home": "Lar",
"home_screen_settings": "Configurações da tela inicial",
"how_to_connect": "Como conectar",
"how_to_use": "Como usar",
diff --git a/res/values/strings_ru.arb b/res/values/strings_ru.arb
index de31f95f4..5993fd530 100644
--- a/res/values/strings_ru.arb
+++ b/res/values/strings_ru.arb
@@ -60,6 +60,7 @@
"approve": "Утвердить",
"approve_request": "Утвердить запрос",
"approve_tokens": "Одобрить токены",
+ "apps": "Приложения",
"arbiscan_history": "История АрбиСкан",
"arrive_in_this_address": "${currency} ${tag}придет на этот адрес",
"ascending": "Восходящий",
@@ -440,6 +441,8 @@
"hide": "Скрывать",
"hide_details": "Скрыть детали",
"high_contrast_theme": "Высококонтрастная тема",
+ "history": "История",
+ "home": "Дом",
"home_screen_settings": "Настройки главного экрана",
"how_to_connect": "Как подключиться",
"how_to_use": "Как использовать",
diff --git a/res/values/strings_th.arb b/res/values/strings_th.arb
index 6b4fcbd55..d5887fd73 100644
--- a/res/values/strings_th.arb
+++ b/res/values/strings_th.arb
@@ -60,6 +60,7 @@
"approve": "อนุมัติ",
"approve_request": "อนุมัติคำขอ",
"approve_tokens": "อนุมัติโทเค็น",
+ "apps": "แอพ",
"arbiscan_history": "ประวัติ ArbiScan",
"arrive_in_this_address": "${currency} ${tag}จะมาถึงที่อยู่นี้",
"ascending": "จากน้อยไปมาก",
@@ -440,6 +441,8 @@
"hide": "ซ่อน",
"hide_details": "ซ่อนรายละเอียด",
"high_contrast_theme": "ธีมความคมชัดสูง",
+ "history": "ประวัติศาสตร์",
+ "home": "บ้าน",
"home_screen_settings": "การตั้งค่าหน้าจอหลัก",
"how_to_connect": "วิธีการเชื่อมต่อ",
"how_to_use": "วิธีใช้",
diff --git a/res/values/strings_tl.arb b/res/values/strings_tl.arb
index 31f530b52..97712fdba 100644
--- a/res/values/strings_tl.arb
+++ b/res/values/strings_tl.arb
@@ -60,6 +60,7 @@
"approve": "Aprubahan",
"approve_request": "Aprubahan ang kahilingan",
"approve_tokens": "Aprubahan ang mga token",
+ "apps": "Apps",
"arbiscan_history": "Kasaysayan ng Arbiscan",
"arrive_in_this_address": "Ang ${currency} ${tag} ay darating sa address na ito",
"ascending": "Umakyat",
@@ -440,6 +441,8 @@
"hide": "Itago",
"hide_details": "Itago ang mga detalye",
"high_contrast_theme": "High Contrast Theme",
+ "history": "Kasaysayan",
+ "home": "Home",
"home_screen_settings": "Mga setting ng home screen",
"how_to_connect": "Paano kumonekta",
"how_to_use": "Paano gamitin",
diff --git a/res/values/strings_tr.arb b/res/values/strings_tr.arb
index 1236c3c83..be2dd8fd7 100644
--- a/res/values/strings_tr.arb
+++ b/res/values/strings_tr.arb
@@ -60,6 +60,7 @@
"approve": "Onaylamak",
"approve_request": "Talebi Onaylama",
"approve_tokens": "Jetonları onaylayın",
+ "apps": "Uygulamalar",
"arbiscan_history": "ArbiScan Geçmişi",
"arrive_in_this_address": "${currency} ${tag}bu adrese ulaşacak",
"ascending": "Yükselen",
@@ -440,6 +441,8 @@
"hide": "Saklamak",
"hide_details": "Detayları Gizle",
"high_contrast_theme": "Yüksek Kontrastlı Tema",
+ "history": "Tarih",
+ "home": "Ev",
"home_screen_settings": "Ana ekran ayarları",
"how_to_connect": "Nasıl bağlanır",
"how_to_use": "Nasıl kullanılır",
diff --git a/res/values/strings_uk.arb b/res/values/strings_uk.arb
index cabc4a937..e64086e27 100644
--- a/res/values/strings_uk.arb
+++ b/res/values/strings_uk.arb
@@ -60,6 +60,7 @@
"approve": "Затвердити",
"approve_request": "Запитайте запит",
"approve_tokens": "Затвердити токени",
+ "apps": "Застосунки",
"arbiscan_history": "Арбісканська історія",
"arrive_in_this_address": "${currency} ${tag}надійде на цю адресу",
"ascending": "Висхід",
@@ -440,6 +441,8 @@
"hide": "Сховати",
"hide_details": "Приховати деталі",
"high_contrast_theme": "Тема високої контрастності",
+ "history": "Історія",
+ "home": "Дім",
"home_screen_settings": "Налаштування головного екрана",
"how_to_connect": "Як підключитися",
"how_to_use": "Як використовувати",
diff --git a/res/values/strings_ur.arb b/res/values/strings_ur.arb
index 8f361ae6a..5190195d1 100644
--- a/res/values/strings_ur.arb
+++ b/res/values/strings_ur.arb
@@ -60,6 +60,7 @@
"approve": "ﻭﺮﮐ ﺭﻮﻈﻨﻣ",
"approve_request": "درخواست کو منظور کریں",
"approve_tokens": "ٹوکن کو منظور کریں",
+ "apps": "ایپس",
"arbiscan_history": "اربیسکن تاریخ",
"arrive_in_this_address": "${currency} ${tag}اس پتے پر پہنچے گا۔",
"ascending": "چڑھنے",
@@ -440,6 +441,8 @@
"hide": "چھپائیں",
"hide_details": "تفصیلات چھپائیں۔",
"high_contrast_theme": "ہائی کنٹراسٹ تھیم",
+ "history": "تاریخ",
+ "home": "گھر",
"home_screen_settings": "ہوم اسکرین کی ترتیبات",
"how_to_connect": "کیسے مربوط ہوں",
"how_to_use": " ﮧﻘﯾﺮﻃ ﺎﮐ ﮯﻧﺮﮐ ﻝﺎﻤﻌﺘﺳﺍ",
diff --git a/res/values/strings_vi.arb b/res/values/strings_vi.arb
index be4d2a401..4f3abc8de 100644
--- a/res/values/strings_vi.arb
+++ b/res/values/strings_vi.arb
@@ -60,6 +60,7 @@
"approve": "Phê duyệt",
"approve_request": "Phê duyệt yêu cầu",
"approve_tokens": "Phê duyệt mã thông báo",
+ "apps": "Ứng dụng",
"arbiscan_history": "Lịch sử quét Arbi",
"arrive_in_this_address": "${currency} ${tag} sẽ đến địa chỉ này",
"ascending": "Tăng dần",
@@ -439,6 +440,8 @@
"hide": "Trốn",
"hide_details": "Ẩn chi tiết",
"high_contrast_theme": "Chủ đề độ tương phản cao",
+ "history": "Lịch sử",
+ "home": "Trang chủ",
"home_screen_settings": "Cài đặt màn hình chính",
"how_to_connect": "Cách kết nối",
"how_to_use": "Cách sử dụng",
diff --git a/res/values/strings_yo.arb b/res/values/strings_yo.arb
index 7f2a60347..ef80e77a0 100644
--- a/res/values/strings_yo.arb
+++ b/res/values/strings_yo.arb
@@ -60,6 +60,7 @@
"approve": "Fi ọwọ si",
"approve_request": "IKILỌ RẸ",
"approve_tokens": "Ṣe fọwọsi awọn àmi",
+ "apps": "Lw",
"arbiscan_history": "Itan Arbiscan",
"arrive_in_this_address": "${currency} ${tag} máa dé sí àdírẹ́sì yìí",
"ascending": "Goke",
@@ -441,6 +442,8 @@
"hide": "Pamọ",
"hide_details": "Dé ìsọfúnni kékeré",
"high_contrast_theme": "Akori Iyatọ giga",
+ "history": "Itan",
+ "home": "Ile",
"home_screen_settings": "Awọn eto iboju ile",
"how_to_connect": "Bi o ṣe le sopọ",
"how_to_use": "Bawo ni lati lo",
diff --git a/res/values/strings_zh.arb b/res/values/strings_zh.arb
index cee2aa801..ba602b024 100644
--- a/res/values/strings_zh.arb
+++ b/res/values/strings_zh.arb
@@ -60,6 +60,7 @@
"approve": "批准",
"approve_request": "批准请求",
"approve_tokens": "批准令牌",
+ "apps": "应用程序",
"arbiscan_history": "ArbiScan 历史",
"arrive_in_this_address": "${currency} ${tag}将到达此地址",
"ascending": "上升",
@@ -440,6 +441,8 @@
"hide": "隐藏",
"hide_details": "隐藏细节",
"high_contrast_theme": "高对比度主题",
+ "history": "历史",
+ "home": "家",
"home_screen_settings": "主屏幕设置",
"how_to_connect": "如何连接",
"how_to_use": "如何使用",