From 81679b13503070a86f124e892ccd1c8d5ecbf77a Mon Sep 17 00:00:00 2001 From: Ebuka <76660305+AdimekweEbuka@users.noreply.github.com> Date: Thu, 21 Oct 2021 16:46:23 +0100 Subject: [PATCH] Adds hide balance button (#646) * Adds hide balance button * Moves Hide balance to settings page * Implements a hide/show balance icon button on main page * Removes USD balance when balance is hidden * Resolves HideBalanceConfigKey string value * add tooltip to hide balance icon * fix hidden balance tooltip hover * comment out hidden balance label/tooltip Co-authored-by: dreacot Co-authored-by: sirmorrison --- ui/load/load.go | 4 ++- ui/page/main_page.go | 79 ++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 76 insertions(+), 7 deletions(-) diff --git a/ui/load/load.go b/ui/load/load.go index c596a2d1f..5e05cede6 100644 --- a/ui/load/load.go +++ b/ui/load/load.go @@ -37,7 +37,7 @@ type Receiver struct { type Icons struct { ContentAdd, NavigationCheck, NavigationMore, ActionCheckCircle, ActionInfo, NavigationArrowBack, NavigationArrowForward, ActionCheck, ChevronRight, NavigationCancel, NavMoreIcon, - ImageBrightness1, ContentClear, DropDownIcon, Cached, ContentRemove *widget.Icon + ImageBrightness1, ContentClear, DropDownIcon, Cached, ContentRemove, ConcealIcon, RevealIcon *widget.Icon OverviewIcon, OverviewIconInactive, WalletIcon, WalletIconInactive, ReceiveIcon, Transferred, TransactionsIcon, TransactionsIconInactive, SendIcon, MoreIcon, MoreIconInactive, @@ -151,6 +151,8 @@ func loadIcons() Icons { DropDownIcon: decredmaterial.MustIcon(widget.NewIcon(icons.NavigationArrowDropDown)), Cached: decredmaterial.MustIcon(widget.NewIcon(icons.ActionCached)), ContentRemove: decredmaterial.MustIcon(widget.NewIcon(icons.ContentRemove)), + ConcealIcon: decredmaterial.MustIcon(widget.NewIcon(icons.ActionVisibility)), + RevealIcon: decredmaterial.MustIcon(widget.NewIcon(icons.ActionVisibilityOff)), OverviewIcon: decredmaterial.NewImage(decredIcons["overview"]), OverviewIconInactive: decredmaterial.NewImage(decredIcons["overview_inactive"]), diff --git a/ui/page/main_page.go b/ui/page/main_page.go index ce111cccf..6bf1ddfd5 100644 --- a/ui/page/main_page.go +++ b/ui/page/main_page.go @@ -28,6 +28,8 @@ const ( TicketsNavID ProposalsNavID MoreNavID + + HideBalanceConfigKey = "hide_balance" ) var ( @@ -35,6 +37,12 @@ var ( NavDrawerMinimizedWidth = unit.Value{U: unit.UnitDp, V: 72} ) +type HideBalanceItem struct { + hideBalanceButton decredmaterial.IconButton + tooltip *decredmaterial.Tooltip + tooltipLabel decredmaterial.Label +} + type NavHandler struct { Clickable *widget.Clickable Image *decredmaterial.Image @@ -50,6 +58,8 @@ type MainPage struct { autoSync bool + hideBalanceItem HideBalanceItem + currentPage load.Page pageBackStack []load.Page sendPage *send.Page // reuse value to keep data persistent onresume. @@ -59,15 +69,22 @@ type MainPage struct { usdExchangeSet bool totalBalance dcrutil.Amount totalBalanceUSD string + + isBalanceHidden bool } func NewMainPage(l *load.Load) *MainPage { - mp := &MainPage{ Load: l, autoSync: true, } + mp.hideBalanceItem.hideBalanceButton = mp.Theme.PlainIconButton(mp.Icons.ConcealIcon) + mp.hideBalanceItem.hideBalanceButton.Color = mp.Theme.Color.Gray3 + mp.hideBalanceItem.hideBalanceButton.Size = unit.Dp(19) + mp.hideBalanceItem.hideBalanceButton.Inset = layout.UniformInset(values.MarginPadding4) + mp.hideBalanceItem.tooltip = mp.Theme.Tooltip() + // init shared page functions toggleSync := func() { if mp.WL.MultiWallet.IsConnectedToDecredNetwork() { @@ -329,6 +346,12 @@ func (mp *MainPage) Handle() { mp.changeFragment(pg) } } + + mp.isBalanceHidden = mp.WL.MultiWallet.ReadBoolConfigValueForKey(HideBalanceConfigKey, false) + for mp.hideBalanceItem.hideBalanceButton.Button.Clicked() { + mp.isBalanceHidden = !mp.isBalanceHidden + mp.WL.MultiWallet.SetBoolConfigValueForKey(HideBalanceConfigKey, mp.isBalanceHidden) + } } func (mp *MainPage) OnClose() { @@ -435,9 +458,30 @@ func (mp *MainPage) Layout(gtx layout.Context) layout.Dimensions { ) }), layout.Stacked(func(gtx C) D { + // TODO: hidden balance tip hover layout + // if mp.hideBalanceItem.hideBalanceButton.Button.Hovered() { + // lm := values.MarginPadding280 + // if mp.hideBalanceItem.tooltipLabel.Text == "Show Balance" { + // lm = values.MarginPadding168 + // } + + // return layout.Inset{Top: values.MarginPadding50, Left: lm}.Layout(gtx, func(gtx C) D { + // card := mp.Theme.Card() + // card.Color = mp.Theme.Color.Surface + // card.Border = true + // card.Radius = decredmaterial.Radius(5) + // card.BorderParam.CornerRadius = values.MarginPadding5 + // return card.Layout(gtx, func(gtx C) D { + // return components.Container{ + // Padding: layout.UniformInset(values.MarginPadding5), + // }.Layout(gtx, mp.hideBalanceItem.tooltipLabel.Layout) + // }) + // }) + // } + // global toasts. Stack toast on all pages and contents //TODO: show toasts here - return layout.Dimensions{} + return D{} }), ) @@ -472,6 +516,16 @@ func (mp *MainPage) LayoutUSDBalance(gtx layout.Context) layout.Dimensions { ) } +func (mp *MainPage) totalDCRBalance(gtx layout.Context) layout.Dimensions { + if mp.isBalanceHidden { + hiddenBalanceText := mp.Theme.Label(values.TextSize18.Scale(0.8), "**********DCR") + return layout.Inset{Bottom: values.MarginPadding0, Top: values.MarginPadding5}.Layout(gtx, func(gtx C) D { + return hiddenBalanceText.Layout(gtx) + }) + } + return components.LayoutBalance(gtx, mp.Load, mp.totalBalance.String()) +} + func (mp *MainPage) LayoutTopBar(gtx layout.Context) layout.Dimensions { return decredmaterial.LinearLayout{ Width: decredmaterial.MatchParent, @@ -507,12 +561,25 @@ func (mp *MainPage) LayoutTopBar(gtx layout.Context) layout.Dimensions { }) }), layout.Rigid(func(gtx C) D { - return layout.Center.Layout(gtx, func(gtx C) D { - return components.LayoutBalance(gtx, mp.Load, mp.totalBalance.String()) - }) + return mp.totalDCRBalance(gtx) + }), + layout.Rigid(func(gtx C) D { + if !mp.isBalanceHidden { + return mp.LayoutUSDBalance(gtx) + } + return layout.Dimensions{} }), layout.Rigid(func(gtx C) D { - return mp.LayoutUSDBalance(gtx) + mp.hideBalanceItem.tooltipLabel = mp.Theme.Caption("Hide Balance") + mp.hideBalanceItem.hideBalanceButton.Icon = mp.Icons.RevealIcon + if mp.isBalanceHidden { + mp.hideBalanceItem.tooltipLabel.Text = "Show Balance" + mp.hideBalanceItem.hideBalanceButton.Icon = mp.Icons.ConcealIcon + } + return layout.Inset{ + Top: values.MarginPadding1, + Left: values.MarginPadding9, + }.Layout(gtx, mp.hideBalanceItem.hideBalanceButton.Layout) }), ) })