summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/chromeos/login/user_image_screen.cc20
-rw-r--r--chrome/browser/chromeos/login/user_image_screen.h12
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);
};