1// Copyright (c) 2011 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#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_USER_IMAGE_VIEW_H_
6#define CHROME_BROWSER_CHROMEOS_LOGIN_USER_IMAGE_VIEW_H_
7#pragma once
8
9#include "chrome/browser/chromeos/login/default_images_view.h"
10#include "chrome/browser/chromeos/login/take_photo_view.h"
11#include "views/controls/button/button.h"
12#include "views/view.h"
13
14class SkBitmap;
15
16namespace views {
17class Label;
18class NativeButton;
19}  // namespace views
20
21namespace chromeos {
22
23// View used for selecting user image on OOBE screen.
24class UserImageView : public views::View,
25                      public views::ButtonListener,
26                      public TakePhotoView::Delegate,
27                      public DefaultImagesView::Delegate {
28 public:
29  // Delegate class to get notifications from the view.
30  class Delegate {
31  public:
32    virtual ~Delegate() {}
33
34    // Initializes camera if needed and starts capturing.
35    virtual void StartCamera() = 0;
36
37    // Stops capturing from camera.
38    virtual void StopCamera() = 0;
39
40    // Called if user accepts the taken photo. The image is passed as a
41    // parameter.
42    virtual void OnPhotoTaken(const SkBitmap& image) = 0;
43
44    // Called if user accepts the chosen default image. The image index is
45    // passed as a parameter.
46    virtual void OnDefaultImageSelected(int index) = 0;
47  };
48
49  explicit UserImageView(Delegate* delegate);
50  virtual ~UserImageView();
51
52  // Initializes this view, its children and layout.
53  void Init();
54
55  // Updates image from camera.
56  void UpdateVideoFrame(const SkBitmap& frame);
57
58  // If in capturing mode, shows that camera is initializing by running
59  // throbber above the picture. Disables snapshot button until frame is
60  // received.
61  void ShowCameraInitializing();
62
63  // If in capturing mode, shows that camera is broken instead of video
64  // frame and disables snapshot button until new frame is received.
65  void ShowCameraError();
66
67  // Returns true if video capture is the current state of the view.
68  bool IsCapturing() const;
69
70  // Overridden from views::View:
71  virtual gfx::Size GetPreferredSize();
72
73  // Overridden from views::ButtonListener.
74  virtual void ButtonPressed(views::Button* sender, const views::Event& event);
75
76  // Overridden from TakePhotoView::Delegate.
77  virtual void OnCapturingStarted();
78  virtual void OnCapturingStopped();
79
80  // Overridden from DefaultImagesView::Delegate.
81  virtual void OnCaptureButtonClicked();
82  virtual void OnImageSelected(int image_index);
83
84 private:
85  // Initializes layout manager for this view.
86  void InitLayout();
87
88  views::Label* title_label_;
89  DefaultImagesView* default_images_view_;
90  TakePhotoView* take_photo_view_;
91  views::View* splitter_;
92  views::NativeButton* ok_button_;
93
94  // Notifications receiver.
95  Delegate* delegate_;
96
97  DISALLOW_COPY_AND_ASSIGN(UserImageView);
98};
99
100}  // namespace chromeos
101
102#endif  // CHROME_BROWSER_CHROMEOS_LOGIN_USER_IMAGE_VIEW_H_
103