Commit 068e5981 authored by Jan Krcal's avatar Jan Krcal Committed by Commit Bot

[AvatarToolbarButton] Keep user email shown while hovered

This CL postpones hiding user email if it is hovered. The button gets
hidden as soon as the mouse exits or clicks the button.

Bug: 967317
Change-Id: Ibe85cd96e66881c188be33c77b9ffd1e9470d1d1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1811238
Commit-Queue: Jan Krcal <jkrcal@chromium.org>
Reviewed-by: default avatarPeter Boström <pbos@chromium.org>
Auto-Submit: Jan Krcal <jkrcal@chromium.org>
Cr-Commit-Position: refs/heads/master@{#699249}
parent dc527aff
......@@ -224,6 +224,8 @@ void AvatarToolbarButton::SetAutofillIconVisible(bool autofill_icon_visible) {
void AvatarToolbarButton::NotifyClick(const ui::Event& event) {
Button::NotifyClick(event);
if (should_reset_user_email_when_no_longer_hovered_or_focused_)
ResetUserEmailWhenNotHoveredOrFocused();
// TODO(bsep): Other toolbar buttons have ToolbarView as a listener and let it
// call ExecuteCommandWithDisposition on their behalf. Unfortunately, it's not
// possible to plumb IsKeyEvent through, so this has to be a special case.
......@@ -233,6 +235,18 @@ void AvatarToolbarButton::NotifyClick(const ui::Event& event) {
event.IsKeyEvent());
}
void AvatarToolbarButton::OnMouseExited(const ui::MouseEvent& event) {
if (should_reset_user_email_when_no_longer_hovered_or_focused_)
ResetUserEmailWhenNotHoveredOrFocused();
ToolbarButton::OnMouseExited(event);
}
void AvatarToolbarButton::OnBlur() {
if (should_reset_user_email_when_no_longer_hovered_or_focused_)
ResetUserEmailWhenNotHoveredOrFocused();
ToolbarButton::OnBlur();
}
void AvatarToolbarButton::OnThemeChanged() {
ToolbarButton::OnThemeChanged();
UpdateIcon();
......@@ -336,11 +350,28 @@ void AvatarToolbarButton::ExpandToShowEmail() {
// Hide the pill after a while.
base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
FROM_HERE,
base::BindOnce(&AvatarToolbarButton::ResetUserEmail,
weak_ptr_factory_.GetWeakPtr()),
base::BindOnce(
&AvatarToolbarButton::ResetUserEmailWhenNotHoveredOrFocused,
weak_ptr_factory_.GetWeakPtr()),
kEmailExpansionDuration);
}
void AvatarToolbarButton::ResetUserEmailWhenNotHoveredOrFocused() {
// No-op if it has been reset already.
if (!user_email_)
return;
// Keep email visible while hovering or being focused.
if (IsMouseHovered() || HasFocus()) {
// TODO(crbug.com/967317): Include also the case when some other button from
// the parent container is shown and hovered / focused.
should_reset_user_email_when_no_longer_hovered_or_focused_ = true;
return;
}
should_reset_user_email_when_no_longer_hovered_or_focused_ = false;
ResetUserEmail();
}
void AvatarToolbarButton::ResetUserEmail() {
DCHECK(user_email_.has_value());
user_email_ = base::nullopt;
......
......@@ -56,6 +56,8 @@ class AvatarToolbarButton : public ToolbarButton,
// ToolbarButton:
void NotifyClick(const ui::Event& event) override;
void OnMouseExited(const ui::MouseEvent& event) override;
void OnBlur() override;
void OnThemeChanged() override;
void AddedToWidget() override;
......@@ -93,6 +95,7 @@ class AvatarToolbarButton : public ToolbarButton,
void OnCreditCardSaved() override;
void ExpandToShowEmail();
void ResetUserEmailWhenNotHoveredOrFocused();
void ResetUserEmail();
base::string16 GetAvatarTooltipText() const;
......@@ -130,6 +133,8 @@ class AvatarToolbarButton : public ToolbarButton,
base::Optional<std::string> user_email_;
// We cannot show the animation before we fetch the new avatar.
bool waiting_for_image_to_show_user_email_ = false;
// We cannot hide the animation when the button is hovered or focused.
bool should_reset_user_email_when_no_longer_hovered_or_focused_ = false;
ScopedObserver<ProfileAttributesStorage, ProfileAttributesStorage::Observer>
profile_observer_{this};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment