Home | History | Annotate | Download | only in date
      1 // Copyright 2014 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/system/date/date_default_view.h"
      6 
      7 #include "ash/metrics/user_metrics_recorder.h"
      8 #include "ash/session/session_state_delegate.h"
      9 #include "ash/shell.h"
     10 #include "ash/system/date/date_view.h"
     11 #include "ash/system/tray/special_popup_row.h"
     12 #include "ash/system/tray/system_tray_delegate.h"
     13 #include "ash/system/tray/tray_constants.h"
     14 #include "ash/system/tray/tray_popup_header_button.h"
     15 #include "grit/ash_resources.h"
     16 #include "grit/ash_strings.h"
     17 #include "ui/base/l10n/l10n_util.h"
     18 #include "ui/views/border.h"
     19 #include "ui/views/controls/button/button.h"
     20 #include "ui/views/layout/fill_layout.h"
     21 #include "ui/views/view.h"
     22 
     23 namespace {
     24 
     25 const int kPaddingVertical = 19;
     26 
     27 }  // namespace
     28 
     29 namespace ash {
     30 
     31 DateDefaultView::DateDefaultView(ash::user::LoginStatus login)
     32     : help_(NULL),
     33       shutdown_(NULL),
     34       lock_(NULL),
     35       date_view_(NULL) {
     36   SetLayoutManager(new views::FillLayout);
     37 
     38   date_view_ = new tray::DateView();
     39   date_view_->SetBorder(views::Border::CreateEmptyBorder(
     40       kPaddingVertical, ash::kTrayPopupPaddingHorizontal, 0, 0));
     41   SpecialPopupRow* view = new SpecialPopupRow();
     42   view->SetContent(date_view_);
     43   AddChildView(view);
     44 
     45   bool userAddingRunning = ash::Shell::GetInstance()
     46                                ->session_state_delegate()
     47                                ->IsInSecondaryLoginScreen();
     48 
     49   if (login == user::LOGGED_IN_LOCKED ||
     50       login == user::LOGGED_IN_NONE || userAddingRunning)
     51     return;
     52 
     53   date_view_->SetAction(TrayDate::SHOW_DATE_SETTINGS);
     54 
     55   help_ = new TrayPopupHeaderButton(this,
     56                                     IDR_AURA_UBER_TRAY_HELP,
     57                                     IDR_AURA_UBER_TRAY_HELP,
     58                                     IDR_AURA_UBER_TRAY_HELP_HOVER,
     59                                     IDR_AURA_UBER_TRAY_HELP_HOVER,
     60                                     IDS_ASH_STATUS_TRAY_HELP);
     61   help_->SetTooltipText(l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_HELP));
     62   view->AddButton(help_);
     63 
     64 #if !defined(OS_WIN)
     65   if (login != ash::user::LOGGED_IN_LOCKED &&
     66       login != ash::user::LOGGED_IN_RETAIL_MODE) {
     67     shutdown_ = new TrayPopupHeaderButton(this,
     68                                           IDR_AURA_UBER_TRAY_SHUTDOWN,
     69                                           IDR_AURA_UBER_TRAY_SHUTDOWN,
     70                                           IDR_AURA_UBER_TRAY_SHUTDOWN_HOVER,
     71                                           IDR_AURA_UBER_TRAY_SHUTDOWN_HOVER,
     72                                           IDS_ASH_STATUS_TRAY_SHUTDOWN);
     73     shutdown_->SetTooltipText(
     74         l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_SHUTDOWN));
     75     view->AddButton(shutdown_);
     76   }
     77 
     78   if (ash::Shell::GetInstance()->session_state_delegate()->CanLockScreen()) {
     79     lock_ = new TrayPopupHeaderButton(this,
     80                                       IDR_AURA_UBER_TRAY_LOCKSCREEN,
     81                                       IDR_AURA_UBER_TRAY_LOCKSCREEN,
     82                                       IDR_AURA_UBER_TRAY_LOCKSCREEN_HOVER,
     83                                       IDR_AURA_UBER_TRAY_LOCKSCREEN_HOVER,
     84                                       IDS_ASH_STATUS_TRAY_LOCK);
     85     lock_->SetTooltipText(l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_LOCK));
     86     view->AddButton(lock_);
     87   }
     88 #endif  // !defined(OS_WIN)
     89 }
     90 
     91 DateDefaultView::~DateDefaultView() {
     92 }
     93 
     94 views::View* DateDefaultView::GetHelpButtonView() {
     95   return help_;
     96 }
     97 
     98 tray::DateView* DateDefaultView::GetDateView() {
     99   return date_view_;
    100 }
    101 
    102 const tray::DateView* DateDefaultView::GetDateView() const {
    103   return date_view_;
    104 }
    105 
    106 void DateDefaultView::ButtonPressed(views::Button* sender,
    107                                     const ui::Event& event) {
    108   ash::Shell* shell = ash::Shell::GetInstance();
    109   ash::SystemTrayDelegate* tray_delegate = shell->system_tray_delegate();
    110   if (sender == help_) {
    111     shell->metrics()->RecordUserMetricsAction(ash::UMA_TRAY_HELP);
    112     tray_delegate->ShowHelp();
    113   } else if (sender == shutdown_) {
    114     shell->metrics()->RecordUserMetricsAction(ash::UMA_TRAY_SHUT_DOWN);
    115     tray_delegate->ShutDown();
    116   } else if (sender == lock_) {
    117     shell->metrics()->RecordUserMetricsAction(ash::UMA_TRAY_LOCK_SCREEN);
    118     tray_delegate->RequestLockScreen();
    119   } else {
    120     NOTREACHED();
    121   }
    122 }
    123 
    124 }  // namespace ash
    125