Skip to content

Commit

Permalink
Position wallet panel to app menu if icon is hidden
Browse files Browse the repository at this point in the history
  • Loading branch information
bbondy committed May 5, 2021
1 parent 0da59d2 commit 88fbb5c
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 21 deletions.
1 change: 0 additions & 1 deletion browser/brave_profile_prefs.cc
Original file line number Diff line number Diff line change
Expand Up @@ -316,7 +316,6 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
registry->RegisterStringPref(kBraveWalletPasswordEncryptorNonce, "");
registry->RegisterStringPref(kBraveWalletEncryptedMnemonic, "");
registry->RegisterIntegerPref(kBraveWalletDefaultKeyringAccountNum, 0);
registry->RegisterBooleanPref(kShowWalletIcon, true);
registry->RegisterBooleanPref(kShowWalletIconOnToolbar, true);
#endif

Expand Down
3 changes: 2 additions & 1 deletion browser/ui/views/toolbar/brave_toolbar_view.cc
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,8 @@ void BraveToolbarView::Init() {

#if BUILDFLAG(BRAVE_WALLET_ENABLED)
if (brave_wallet::IsNativeWalletEnabled()) {
wallet_ = new WalletButton(profile, profile->GetPrefs());
wallet_ =
new WalletButton(GetAppMenuButton(), profile, profile->GetPrefs());
wallet_->SetTriggerableEventFlags(ui::EF_LEFT_MOUSE_BUTTON |
ui::EF_MIDDLE_MOUSE_BUTTON);
}
Expand Down
44 changes: 28 additions & 16 deletions browser/ui/views/toolbar/wallet_button.cc
Original file line number Diff line number Diff line change
Expand Up @@ -19,19 +19,20 @@
#include "ui/gfx/paint_vector_icon.h"
#include "ui/views/metadata/metadata_impl_macros.h"

WalletButton::WalletButton(Profile* profile, PrefService* prefs)
WalletButton::WalletButton(View* backup_anchor_view,
Profile* profile,
PrefService* prefs)
: ToolbarButton(base::BindRepeating(&WalletButton::OnWalletPressed,
base::Unretained(this))),
webui_bubble_manager_(this,
profile,
GURL(kBraveUIWalletPanelURL),
IDS_ACCNAME_BRAVE_WALLET_BUTTON,
true),
prefs_(prefs) {
prefs_(prefs),
backup_anchor_view_(backup_anchor_view),
profile_(profile) {
pref_change_registrar_.Init(prefs_);
pref_change_registrar_.Add(
kShowWalletIcon, base::BindRepeating(&WalletButton::OnPreferenceChanged,
base::Unretained(this)));
kShowWalletIconOnToolbar,
base::BindRepeating(&WalletButton::OnPreferenceChanged,
base::Unretained(this)));
InitBubbleManagerAnchor();
UpdateVisibility();

auto menu_button_controller = std::make_unique<views::MenuButtonController>(
Expand All @@ -57,42 +58,53 @@ void WalletButton::UpdateImageAndText() {
SetTooltipText(l10n_util::GetStringUTF16(IDS_TOOLTIP_WALLET));
}

void WalletButton::InitBubbleManagerAnchor() {
View* anchor_view = this;
if (!prefs_->GetBoolean(kShowWalletIconOnToolbar)) {
anchor_view = backup_anchor_view_;
}
webui_bubble_manager_ = std::make_unique<WebUIBubbleManagerT<WalletPanelUI>>(
anchor_view, profile_, GURL(kBraveUIWalletPanelURL),
IDS_ACCNAME_BRAVE_WALLET_BUTTON, true);
}

void WalletButton::UpdateVisibility() {
SetVisible(prefs_->GetBoolean(kShowWalletIcon));
SetVisible(prefs_->GetBoolean(kShowWalletIconOnToolbar));
}

void WalletButton ::OnPreferenceChanged() {
InitBubbleManagerAnchor();
UpdateVisibility();
}

void WalletButton::OnWidgetDestroying(views::Widget* widget) {
DCHECK_EQ(webui_bubble_manager_.GetBubbleWidget(), widget);
DCHECK_EQ(webui_bubble_manager_->GetBubbleWidget(), widget);
DCHECK(bubble_widget_observation_.IsObservingSource(
webui_bubble_manager_.GetBubbleWidget()));
webui_bubble_manager_->GetBubbleWidget()));
bubble_widget_observation_.Reset();
pressed_lock_.reset();
}

bool WalletButton::ShowWalletBubble() {
if (webui_bubble_manager_.GetBubbleWidget()) {
if (webui_bubble_manager_->GetBubbleWidget()) {
CloseWalletBubble();
return false;
}

webui_bubble_manager_.ShowBubble();
webui_bubble_manager_->ShowBubble();

// There should only ever be a single bubble widget active for the
// WalletButton.
DCHECK(!bubble_widget_observation_.IsObserving());
bubble_widget_observation_.Observe(webui_bubble_manager_.GetBubbleWidget());
bubble_widget_observation_.Observe(webui_bubble_manager_->GetBubbleWidget());

// Hold the pressed lock while the |bubble_| is active.
pressed_lock_ = menu_button_controller_->TakeLock();
return true;
}

void WalletButton::CloseWalletBubble() {
webui_bubble_manager_.CloseBubble();
webui_bubble_manager_->CloseBubble();
}

BEGIN_METADATA(WalletButton, ToolbarButton)
Expand Down
9 changes: 6 additions & 3 deletions browser/ui/views/toolbar/wallet_button.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ class WalletButton : public ToolbarButton, public views::WidgetObserver {
METADATA_HEADER(WalletButton);

public:
WalletButton(Profile* profile, PrefService* prefs);
WalletButton(View* backup_anchor_view, Profile* profile, PrefService* prefs);
~WalletButton() override;

WalletButton(const WalletButton&) = delete;
Expand All @@ -37,10 +37,11 @@ class WalletButton : public ToolbarButton, public views::WidgetObserver {
void CloseWalletBubble();

void UpdateImageAndText();
void InitBubbleManagerAnchor();
void UpdateVisibility();

WebUIBubbleManager* webui_bubble_manager_for_testing() {
return &webui_bubble_manager_;
return webui_bubble_manager_.get();
}

private:
Expand All @@ -50,9 +51,11 @@ class WalletButton : public ToolbarButton, public views::WidgetObserver {
// views::WidgetObserver:
void OnWidgetDestroying(views::Widget* widget) override;

WebUIBubbleManagerT<WalletPanelUI> webui_bubble_manager_;
std::unique_ptr<WebUIBubbleManagerT<WalletPanelUI>> webui_bubble_manager_;

PrefService* prefs_ = nullptr;
View* backup_anchor_view_ = nullptr;
Profile* profile_;
PrefChangeRegistrar pref_change_registrar_;

views::MenuButtonController* menu_button_controller_ = nullptr;
Expand Down

0 comments on commit 88fbb5c

Please sign in to comment.