blob: cc3974a01332d422e5cecbd90fcd9ae94eddbd0f [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ash/system/night_light/night_light_toggle_button.h"
#include "ash/shell.h"
#include "ash/strings/grit/ash_strings.h"
#include "ash/system/night_light/night_light_controller.h"
#include "ash/system/tray/tray_constants.h"
#include "ash/system/tray/tray_popup_item_style.h"
#include "ui/accessibility/ax_enums.mojom.h"
#include "ui/accessibility/ax_node_data.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/gfx/paint_vector_icon.h"
#include "ui/gfx/vector_icon_types.h"
namespace ash {
namespace {
gfx::ImageSkia GetNightLightNormalStateIcon(bool night_light_enabled) {
if (night_light_enabled)
return gfx::CreateVectorIcon(kSystemMenuNightLightOnIcon, kMenuIconColor);
// Use the same icon theme used for inactive items in the tray when
// NightLight is not active.
return gfx::CreateVectorIcon(kSystemMenuNightLightOffIcon,
TrayPopupItemStyle::GetIconColor(
TrayPopupItemStyle::ColorStyle::INACTIVE));
}
gfx::ImageSkia GetNightLightDisabledStateIcon(bool night_light_enabled) {
return gfx::CreateVectorIcon(night_light_enabled
? kSystemMenuNightLightOnIcon
: kSystemMenuNightLightOffIcon,
kMenuIconColorDisabled);
}
base::string16 GetNightLightTooltipText(bool night_light_enabled) {
return l10n_util::GetStringFUTF16(
IDS_ASH_STATUS_TRAY_NIGHT_LIGHT,
l10n_util::GetStringUTF16(
night_light_enabled ? IDS_ASH_STATUS_TRAY_NIGHT_LIGHT_ON_STATE
: IDS_ASH_STATUS_TRAY_NIGHT_LIGHT_OFF_STATE));
}
} // namespace
NightLightToggleButton::NightLightToggleButton(views::ButtonListener* listener)
: SystemMenuButton(listener,
kSystemMenuNightLightOffIcon,
IDS_ASH_STATUS_TRAY_NIGHT_LIGHT) {
Update();
}
void NightLightToggleButton::Toggle() {
Shell::Get()->night_light_controller()->Toggle();
Update();
NotifyAccessibilityEvent(ax::mojom::Event::kAriaAttributeChanged, true);
}
const char* NightLightToggleButton::GetClassName() const {
return "NightLightToggleButton";
}
void NightLightToggleButton::Update() {
const bool night_light_enabled =
Shell::Get()->night_light_controller()->GetEnabled();
SetTooltipText(GetNightLightTooltipText(night_light_enabled));
SetImage(views::Button::STATE_NORMAL,
GetNightLightNormalStateIcon(night_light_enabled));
SetImage(views::Button::STATE_DISABLED,
GetNightLightDisabledStateIcon(night_light_enabled));
}
void NightLightToggleButton::GetAccessibleNodeData(ui::AXNodeData* node_data) {
const bool is_enabled = Shell::Get()->night_light_controller()->GetEnabled();
node_data->SetName(GetNightLightTooltipText(is_enabled));
node_data->role = ax::mojom::Role::kToggleButton;
node_data->SetCheckedState(is_enabled ? ax::mojom::CheckedState::kTrue
: ax::mojom::CheckedState::kFalse);
}
} // namespace ash