user_image_screen.h revision 4e180b6a0b4720a9b8e9e959a882386f690f08ff
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/chromeos/login/user_image_sync_observer.h" 14#include "chrome/browser/image_decoder.h" 15#include "content/public/browser/notification_observer.h" 16#include "content/public/browser/notification_registrar.h" 17 18namespace base { 19class Timer; 20}; 21 22namespace chromeos { 23 24class UserImageScreen: public WizardScreen, 25 public UserImageScreenActor::Delegate, 26 public ImageDecoder::Delegate, 27 public content::NotificationObserver, 28 public UserImageSyncObserver::Observer { 29 public: 30 UserImageScreen(ScreenObserver* screen_observer, 31 UserImageScreenActor* actor); 32 virtual ~UserImageScreen(); 33 34 // Indicates whether profile picture is enabled for given user. 35 void SetProfilePictureEnabled(bool support_profile_picture); 36 // Sets |user_id| of user that would have picture updated. 37 void SetUserID(const std::string& user_id); 38 39 // WizardScreen implementation: 40 virtual void PrepareToShow() OVERRIDE; 41 virtual void Show() OVERRIDE; 42 virtual void Hide() OVERRIDE; 43 virtual std::string GetName() const OVERRIDE; 44 45 // UserImageScreenActor::Delegate implementation: 46 virtual void OnScreenReady() OVERRIDE; 47 virtual void OnPhotoTaken(const std::string& raw_data) OVERRIDE; 48 virtual void CheckCameraPresence() OVERRIDE; 49 virtual void OnImageSelected(const std::string& image_url, 50 const std::string& image_type, 51 bool is_user_selection) OVERRIDE; 52 virtual void OnImageAccepted() OVERRIDE; 53 virtual void OnActorDestroyed(UserImageScreenActor* actor) OVERRIDE; 54 55 virtual bool profile_picture_absent() OVERRIDE; 56 virtual int selected_image() OVERRIDE; 57 virtual std::string profile_picture_data_url() OVERRIDE; 58 59 // content::NotificationObserver implementation: 60 virtual void Observe(int type, 61 const content::NotificationSource& source, 62 const content::NotificationDetails& details) OVERRIDE; 63 64 // ImageDecoder::Delegate implementation: 65 virtual void OnImageDecoded(const ImageDecoder* decoder, 66 const SkBitmap& decoded_image) OVERRIDE; 67 virtual void OnDecodeImageFailed(const ImageDecoder* decoder) OVERRIDE; 68 69 // UserImageSyncObserver::Observer implementation: 70 virtual void OnInitialSync(bool local_image_updated) OVERRIDE; 71 72 bool user_selected_image() const { return user_has_selected_image_; } 73 74 private: 75 // Called when whaiting for sync timed out. 76 void OnSyncTimeout(); 77 78 bool IsWaitingForSync() const; 79 80 const User* GetUser(); 81 82 // Called when the camera presence check has been completed. 83 void OnCameraPresenceCheckDone(); 84 85 // Called when it's decided not to skip the screen. 86 void HideCurtain(); 87 88 content::NotificationRegistrar registrar_; 89 90 UserImageScreenActor* actor_; 91 92 base::WeakPtrFactory<UserImageScreen> weak_factory_; 93 94 // Last ImageDecoder instance used to decode an image blob received by 95 // HandlePhotoTaken. 96 scoped_refptr<ImageDecoder> image_decoder_; 97 98 // Last user photo, if taken. 99 gfx::ImageSkia user_photo_; 100 101 // If |true|, decoded photo should be immediately accepeted (i.e., both 102 // HandleTakePhoto and HandleImageAccepted have already been called but we're 103 // still waiting for photo image decoding to finish. 104 bool accept_photo_after_decoding_; 105 106 // Index of the selected user image. 107 int selected_image_; 108 109 bool profile_picture_enabled_; 110 111 // Encoded profile picture. 112 std::string profile_picture_data_url_; 113 114 // True if user has no custom profile picture. 115 bool profile_picture_absent_; 116 117 std::string user_id_; 118 119 // Timer used for waiting for user image sync. 120 scoped_ptr<base::Timer> sync_timer_; 121 122 // If screen ready to be shown. 123 bool is_screen_ready_; 124 125 // True if user has explicitly selected some image. 126 bool user_has_selected_image_; 127 128 DISALLOW_COPY_AND_ASSIGN(UserImageScreen); 129}; 130 131} // namespace chromeos 132 133#endif // CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_USER_IMAGE_SCREEN_H_ 134