| Index: ash/common/system/chromeos/settings/tray_settings.cc
|
| diff --git a/ash/common/system/chromeos/settings/tray_settings.cc b/ash/common/system/chromeos/settings/tray_settings.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..9c10928fd3e7e81b68fabf7c180eb6f9db666ab6
|
| --- /dev/null
|
| +++ b/ash/common/system/chromeos/settings/tray_settings.cc
|
| @@ -0,0 +1,175 @@
|
| +// Copyright (c) 2012 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/common/system/chromeos/settings/tray_settings.h"
|
| +
|
| +#include "ash/common/material_design/material_design_controller.h"
|
| +#include "ash/common/session/session_controller.h"
|
| +#include "ash/common/system/chromeos/power/power_status.h"
|
| +#include "ash/common/system/chromeos/power/power_status_view.h"
|
| +#include "ash/common/system/tray/actionable_view.h"
|
| +#include "ash/common/system/tray/fixed_sized_image_view.h"
|
| +#include "ash/common/system/tray/system_tray_controller.h"
|
| +#include "ash/common/system/tray/system_tray_delegate.h"
|
| +#include "ash/common/system/tray/tray_constants.h"
|
| +#include "ash/common/system/tray/tray_popup_utils.h"
|
| +#include "ash/common/wm_shell.h"
|
| +#include "ash/resources/grit/ash_resources.h"
|
| +#include "ash/shell.h"
|
| +#include "ash/strings/grit/ash_strings.h"
|
| +#include "base/logging.h"
|
| +#include "base/strings/utf_string_conversions.h"
|
| +#include "third_party/skia/include/core/SkColor.h"
|
| +#include "ui/base/resource/resource_bundle.h"
|
| +#include "ui/gfx/image/image.h"
|
| +#include "ui/views/controls/image_view.h"
|
| +#include "ui/views/controls/label.h"
|
| +#include "ui/views/layout/box_layout.h"
|
| +#include "ui/views/layout/fill_layout.h"
|
| +#include "ui/views/view.h"
|
| +
|
| +namespace ash {
|
| +namespace tray {
|
| +
|
| +// TODO(tdanderson): Remove this class once material design is enabled by
|
| +// default. See crbug.com/614453.
|
| +class SettingsDefaultView : public ActionableView,
|
| + public PowerStatus::Observer {
|
| + public:
|
| + SettingsDefaultView(SystemTrayItem* owner, LoginStatus status)
|
| + : ActionableView(owner, TrayPopupInkDropStyle::FILL_BOUNDS),
|
| + login_status_(status),
|
| + label_(nullptr),
|
| + power_status_view_(nullptr) {
|
| + PowerStatus::Get()->AddObserver(this);
|
| + SetLayoutManager(new views::BoxLayout(views::BoxLayout::kHorizontal,
|
| + ash::kTrayPopupPaddingHorizontal, 0,
|
| + ash::kTrayPopupPaddingBetweenItems));
|
| +
|
| + bool power_view_right_align = false;
|
| + if (login_status_ != LoginStatus::NOT_LOGGED_IN &&
|
| + login_status_ != LoginStatus::LOCKED &&
|
| + !Shell::Get()->session_controller()->IsInSecondaryLoginScreen()) {
|
| + ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
|
| + views::ImageView* icon = TrayPopupUtils::CreateMainImageView();
|
| +
|
| + icon->SetImage(
|
| + rb.GetImageNamed(IDR_AURA_UBER_TRAY_SETTINGS).ToImageSkia());
|
| + icon->set_id(test::kSettingsTrayItemViewId);
|
| + AddChildView(icon);
|
| +
|
| + base::string16 text = rb.GetLocalizedString(IDS_ASH_STATUS_TRAY_SETTINGS);
|
| + label_ = TrayPopupUtils::CreateDefaultLabel();
|
| + label_->SetText(text);
|
| + AddChildView(label_);
|
| + SetAccessibleName(text);
|
| +
|
| + power_view_right_align = true;
|
| + }
|
| +
|
| + if (PowerStatus::Get()->IsBatteryPresent()) {
|
| + power_status_view_ = new ash::PowerStatusView(power_view_right_align);
|
| + AddChildView(power_status_view_);
|
| + OnPowerStatusChanged();
|
| + }
|
| +
|
| + if (MaterialDesignController::IsSystemTrayMenuMaterial())
|
| + SetInkDropMode(InkDropHostView::InkDropMode::ON);
|
| + }
|
| +
|
| + ~SettingsDefaultView() override { PowerStatus::Get()->RemoveObserver(this); }
|
| +
|
| + // Overridden from ash::ActionableView.
|
| + bool PerformAction(const ui::Event& event) override {
|
| + if (login_status_ == LoginStatus::NOT_LOGGED_IN ||
|
| + login_status_ == LoginStatus::LOCKED ||
|
| + Shell::Get()->session_controller()->IsInSecondaryLoginScreen()) {
|
| + return false;
|
| + }
|
| +
|
| + Shell::Get()->system_tray_controller()->ShowSettings();
|
| + CloseSystemBubble();
|
| + return true;
|
| + }
|
| +
|
| + // Overridden from views::View.
|
| + void Layout() override {
|
| + views::View::Layout();
|
| +
|
| + if (label_ && power_status_view_) {
|
| + // Let the box-layout do the layout first. Then move power_status_view_
|
| + // to right align if it is created.
|
| + gfx::Size size = power_status_view_->GetPreferredSize();
|
| + gfx::Rect bounds(size);
|
| + bounds.set_x(width() - size.width() - ash::kTrayPopupPaddingBetweenItems);
|
| + bounds.set_y((height() - size.height()) / 2);
|
| + power_status_view_->SetBoundsRect(bounds);
|
| + }
|
| + }
|
| +
|
| + // Overridden from views::View.
|
| + void ChildPreferredSizeChanged(views::View* child) override {
|
| + views::View::ChildPreferredSizeChanged(child);
|
| + Layout();
|
| + }
|
| +
|
| + // Overridden from PowerStatus::Observer.
|
| + void OnPowerStatusChanged() override {
|
| + if (!PowerStatus::Get()->IsBatteryPresent())
|
| + return;
|
| +
|
| + base::string16 accessible_name =
|
| + label_
|
| + ? label_->text() + base::ASCIIToUTF16(", ") +
|
| + PowerStatus::Get()->GetAccessibleNameString(true)
|
| + : PowerStatus::Get()->GetAccessibleNameString(true);
|
| + SetAccessibleName(accessible_name);
|
| + }
|
| +
|
| + private:
|
| + LoginStatus login_status_;
|
| + views::Label* label_;
|
| + ash::PowerStatusView* power_status_view_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(SettingsDefaultView);
|
| +};
|
| +
|
| +} // namespace tray
|
| +
|
| +TraySettings::TraySettings(SystemTray* system_tray)
|
| + : SystemTrayItem(system_tray, UMA_SETTINGS), default_view_(nullptr) {}
|
| +
|
| +TraySettings::~TraySettings() {}
|
| +
|
| +views::View* TraySettings::CreateTrayView(LoginStatus status) {
|
| + return nullptr;
|
| +}
|
| +
|
| +views::View* TraySettings::CreateDefaultView(LoginStatus status) {
|
| + if ((status == LoginStatus::NOT_LOGGED_IN || status == LoginStatus::LOCKED) &&
|
| + !PowerStatus::Get()->IsBatteryPresent())
|
| + return nullptr;
|
| + if (!Shell::Get()->system_tray_delegate()->ShouldShowSettings())
|
| + return nullptr;
|
| + CHECK(default_view_ == nullptr);
|
| + default_view_ = new tray::SettingsDefaultView(this, status);
|
| + return default_view_;
|
| +}
|
| +
|
| +views::View* TraySettings::CreateDetailedView(LoginStatus status) {
|
| + NOTIMPLEMENTED();
|
| + return nullptr;
|
| +}
|
| +
|
| +void TraySettings::DestroyTrayView() {}
|
| +
|
| +void TraySettings::DestroyDefaultView() {
|
| + default_view_ = nullptr;
|
| +}
|
| +
|
| +void TraySettings::DestroyDetailedView() {}
|
| +
|
| +void TraySettings::UpdateAfterLoginStatusChange(LoginStatus status) {}
|
| +
|
| +} // namespace ash
|
|
|