user_image_screen_handler.cc revision f8ee788a64d60abd8f2d742a5fdedde054ecd910
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/login/user_image_screen_handler.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ash/audio/sounds.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/metrics/histogram.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h"
12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/chromeos/login/existing_user_controller.h"
13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/ui/webui_login_display.h"
14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/users/avatar/default_user_images.h"
15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/users/user.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h"
19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chromeos/audio/chromeos_sounds.h"
20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "grit/browser_resources.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/generated_resources.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/data_url.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h"
24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/base/resource/resource_bundle.h"
257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
27a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)namespace {
28a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
29a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)const char kJsScreenPath[] = "login.UserImageScreen";
30a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
31a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}  // namespace
32a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)UserImageScreenHandler::UserImageScreenHandler()
36a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    : BaseScreenHandler(kJsScreenPath),
37a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      screen_(NULL),
383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      show_on_init_(false),
393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      is_ready_(false) {
40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance();
41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  media::SoundsManager* manager = media::SoundsManager::Get();
42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  manager->Initialize(SOUND_OBJECT_DELETE,
43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                      bundle.GetRawDataResource(IDR_SOUND_OBJECT_DELETE_WAV));
44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  manager->Initialize(SOUND_CAMERA_SNAP,
45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                      bundle.GetRawDataResource(IDR_SOUND_CAMERA_SNAP_WAV));
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)UserImageScreenHandler::~UserImageScreenHandler() {
49effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (screen_) {
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    screen_->OnActorDestroyed(this);
51effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UserImageScreenHandler::Initialize() {
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (show_on_init_) {
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Show();
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    show_on_init_ = false;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UserImageScreenHandler::SetDelegate(
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    UserImageScreenActor::Delegate* screen) {
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  screen_ = screen;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UserImageScreenHandler::Show() {
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!page_is_ready()) {
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    show_on_init_ = true;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  screen_show_time_ = base::Time::Now();
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ShowScreen(OobeUI::kScreenUserImagePicker, NULL);
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // When shown, query camera presence.
75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (!screen_)
76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return;
773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  if (is_ready_)
783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    screen_->OnScreenReady();
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UserImageScreenHandler::Hide() {
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UserImageScreenHandler::PrepareToShow() {
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void UserImageScreenHandler::DeclareLocalizedValues(
88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    LocalizedValuesBuilder* builder) {
89effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  builder->Add("userImageScreenTitle", IDS_USER_IMAGE_SCREEN_TITLE);
90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("userImageScreenDescription",
91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)               IDS_OPTIONS_CHANGE_PICTURE_DIALOG_TEXT);
92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("takePhoto", IDS_OPTIONS_CHANGE_PICTURE_TAKE_PHOTO);
93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("discardPhoto", IDS_OPTIONS_CHANGE_PICTURE_DISCARD_PHOTO);
94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("flipPhoto", IDS_OPTIONS_CHANGE_PICTURE_FLIP_PHOTO);
95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("profilePhoto", IDS_IMAGE_SCREEN_PROFILE_PHOTO);
96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("profilePhotoLoading",
97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)               IDS_IMAGE_SCREEN_PROFILE_LOADING_PHOTO);
98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("okButtonText", IDS_OK);
99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("authorCredit", IDS_OPTIONS_SET_WALLPAPER_AUTHOR_TEXT);
100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("photoFromCamera", IDS_OPTIONS_CHANGE_PICTURE_PHOTO_FROM_CAMERA);
101a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  builder->Add("photoFlippedAccessibleText",
102a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               IDS_OPTIONS_PHOTO_FLIP_ACCESSIBLE_TEXT);
103a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  builder->Add("photoFlippedBackAccessibleText",
104a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               IDS_OPTIONS_PHOTO_FLIPBACK_ACCESSIBLE_TEXT);
105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("photoCaptureAccessibleText",
106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)               IDS_OPTIONS_PHOTO_CAPTURE_ACCESSIBLE_TEXT);
107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("photoDiscardAccessibleText",
108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)               IDS_OPTIONS_PHOTO_DISCARD_ACCESSIBLE_TEXT);
10968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  builder->Add("syncingPreferences", IDS_IMAGE_SCREEN_SYNCING_PREFERENCES);
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UserImageScreenHandler::RegisterMessages() {
113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  AddCallback("getImages", &UserImageScreenHandler::HandleGetImages);
1143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  AddCallback("screenReady", &UserImageScreenHandler::HandleScreenReady);
115a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  AddCallback("takePhoto", &UserImageScreenHandler::HandleTakePhoto);
116a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  AddCallback("discardPhoto", &UserImageScreenHandler::HandleDiscardPhoto);
117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  AddCallback("photoTaken", &UserImageScreenHandler::HandlePhotoTaken);
118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  AddCallback("selectImage", &UserImageScreenHandler::HandleSelectImage);
119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  AddCallback("onUserImageAccepted",
120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              &UserImageScreenHandler::HandleImageAccepted);
121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  AddCallback("onUserImageScreenShown",
122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              &UserImageScreenHandler::HandleScreenShown);
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void UserImageScreenHandler::SelectImage(int index) {
126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (page_is_ready())
127a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    CallJS("setSelectedImage", GetDefaultImageUrl(index));
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UserImageScreenHandler::SendProfileImage(const std::string& data_url) {
131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (page_is_ready())
132a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    CallJS("setProfileImage", data_url);
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UserImageScreenHandler::OnProfileImageAbsent() {
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (page_is_ready()) {
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<base::Value> null_value(base::Value::CreateNullValue());
138a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    CallJS("setProfileImage", *null_value);
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// TODO(antrim) : It looks more like parameters for "Init" rather than callback.
143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void UserImageScreenHandler::HandleGetImages() {
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::ListValue image_urls;
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = kFirstDefaultImageIndex; i < kDefaultImagesCount; ++i) {
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_ptr<base::DictionaryValue> image_data(new base::DictionaryValue);
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    image_data->SetString("url", GetDefaultImageUrl(i));
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    image_data->SetString(
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "author", l10n_util::GetStringUTF16(kDefaultImageAuthorIDs[i]));
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    image_data->SetString(
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "website", l10n_util::GetStringUTF16(kDefaultImageWebsiteIDs[i]));
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    image_data->SetString("title", GetDefaultImageDescription(i));
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    image_urls.Append(image_data.release());
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
155a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  CallJS("setDefaultImages", image_urls);
156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (!screen_)
157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return;
158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (screen_->selected_image() != User::kInvalidImageIndex)
159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    SelectImage(screen_->selected_image());
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
161f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  if (screen_->profile_picture_data_url() != url::kAboutBlankURL)
162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    SendProfileImage(screen_->profile_picture_data_url());
163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  else if (screen_->profile_picture_absent())
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    OnProfileImageAbsent();
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void UserImageScreenHandler::HandleScreenReady() {
1683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  is_ready_ = true;
1693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  if (screen_)
1703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    screen_->OnScreenReady();
1713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
1723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void UserImageScreenHandler::HandlePhotoTaken(const std::string& image_url) {
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string mime_type, charset, raw_data;
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!net::DataURL::Parse(GURL(image_url), &mime_type, &charset, &raw_data))
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NOTREACHED();
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK_EQ("image/png", mime_type);
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (screen_)
180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    screen_->OnPhotoTaken(raw_data);
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
183a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void UserImageScreenHandler::HandleTakePhoto() {
184a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ash::PlaySystemSoundIfSpokenFeedback(SOUND_CAMERA_SNAP);
185a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
186a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
187a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void UserImageScreenHandler::HandleDiscardPhoto() {
188a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ash::PlaySystemSoundIfSpokenFeedback(SOUND_OBJECT_DELETE);
189a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void UserImageScreenHandler::HandleSelectImage(const std::string& image_url,
1923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                                               const std::string& image_type,
1933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                                               bool is_user_selection) {
194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (screen_)
1953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    screen_->OnImageSelected(image_type, image_url, is_user_selection);
196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void UserImageScreenHandler::HandleImageAccepted() {
199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (screen_)
200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    screen_->OnImageAccepted();
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void UserImageScreenHandler::HandleScreenShown() {
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(!screen_show_time_.is_null());
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::TimeDelta delta = base::Time::Now() - screen_show_time_;
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  VLOG(1) << "Screen load time: " << delta.InSecondsF();
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UMA_HISTOGRAM_TIMES("UserImage.ScreenIsShownTime", delta);
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void UserImageScreenHandler::SetCameraPresent(bool present) {
212a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  CallJS("setCameraPresent", present);
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void UserImageScreenHandler::HideCurtain() {
2163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  CallJS("hideCurtain");
2173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
2183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void UserImageScreenHandler::SetProfilePictureEnabled(bool enabled) {
220a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  CallJS("setProfilePictureEnabled", enabled);
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chromeos
224