Home | History | Annotate | Download | only in first_run
      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/launcher/launcher.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 
     18 namespace ash {
     19 
     20 namespace {
     21 
     22 views::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 =
     29       Shell::GetContainer(Shell::GetPrimaryRootWindow(),
     30                           ash::internal::kShellWindowId_OverlayContainer);
     31   views::Widget* window = new views::Widget;
     32   window->Init(params);
     33   return window;
     34 }
     35 
     36 }  // anonymous namespace
     37 
     38 FirstRunHelperImpl::FirstRunHelperImpl()
     39     : widget_(CreateFirstRunWindow()) {
     40   Shell::GetInstance()->overlay_filter()->Activate(this);
     41 }
     42 
     43 FirstRunHelperImpl::~FirstRunHelperImpl() {
     44   Shell::GetInstance()->overlay_filter()->Deactivate();
     45   if (IsTrayBubbleOpened())
     46     CloseTrayBubble();
     47   widget_->Close();
     48 }
     49 
     50 views::Widget* FirstRunHelperImpl::GetOverlayWidget() {
     51   return widget_;
     52 }
     53 
     54 void FirstRunHelperImpl::OpenAppList() {
     55   if (Shell::GetInstance()->GetAppListTargetVisibility())
     56     return;
     57   Shell::GetInstance()->ToggleAppList(NULL);
     58 }
     59 
     60 void FirstRunHelperImpl::CloseAppList() {
     61   if (!Shell::GetInstance()->GetAppListTargetVisibility())
     62     return;
     63   Shell::GetInstance()->ToggleAppList(NULL);
     64 }
     65 
     66 gfx::Rect FirstRunHelperImpl::GetLauncherBounds() {
     67   ash::Launcher* launcher = ash::Launcher::ForPrimaryDisplay();
     68   return launcher->GetVisibleItemsBoundsInScreen();
     69 }
     70 
     71 gfx::Rect FirstRunHelperImpl::GetAppListButtonBounds() {
     72   ash::Launcher* launcher = ash::Launcher::ForPrimaryDisplay();
     73   views::View* app_button = launcher->GetAppListButtonView();
     74   return app_button->GetBoundsInScreen();
     75 }
     76 
     77 gfx::Rect FirstRunHelperImpl::GetAppListBounds() {
     78   app_list::AppListView* view = Shell::GetInstance()->GetAppListView();
     79   return view->GetBoundsInScreen();
     80 }
     81 
     82 void FirstRunHelperImpl::Cancel() {
     83   FOR_EACH_OBSERVER(Observer, observers(), OnCancelled());
     84 }
     85 
     86 bool FirstRunHelperImpl::IsCancelingKeyEvent(ui::KeyEvent* event) {
     87   return event->key_code() == ui::VKEY_ESCAPE;
     88 }
     89 
     90 aura::Window* FirstRunHelperImpl::GetWindow() {
     91   return widget_->GetNativeWindow();
     92 }
     93 
     94 void FirstRunHelperImpl::OpenTrayBubble() {
     95   SystemTray* tray = Shell::GetInstance()->GetPrimarySystemTray();
     96   tray->ShowPersistentDefaultView();
     97 }
     98 
     99 void FirstRunHelperImpl::CloseTrayBubble() {
    100   SystemTray* tray = Shell::GetInstance()->GetPrimarySystemTray();
    101   DCHECK(tray->HasSystemBubble()) << "Tray bubble is closed already.";
    102   tray->CloseSystemBubble();
    103 }
    104 
    105 bool FirstRunHelperImpl::IsTrayBubbleOpened() {
    106   SystemTray* tray = Shell::GetInstance()->GetPrimarySystemTray();
    107   return tray->HasSystemBubble();
    108 }
    109 
    110 gfx::Rect FirstRunHelperImpl::GetTrayBubbleBounds() {
    111   SystemTray* tray = Shell::GetInstance()->GetPrimarySystemTray();
    112   views::View* bubble = tray->GetSystemBubble()->bubble_view();
    113   return bubble->GetBoundsInScreen();
    114 }
    115 
    116 gfx::Rect FirstRunHelperImpl::GetHelpButtonBounds() {
    117   SystemTray* tray = Shell::GetInstance()->GetPrimarySystemTray();
    118   views::View* help_button = tray->GetHelpButtonView();
    119   return help_button->GetBoundsInScreen();
    120 }
    121 
    122 }  // namespace ash
    123 
    124