Remove USE_ATHENA ifdef from chrome/browser/ui
[chromium-blink-merge.git] / chrome / browser / ui / webui / chromeos / login / user_image_screen_handler.cc
blobf86c18cef9e55da2301790f0e9483cecae0c3c56
1 // Copyright (c) 2013 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.
5 #include "chrome/browser/ui/webui/chromeos/login/user_image_screen_handler.h"
7 #include "ash/audio/sounds.h"
8 #include "base/command_line.h"
9 #include "base/logging.h"
10 #include "base/metrics/histogram.h"
11 #include "base/values.h"
12 #include "chrome/browser/chromeos/login/existing_user_controller.h"
13 #include "chrome/browser/chromeos/login/ui/webui_login_display.h"
14 #include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
15 #include "chrome/common/chrome_switches.h"
16 #include "chrome/common/url_constants.h"
17 #include "chrome/grit/generated_resources.h"
18 #include "chromeos/audio/chromeos_sounds.h"
19 #include "components/user_manager/user.h"
20 #include "components/user_manager/user_image/default_user_images.h"
21 #include "grit/browser_resources.h"
22 #include "media/audio/sounds/sounds_manager.h"
23 #include "net/base/data_url.h"
24 #include "ui/base/l10n/l10n_util.h"
25 #include "ui/base/resource/resource_bundle.h"
26 #include "url/gurl.h"
28 namespace {
30 const char kJsScreenPath[] = "login.UserImageScreen";
32 } // namespace
34 namespace chromeos {
36 UserImageScreenHandler::UserImageScreenHandler()
37 : BaseScreenHandler(kJsScreenPath),
38 screen_(NULL),
39 show_on_init_(false),
40 is_ready_(false) {
41 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance();
42 media::SoundsManager* manager = media::SoundsManager::Get();
43 manager->Initialize(SOUND_OBJECT_DELETE,
44 bundle.GetRawDataResource(IDR_SOUND_OBJECT_DELETE_WAV));
45 manager->Initialize(SOUND_CAMERA_SNAP,
46 bundle.GetRawDataResource(IDR_SOUND_CAMERA_SNAP_WAV));
49 UserImageScreenHandler::~UserImageScreenHandler() {
50 if (screen_) {
51 screen_->OnActorDestroyed(this);
55 void UserImageScreenHandler::Initialize() {
56 if (show_on_init_) {
57 Show();
58 show_on_init_ = false;
62 void UserImageScreenHandler::SetDelegate(
63 UserImageScreenActor::Delegate* screen) {
64 screen_ = screen;
67 void UserImageScreenHandler::Show() {
68 if (!page_is_ready()) {
69 show_on_init_ = true;
70 return;
72 screen_show_time_ = base::Time::Now();
73 ShowScreen(OobeUI::kScreenUserImagePicker, NULL);
75 // When shown, query camera presence.
76 if (!screen_)
77 return;
78 if (is_ready_)
79 screen_->OnScreenReady();
82 void UserImageScreenHandler::Hide() {
85 void UserImageScreenHandler::PrepareToShow() {
88 void UserImageScreenHandler::DeclareLocalizedValues(
89 LocalizedValuesBuilder* builder) {
90 builder->Add("userImageScreenTitle", IDS_USER_IMAGE_SCREEN_TITLE);
91 builder->Add("userImageScreenDescription",
92 IDS_OPTIONS_CHANGE_PICTURE_DIALOG_TEXT);
93 builder->Add("takePhoto", IDS_OPTIONS_CHANGE_PICTURE_TAKE_PHOTO);
94 builder->Add("discardPhoto", IDS_OPTIONS_CHANGE_PICTURE_DISCARD_PHOTO);
95 builder->Add("flipPhoto", IDS_OPTIONS_CHANGE_PICTURE_FLIP_PHOTO);
96 builder->Add("profilePhoto", IDS_IMAGE_SCREEN_PROFILE_PHOTO);
97 builder->Add("profilePhotoLoading",
98 IDS_IMAGE_SCREEN_PROFILE_LOADING_PHOTO);
99 builder->Add("okButtonText", IDS_OK);
100 builder->Add("authorCredit", IDS_OPTIONS_SET_WALLPAPER_AUTHOR_TEXT);
101 builder->Add("photoFromCamera", IDS_OPTIONS_CHANGE_PICTURE_PHOTO_FROM_CAMERA);
102 builder->Add("photoFlippedAccessibleText",
103 IDS_OPTIONS_PHOTO_FLIP_ACCESSIBLE_TEXT);
104 builder->Add("photoFlippedBackAccessibleText",
105 IDS_OPTIONS_PHOTO_FLIPBACK_ACCESSIBLE_TEXT);
106 builder->Add("photoCaptureAccessibleText",
107 IDS_OPTIONS_PHOTO_CAPTURE_ACCESSIBLE_TEXT);
108 builder->Add("photoDiscardAccessibleText",
109 IDS_OPTIONS_PHOTO_DISCARD_ACCESSIBLE_TEXT);
110 builder->Add("syncingPreferences", IDS_IMAGE_SCREEN_SYNCING_PREFERENCES);
113 void UserImageScreenHandler::RegisterMessages() {
114 AddCallback("getImages", &UserImageScreenHandler::HandleGetImages);
115 AddCallback("screenReady", &UserImageScreenHandler::HandleScreenReady);
116 AddCallback("takePhoto", &UserImageScreenHandler::HandleTakePhoto);
117 AddCallback("discardPhoto", &UserImageScreenHandler::HandleDiscardPhoto);
118 AddCallback("photoTaken", &UserImageScreenHandler::HandlePhotoTaken);
119 AddCallback("selectImage", &UserImageScreenHandler::HandleSelectImage);
120 AddCallback("onUserImageAccepted",
121 &UserImageScreenHandler::HandleImageAccepted);
122 AddCallback("onUserImageScreenShown",
123 &UserImageScreenHandler::HandleScreenShown);
126 void UserImageScreenHandler::SelectImage(int index) {
127 if (page_is_ready())
128 CallJS("setSelectedImage", user_manager::GetDefaultImageUrl(index));
131 void UserImageScreenHandler::SendProfileImage(const std::string& data_url) {
132 if (page_is_ready())
133 CallJS("setProfileImage", data_url);
136 void UserImageScreenHandler::OnProfileImageAbsent() {
137 if (page_is_ready()) {
138 scoped_ptr<base::Value> null_value(base::Value::CreateNullValue());
139 CallJS("setProfileImage", *null_value);
143 // TODO(antrim) : It looks more like parameters for "Init" rather than callback.
144 void UserImageScreenHandler::HandleGetImages() {
145 base::ListValue image_urls;
146 for (int i = user_manager::kFirstDefaultImageIndex;
147 i < user_manager::kDefaultImagesCount;
148 ++i) {
149 scoped_ptr<base::DictionaryValue> image_data(new base::DictionaryValue);
150 image_data->SetString("url", user_manager::GetDefaultImageUrl(i));
151 image_data->SetString(
152 "author",
153 l10n_util::GetStringUTF16(user_manager::kDefaultImageAuthorIDs[i]));
154 image_data->SetString(
155 "website",
156 l10n_util::GetStringUTF16(user_manager::kDefaultImageWebsiteIDs[i]));
157 image_data->SetString("title", user_manager::GetDefaultImageDescription(i));
158 image_urls.Append(image_data.release());
160 CallJS("setDefaultImages", image_urls);
161 if (!screen_)
162 return;
163 if (screen_->selected_image() != user_manager::User::USER_IMAGE_INVALID)
164 SelectImage(screen_->selected_image());
166 if (screen_->profile_picture_data_url() != url::kAboutBlankURL)
167 SendProfileImage(screen_->profile_picture_data_url());
168 else if (screen_->profile_picture_absent())
169 OnProfileImageAbsent();
172 void UserImageScreenHandler::HandleScreenReady() {
173 is_ready_ = true;
174 if (screen_)
175 screen_->OnScreenReady();
178 void UserImageScreenHandler::HandlePhotoTaken(const std::string& image_url) {
179 std::string mime_type, charset, raw_data;
180 if (!net::DataURL::Parse(GURL(image_url), &mime_type, &charset, &raw_data))
181 NOTREACHED();
182 DCHECK_EQ("image/png", mime_type);
184 if (screen_)
185 screen_->OnPhotoTaken(raw_data);
188 void UserImageScreenHandler::HandleTakePhoto() {
189 ash::PlaySystemSoundIfSpokenFeedback(SOUND_CAMERA_SNAP);
192 void UserImageScreenHandler::HandleDiscardPhoto() {
193 ash::PlaySystemSoundIfSpokenFeedback(SOUND_OBJECT_DELETE);
196 void UserImageScreenHandler::HandleSelectImage(const std::string& image_url,
197 const std::string& image_type,
198 bool is_user_selection) {
199 if (screen_)
200 screen_->OnImageSelected(image_type, image_url, is_user_selection);
203 void UserImageScreenHandler::HandleImageAccepted() {
204 if (screen_)
205 screen_->OnImageAccepted();
208 void UserImageScreenHandler::HandleScreenShown() {
209 DCHECK(!screen_show_time_.is_null());
211 base::TimeDelta delta = base::Time::Now() - screen_show_time_;
212 VLOG(1) << "Screen load time: " << delta.InSecondsF();
213 UMA_HISTOGRAM_TIMES("UserImage.ScreenIsShownTime", delta);
216 void UserImageScreenHandler::SetCameraPresent(bool present) {
217 CallJS("setCameraPresent", present);
220 void UserImageScreenHandler::HideCurtain() {
221 CallJS("hideCurtain");
224 } // namespace chromeos