| // Copyright 2013 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/first_run/first_run_helper_impl.h" |
| |
| #include "ash/shelf/shelf.h" |
| #include "ash/shell.h" |
| #include "ash/shell_window_ids.h" |
| #include "ash/system/tray/system_tray.h" |
| #include "base/logging.h" |
| #include "ui/app_list/views/app_list_view.h" |
| #include "ui/aura/window.h" |
| #include "ui/gfx/geometry/rect.h" |
| #include "ui/views/view.h" |
| #include "ui/views/widget/widget.h" |
| |
| namespace ash { |
| |
| namespace { |
| |
| views::Widget* CreateFirstRunWindow() { |
| views::Widget::InitParams params( |
| views::Widget::InitParams::TYPE_WINDOW_FRAMELESS); |
| params.bounds = Shell::GetScreen()->GetPrimaryDisplay().bounds(); |
| params.show_state = ui::SHOW_STATE_FULLSCREEN; |
| params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW; |
| params.parent = Shell::GetContainer(Shell::GetPrimaryRootWindow(), |
| ash::kShellWindowId_OverlayContainer); |
| views::Widget* window = new views::Widget; |
| window->Init(params); |
| return window; |
| } |
| |
| } // anonymous namespace |
| |
| FirstRunHelperImpl::FirstRunHelperImpl() |
| : widget_(CreateFirstRunWindow()) { |
| Shell::GetInstance()->overlay_filter()->Activate(this); |
| } |
| |
| FirstRunHelperImpl::~FirstRunHelperImpl() { |
| Shell::GetInstance()->overlay_filter()->Deactivate(this); |
| if (IsTrayBubbleOpened()) |
| CloseTrayBubble(); |
| widget_->Close(); |
| } |
| |
| views::Widget* FirstRunHelperImpl::GetOverlayWidget() { |
| return widget_; |
| } |
| |
| void FirstRunHelperImpl::OpenAppList() { |
| Shell::GetInstance()->ShowAppList(NULL); |
| } |
| |
| void FirstRunHelperImpl::CloseAppList() { |
| Shell::GetInstance()->DismissAppList(); |
| } |
| |
| gfx::Rect FirstRunHelperImpl::GetLauncherBounds() { |
| Shelf* shelf = Shelf::ForPrimaryDisplay(); |
| return shelf->GetVisibleItemsBoundsInScreen(); |
| } |
| |
| gfx::Rect FirstRunHelperImpl::GetAppListButtonBounds() { |
| Shelf* shelf = Shelf::ForPrimaryDisplay(); |
| views::View* app_button = shelf->GetAppListButtonView(); |
| return app_button->GetBoundsInScreen(); |
| } |
| |
| gfx::Rect FirstRunHelperImpl::GetAppListBounds() { |
| app_list::AppListView* view = Shell::GetInstance()->GetAppListView(); |
| return view->GetBoundsInScreen(); |
| } |
| |
| void FirstRunHelperImpl::Cancel() { |
| FOR_EACH_OBSERVER(Observer, observers(), OnCancelled()); |
| } |
| |
| bool FirstRunHelperImpl::IsCancelingKeyEvent(ui::KeyEvent* event) { |
| return event->key_code() == ui::VKEY_ESCAPE; |
| } |
| |
| aura::Window* FirstRunHelperImpl::GetWindow() { |
| return widget_->GetNativeWindow(); |
| } |
| |
| void FirstRunHelperImpl::OpenTrayBubble() { |
| SystemTray* tray = Shell::GetInstance()->GetPrimarySystemTray(); |
| tray->ShowPersistentDefaultView(); |
| } |
| |
| void FirstRunHelperImpl::CloseTrayBubble() { |
| SystemTray* tray = Shell::GetInstance()->GetPrimarySystemTray(); |
| DCHECK(tray->HasSystemBubble()) << "Tray bubble is closed already."; |
| tray->CloseSystemBubble(); |
| } |
| |
| bool FirstRunHelperImpl::IsTrayBubbleOpened() { |
| SystemTray* tray = Shell::GetInstance()->GetPrimarySystemTray(); |
| return tray->HasSystemBubble(); |
| } |
| |
| gfx::Rect FirstRunHelperImpl::GetTrayBubbleBounds() { |
| SystemTray* tray = Shell::GetInstance()->GetPrimarySystemTray(); |
| views::View* bubble = tray->GetSystemBubble()->bubble_view(); |
| return bubble->GetBoundsInScreen(); |
| } |
| |
| gfx::Rect FirstRunHelperImpl::GetHelpButtonBounds() { |
| SystemTray* tray = Shell::GetInstance()->GetPrimarySystemTray(); |
| views::View* help_button = tray->GetHelpButtonView(); |
| return help_button->GetBoundsInScreen(); |
| } |
| |
| } // namespace ash |