diff options
author | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-03 15:19:56 +0000 |
---|---|---|
committer | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-03 15:19:56 +0000 |
commit | eac76c6fe105026cb080334f2de97a6ba27f09fe (patch) | |
tree | 4f55db45ecef7a34e0c14b7c6ab9c390dc66430e /ash/system | |
parent | 1b5bcd397cf7e5bfb947be72f06138a2ee4be699 (diff) | |
download | chromium_src-eac76c6fe105026cb080334f2de97a6ba27f09fe.zip chromium_src-eac76c6fe105026cb080334f2de97a6ba27f09fe.tar.gz chromium_src-eac76c6fe105026cb080334f2de97a6ba27f09fe.tar.bz2 |
ash uber tray: Allow customizing each item depending on whether the user is logged in or not.
If a user is not logged in (e.g. in the login screen, or during an incognito
session), some of the items need to behave differently. So provide this
information to each of the items so that such customization is possible. Also,
make sure all the items get a chance to update themselves when user logs in.
BUG=110130
TEST=tested on device, logged in as normal user, and incognito.
Review URL: https://chromiumcodereview.appspot.com/9580024
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@124863 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ash/system')
-rw-r--r-- | ash/system/audio/tray_volume.cc | 6 | ||||
-rw-r--r-- | ash/system/audio/tray_volume.h | 6 | ||||
-rw-r--r-- | ash/system/brightness/tray_brightness.cc | 6 | ||||
-rw-r--r-- | ash/system/brightness/tray_brightness.h | 6 | ||||
-rw-r--r-- | ash/system/power/tray_power_date.cc | 6 | ||||
-rw-r--r-- | ash/system/power/tray_power_date.h | 6 | ||||
-rw-r--r-- | ash/system/settings/tray_settings.cc | 9 | ||||
-rw-r--r-- | ash/system/settings/tray_settings.h | 6 | ||||
-rw-r--r-- | ash/system/tray/system_tray.cc | 36 | ||||
-rw-r--r-- | ash/system/tray/system_tray.h | 4 | ||||
-rw-r--r-- | ash/system/tray/system_tray_delegate.h | 3 | ||||
-rw-r--r-- | ash/system/tray/system_tray_item.h | 7 | ||||
-rw-r--r-- | ash/system/user/login_status.h | 21 | ||||
-rw-r--r-- | ash/system/user/tray_user.cc (renamed from ash/system/tray_user.cc) | 78 | ||||
-rw-r--r-- | ash/system/user/tray_user.h (renamed from ash/system/tray_user.h) | 12 |
15 files changed, 145 insertions, 67 deletions
diff --git a/ash/system/audio/tray_volume.cc b/ash/system/audio/tray_volume.cc index 0bfa5bc..bbf37f2 100644 --- a/ash/system/audio/tray_volume.cc +++ b/ash/system/audio/tray_volume.cc @@ -148,16 +148,16 @@ TrayVolume::TrayVolume() { TrayVolume::~TrayVolume() { } -views::View* TrayVolume::CreateTrayView() { +views::View* TrayVolume::CreateTrayView(user::LoginStatus status) { return NULL; } -views::View* TrayVolume::CreateDefaultView() { +views::View* TrayVolume::CreateDefaultView(user::LoginStatus status) { volume_view_.reset(new tray::VolumeView); return volume_view_.get(); } -views::View* TrayVolume::CreateDetailedView() { +views::View* TrayVolume::CreateDetailedView(user::LoginStatus status) { volume_view_.reset(new tray::VolumeView); return volume_view_.get(); } diff --git a/ash/system/audio/tray_volume.h b/ash/system/audio/tray_volume.h index 45b91ec..48168ec 100644 --- a/ash/system/audio/tray_volume.h +++ b/ash/system/audio/tray_volume.h @@ -25,9 +25,9 @@ class TrayVolume : public SystemTrayItem, private: // Overridden from SystemTrayItem. - virtual views::View* CreateTrayView() OVERRIDE; - virtual views::View* CreateDefaultView() OVERRIDE; - virtual views::View* CreateDetailedView() OVERRIDE; + virtual views::View* CreateTrayView(user::LoginStatus status) OVERRIDE; + virtual views::View* CreateDefaultView(user::LoginStatus status) OVERRIDE; + virtual views::View* CreateDetailedView(user::LoginStatus status) OVERRIDE; virtual void DestroyTrayView() OVERRIDE; virtual void DestroyDefaultView() OVERRIDE; virtual void DestroyDetailedView() OVERRIDE; diff --git a/ash/system/brightness/tray_brightness.cc b/ash/system/brightness/tray_brightness.cc index 035d27a..698863c 100644 --- a/ash/system/brightness/tray_brightness.cc +++ b/ash/system/brightness/tray_brightness.cc @@ -85,16 +85,16 @@ TrayBrightness::TrayBrightness() {} TrayBrightness::~TrayBrightness() {} -views::View* TrayBrightness::CreateTrayView() { +views::View* TrayBrightness::CreateTrayView(user::LoginStatus status) { return NULL; } -views::View* TrayBrightness::CreateDefaultView() { +views::View* TrayBrightness::CreateDefaultView(user::LoginStatus status) { brightness_view_.reset(new tray::BrightnessView); return brightness_view_.get(); } -views::View* TrayBrightness::CreateDetailedView() { +views::View* TrayBrightness::CreateDetailedView(user::LoginStatus status) { brightness_view_.reset(new tray::BrightnessView); return brightness_view_.get(); } diff --git a/ash/system/brightness/tray_brightness.h b/ash/system/brightness/tray_brightness.h index 420be90..ed0f205 100644 --- a/ash/system/brightness/tray_brightness.h +++ b/ash/system/brightness/tray_brightness.h @@ -25,9 +25,9 @@ class TrayBrightness : public SystemTrayItem, private: // Overridden from SystemTrayItem. - virtual views::View* CreateTrayView() OVERRIDE; - virtual views::View* CreateDefaultView() OVERRIDE; - virtual views::View* CreateDetailedView() OVERRIDE; + virtual views::View* CreateTrayView(user::LoginStatus status) OVERRIDE; + virtual views::View* CreateDefaultView(user::LoginStatus status) OVERRIDE; + virtual views::View* CreateDetailedView(user::LoginStatus status) OVERRIDE; virtual void DestroyTrayView() OVERRIDE; virtual void DestroyDefaultView() OVERRIDE; virtual void DestroyDetailedView() OVERRIDE; diff --git a/ash/system/power/tray_power_date.cc b/ash/system/power/tray_power_date.cc index 15a0a22..ec2e0b9 100644 --- a/ash/system/power/tray_power_date.cc +++ b/ash/system/power/tray_power_date.cc @@ -234,7 +234,7 @@ TrayPowerDate::TrayPowerDate() TrayPowerDate::~TrayPowerDate() { } -views::View* TrayPowerDate::CreateTrayView() { +views::View* TrayPowerDate::CreateTrayView(user::LoginStatus status) { date_tray_.reset(new tray::DateView(base::k24HourClock, tray::DateView::TIME)); date_tray_->SetFont(date_tray_->font().DeriveFont(-1, gfx::Font::BOLD)); @@ -252,7 +252,7 @@ views::View* TrayPowerDate::CreateTrayView() { return container; } -views::View* TrayPowerDate::CreateDefaultView() { +views::View* TrayPowerDate::CreateDefaultView(user::LoginStatus status) { date_.reset(new tray::DateView(base::k24HourClock, tray::DateView::DATE)); power_.reset(new tray::PowerPopupView()); @@ -269,7 +269,7 @@ views::View* TrayPowerDate::CreateDefaultView() { return container; } -views::View* TrayPowerDate::CreateDetailedView() { +views::View* TrayPowerDate::CreateDetailedView(user::LoginStatus status) { return NULL; } diff --git a/ash/system/power/tray_power_date.h b/ash/system/power/tray_power_date.h index 5427149..5ca8606 100644 --- a/ash/system/power/tray_power_date.h +++ b/ash/system/power/tray_power_date.h @@ -26,9 +26,9 @@ class TrayPowerDate : public SystemTrayItem, private: // Overridden from SystemTrayItem. - virtual views::View* CreateTrayView() OVERRIDE; - virtual views::View* CreateDefaultView() OVERRIDE; - virtual views::View* CreateDetailedView() OVERRIDE; + virtual views::View* CreateTrayView(user::LoginStatus status) OVERRIDE; + virtual views::View* CreateDefaultView(user::LoginStatus status) OVERRIDE; + virtual views::View* CreateDetailedView(user::LoginStatus status) OVERRIDE; virtual void DestroyTrayView() OVERRIDE; virtual void DestroyDefaultView() OVERRIDE; virtual void DestroyDetailedView() OVERRIDE; diff --git a/ash/system/settings/tray_settings.cc b/ash/system/settings/tray_settings.cc index 4a55c8b..218ab7a 100644 --- a/ash/system/settings/tray_settings.cc +++ b/ash/system/settings/tray_settings.cc @@ -73,11 +73,14 @@ TraySettings::TraySettings() {} TraySettings::~TraySettings() {} -views::View* TraySettings::CreateTrayView() { +views::View* TraySettings::CreateTrayView(user::LoginStatus status) { return NULL; } -views::View* TraySettings::CreateDefaultView() { +views::View* TraySettings::CreateDefaultView(user::LoginStatus status) { + if (status == user::LOGGED_IN_NONE) + return NULL; + views::View* container = new views::View; views::BoxLayout* layout = new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 5); @@ -89,7 +92,7 @@ views::View* TraySettings::CreateDefaultView() { return container; } -views::View* TraySettings::CreateDetailedView() { +views::View* TraySettings::CreateDetailedView(user::LoginStatus status) { NOTIMPLEMENTED(); return NULL; } diff --git a/ash/system/settings/tray_settings.h b/ash/system/settings/tray_settings.h index 008a65c..1aa02b5 100644 --- a/ash/system/settings/tray_settings.h +++ b/ash/system/settings/tray_settings.h @@ -18,9 +18,9 @@ class TraySettings : public SystemTrayItem { private: // Overridden from SystemTrayItem - virtual views::View* CreateTrayView() OVERRIDE; - virtual views::View* CreateDefaultView() OVERRIDE; - virtual views::View* CreateDetailedView() OVERRIDE; + virtual views::View* CreateTrayView(user::LoginStatus status) OVERRIDE; + virtual views::View* CreateDefaultView(user::LoginStatus status) OVERRIDE; + virtual views::View* CreateDetailedView(user::LoginStatus status) OVERRIDE; virtual void DestroyTrayView() OVERRIDE; virtual void DestroyDefaultView() OVERRIDE; virtual void DestroyDetailedView() OVERRIDE; diff --git a/ash/system/tray/system_tray.cc b/ash/system/tray/system_tray.cc index 341dbc6..763efc0 100644 --- a/ash/system/tray/system_tray.cc +++ b/ash/system/tray/system_tray.cc @@ -4,8 +4,11 @@ #include "ash/system/tray/system_tray.h" +#include "ash/shell.h" #include "ash/shell/panel_window.h" +#include "ash/system/tray/system_tray_delegate.h" #include "ash/system/tray/system_tray_item.h" +#include "ash/system/user/login_status.h" #include "ash/wm/shadow_types.h" #include "base/logging.h" #include "base/utf_string_conversions.h" @@ -50,11 +53,16 @@ class SystemTrayBubble : public views::BubbleDelegateView { SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 1)); + ash::SystemTrayDelegate* delegate = + ash::Shell::GetInstance()->tray_delegate(); + ash::user::LoginStatus login_status = delegate->GetUserLoginStatus(); for (std::vector<ash::SystemTrayItem*>::iterator it = items_.begin(); it != items_.end(); ++it) { - views::View* view = detailed_ ? (*it)->CreateDetailedView() : - (*it)->CreateDefaultView(); + views::View* view = detailed_ ? (*it)->CreateDetailedView(login_status) : + (*it)->CreateDefaultView(login_status); + if (!view) + continue; if (it != items_.begin()) view->set_border(views::Border::CreateSolidSidedBorder( 1, 0, 0, 0, SkColorSetARGB(25, 0, 0, 0))); @@ -95,7 +103,8 @@ SystemTray::~SystemTray() { void SystemTray::AddTrayItem(SystemTrayItem* item) { items_.push_back(item); - views::View* tray_item = item->CreateTrayView(); + SystemTrayDelegate* delegate = Shell::GetInstance()->tray_delegate(); + views::View* tray_item = item->CreateTrayView(delegate->GetUserLoginStatus()); if (tray_item) { AddChildViewAt(tray_item, 0); PreferredSizeChanged(); @@ -116,6 +125,27 @@ void SystemTray::ShowDetailedView(SystemTrayItem* item) { ShowItems(items, true); } +void SystemTray::UpdateAfterLoginStatusChange(user::LoginStatus login_status) { + if (popup_) + popup_->CloseNow(); + + for (std::vector<SystemTrayItem*>::iterator it = items_.begin(); + it != items_.end(); + ++it) { + (*it)->DestroyTrayView(); + } + RemoveAllChildViews(true); + + for (std::vector<SystemTrayItem*>::iterator it = items_.begin(); + it != items_.end(); + ++it) { + views::View* view = (*it)->CreateTrayView(login_status); + if (view) + AddChildViewAt(view, 0); + } + PreferredSizeChanged(); +} + void SystemTray::ShowItems(std::vector<SystemTrayItem*>& items, bool detailed) { CHECK(!popup_); SystemTrayBubble* bubble = new SystemTrayBubble(this, items, detailed); diff --git a/ash/system/tray/system_tray.h b/ash/system/tray/system_tray.h index 13de3f6..0fcd5e6 100644 --- a/ash/system/tray/system_tray.h +++ b/ash/system/tray/system_tray.h @@ -7,6 +7,7 @@ #pragma once #include "ash/ash_export.h" +#include "ash/system/user/login_status.h" #include "base/basictypes.h" #include "ui/views/view.h" #include "ui/views/widget/widget.h" @@ -32,6 +33,9 @@ class ASH_EXPORT SystemTray : public views::View, // Shows details of a particular item. void ShowDetailedView(SystemTrayItem* item); + // Updates the items when the login status of the system changes. + void UpdateAfterLoginStatusChange(user::LoginStatus login_status); + const std::vector<SystemTrayItem*>& items() const { return items_; } private: diff --git a/ash/system/tray/system_tray_delegate.h b/ash/system/tray/system_tray_delegate.h index 0c00325..88e49b4 100644 --- a/ash/system/tray/system_tray_delegate.h +++ b/ash/system/tray/system_tray_delegate.h @@ -6,6 +6,8 @@ #define ASH_SYSTEM_TRAY_SYSTEM_TRAY_DELEGATE_H_ #pragma once +#include "ash/system/user/login_status.h" + class SkBitmap; namespace ash { @@ -18,6 +20,7 @@ class SystemTrayDelegate { virtual const std::string GetUserDisplayName() = 0; virtual const std::string GetUserEmail() = 0; virtual const SkBitmap& GetUserImage() = 0; + virtual user::LoginStatus GetUserLoginStatus() = 0; // Shows settings. virtual void ShowSettings() = 0; diff --git a/ash/system/tray/system_tray_item.h b/ash/system/tray/system_tray_item.h index ab0d7e7..c7d4ba6 100644 --- a/ash/system/tray/system_tray_item.h +++ b/ash/system/tray/system_tray_item.h @@ -7,6 +7,7 @@ #pragma once #include "ash/ash_export.h" +#include "ash/system/user/login_status.h" #include "base/basictypes.h" #include "base/memory/scoped_ptr.h" @@ -23,15 +24,15 @@ class ASH_EXPORT SystemTrayItem { // Returns a view to be displayed in the system tray. If this returns NULL, // then this item is not displayed in the tray. - virtual views::View* CreateTrayView() = 0; + virtual views::View* CreateTrayView(user::LoginStatus status) = 0; // Returns a view for the item to be displayed in the list. This view can be // displayed with a number of other tray items, so this should not be too // big. - virtual views::View* CreateDefaultView() = 0; + virtual views::View* CreateDefaultView(user::LoginStatus status) = 0; // Returns a detailed view for the item. This view is displayed standalone. - virtual views::View* CreateDetailedView() = 0; + virtual views::View* CreateDetailedView(user::LoginStatus status) = 0; // These functions are called when the corresponding view item is about to be // removed. An item should do appropriate cleanup in these functions. diff --git a/ash/system/user/login_status.h b/ash/system/user/login_status.h new file mode 100644 index 0000000..df3e39d --- /dev/null +++ b/ash/system/user/login_status.h @@ -0,0 +1,21 @@ +// Copyright (c) 2012 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. + +#ifndef ASH_SYSTEM_USER_LOGIN_STATUS_H_ +#define ASH_SYSTEM_USER_LOGIN_STATUS_H_ + +namespace ash { +namespace user { + +enum LoginStatus { + LOGGED_IN_USER, // A normal user is logged in. + LOGGED_IN_OWNER, // The owner of the device is logged in. + LOGGED_IN_GUEST, // A guest is logged in (i.e. incognito) + LOGGED_IN_NONE, // Not logged in. +}; + +} // namespace user +} // namespace ash + +#endif // ASH_SYSTEM_USER_LOGIN_STATUS_H_ diff --git a/ash/system/tray_user.cc b/ash/system/user/tray_user.cc index 1cdfde5..912f92f 100644 --- a/ash/system/tray_user.cc +++ b/ash/system/user/tray_user.cc @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ash/system/tray_user.h" +#include "ash/system/user/tray_user.h" #include "ash/shell.h" #include "ash/system/tray/system_tray_delegate.h" @@ -65,25 +65,34 @@ class TrayButton : public views::TextButton { class UserView : public views::View, public views::ButtonListener { public: - UserView() { + explicit UserView(ash::user::LoginStatus status) + : username_(NULL), + email_(NULL), + shutdown_(NULL), + signout_(NULL), + lock_(NULL) { + CHECK(status != ash::user::LOGGED_IN_NONE); SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 3)); - views::View* user = new views::View; - user->SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, - 14, 5, 0)); - ash::SystemTrayDelegate* tray = ash::Shell::GetInstance()->tray_delegate(); - username_ = new views::Label(ASCIIToUTF16(tray->GetUserDisplayName())); - username_->SetFont(username_->font().DeriveFont(2)); - username_->SetHorizontalAlignment(views::Label::ALIGN_LEFT); - user->AddChildView(username_); - - email_ = new views::Label(ASCIIToUTF16(tray->GetUserEmail())); - email_->SetHorizontalAlignment(views::Label::ALIGN_LEFT); - email_->SetEnabled(false); - user->AddChildView(email_); - - AddChildView(user); + if (status != ash::user::LOGGED_IN_GUEST) { + views::View* user = new views::View; + user->SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, + 14, 5, 0)); + ash::SystemTrayDelegate* tray = + ash::Shell::GetInstance()->tray_delegate(); + username_ = new views::Label(ASCIIToUTF16(tray->GetUserDisplayName())); + username_->SetFont(username_->font().DeriveFont(2)); + username_->SetHorizontalAlignment(views::Label::ALIGN_LEFT); + user->AddChildView(username_); + + email_ = new views::Label(ASCIIToUTF16(tray->GetUserEmail())); + email_->SetHorizontalAlignment(views::Label::ALIGN_LEFT); + email_->SetEnabled(false); + user->AddChildView(email_); + + AddChildView(user); + } views::View* button_container = new views::View; views::BoxLayout *layout = new @@ -95,18 +104,22 @@ class UserView : public views::View, shutdown_ = new TrayButton(this, bundle.GetLocalizedString( IDS_ASH_STATUS_TRAY_SHUT_DOWN)); - signout_ = new TrayButton(this, bundle.GetLocalizedString( - IDS_ASH_STATUS_TRAY_SIGN_OUT)); - lock_ = new TrayButton(this, bundle.GetLocalizedString( - IDS_ASH_STATUS_TRAY_LOCK)); + shutdown_->set_border(NULL); button_container->AddChildView(shutdown_); - button_container->AddChildView(signout_); - button_container->AddChildView(lock_); - shutdown_->set_border(NULL); + signout_ = new TrayButton(this, bundle.GetLocalizedString( + status == ash::user::LOGGED_IN_GUEST ? IDS_ASH_STATUS_TRAY_EXIT_GUEST : + IDS_ASH_STATUS_TRAY_SIGN_OUT)); signout_->set_border(views::Border::CreateSolidSidedBorder( 0, 1, 0, 1, SkColorSetARGB(25, 0, 0, 0))); - lock_->set_border(NULL); + button_container->AddChildView(signout_); + + if (status != ash::user::LOGGED_IN_GUEST) { + lock_ = new TrayButton(this, bundle.GetLocalizedString( + IDS_ASH_STATUS_TRAY_LOCK)); + button_container->AddChildView(lock_); + lock_->set_border(NULL); + } AddChildView(button_container); } @@ -145,18 +158,21 @@ TrayUser::TrayUser() { TrayUser::~TrayUser() { } -views::View* TrayUser::CreateTrayView() { +views::View* TrayUser::CreateTrayView(user::LoginStatus status) { views::ImageView* avatar = new views::ImageView; - avatar->SetImage(ash::Shell::GetInstance()->tray_delegate()->GetUserImage()); - avatar->SetImageSize(gfx::Size(32, 32)); + if (status == user::LOGGED_IN_USER || status == user::LOGGED_IN_OWNER) { + avatar->SetImage( + ash::Shell::GetInstance()->tray_delegate()->GetUserImage()); + avatar->SetImageSize(gfx::Size(32, 32)); + } return avatar; } -views::View* TrayUser::CreateDefaultView() { - return new UserView; +views::View* TrayUser::CreateDefaultView(user::LoginStatus status) { + return status == user::LOGGED_IN_NONE ? NULL : new UserView(status); } -views::View* TrayUser::CreateDetailedView() { +views::View* TrayUser::CreateDetailedView(user::LoginStatus status) { return NULL; } diff --git a/ash/system/tray_user.h b/ash/system/user/tray_user.h index 2baede7..167784d 100644 --- a/ash/system/tray_user.h +++ b/ash/system/user/tray_user.h @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef ASH_SYSTEM_TRAY_USER_H_ -#define ASH_SYSTEM_TRAY_USER_H_ +#ifndef ASH_SYSTEM_USER_TRAY_USER_H_ +#define ASH_SYSTEM_USER_TRAY_USER_H_ #pragma once #include "ash/system/tray/system_tray_item.h" @@ -18,9 +18,9 @@ class TrayUser : public SystemTrayItem { private: // Overridden from SystemTrayItem - virtual views::View* CreateTrayView() OVERRIDE; - virtual views::View* CreateDefaultView() OVERRIDE; - virtual views::View* CreateDetailedView() OVERRIDE; + virtual views::View* CreateTrayView(user::LoginStatus status) OVERRIDE; + virtual views::View* CreateDefaultView(user::LoginStatus status) OVERRIDE; + virtual views::View* CreateDetailedView(user::LoginStatus status) OVERRIDE; virtual void DestroyTrayView() OVERRIDE; virtual void DestroyDefaultView() OVERRIDE; virtual void DestroyDetailedView() OVERRIDE; @@ -31,4 +31,4 @@ class TrayUser : public SystemTrayItem { } // namespace internal } // namespace ash -#endif // ASH_SYSTEM_TRAY_USER_H_ +#endif // ASH_SYSTEM_USER_TRAY_USER_H_ |