Commit ea006291 authored by Peter Kasting's avatar Peter Kasting Committed by Commit Bot

Change ButtonPressed overrides to callbacks: ash/system/unified/

Bug: 772945
Change-Id: I0e4f7eeb0621288165b5f92eecabf6f0f742b92a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2504050
Commit-Queue: Peter Kasting <pkasting@chromium.org>
Auto-Submit: Peter Kasting <pkasting@chromium.org>
Reviewed-by: default avatarTetsui Ohkubo <tetsui@chromium.org>
Cr-Commit-Position: refs/heads/master@{#821754}
parent f581c262
......@@ -115,7 +115,7 @@ class AutoclickScrollButton : public CustomShapeButton,
const gfx::VectorIcon& icon,
int accessible_name_id,
AutoclickScrollView::ButtonId id)
: CustomShapeButton(this), action_(action) {
: CustomShapeButton(PressedCallback(this, this)), action_(action) {
views::View::SetID(static_cast<int>(id));
SetTooltipText(l10n_util::GetStringUTF16(accessible_name_id));
// Disable canvas flipping, as scroll left should always be left no matter
......
......@@ -13,7 +13,8 @@ namespace ash {
InterstitialViewButton::InterstitialViewButton(views::ButtonListener* listener,
const base::string16& text,
bool paint_background)
: RoundedLabelButton(listener, text), paint_background_(paint_background) {}
: RoundedLabelButton(PressedCallback(listener, this), text),
paint_background_(paint_background) {}
InterstitialViewButton::~InterstitialViewButton() = default;
......
......@@ -63,7 +63,8 @@ void ConfigureTitleTriView(TriView* tri_view, TriView::Container container) {
class BackButton : public CustomShapeButton {
public:
BackButton(views::ButtonListener* listener) : CustomShapeButton(listener) {
BackButton(views::ButtonListener* listener)
: CustomShapeButton(PressedCallback(listener, this)) {
gfx::ImageSkia image =
gfx::CreateVectorIcon(kUnifiedMenuArrowBackIcon,
AshColorProvider::Get()->GetContentLayerColor(
......
......@@ -14,8 +14,8 @@
namespace ash {
CollapseButton::CollapseButton(views::ButtonListener* listener)
: CustomShapeButton(listener) {}
CollapseButton::CollapseButton(PressedCallback callback)
: CustomShapeButton(std::move(callback)) {}
CollapseButton::~CollapseButton() = default;
......
......@@ -15,7 +15,7 @@ namespace ash {
// By pressing the button, the state of the bubble will be toggled.
class CollapseButton : public CustomShapeButton {
public:
explicit CollapseButton(views::ButtonListener* listener);
explicit CollapseButton(PressedCallback callback);
~CollapseButton() override;
// Change the expanded state. The icon will change.
......
......@@ -34,8 +34,8 @@ class CustomShapeButtonHighlightPathGenerator
namespace ash {
CustomShapeButton::CustomShapeButton(views::ButtonListener* listener)
: ImageButton(listener) {
CustomShapeButton::CustomShapeButton(PressedCallback callback)
: ImageButton(std::move(callback)) {
TrayPopupUtils::ConfigureTrayPopupButton(this);
views::HighlightPathGenerator::Install(
this, std::make_unique<CustomShapeButtonHighlightPathGenerator>());
......
......@@ -13,7 +13,7 @@ namespace ash {
// ink drop.
class CustomShapeButton : public views::ImageButton {
public:
explicit CustomShapeButton(views::ButtonListener* listener);
explicit CustomShapeButton(PressedCallback callback);
~CustomShapeButton() override;
// Return the custom shape for the button in SkPath.
......
......@@ -50,9 +50,9 @@ void ConfigureFeaturePodLabel(views::Label* label,
} // namespace
FeaturePodIconButton::FeaturePodIconButton(views::ButtonListener* listener,
FeaturePodIconButton::FeaturePodIconButton(PressedCallback callback,
bool is_togglable)
: views::ImageButton(listener), is_togglable_(is_togglable) {
: views::ImageButton(std::move(callback)), is_togglable_(is_togglable) {
SetPreferredSize(kUnifiedFeaturePodIconSize);
SetBorder(views::CreateEmptyBorder(kUnifiedFeaturePodIconPadding));
SetImageHorizontalAlignment(ALIGN_CENTER);
......@@ -68,6 +68,10 @@ FeaturePodIconButton::FeaturePodIconButton(views::ButtonListener* listener,
kUnifiedFeaturePodIconPadding);
}
FeaturePodIconButton::FeaturePodIconButton(views::ButtonListener* listener,
bool is_togglable)
: FeaturePodIconButton(PressedCallback(listener, this), is_togglable) {}
FeaturePodIconButton::~FeaturePodIconButton() = default;
void FeaturePodIconButton::SetToggled(bool toggled) {
......@@ -155,8 +159,8 @@ void FeaturePodIconButton::UpdateVectorIcon() {
kUnifiedFeaturePodVectorIconSize);
}
FeaturePodLabelButton::FeaturePodLabelButton(views::ButtonListener* listener)
: Button(listener),
FeaturePodLabelButton::FeaturePodLabelButton(PressedCallback callback)
: Button(std::move(callback)),
label_(new views::Label),
sub_label_(new views::Label),
detailed_view_arrow_(new views::ImageView) {
......@@ -322,9 +326,13 @@ void FeaturePodLabelButton::LayoutInCenter(views::View* child, int y) {
FeaturePodButton::FeaturePodButton(FeaturePodControllerBase* controller,
bool is_togglable)
: controller_(controller),
icon_button_(new FeaturePodIconButton(this, is_togglable)),
label_button_(new FeaturePodLabelButton(this)) {
: icon_button_(new FeaturePodIconButton(
base::BindRepeating(&FeaturePodControllerBase::OnIconPressed,
base::Unretained(controller)),
is_togglable)),
label_button_(new FeaturePodLabelButton(
base::BindRepeating(&FeaturePodControllerBase::OnLabelPressed,
base::Unretained(controller)))) {
auto* layout = SetLayoutManager(std::make_unique<views::BoxLayout>(
views::BoxLayout::Orientation::kVertical, gfx::Insets(),
kUnifiedFeaturePodSpacing));
......@@ -432,13 +440,4 @@ void FeaturePodButton::OnEnabledChanged() {
label_button_->SetEnabled(GetEnabled());
}
void FeaturePodButton::ButtonPressed(views::Button* sender,
const ui::Event& event) {
if (sender == label_button_) {
controller_->OnLabelPressed();
return;
}
controller_->OnIconPressed();
}
} // namespace ash
......@@ -23,6 +23,7 @@ class FeaturePodControllerBase;
// A toggle button with an icon used by feature pods and in other places.
class FeaturePodIconButton : public views::ImageButton {
public:
FeaturePodIconButton(PressedCallback callback, bool is_togglable);
FeaturePodIconButton(views::ButtonListener* listener, bool is_togglable);
~FeaturePodIconButton() override;
......@@ -63,7 +64,7 @@ class FeaturePodIconButton : public views::ImageButton {
// Button internally used in FeaturePodButton. Should not be used directly.
class FeaturePodLabelButton : public views::Button {
public:
explicit FeaturePodLabelButton(views::ButtonListener* listener);
explicit FeaturePodLabelButton(PressedCallback callback);
~FeaturePodLabelButton() override;
// Set the text of label shown below the icon. See FeaturePodButton::SetLabel.
......@@ -113,8 +114,7 @@ class FeaturePodLabelButton : public views::Button {
// the current state. Otherwise, the button is not a toggle button and just
// navigates to the appropriate detailed view.
// See the comment in FeaturePodsView for detail.
class ASH_EXPORT FeaturePodButton : public views::View,
public views::ButtonListener {
class ASH_EXPORT FeaturePodButton : public views::View {
public:
FeaturePodButton(FeaturePodControllerBase* controller,
bool is_togglable = true);
......@@ -174,9 +174,6 @@ class ASH_EXPORT FeaturePodButton : public views::View,
void RequestFocus() override;
const char* GetClassName() const override;
// views::ButtonListener:
void ButtonPressed(views::Button* sender, const ui::Event& event) override;
bool visible_preferred() const { return visible_preferred_; }
FeaturePodIconButton* icon_button() const { return icon_button_; }
......@@ -184,9 +181,6 @@ class ASH_EXPORT FeaturePodButton : public views::View,
private:
void OnEnabledChanged();
// Unowned.
FeaturePodControllerBase* const controller_;
// Owned by views hierarchy.
FeaturePodIconButton* const icon_button_;
FeaturePodLabelButton* const label_button_;
......
......@@ -63,7 +63,8 @@ NotificationHiddenView::NotificationHiddenView() {
// prohibited by policy or flag.
if (AshMessageCenterLockScreenController::IsAllowed()) {
change_button_ = new RoundedLabelButton(
this,
base::BindRepeating(&NotificationHiddenView::ChangeButtonPressed,
base::Unretained(this)),
l10n_util::GetStringUTF16(IDS_ASH_MESSAGE_CENTER_LOCKSCREEN_CHANGE));
change_button_->SetTooltipText(l10n_util::GetStringUTF16(
IDS_ASH_MESSAGE_CENTER_LOCKSCREEN_CHANGE_TOOLTIP));
......@@ -77,8 +78,11 @@ NotificationHiddenView::NotificationHiddenView() {
AddChildView(container);
}
void NotificationHiddenView::ButtonPressed(views::Button* sender,
const ui::Event& event) {
const char* NotificationHiddenView::GetClassName() const {
return "NotificationHiddenView";
}
void NotificationHiddenView::ChangeButtonPressed() {
// TODO(yoshiki): Refactor LockScreenController and remove the static cast.
// TODO(yoshiki): Show the setting after unlocking.
static_cast<message_center::MessageCenterImpl*>(
......@@ -89,8 +93,4 @@ void NotificationHiddenView::ButtonPressed(views::Button* sender,
base::DoNothing(), IDS_ASH_MESSAGE_CENTER_UNLOCK_TO_CHANGE_SETTING);
}
const char* NotificationHiddenView::GetClassName() const {
return "NotificationHiddenView";
}
} // namespace ash
......@@ -5,28 +5,30 @@
#ifndef ASH_SYSTEM_UNIFIED_NOTIFICATION_HIDDEN_VIEW_H_
#define ASH_SYSTEM_UNIFIED_NOTIFICATION_HIDDEN_VIEW_H_
#include "ui/views/controls/button/button.h"
#include "ui/views/view.h"
namespace views {
class Button;
}
namespace ash {
// A view to show the message that notifications are hidden on the lock screen
// by the setting or the flag. This may show the button to encourage the user
// to change the lock screen notification setting if the condition permits.
class NotificationHiddenView : public views::View, views::ButtonListener {
class NotificationHiddenView : public views::View {
public:
NotificationHiddenView();
~NotificationHiddenView() override = default;
// views::ButtonListener:
void ButtonPressed(views::Button* sender, const ui::Event& event) override;
// views::View:
const char* GetClassName() const override;
views::Button* change_button_for_testing() { return change_button_; }
private:
void ChangeButtonPressed();
views::Button* change_button_ = nullptr;
DISALLOW_COPY_AND_ASSIGN(NotificationHiddenView);
......
......@@ -43,11 +43,13 @@ constexpr int kInkDropRadius = 3 * kUnifiedPageIndicatorButtonRadius;
// Button internally used in PageIndicatorView. Each button
// stores a page number which it switches to if pressed.
class PageIndicatorView::PageIndicatorButton : public views::Button,
public views::ButtonListener {
class PageIndicatorView::PageIndicatorButton : public views::Button {
public:
PageIndicatorButton(UnifiedSystemTrayController* controller, int page)
: views::Button(this), controller_(controller), page_number_(page) {
: views::Button(base::BindRepeating(
&UnifiedSystemTrayController::HandlePageSwitchAction,
base::Unretained(controller),
page)) {
SetFocusBehavior(views::View::FocusBehavior::ACCESSIBLE_ONLY);
SetInkDropMode(InkDropMode::ON);
views::InstallFixedSizeCircleHighlightPathGenerator(this, kInkDropRadius);
......@@ -100,12 +102,6 @@ class PageIndicatorView::PageIndicatorButton : public views::Button,
SchedulePaint();
}
// views::ButtonListener:
void ButtonPressed(views::Button* sender, const ui::Event& event) override {
DCHECK(controller_);
controller_->HandlePageSwitchAction(page_number_);
}
bool selected() { return selected_; }
protected:
......@@ -141,8 +137,6 @@ class PageIndicatorView::PageIndicatorButton : public views::Button,
private:
bool selected_ = false;
UnifiedSystemTrayController* const controller_;
const int page_number_ = 0;
SkColor ripple_base_color_ = gfx::kPlaceholderColor;
float highlight_opacity_ = 0.f;
......
......@@ -24,9 +24,9 @@ SkColor GetBackgroundColor() {
} // namespace
RoundedLabelButton::RoundedLabelButton(views::ButtonListener* listener,
RoundedLabelButton::RoundedLabelButton(PressedCallback callback,
const base::string16& text)
: views::LabelButton(listener, text) {
: views::LabelButton(std::move(callback), text) {
SetHorizontalAlignment(gfx::ALIGN_CENTER);
SetBorder(views::CreateEmptyBorder(gfx::Insets()));
label()->SetElideBehavior(gfx::NO_ELIDE);
......
......@@ -9,17 +9,12 @@
#include "base/strings/string16.h"
#include "ui/views/controls/button/label_button.h"
namespace views {
class ButtonListener;
} // namespace views
namespace ash {
// LabelButton that has a rounded shape with a Material Design ink drop.
class RoundedLabelButton : public views::LabelButton {
public:
RoundedLabelButton(views::ButtonListener* listener,
const base::string16& text);
RoundedLabelButton(PressedCallback callback, const base::string16& text);
~RoundedLabelButton() override;
// views::LabelButton:
......
......@@ -10,8 +10,8 @@
namespace ash {
SignOutButton::SignOutButton(views::ButtonListener* listener)
: RoundedLabelButton(listener,
SignOutButton::SignOutButton(PressedCallback callback)
: RoundedLabelButton(std::move(callback),
user::GetLocalizedSignOutStringForStatus(
Shell::Get()->session_controller()->login_status(),
false /* multiline */)) {}
......
......@@ -8,10 +8,6 @@
#include "ash/system/unified/rounded_label_button.h"
#include "base/macros.h"
namespace views {
class ButtonListener;
} // namespace views
namespace ash {
// Sign out button to be shown in TopShortcutView with TopShortcutButtons.
......@@ -19,7 +15,7 @@ namespace ash {
// status.
class SignOutButton : public RoundedLabelButton {
public:
explicit SignOutButton(views::ButtonListener* listener);
explicit SignOutButton(PressedCallback callback);
~SignOutButton() override;
// views::RoundedLabelButton:
......
......@@ -18,10 +18,10 @@
namespace ash {
TopShortcutButton::TopShortcutButton(views::ButtonListener* listener,
TopShortcutButton::TopShortcutButton(PressedCallback callback,
const gfx::VectorIcon& icon,
int accessible_name_id)
: views::ImageButton(listener), icon_(icon) {
: views::ImageButton(std::move(callback)), icon_(icon) {
SetImageHorizontalAlignment(ALIGN_CENTER);
SetImageVerticalAlignment(ALIGN_MIDDLE);
if (accessible_name_id)
......@@ -30,6 +30,13 @@ TopShortcutButton::TopShortcutButton(views::ButtonListener* listener,
views::InstallCircleHighlightPathGenerator(this);
}
TopShortcutButton::TopShortcutButton(views::ButtonListener* listener,
const gfx::VectorIcon& icon,
int accessible_name_id)
: TopShortcutButton(PressedCallback(listener, this),
icon,
accessible_name_id) {}
TopShortcutButton::~TopShortcutButton() = default;
gfx::Size TopShortcutButton::CalculatePreferredSize() const {
......
......@@ -15,6 +15,9 @@ namespace ash {
// frequently used features e.g. lock screen, settings, and shutdown.
class TopShortcutButton : public views::ImageButton {
public:
TopShortcutButton(PressedCallback callback,
const gfx::VectorIcon& icon,
int accessible_name_id);
TopShortcutButton(views::ButtonListener* listener,
const gfx::VectorIcon& icon,
int accessible_name_id);
......
......@@ -39,15 +39,15 @@ namespace {
class UserAvatarButton : public views::Button {
public:
UserAvatarButton(views::ButtonListener* listener);
explicit UserAvatarButton(PressedCallback callback);
~UserAvatarButton() override = default;
private:
DISALLOW_COPY_AND_ASSIGN(UserAvatarButton);
};
UserAvatarButton::UserAvatarButton(views::ButtonListener* listener)
: Button(listener) {
UserAvatarButton::UserAvatarButton(PressedCallback callback)
: Button(std::move(callback)) {
SetID(VIEW_ID_USER_AVATAR_BUTTON);
SetLayoutManager(std::make_unique<views::FillLayout>());
SetBorder(views::CreateEmptyBorder(kUnifiedCircularButtonFocusPadding));
......@@ -157,9 +157,8 @@ void TopShortcutButtonContainer::AddSignOutButton(
sign_out_button_ = sign_out_button;
}
TopShortcutsView::TopShortcutsView(UnifiedSystemTrayController* controller)
: controller_(controller) {
DCHECK(controller_);
TopShortcutsView::TopShortcutsView(UnifiedSystemTrayController* controller) {
DCHECK(controller);
auto* layout = SetLayoutManager(std::make_unique<views::BoxLayout>(
views::BoxLayout::Orientation::kHorizontal, kUnifiedTopShortcutPadding,
......@@ -177,31 +176,41 @@ TopShortcutsView::TopShortcutsView(UnifiedSystemTrayController* controller)
bool can_lock_screen = shell->session_controller()->CanLockScreen();
if (!is_on_login_screen) {
user_avatar_button_ = new UserAvatarButton(this);
user_avatar_button_ = new UserAvatarButton(
base::BindRepeating(&UnifiedSystemTrayController::ShowUserChooserView,
base::Unretained(controller)));
user_avatar_button_->SetEnabled(
UserChooserDetailedViewController::IsUserChooserEnabled());
container_->AddUserAvatarButton(user_avatar_button_);
sign_out_button_ = new SignOutButton(this);
sign_out_button_ = new SignOutButton(
base::BindRepeating(&UnifiedSystemTrayController::HandleSignOutAction,
base::Unretained(controller)));
container_->AddSignOutButton(sign_out_button_);
}
bool reboot = shell->shutdown_controller()->reboot_on_shutdown();
power_button_ = new TopShortcutButton(
this, kUnifiedMenuPowerIcon,
base::BindRepeating(&UnifiedSystemTrayController::HandlePowerAction,
base::Unretained(controller)),
kUnifiedMenuPowerIcon,
reboot ? IDS_ASH_STATUS_TRAY_REBOOT : IDS_ASH_STATUS_TRAY_SHUTDOWN);
power_button_->SetID(VIEW_ID_POWER_BUTTON);
container_->AddChildView(power_button_);
if (can_show_settings && can_lock_screen) {
lock_button_ = new TopShortcutButton(this, kUnifiedMenuLockIcon,
IDS_ASH_STATUS_TRAY_LOCK);
lock_button_ = new TopShortcutButton(
base::BindRepeating(&UnifiedSystemTrayController::HandleLockAction,
base::Unretained(controller)),
kUnifiedMenuLockIcon, IDS_ASH_STATUS_TRAY_LOCK);
container_->AddChildView(lock_button_);
}
if (can_show_settings) {
settings_button_ = new TopShortcutButton(this, kUnifiedMenuSettingsIcon,
IDS_ASH_STATUS_TRAY_SETTINGS);
settings_button_ = new TopShortcutButton(
base::BindRepeating(&UnifiedSystemTrayController::HandleSettingsAction,
base::Unretained(controller)),
kUnifiedMenuSettingsIcon, IDS_ASH_STATUS_TRAY_SETTINGS);
container_->AddChildView(settings_button_);
local_state_pref_change_registrar_.Init(Shell::Get()->local_state());
local_state_pref_change_registrar_.Add(
......@@ -215,7 +224,9 @@ TopShortcutsView::TopShortcutsView(UnifiedSystemTrayController* controller)
// container flex occupying all remaining space.
layout->SetFlexForView(container_, 1);
collapse_button_ = new CollapseButton(this);
collapse_button_ = new CollapseButton(
base::BindRepeating(&UnifiedSystemTrayController::ToggleExpanded,
base::Unretained(controller)));
AddChildView(collapse_button_);
}
......@@ -228,22 +239,6 @@ void TopShortcutsView::SetExpandedAmount(double expanded_amount) {
collapse_button_->SetExpandedAmount(expanded_amount);
}
void TopShortcutsView::ButtonPressed(views::Button* sender,
const ui::Event& event) {
if (sender == user_avatar_button_)
controller_->ShowUserChooserView();
else if (sender == sign_out_button_)
controller_->HandleSignOutAction();
else if (sender == lock_button_)
controller_->HandleLockAction();
else if (sender == settings_button_)
controller_->HandleSettingsAction();
else if (sender == power_button_)
controller_->HandlePowerAction();
else if (sender == collapse_button_)
controller_->ToggleExpanded();
}
const char* TopShortcutsView::GetClassName() const {
return "TopShortcutsView";
}
......
......@@ -8,11 +8,14 @@
#include "ash/accessibility/accessibility_observer.h"
#include "ash/ash_export.h"
#include "components/prefs/pref_change_registrar.h"
#include "ui/views/controls/button/button.h"
#include "ui/views/view.h"
class PrefRegistrySimple;
namespace views {
class Button;
}
namespace ash {
class CollapseButton;
......@@ -46,8 +49,7 @@ class TopShortcutButtonContainer : public views::View {
};
// Top shortcuts view shown on the top of UnifiedSystemTrayView.
class ASH_EXPORT TopShortcutsView : public views::View,
public views::ButtonListener {
class ASH_EXPORT TopShortcutsView : public views::View {
public:
explicit TopShortcutsView(UnifiedSystemTrayController* controller);
......@@ -56,9 +58,6 @@ class ASH_EXPORT TopShortcutsView : public views::View,
// Change the expanded state. CollapseButton icon will rotate.
void SetExpandedAmount(double expanded_amount);
// views::ButtonListener:
void ButtonPressed(views::Button* sender, const ui::Event& event) override;
// views::View
const char* GetClassName() const override;
......@@ -68,8 +67,6 @@ class ASH_EXPORT TopShortcutsView : public views::View,
// Disables/Enables the |settings_button_| based on kSettingsIconEnabled pref.
void UpdateSettingsButtonState();
UnifiedSystemTrayController* controller_;
// Owned by views hierarchy.
views::Button* user_avatar_button_ = nullptr;
SignOutButton* sign_out_button_ = nullptr;
......
......@@ -28,10 +28,11 @@ namespace ash {
UnifiedManagedDeviceView::UnifiedManagedDeviceView(
UnifiedSystemTrayController* controller)
: Button(this),
: Button(base::BindRepeating(
&UnifiedSystemTrayController::HandleEnterpriseInfoAction,
base::Unretained(controller))),
icon_(new views::ImageView),
label_(new views::Label),
controller_(controller) {
label_(new views::Label) {
SetFocusBehavior(views::View::FocusBehavior::ACCESSIBLE_ONLY);
auto* layout = SetLayoutManager(std::make_unique<views::BoxLayout>(
......@@ -63,11 +64,6 @@ UnifiedManagedDeviceView::~UnifiedManagedDeviceView() {
Shell::Get()->session_controller()->RemoveObserver(this);
}
void UnifiedManagedDeviceView::ButtonPressed(views::Button* sender,
const ui::Event& event) {
controller_->HandleEnterpriseInfoAction();
}
void UnifiedManagedDeviceView::OnLoginStatusChanged(LoginStatus status) {
Update();
}
......
......@@ -10,7 +10,6 @@
#include "ash/system/enterprise/enterprise_domain_observer.h"
#include "ash/system/unified/unified_system_tray_controller.h"
#include "base/macros.h"
#include "ui/views/controls/button/button.h"
#include "ui/views/view.h"
namespace views {
......@@ -23,16 +22,12 @@ namespace ash {
// Row in the unified system tray bubble shown when the device is currently
// managed by an administrator (by a domain admin or FamilyLink).
class ASH_EXPORT UnifiedManagedDeviceView : public views::Button,
public views::ButtonListener,
public SessionObserver,
public EnterpriseDomainObserver {
public:
explicit UnifiedManagedDeviceView(UnifiedSystemTrayController* controller);
~UnifiedManagedDeviceView() override;
// views::ButtonListener:
void ButtonPressed(views::Button* sender, const ui::Event& event) override;
// SessionObserver:
void OnLoginStatusChanged(LoginStatus status) override;
......@@ -49,8 +44,6 @@ class ASH_EXPORT UnifiedManagedDeviceView : public views::Button,
views::ImageView* const icon_;
views::Label* const label_;
UnifiedSystemTrayController* const controller_;
DISALLOW_COPY_AND_ASSIGN(UnifiedManagedDeviceView);
};
......
......@@ -58,9 +58,7 @@ base::string16 FormatDayOfWeek(const base::Time& time) {
// A view that shows current date in short format e.g. "Mon, Mar 12". It updates
// by observing ClockObserver.
class DateView : public views::Button,
public views::ButtonListener,
public ClockObserver {
class DateView : public views::Button, public ClockObserver {
public:
explicit DateView(UnifiedSystemTrayController* controller);
~DateView() override;
......@@ -75,23 +73,21 @@ class DateView : public views::Button,
// views::Button:
gfx::Insets GetInsets() const override;
// views::ButtonListener:
void ButtonPressed(views::Button* sender, const ui::Event& event) override;
// ClockObserver:
void OnDateFormatChanged() override;
void OnSystemClockTimeUpdated() override;
void OnSystemClockCanSetTimeChanged(bool can_set_time) override;
void Refresh() override;
UnifiedSystemTrayController* const controller_;
views::Label* label_;
DISALLOW_COPY_AND_ASSIGN(DateView);
};
DateView::DateView(UnifiedSystemTrayController* controller)
: Button(this), controller_(controller) {
: Button(base::BindRepeating(
&UnifiedSystemTrayController::HandleOpenDateTimeSettingsAction,
base::Unretained(controller))) {
SetLayoutManager(std::make_unique<views::FillLayout>());
label_ = AddChildView(std::make_unique<views::Label>());
label_->SetAutoColorReadabilityEnabled(false);
......@@ -117,10 +113,6 @@ void DateView::OnThemeChanged() {
AshColorProvider::ControlsLayerType::kFocusRingColor));
}
void DateView::ButtonPressed(views::Button* sender, const ui::Event& event) {
controller_->HandleOpenDateTimeSettingsAction();
}
void DateView::Update() {
base::Time now = base::Time::Now();
label_->SetText(l10n_util::GetStringFUTF16(
......@@ -251,7 +243,7 @@ class ManagedStateView : public views::Button {
void OnThemeChanged() override;
protected:
ManagedStateView(views::ButtonListener* listener,
ManagedStateView(PressedCallback callback,
int label_id,
const gfx::VectorIcon& icon);
......@@ -275,10 +267,10 @@ void ManagedStateView::OnThemeChanged() {
AshColorProvider::ControlsLayerType::kFocusRingColor));
}
ManagedStateView::ManagedStateView(views::ButtonListener* listener,
ManagedStateView::ManagedStateView(PressedCallback callback,
int label_id,
const gfx::VectorIcon& icon)
: Button(listener), icon_(icon) {
: Button(std::move(callback)), icon_(icon) {
SetLayoutManager(std::make_unique<views::BoxLayout>(
views::BoxLayout::Orientation::kHorizontal, gfx::Insets(),
kUnifiedSystemInfoSpacing));
......@@ -299,16 +291,12 @@ ManagedStateView::ManagedStateView(views::ButtonListener* listener,
// A view that shows whether the device is enterprise managed or not. It updates
// by observing EnterpriseDomainModel.
class EnterpriseManagedView : public ManagedStateView,
public views::ButtonListener,
public EnterpriseDomainObserver,
public SessionObserver {
public:
explicit EnterpriseManagedView(UnifiedSystemTrayController* controller);
~EnterpriseManagedView() override;
// views::ButtonListener:
void ButtonPressed(views::Button* sender, const ui::Event& event) override;
// EnterpriseDomainObserver:
void OnEnterpriseDomainChanged() override;
......@@ -321,17 +309,17 @@ class EnterpriseManagedView : public ManagedStateView,
private:
void Update();
UnifiedSystemTrayController* const controller_;
DISALLOW_COPY_AND_ASSIGN(EnterpriseManagedView);
};
EnterpriseManagedView::EnterpriseManagedView(
UnifiedSystemTrayController* controller)
: ManagedStateView(this,
IDS_ASH_ENTERPRISE_DEVICE_MANAGED_SHORT,
kUnifiedMenuManagedIcon),
controller_(controller) {
: ManagedStateView(
base::BindRepeating(
&UnifiedSystemTrayController::HandleEnterpriseInfoAction,
base::Unretained(controller)),
IDS_ASH_ENTERPRISE_DEVICE_MANAGED_SHORT,
kUnifiedMenuManagedIcon) {
DCHECK(Shell::Get());
SetID(VIEW_ID_TRAY_ENTERPRISE);
Shell::Get()->system_tray_model()->enterprise_domain()->AddObserver(this);
......@@ -344,11 +332,6 @@ EnterpriseManagedView::~EnterpriseManagedView() {
Shell::Get()->session_controller()->RemoveObserver(this);
}
void EnterpriseManagedView::ButtonPressed(views::Button* sender,
const ui::Event& event) {
controller_->HandleEnterpriseInfoAction();
}
void EnterpriseManagedView::OnEnterpriseDomainChanged() {
Update();
}
......@@ -390,7 +373,7 @@ class SupervisedUserView : public ManagedStateView {
};
SupervisedUserView::SupervisedUserView()
: ManagedStateView(nullptr,
: ManagedStateView(PressedCallback(),
IDS_ASH_STATUS_TRAY_SUPERVISED_LABEL,
GetSupervisedUserIcon()) {
SetVisible(Shell::Get()->session_controller()->IsUserSupervised());
......
......@@ -43,71 +43,39 @@ using ContentLayerType = AshColorProvider::ContentLayerType;
namespace {
class CloseButton : public TopShortcutButton, public views::ButtonListener {
public:
explicit CloseButton(UserChooserDetailedViewController* controller);
// views::ButtonListener:
void ButtonPressed(views::Button* sender, const ui::Event& event) override;
private:
UserChooserDetailedViewController* const controller_;
DISALLOW_COPY_AND_ASSIGN(CloseButton);
};
CloseButton::CloseButton(UserChooserDetailedViewController* controller)
: TopShortcutButton(this, views::kIcCloseIcon, IDS_APP_ACCNAME_CLOSE),
controller_(controller) {}
void CloseButton::ButtonPressed(views::Button* sender, const ui::Event& event) {
controller_->TransitionToMainView();
}
// A button that will transition to multi profile login UI.
class AddUserButton : public views::Button, public views::ButtonListener {
class AddUserButton : public views::Button {
public:
explicit AddUserButton(UserChooserDetailedViewController* controller);
~AddUserButton() override = default;
// views::ButtonListener:
void ButtonPressed(views::Button* sender, const ui::Event& event) override;
private:
UserChooserDetailedViewController* const controller_;
DISALLOW_COPY_AND_ASSIGN(AddUserButton);
};
AddUserButton::AddUserButton(UserChooserDetailedViewController* controller)
: Button(this), controller_(controller) {
: Button(base::BindRepeating(
&UserChooserDetailedViewController::HandleAddUserAction,
base::Unretained(controller))) {
SetID(VIEW_ID_ADD_USER_BUTTON);
SetLayoutManager(std::make_unique<views::BoxLayout>(
views::BoxLayout::Orientation::kHorizontal,
gfx::Insets(kUnifiedTopShortcutSpacing), kUnifiedTopShortcutSpacing));
SetAccessibleName(
l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_SIGN_IN_ANOTHER_ACCOUNT));
SetFocusPainter(TrayPopupUtils::CreateFocusPainter());
auto* icon = new views::ImageView;
auto* icon = AddChildView(std::make_unique<views::ImageView>());
icon->SetImage(gfx::CreateVectorIcon(
kSystemMenuNewUserIcon, AshColorProvider::Get()->GetContentLayerColor(
ContentLayerType::kIconColorPrimary)));
AddChildView(icon);
auto* label = new views::Label(
l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_SIGN_IN_ANOTHER_ACCOUNT));
auto* label = AddChildView(std::make_unique<views::Label>(
l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_SIGN_IN_ANOTHER_ACCOUNT)));
label->SetEnabledColor(AshColorProvider::Get()->GetContentLayerColor(
ContentLayerType::kTextColorPrimary));
label->SetAutoColorReadabilityEnabled(false);
label->SetSubpixelRenderingEnabled(false);
AddChildView(label);
SetAccessibleName(
l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_SIGN_IN_ANOTHER_ACCOUNT));
SetFocusPainter(TrayPopupUtils::CreateFocusPainter());
}
void AddUserButton::ButtonPressed(views::Button* sender,
const ui::Event& event) {
controller_->HandleAddUserAction();
}
class Separator : public views::View {
......@@ -155,9 +123,9 @@ views::View* CreateUserAvatarView(int user_index) {
if (user_session->user_info.type == user_manager::USER_TYPE_GUEST) {
// In guest mode, the user avatar is just a disabled button pod.
auto* image_view =
new TopShortcutButton(/*listener=*/nullptr, kSystemMenuGuestIcon,
IDS_ASH_STATUS_TRAY_GUEST_LABEL);
auto* image_view = new TopShortcutButton(views::Button::PressedCallback(),
kSystemMenuGuestIcon,
IDS_ASH_STATUS_TRAY_GUEST_LABEL);
image_view->SetEnabled(false);
return image_view;
}
......@@ -195,12 +163,20 @@ base::string16 GetUserItemAccessibleString(int user_index) {
base::UTF8ToUTF16(user_session->user_info.display_email));
}
UserItemButton::UserItemButton(int user_index,
UserItemButton::UserItemButton(PressedCallback callback,
UserChooserDetailedViewController* controller,
int user_index,
ax::mojom::Role role,
bool has_close_button)
: Button(this),
user_index_(user_index),
controller_(controller),
: Button(user_index == 0
? views::Button::PressedCallback()
: base::BindRepeating(
&UserChooserDetailedViewController::HandleUserSwitch,
base::Unretained(controller),
user_index)),
// The button for the currently active user is not clickable.
role_(user_index == 0 ? ax::mojom::Role::kLabelText
: ax::mojom::Role::kButton),
capture_icon_(new views::ImageView),
name_(new views::Label),
email_(new views::Label) {
......@@ -255,8 +231,13 @@ UserItemButton::UserItemButton(int user_index,
capture_icon_->SetVisible(false);
AddChildView(capture_icon_);
if (has_close_button)
AddChildView(new CloseButton(controller_));
if (has_close_button) {
AddChildView(std::make_unique<TopShortcutButton>(
base::BindRepeating(
&UserChooserDetailedViewController::TransitionToMainView,
base::Unretained(controller)),
views::kIcCloseIcon, IDS_APP_ACCNAME_CLOSE));
}
SetTooltipText(GetUserItemAccessibleString(user_index));
SetFocusPainter(TrayPopupUtils::CreateFocusPainter());
......@@ -294,17 +275,7 @@ base::string16 UserItemButton::GetTooltipText(const gfx::Point& p) const {
}
void UserItemButton::GetAccessibleNodeData(ui::AXNodeData* node_data) {
// The button for the currently active user is not clickable.
if (user_index_ == 0)
node_data->role = ax::mojom::Role::kLabelText;
else
node_data->role = ax::mojom::Role::kButton;
}
void UserItemButton::ButtonPressed(views::Button* sender,
const ui::Event& event) {
if (user_index_ > 0)
controller_->HandleUserSwitch(user_index_);
node_data->role = role_;
}
UserChooserView::UserChooserView(
......@@ -314,16 +285,26 @@ UserChooserView::UserChooserView(
const int num_users =
Shell::Get()->session_controller()->NumberOfLoggedInUsers();
for (int i = 0; i < num_users; ++i) {
auto* button = new UserItemButton(i, controller, i == 0);
user_item_buttons_.push_back(button);
AddChildView(button);
AddChildView(new Separator(i < num_users - 1));
std::unique_ptr<UserItemButton> button;
if (i == 0) {
button = std::make_unique<UserItemButton>(
views::Button::PressedCallback(), controller, 0,
// The button for the currently active user is not clickable.
ax::mojom::Role::kLabelText, true);
} else {
button = std::make_unique<UserItemButton>(
base::BindRepeating(
&UserChooserDetailedViewController::HandleUserSwitch,
base::Unretained(controller), i),
controller, i, ax::mojom::Role::kButton, false);
}
user_item_buttons_.push_back(AddChildView(std::move(button)));
AddChildView(std::make_unique<Separator>(i < num_users - 1));
}
switch (Shell::Get()->session_controller()->GetAddUserPolicy()) {
case AddUserSessionPolicy::ALLOWED:
AddChildView(new AddUserButton(controller));
AddChildView(std::make_unique<AddUserButton>(controller));
break;
case AddUserSessionPolicy::ERROR_NOT_ALLOWED_PRIMARY_USER:
AddChildView(CreateAddUserErrorView(l10n_util::GetStringUTF16(
......
......@@ -25,10 +25,12 @@ views::View* CreateUserAvatarView(int user_index);
base::string16 GetUserItemAccessibleString(int user_index);
// A button item of a switchable user.
class UserItemButton : public views::Button, public views::ButtonListener {
class UserItemButton : public views::Button {
public:
UserItemButton(int user_index,
UserItemButton(PressedCallback callback,
UserChooserDetailedViewController* controller,
int user_index,
ax::mojom::Role role,
bool has_close_button);
~UserItemButton() override = default;
......@@ -38,12 +40,8 @@ class UserItemButton : public views::Button, public views::ButtonListener {
base::string16 GetTooltipText(const gfx::Point& p) const override;
void GetAccessibleNodeData(ui::AXNodeData* node_data) override;
// views::ButtonListener:
void ButtonPressed(views::Button* sender, const ui::Event& event) override;
private:
const int user_index_;
UserChooserDetailedViewController* const controller_;
const ax::mojom::Role role_;
views::ImageView* const capture_icon_;
views::Label* const name_;
views::Label* const email_;
......
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