user_image_screen.h revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
1// Copyright (c) 2012 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_SCREENS_USER_IMAGE_SCREEN_H_
6#define CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_USER_IMAGE_SCREEN_H_
7
8#include "base/compiler_specific.h"
9#include "base/memory/weak_ptr.h"
10#include "chrome/browser/chromeos/login/screens/user_image_screen_actor.h"
11#include "chrome/browser/chromeos/login/screens/wizard_screen.h"
12#include "chrome/browser/chromeos/login/user.h"
13#include "chrome/browser/image_decoder.h"
14#include "content/public/browser/notification_observer.h"
15#include "content/public/browser/notification_registrar.h"
16
17namespace chromeos {
18
19class UserImageScreen: public WizardScreen,
20                       public UserImageScreenActor::Delegate,
21                       public ImageDecoder::Delegate,
22                       public content::NotificationObserver {
23 public:
24  UserImageScreen(ScreenObserver* screen_observer,
25                  UserImageScreenActor* actor);
26  virtual ~UserImageScreen();
27
28  // Indicates whether profile picture is enabled for given user.
29  void SetProfilePictureEnabled(bool support_profile_picture);
30  // Sets |user_id| of user that would have picture updated.
31  void SetUserID(const std::string& user_id);
32
33  // WizardScreen implementation:
34  virtual void PrepareToShow() OVERRIDE;
35  virtual void Show() OVERRIDE;
36  virtual void Hide() OVERRIDE;
37  virtual std::string GetName() const OVERRIDE;
38
39  // UserImageScreenActor::Delegate implementation:
40  virtual void CheckCameraPresence() OVERRIDE;
41  virtual void OnPhotoTaken(const std::string& raw_data) OVERRIDE;
42  virtual void OnImageSelected(const std::string& image_url,
43                               const std::string& image_type) OVERRIDE;
44  virtual void OnImageAccepted() OVERRIDE;
45  virtual void OnActorDestroyed(UserImageScreenActor* actor) OVERRIDE;
46
47  virtual bool profile_picture_absent() OVERRIDE;
48  virtual int selected_image() OVERRIDE;
49  virtual std::string profile_picture_data_url() OVERRIDE;
50
51  // content::NotificationObserver implementation:
52  virtual void Observe(int type,
53                       const content::NotificationSource& source,
54                       const content::NotificationDetails& details) OVERRIDE;
55
56  // Overriden from ImageDecoder::Delegate:
57  virtual void OnImageDecoded(const ImageDecoder* decoder,
58                              const SkBitmap& decoded_image) OVERRIDE;
59  virtual void OnDecodeImageFailed(const ImageDecoder* decoder) OVERRIDE;
60
61 private:
62  const User* GetUser();
63
64  // Called when the camera presence check has been completed.
65  void OnCameraPresenceCheckDone();
66
67  content::NotificationRegistrar registrar_;
68
69  UserImageScreenActor* actor_;
70
71  base::WeakPtrFactory<UserImageScreen> weak_factory_;
72
73  // Last ImageDecoder instance used to decode an image blob received by
74  // HandlePhotoTaken.
75  scoped_refptr<ImageDecoder> image_decoder_;
76
77  // Last user photo, if taken.
78  gfx::ImageSkia user_photo_;
79
80  // If |true|, decoded photo should be immediately accepeted (i.e., both
81  // HandleTakePhoto and HandleImageAccepted have already been called but we're
82  // still waiting for  photo image decoding to finish.
83  bool accept_photo_after_decoding_;
84
85  // Index of the selected user image.
86  int selected_image_;
87
88  bool profile_picture_enabled_;
89
90  // Encoded profile picture.
91  std::string profile_picture_data_url_;
92
93  // True if user has no custom profile picture.
94  bool profile_picture_absent_;
95
96  std::string user_id_;
97
98  DISALLOW_COPY_AND_ASSIGN(UserImageScreen);
99};
100
101}  // namespace chromeos
102
103#endif  // CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_USER_IMAGE_SCREEN_H_
104