1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "ash/first_run/first_run_helper_impl.h" 6 7#include "ash/shelf/shelf.h" 8#include "ash/shell.h" 9#include "ash/shell_window_ids.h" 10#include "ash/system/tray/system_tray.h" 11#include "base/logging.h" 12#include "ui/app_list/views/app_list_view.h" 13#include "ui/aura/window.h" 14#include "ui/gfx/rect.h" 15#include "ui/views/view.h" 16#include "ui/views/widget/widget.h" 17 18namespace ash { 19 20namespace { 21 22views::Widget* CreateFirstRunWindow() { 23 views::Widget::InitParams params( 24 views::Widget::InitParams::TYPE_WINDOW_FRAMELESS); 25 params.bounds = Shell::GetScreen()->GetPrimaryDisplay().bounds(); 26 params.show_state = ui::SHOW_STATE_FULLSCREEN; 27 params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW; 28 params.parent = Shell::GetContainer(Shell::GetPrimaryRootWindow(), 29 ash::kShellWindowId_OverlayContainer); 30 views::Widget* window = new views::Widget; 31 window->Init(params); 32 return window; 33} 34 35} // anonymous namespace 36 37FirstRunHelperImpl::FirstRunHelperImpl() 38 : widget_(CreateFirstRunWindow()) { 39 Shell::GetInstance()->overlay_filter()->Activate(this); 40} 41 42FirstRunHelperImpl::~FirstRunHelperImpl() { 43 Shell::GetInstance()->overlay_filter()->Deactivate(this); 44 if (IsTrayBubbleOpened()) 45 CloseTrayBubble(); 46 widget_->Close(); 47} 48 49views::Widget* FirstRunHelperImpl::GetOverlayWidget() { 50 return widget_; 51} 52 53void FirstRunHelperImpl::OpenAppList() { 54 Shell::GetInstance()->ShowAppList(NULL); 55} 56 57void FirstRunHelperImpl::CloseAppList() { 58 Shell::GetInstance()->DismissAppList(); 59} 60 61gfx::Rect FirstRunHelperImpl::GetLauncherBounds() { 62 Shelf* shelf = Shelf::ForPrimaryDisplay(); 63 return shelf->GetVisibleItemsBoundsInScreen(); 64} 65 66gfx::Rect FirstRunHelperImpl::GetAppListButtonBounds() { 67 Shelf* shelf = Shelf::ForPrimaryDisplay(); 68 views::View* app_button = shelf->GetAppListButtonView(); 69 return app_button->GetBoundsInScreen(); 70} 71 72gfx::Rect FirstRunHelperImpl::GetAppListBounds() { 73 app_list::AppListView* view = Shell::GetInstance()->GetAppListView(); 74 return view->GetBoundsInScreen(); 75} 76 77void FirstRunHelperImpl::Cancel() { 78 FOR_EACH_OBSERVER(Observer, observers(), OnCancelled()); 79} 80 81bool FirstRunHelperImpl::IsCancelingKeyEvent(ui::KeyEvent* event) { 82 return event->key_code() == ui::VKEY_ESCAPE; 83} 84 85aura::Window* FirstRunHelperImpl::GetWindow() { 86 return widget_->GetNativeWindow(); 87} 88 89void FirstRunHelperImpl::OpenTrayBubble() { 90 SystemTray* tray = Shell::GetInstance()->GetPrimarySystemTray(); 91 tray->ShowPersistentDefaultView(); 92} 93 94void FirstRunHelperImpl::CloseTrayBubble() { 95 SystemTray* tray = Shell::GetInstance()->GetPrimarySystemTray(); 96 DCHECK(tray->HasSystemBubble()) << "Tray bubble is closed already."; 97 tray->CloseSystemBubble(); 98} 99 100bool FirstRunHelperImpl::IsTrayBubbleOpened() { 101 SystemTray* tray = Shell::GetInstance()->GetPrimarySystemTray(); 102 return tray->HasSystemBubble(); 103} 104 105gfx::Rect FirstRunHelperImpl::GetTrayBubbleBounds() { 106 SystemTray* tray = Shell::GetInstance()->GetPrimarySystemTray(); 107 views::View* bubble = tray->GetSystemBubble()->bubble_view(); 108 return bubble->GetBoundsInScreen(); 109} 110 111gfx::Rect FirstRunHelperImpl::GetHelpButtonBounds() { 112 SystemTray* tray = Shell::GetInstance()->GetPrimarySystemTray(); 113 views::View* help_button = tray->GetHelpButtonView(); 114 return help_button->GetBoundsInScreen(); 115} 116 117} // namespace ash 118