Index: ash/common/system/chromeos/palette/palette_tray.cc |
diff --git a/ash/common/system/chromeos/palette/palette_tray.cc b/ash/common/system/chromeos/palette/palette_tray.cc |
deleted file mode 100644 |
index b63ad7e5937d4a3fd8214e5c99ec2b7b26941f0f..0000000000000000000000000000000000000000 |
--- a/ash/common/system/chromeos/palette/palette_tray.cc |
+++ /dev/null |
@@ -1,437 +0,0 @@ |
-// Copyright 2016 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/palette/palette_tray.h" |
- |
-#include "ash/common/material_design/material_design_controller.h" |
-#include "ash/common/session/session_state_delegate.h" |
-#include "ash/common/shelf/shelf_constants.h" |
-#include "ash/common/shelf/wm_shelf.h" |
-#include "ash/common/shelf/wm_shelf_util.h" |
-#include "ash/common/system/chromeos/palette/palette_tool_manager.h" |
-#include "ash/common/system/chromeos/palette/palette_utils.h" |
-#include "ash/common/system/tray/system_menu_button.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_bubble_wrapper.h" |
-#include "ash/common/system/tray/tray_constants.h" |
-#include "ash/common/system/tray/tray_popup_header_button.h" |
-#include "ash/common/system/tray/tray_popup_item_style.h" |
-#include "ash/common/wm_shell.h" |
-#include "ash/common/wm_window.h" |
-#include "ash/public/cpp/shell_window_ids.h" |
-#include "ash/resources/grit/ash_resources.h" |
-#include "ash/resources/vector_icons/vector_icons.h" |
-#include "ash/root_window_controller.h" |
-#include "ash/strings/grit/ash_strings.h" |
-#include "base/metrics/histogram_macros.h" |
-#include "ui/base/l10n/l10n_util.h" |
-#include "ui/base/resource/resource_bundle.h" |
-#include "ui/events/devices/input_device_manager.h" |
-#include "ui/events/devices/stylus_state.h" |
-#include "ui/gfx/color_palette.h" |
-#include "ui/gfx/paint_vector_icon.h" |
-#include "ui/gfx/vector_icons_public.h" |
-#include "ui/views/controls/image_view.h" |
-#include "ui/views/controls/label.h" |
-#include "ui/views/controls/separator.h" |
-#include "ui/views/layout/box_layout.h" |
-#include "ui/views/layout/fill_layout.h" |
- |
-namespace ash { |
- |
-namespace { |
- |
-// Padding for tray icon (dp; the button that shows the palette menu). |
-constexpr int kTrayIconMainAxisInset = 8; |
-constexpr int kTrayIconCrossAxisInset = 0; |
- |
-// Width of the palette itself (dp). |
-constexpr int kPaletteWidth = 332; |
- |
-// Padding at the top/bottom of the palette (dp). |
-constexpr int kPalettePaddingOnTop = 4; |
-constexpr int kPalettePaddingOnBottom = 2; |
- |
-// Margins between the title view and the edges around it (dp). |
-constexpr int kPaddingBetweenTitleAndLeftEdge = 12; |
-constexpr int kPaddingBetweenTitleAndSeparator = 3; |
- |
-// Color of the separator. |
-const SkColor kPaletteSeparatorColor = SkColorSetARGB(0x1E, 0x00, 0x00, 0x00); |
- |
-// Returns true if we are in a user session that can show the stylus tools. |
-bool IsInUserSession() { |
- SessionStateDelegate* session_state_delegate = |
- WmShell::Get()->GetSessionStateDelegate(); |
- return !session_state_delegate->IsUserSessionBlocked() && |
- session_state_delegate->GetSessionState() == |
- session_manager::SessionState::ACTIVE && |
- WmShell::Get()->system_tray_delegate()->GetUserLoginStatus() != |
- LoginStatus::KIOSK_APP; |
-} |
- |
-class TitleView : public views::View, public views::ButtonListener { |
- public: |
- explicit TitleView(PaletteTray* palette_tray) : palette_tray_(palette_tray) { |
- // TODO(tdanderson|jdufault): Use TriView to handle the layout of the title. |
- // See crbug.com/614453. |
- auto* box_layout = |
- new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 0); |
- SetLayoutManager(box_layout); |
- |
- auto* title_label = |
- new views::Label(l10n_util::GetStringUTF16(IDS_ASH_STYLUS_TOOLS_TITLE)); |
- title_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
- AddChildView(title_label); |
- TrayPopupItemStyle style(TrayPopupItemStyle::FontStyle::TITLE); |
- style.SetupLabel(title_label); |
- box_layout->SetFlexForView(title_label, 1); |
- if (MaterialDesignController::IsSystemTrayMenuMaterial()) { |
- help_button_ = |
- new SystemMenuButton(this, TrayPopupInkDropStyle::HOST_CENTERED, |
- kSystemMenuHelpIcon, IDS_ASH_STATUS_TRAY_HELP); |
- settings_button_ = new SystemMenuButton( |
- this, TrayPopupInkDropStyle::HOST_CENTERED, kSystemMenuSettingsIcon, |
- IDS_ASH_PALETTE_SETTINGS); |
- } else { |
- gfx::ImageSkia help_icon = |
- gfx::CreateVectorIcon(kSystemMenuHelpIcon, kMenuIconColor); |
- gfx::ImageSkia settings_icon = |
- gfx::CreateVectorIcon(kSystemMenuSettingsIcon, kMenuIconColor); |
- |
- auto* help_button = new ash::TrayPopupHeaderButton( |
- this, help_icon, IDS_ASH_STATUS_TRAY_HELP); |
- help_button->SetTooltipText( |
- l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_HELP)); |
- help_button_ = help_button; |
- |
- auto* settings_button = new ash::TrayPopupHeaderButton( |
- this, settings_icon, IDS_ASH_STATUS_TRAY_SETTINGS); |
- settings_button->SetTooltipText( |
- l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_SETTINGS)); |
- settings_button_ = settings_button; |
- } |
- |
- AddChildView(help_button_); |
- AddChildView(settings_button_); |
- } |
- |
- ~TitleView() override {} |
- |
- private: |
- // views::ButtonListener: |
- void ButtonPressed(views::Button* sender, const ui::Event& event) override { |
- if (sender == settings_button_) { |
- palette_tray_->RecordPaletteOptionsUsage( |
- PaletteTrayOptions::PALETTE_SETTINGS_BUTTON); |
- WmShell::Get()->system_tray_controller()->ShowPaletteSettings(); |
- palette_tray_->HidePalette(); |
- } else if (sender == help_button_) { |
- palette_tray_->RecordPaletteOptionsUsage( |
- PaletteTrayOptions::PALETTE_HELP_BUTTON); |
- WmShell::Get()->system_tray_controller()->ShowPaletteHelp(); |
- palette_tray_->HidePalette(); |
- } else { |
- NOTREACHED(); |
- } |
- } |
- |
- // Unowned pointers to button views so we can determine which button was |
- // clicked. |
- views::View* settings_button_; |
- views::View* help_button_; |
- PaletteTray* palette_tray_; |
- |
- DISALLOW_COPY_AND_ASSIGN(TitleView); |
-}; |
- |
-} // namespace |
- |
-PaletteTray::PaletteTray(WmShelf* wm_shelf) |
- : TrayBackgroundView(wm_shelf), |
- palette_tool_manager_(new PaletteToolManager(this)), |
- weak_factory_(this) { |
- PaletteTool::RegisterToolInstances(palette_tool_manager_.get()); |
- |
- if (MaterialDesignController::IsShelfMaterial()) { |
- SetInkDropMode(InkDropMode::ON); |
- SetContentsBackground(false); |
- } else { |
- SetContentsBackground(true); |
- } |
- |
- SetLayoutManager(new views::FillLayout()); |
- icon_ = new views::ImageView(); |
- UpdateTrayIcon(); |
- |
- tray_container()->SetMargin(kTrayIconMainAxisInset, kTrayIconCrossAxisInset); |
- tray_container()->AddChildView(icon_); |
- |
- WmShell::Get()->AddShellObserver(this); |
- WmShell::Get()->GetSessionStateDelegate()->AddSessionStateObserver(this); |
- ui::InputDeviceManager::GetInstance()->AddObserver(this); |
-} |
- |
-PaletteTray::~PaletteTray() { |
- if (bubble_) |
- bubble_->bubble_view()->reset_delegate(); |
- |
- ui::InputDeviceManager::GetInstance()->RemoveObserver(this); |
- WmShell::Get()->RemoveShellObserver(this); |
- WmShell::Get()->GetSessionStateDelegate()->RemoveSessionStateObserver(this); |
-} |
- |
-bool PaletteTray::PerformAction(const ui::Event& event) { |
- if (bubble_) { |
- if (num_actions_in_bubble_ == 0) |
- RecordPaletteOptionsUsage(PaletteTrayOptions::PALETTE_CLOSED_NO_ACTION); |
- HidePalette(); |
- return true; |
- } |
- |
- return ShowPalette(); |
-} |
- |
-bool PaletteTray::ShowPalette() { |
- if (bubble_) |
- return false; |
- |
- DCHECK(tray_container()); |
- |
- views::TrayBubbleView::InitParams init_params(GetAnchorAlignment(), |
- kPaletteWidth, kPaletteWidth); |
- init_params.can_activate = true; |
- init_params.close_on_deactivate = true; |
- |
- DCHECK(tray_container()); |
- |
- // The views::TrayBubbleView ctor will cause a shelf auto hide update check. |
- // Make sure to block auto hiding before that check happens. |
- should_block_shelf_auto_hide_ = true; |
- |
- // TODO(tdanderson): Refactor into common row layout code. |
- // TODO(tdanderson|jdufault): Add material design ripple effects to the menu |
- // rows. |
- |
- // Create and customize bubble view. |
- views::TrayBubbleView* bubble_view = |
- views::TrayBubbleView::Create(GetBubbleAnchor(), this, &init_params); |
- bubble_view->set_anchor_view_insets(GetBubbleAnchorInsets()); |
- bubble_view->set_margins( |
- gfx::Insets(kPalettePaddingOnTop, 0, kPalettePaddingOnBottom, 0)); |
- |
- // Add title. |
- auto* title_view = new TitleView(this); |
- title_view->SetBorder(views::CreateEmptyBorder( |
- gfx::Insets(0, kPaddingBetweenTitleAndLeftEdge, 0, 0))); |
- bubble_view->AddChildView(title_view); |
- |
- // Add horizontal separator. |
- views::Separator* separator = new views::Separator(); |
- separator->SetColor(kPaletteSeparatorColor); |
- separator->SetBorder(views::CreateEmptyBorder(gfx::Insets( |
- kPaddingBetweenTitleAndSeparator, 0, kMenuSeparatorVerticalPadding, 0))); |
- bubble_view->AddChildView(separator); |
- |
- // Add palette tools. |
- // TODO(tdanderson|jdufault): Use SystemMenuButton to get the material design |
- // ripples. |
- std::vector<PaletteToolView> views = palette_tool_manager_->CreateViews(); |
- for (const PaletteToolView& view : views) |
- bubble_view->AddChildView(view.view); |
- |
- // Show the bubble. |
- bubble_.reset(new ash::TrayBubbleWrapper(this, bubble_view)); |
- SetIsActive(true); |
- return true; |
-} |
- |
-bool PaletteTray::ContainsPointInScreen(const gfx::Point& point) { |
- if (icon_ && icon_->GetBoundsInScreen().Contains(point)) |
- return true; |
- |
- return bubble_ && bubble_->bubble_view()->GetBoundsInScreen().Contains(point); |
-} |
- |
-void PaletteTray::SessionStateChanged(session_manager::SessionState state) { |
- UpdateIconVisibility(); |
-} |
- |
-void PaletteTray::OnLockStateChanged(bool locked) { |
- UpdateIconVisibility(); |
- |
- // The user can eject the stylus during the lock screen transition, which will |
- // open the palette. Make sure to close it if that happens. |
- if (locked) |
- HidePalette(); |
-} |
- |
-void PaletteTray::ClickedOutsideBubble() { |
- if (num_actions_in_bubble_ == 0) |
- RecordPaletteOptionsUsage(PaletteTrayOptions::PALETTE_CLOSED_NO_ACTION); |
- HidePalette(); |
-} |
- |
-base::string16 PaletteTray::GetAccessibleNameForTray() { |
- return l10n_util::GetStringUTF16(IDS_ASH_STYLUS_TOOLS_TITLE); |
-} |
- |
-void PaletteTray::HideBubbleWithView(const views::TrayBubbleView* bubble_view) { |
- if (bubble_->bubble_view() == bubble_view) |
- HidePalette(); |
-} |
- |
-void PaletteTray::OnTouchscreenDeviceConfigurationChanged() { |
- UpdateIconVisibility(); |
-} |
- |
-void PaletteTray::OnStylusStateChanged(ui::StylusState stylus_state) { |
- PaletteDelegate* palette_delegate = WmShell::Get()->palette_delegate(); |
- |
- // Don't do anything if the palette should not be shown or if the user has |
- // disabled it all-together. |
- if (!IsInUserSession() || !palette_delegate->ShouldShowPalette()) |
- return; |
- |
- // Auto show/hide the palette if allowed by the user. |
- if (palette_delegate->ShouldAutoOpenPalette()) { |
- if (stylus_state == ui::StylusState::REMOVED && !bubble_) { |
- is_bubble_auto_opened_ = true; |
- ShowPalette(); |
- } else if (stylus_state == ui::StylusState::INSERTED && bubble_) { |
- HidePalette(); |
- } |
- } |
- |
- // Disable any active modes if the stylus has been inserted. |
- if (stylus_state == ui::StylusState::INSERTED) |
- palette_tool_manager_->DisableActiveTool(PaletteGroup::MODE); |
-} |
- |
-void PaletteTray::BubbleViewDestroyed() { |
- palette_tool_manager_->NotifyViewsDestroyed(); |
- SetIsActive(false); |
-} |
- |
-void PaletteTray::OnMouseEnteredView() {} |
- |
-void PaletteTray::OnMouseExitedView() {} |
- |
-base::string16 PaletteTray::GetAccessibleNameForBubble() { |
- return GetAccessibleNameForTray(); |
-} |
- |
-void PaletteTray::OnBeforeBubbleWidgetInit( |
- views::Widget* anchor_widget, |
- views::Widget* bubble_widget, |
- views::Widget::InitParams* params) const { |
- // Place the bubble in the same root window as |anchor_widget|. |
- WmWindow::Get(anchor_widget->GetNativeWindow()) |
- ->GetRootWindowController() |
- ->ConfigureWidgetInitParamsForContainer( |
- bubble_widget, kShellWindowId_SettingBubbleContainer, params); |
-} |
- |
-void PaletteTray::HideBubble(const views::TrayBubbleView* bubble_view) { |
- HideBubbleWithView(bubble_view); |
-} |
- |
-void PaletteTray::HidePalette() { |
- should_block_shelf_auto_hide_ = false; |
- is_bubble_auto_opened_ = false; |
- num_actions_in_bubble_ = 0; |
- bubble_.reset(); |
- |
- shelf()->UpdateAutoHideState(); |
-} |
- |
-void PaletteTray::HidePaletteImmediately() { |
- if (bubble_) |
- bubble_->bubble_widget()->SetVisibilityChangedAnimationsEnabled(false); |
- HidePalette(); |
-} |
- |
-void PaletteTray::RecordPaletteOptionsUsage(PaletteTrayOptions option) { |
- DCHECK_NE(option, PaletteTrayOptions::PALETTE_OPTIONS_COUNT); |
- |
- if (is_bubble_auto_opened_) { |
- UMA_HISTOGRAM_ENUMERATION("Ash.Shelf.Palette.Usage.AutoOpened", option, |
- PaletteTrayOptions::PALETTE_OPTIONS_COUNT); |
- } else { |
- UMA_HISTOGRAM_ENUMERATION("Ash.Shelf.Palette.Usage", option, |
- PaletteTrayOptions::PALETTE_OPTIONS_COUNT); |
- } |
-} |
- |
-void PaletteTray::RecordPaletteModeCancellation(PaletteModeCancelType type) { |
- if (type == PaletteModeCancelType::PALETTE_MODE_CANCEL_TYPE_COUNT) |
- return; |
- |
- UMA_HISTOGRAM_ENUMERATION( |
- "Ash.Shelf.Palette.ModeCancellation", type, |
- PaletteModeCancelType::PALETTE_MODE_CANCEL_TYPE_COUNT); |
-} |
- |
-bool PaletteTray::ShouldBlockShelfAutoHide() const { |
- return should_block_shelf_auto_hide_; |
-} |
- |
-void PaletteTray::OnActiveToolChanged() { |
- ++num_actions_in_bubble_; |
- UpdateTrayIcon(); |
-} |
- |
-WmWindow* PaletteTray::GetWindow() { |
- return shelf()->GetWindow(); |
-} |
- |
-void PaletteTray::SetShelfAlignment(ShelfAlignment alignment) { |
- if (alignment == shelf_alignment()) |
- return; |
- |
- TrayBackgroundView::SetShelfAlignment(alignment); |
-} |
- |
-void PaletteTray::AnchorUpdated() { |
- if (bubble_) |
- bubble_->bubble_view()->UpdateBubble(); |
-} |
- |
-void PaletteTray::Initialize() { |
- PaletteDelegate* delegate = WmShell::Get()->palette_delegate(); |
- // |delegate| can be null in tests. |
- if (!delegate) |
- return; |
- |
- // OnPaletteEnabledPrefChanged will get called with the initial pref value, |
- // which will take care of showing the palette. |
- palette_enabled_subscription_ = delegate->AddPaletteEnableListener(base::Bind( |
- &PaletteTray::OnPaletteEnabledPrefChanged, weak_factory_.GetWeakPtr())); |
-} |
- |
-void PaletteTray::UpdateTrayIcon() { |
- icon_->SetImage(CreateVectorIcon( |
- palette_tool_manager_->GetActiveTrayIcon( |
- palette_tool_manager_->GetActiveTool(ash::PaletteGroup::MODE)), |
- kTrayIconSize, kShelfIconColor)); |
-} |
- |
-void PaletteTray::OnPaletteEnabledPrefChanged(bool enabled) { |
- is_palette_enabled_ = enabled; |
- |
- if (!enabled) { |
- SetVisible(false); |
- palette_tool_manager_->DisableActiveTool(PaletteGroup::MODE); |
- } else { |
- UpdateIconVisibility(); |
- } |
-} |
- |
-void PaletteTray::UpdateIconVisibility() { |
- SetVisible(is_palette_enabled_ && palette_utils::HasStylusInput() && |
- IsInUserSession()); |
-} |
- |
-} // namespace ash |