diff options
author | avayvod@chromium.org <avayvod@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-18 19:02:28 +0000 |
---|---|---|
committer | avayvod@chromium.org <avayvod@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-18 19:02:28 +0000 |
commit | 00f71870f67dcb264c0eabe3060fd06a3c9259af (patch) | |
tree | 4b05e79ce35348bbb7666b586b4a86f12d60a63a | |
parent | ea3761e2f33c58dfbe67b1acb7e8ccea77f932ef (diff) | |
download | chromium_src-00f71870f67dcb264c0eabe3060fd06a3c9259af.zip chromium_src-00f71870f67dcb264c0eabe3060fd06a3c9259af.tar.gz chromium_src-00f71870f67dcb264c0eabe3060fd06a3c9259af.tar.bz2 |
Stop capturing video when screen is locked. Restart image capturing when screen is unlocked.
BUG=none
TEST=(with new screen locker on L13) Login from new user login. Notice that camera light is on. Lock the screen with Ctrl-Alt-L. Notice that camera light is off. Unlock the screen. Notice that camera light is on and video is shown.
Review URL: http://codereview.chromium.org/2847019
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@50267 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/chromeos/login/user_image_screen.cc | 20 | ||||
-rw-r--r-- | chrome/browser/chromeos/login/user_image_screen.h | 12 |
2 files changed, 31 insertions, 1 deletions
diff --git a/chrome/browser/chromeos/login/user_image_screen.cc b/chrome/browser/chromeos/login/user_image_screen.cc index b39bd30b..b8b6ed9 100644 --- a/chrome/browser/chromeos/login/user_image_screen.cc +++ b/chrome/browser/chromeos/login/user_image_screen.cc @@ -11,6 +11,8 @@ #include "chrome/browser/chromeos/login/user_image_downloader.h" #include "chrome/browser/chromeos/login/user_image_view.h" #include "chrome/browser/chromeos/login/user_manager.h" +#include "chrome/common/notification_service.h" +#include "chrome/common/notification_type.h" namespace chromeos { @@ -29,6 +31,10 @@ const int kFrameRate = 40; UserImageScreen::UserImageScreen(WizardScreenDelegate* delegate) : ViewScreen<UserImageView>(delegate), ALLOW_THIS_IN_INITIALIZER_LIST(camera_(new Camera(this))) { + registrar_.Add( + this, + NotificationType::SCREEN_LOCK_STATE_CHANGED, + NotificationService::AllSources()); if (!camera_->Initialize(kFrameWidth, kFrameHeight)) camera_.reset(); } @@ -80,5 +86,19 @@ void UserImageScreen::OnCancel() { delegate()->GetObserver(this)->OnExit(ScreenObserver::USER_IMAGE_SKIPPED); } +void UserImageScreen::Observe(NotificationType type, + const NotificationSource& source, + const NotificationDetails& details) { + if (type != NotificationType::SCREEN_LOCK_STATE_CHANGED || + !camera_.get()) + return; + + bool is_screen_locked = *Details<bool>(details).ptr(); + if (is_screen_locked) + camera_->StopCapturing(); + else + camera_->StartCapturing(base::TimeDelta::FromMilliseconds(kFrameRate)); +} + } // namespace chromeos diff --git a/chrome/browser/chromeos/login/user_image_screen.h b/chrome/browser/chromeos/login/user_image_screen.h index f290304..609e5f6 100644 --- a/chrome/browser/chromeos/login/user_image_screen.h +++ b/chrome/browser/chromeos/login/user_image_screen.h @@ -8,13 +8,16 @@ #include "chrome/browser/chromeos/login/camera.h" #include "chrome/browser/chromeos/login/user_image_view.h" #include "chrome/browser/chromeos/login/view_screen.h" +#include "chrome/common/notification_observer.h" +#include "chrome/common/notification_registrar.h" #include "third_party/skia/include/core/SkBitmap.h" namespace chromeos { class UserImageScreen: public ViewScreen<UserImageView>, public Camera::Delegate, - public UserImageView::Delegate { + public UserImageView::Delegate, + public NotificationObserver { public: explicit UserImageScreen(WizardScreenDelegate* delegate); virtual ~UserImageScreen(); @@ -31,10 +34,17 @@ class UserImageScreen: public ViewScreen<UserImageView>, virtual void OnOK(const SkBitmap& image); virtual void OnCancel(); + // NotificationObserver implementation: + virtual void Observe(NotificationType type, + const NotificationSource& source, + const NotificationDetails& details); + private: // Object that handles video capturing. scoped_ptr<Camera> camera_; + NotificationRegistrar registrar_; + DISALLOW_COPY_AND_ASSIGN(UserImageScreen); }; |