From bfc2863c1b55d9c1c6270c9b3ee41083d88c7d71 Mon Sep 17 00:00:00 2001 From: "avayvod@chromium.org" Date: Mon, 25 Jul 2011 22:58:26 +0000 Subject: [cros] WebUI user image screen with photo taking implemented as a dialog. R=altimofeev@chromium.org,nkostylev@chromium.org BUG=chromium-os:15924 TEST=Login as a new user with WebUI login/oobe, verify that the image screen functionality is the same as in views version Review URL: http://codereview.chromium.org/7484060 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@93985 0039d316-1c4b-4281-b951-d872f2087c98 --- chrome/browser/chromeos/login/user_image_screen.cc | 10 ++++++++-- chrome/browser/chromeos/options/take_photo_dialog.cc | 20 ++++++++------------ chrome/browser/chromeos/options/take_photo_dialog.h | 13 ++++++++++++- 3 files changed, 28 insertions(+), 15 deletions(-) (limited to 'chrome/browser/chromeos') diff --git a/chrome/browser/chromeos/login/user_image_screen.cc b/chrome/browser/chromeos/login/user_image_screen.cc index e924abc..085cbc5 100644 --- a/chrome/browser/chromeos/login/user_image_screen.cc +++ b/chrome/browser/chromeos/login/user_image_screen.cc @@ -56,8 +56,14 @@ void UserImageScreen::Show() { UserManager* user_manager = UserManager::Get(); std::string logged_in_user = user_manager->logged_in_user().email(); - actor_->SelectImage( - user_manager->GetUserDefaultImageIndex(logged_in_user)); + int selected_image_index = + user_manager->GetUserDefaultImageIndex(logged_in_user); + // The image must have been assigned by UserManager on new user login but + // under some circumstances (i.e. the data is not written to Local State + // or the file was corrupt) -1 could still be returned. + if (selected_image_index == -1) + selected_image_index = 0; + actor_->SelectImage(selected_image_index); } void UserImageScreen::Hide() { diff --git a/chrome/browser/chromeos/options/take_photo_dialog.cc b/chrome/browser/chromeos/options/take_photo_dialog.cc index 3be00bc..4c8cd1a 100644 --- a/chrome/browser/chromeos/options/take_photo_dialog.cc +++ b/chrome/browser/chromeos/options/take_photo_dialog.cc @@ -7,7 +7,6 @@ #include "base/string_util.h" #include "base/utf_string_conversions.h" #include "chrome/browser/chromeos/login/helper.h" -#include "chrome/browser/chromeos/login/user_manager.h" #include "chrome/common/chrome_notification_types.h" #include "content/common/notification_service.h" #include "grit/chromium_strings.h" @@ -27,9 +26,10 @@ const int kFrameHeight = 480; } // namespace -TakePhotoDialog::TakePhotoDialog() +TakePhotoDialog::TakePhotoDialog(Delegate* delegate) : take_photo_view_(NULL), - camera_controller_(this) { + camera_controller_(this), + delegate_(delegate) { camera_controller_.set_frame_width(kFrameWidth); camera_controller_.set_frame_height(kFrameHeight); registrar_.Add( @@ -38,6 +38,9 @@ TakePhotoDialog::TakePhotoDialog() NotificationService::AllSources()); } +TakePhotoDialog::~TakePhotoDialog() { +} + bool TakePhotoDialog::IsDialogButtonEnabled( MessageBoxFlags::DialogButton button) const { if (button == MessageBoxFlags::DIALOGBUTTON_CANCEL) @@ -56,15 +59,8 @@ bool TakePhotoDialog::Cancel() { bool TakePhotoDialog::Accept() { camera_controller_.Stop(); - UserManager* user_manager = UserManager::Get(); - DCHECK(user_manager); - - const UserManager::User& user = user_manager->logged_in_user(); - DCHECK(!user.email().empty()); - - const SkBitmap& image = take_photo_view_->GetImage(); - user_manager->SetLoggedInUserImage(image); - user_manager->SaveUserImage(user.email(), image); + if (delegate_) + delegate_->OnPhotoAccepted(take_photo_view_->GetImage()); return true; } diff --git a/chrome/browser/chromeos/options/take_photo_dialog.h b/chrome/browser/chromeos/options/take_photo_dialog.h index 9cecd71..c6956db 100644 --- a/chrome/browser/chromeos/options/take_photo_dialog.h +++ b/chrome/browser/chromeos/options/take_photo_dialog.h @@ -25,7 +25,16 @@ class TakePhotoDialog : public views::DialogDelegateView, public CameraController::Delegate, public NotificationObserver { public: - TakePhotoDialog(); + class Delegate { + public: + virtual ~Delegate() {} + + // Called when user accepts the photo. + virtual void OnPhotoAccepted(const SkBitmap& photo) = 0; + }; + + explicit TakePhotoDialog(Delegate* delegate); + virtual ~TakePhotoDialog(); // views::DialogDelegate overrides. virtual bool IsDialogButtonEnabled( @@ -69,6 +78,8 @@ class TakePhotoDialog : public views::DialogDelegateView, NotificationRegistrar registrar_; + Delegate* delegate_; + DISALLOW_COPY_AND_ASSIGN(TakePhotoDialog); }; -- cgit v1.1