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 17 namespace chromeos { 18 19 class 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