Commit 27f827c5 authored by ivankr@chromium.org's avatar ivankr@chromium.org

[cros] Define a range of stock user images availables for selection.


BUG=139401


Review URL: https://chromiumcodereview.appspot.com/10836066

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@149802 0039d316-1c4b-4281-b951-d872f2087c98
parent 61106397
// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
...@@ -20,7 +20,7 @@ namespace { ...@@ -20,7 +20,7 @@ namespace {
const char kDefaultPathPrefix[] = "default:"; const char kDefaultPathPrefix[] = "default:";
const char kDefaultUrlPrefix[] = "chrome://theme/IDR_LOGIN_DEFAULT_USER_"; const char kDefaultUrlPrefix[] = "chrome://theme/IDR_LOGIN_DEFAULT_USER_";
const char kFirstDefaultUrl[] = "chrome://theme/IDR_LOGIN_DEFAULT_USER"; const char kZeroDefaultUrl[] = "chrome://theme/IDR_LOGIN_DEFAULT_USER";
const char* kOldDefaultImageNames[] = { const char* kOldDefaultImageNames[] = {
"default:gray", "default:gray",
...@@ -84,12 +84,12 @@ bool IsDefaultImagePath(const std::string& path, int* image_id) { ...@@ -84,12 +84,12 @@ bool IsDefaultImagePath(const std::string& path, int* image_id) {
std::string GetDefaultImageUrl(int index) { std::string GetDefaultImageUrl(int index) {
if (index == 0) if (index == 0)
return kFirstDefaultUrl; return kZeroDefaultUrl;
return GetDefaultImageString(index, kDefaultUrlPrefix); return GetDefaultImageString(index, kDefaultUrlPrefix);
} }
bool IsDefaultImageUrl(const std::string url, int* image_id) { bool IsDefaultImageUrl(const std::string url, int* image_id) {
if (url == kFirstDefaultUrl) { if (url == kZeroDefaultUrl) {
*image_id = 0; *image_id = 0;
return true; return true;
} }
...@@ -127,12 +127,25 @@ const int kDefaultImageResources[] = { ...@@ -127,12 +127,25 @@ const int kDefaultImageResources[] = {
const int kDefaultImagesCount = arraysize(kDefaultImageResources); const int kDefaultImagesCount = arraysize(kDefaultImageResources);
const int kFirstDefaultImageIndex = 0;
// The order and the values of these constants are important for histograms // The order and the values of these constants are important for histograms
// of different Chrome OS versions to be merged smoothly. // of different Chrome OS versions to be merged smoothly.
const int kHistogramImageFromCamera = kDefaultImagesCount; const int kHistogramImageFromCamera = 19;
const int kHistogramImageFromFile = kDefaultImagesCount + 1; const int kHistogramImageFromFile = 20;
const int kHistogramImageOld = kDefaultImagesCount + 2; const int kHistogramImageOld = 21;
const int kHistogramImageFromProfile = kDefaultImagesCount + 3; const int kHistogramImageFromProfile = 22;
const int kHistogramImagesCount = kDefaultImagesCount + 4; const int kHistogramVideoFromCamera = 23;
const int kHistogramVideoFromFile = 24;
const int kHistogramImagesCount = kDefaultImagesCount + 6;
int GetDefaultImageHistogramValue(int index) {
DCHECK(index >= 0 && index < kDefaultImagesCount);
// Create a gap in histogram values for
// [kHistogramImageFromCamera..kHistogramImageFromProfile] block to fit.
if (index < kHistogramImageFromCamera)
return index;
return index + 6;
}
} // namespace chromeos } // namespace chromeos
// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
...@@ -40,22 +40,36 @@ extern const int kDefaultImageResources[]; ...@@ -40,22 +40,36 @@ extern const int kDefaultImageResources[];
// Number of default images. // Number of default images.
extern const int kDefaultImagesCount; extern const int kDefaultImagesCount;
// Image index to be used in histograms when user image is taken from file. // The starting index of default images available for selection. Note that
// existing users may have images with smaller indices.
extern const int kFirstDefaultImageIndex;
/// Histogram values. ////////////////////////////////////////////////////////
// Histogram value for user image taken from file.
extern const int kHistogramImageFromFile; extern const int kHistogramImageFromFile;
// Image index to be used in histograms when user image is taken from camera. // Histogram value for user image taken from camera.
extern const int kHistogramImageFromCamera; extern const int kHistogramImageFromCamera;
// Image index to be used in histograms when user selects a previously used // Histogram value a previously used image from camera/file.
// image from camera/file.
extern const int kHistogramImageOld; extern const int kHistogramImageOld;
// Image index to be used in histograms when user image is taken from profile. // Histogram value for user image from G+ profile.
extern const int kHistogramImageFromProfile; extern const int kHistogramImageFromProfile;
// Number of possible user image indices to be used in histograms. // Histogram value for user video (animated avatar) from camera.
extern const int kHistogramVideoFromCamera;
// Histogram value for user video from file.
extern const int kHistogramVideoFromFile;
// Number of possible histogram values for user images.
extern const int kHistogramImagesCount; extern const int kHistogramImagesCount;
// Returns the histogram value corresponding to the given default image index.
int GetDefaultImageHistogramValue(int index);
} // namespace chromeos } // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_LOGIN_DEFAULT_USER_IMAGES_H_ #endif // CHROME_BROWSER_CHROMEOS_LOGIN_DEFAULT_USER_IMAGES_H_
...@@ -148,7 +148,7 @@ void UserImageScreen::OnDefaultImageSelected(int index) { ...@@ -148,7 +148,7 @@ void UserImageScreen::OnDefaultImageSelected(int index) {
get_screen_observer()->OnExit(ScreenObserver::USER_IMAGE_SELECTED); get_screen_observer()->OnExit(ScreenObserver::USER_IMAGE_SELECTED);
UMA_HISTOGRAM_ENUMERATION("UserImage.FirstTimeChoice", UMA_HISTOGRAM_ENUMERATION("UserImage.FirstTimeChoice",
index, GetDefaultImageHistogramValue(index),
kHistogramImagesCount); kHistogramImagesCount);
} }
......
...@@ -77,7 +77,7 @@ void UserImageScreenHandler::GetLocalizedStrings( ...@@ -77,7 +77,7 @@ void UserImageScreenHandler::GetLocalizedStrings(
void UserImageScreenHandler::Initialize() { void UserImageScreenHandler::Initialize() {
ListValue image_urls; ListValue image_urls;
for (int i = 0; i < kDefaultImagesCount; ++i) { for (int i = kFirstDefaultImageIndex; i < kDefaultImagesCount; ++i) {
image_urls.Append(new StringValue(GetDefaultImageUrl(i))); image_urls.Append(new StringValue(GetDefaultImageUrl(i)));
} }
web_ui()->CallJavascriptFunction("oobe.UserImageScreen.setUserImages", web_ui()->CallJavascriptFunction("oobe.UserImageScreen.setUserImages",
......
...@@ -136,7 +136,7 @@ void ChangePictureOptionsHandler::RegisterMessages() { ...@@ -136,7 +136,7 @@ void ChangePictureOptionsHandler::RegisterMessages() {
void ChangePictureOptionsHandler::SendDefaultImages() { void ChangePictureOptionsHandler::SendDefaultImages() {
ListValue image_urls; ListValue image_urls;
for (int i = 0; i < kDefaultImagesCount; ++i) { for (int i = kFirstDefaultImageIndex; i < kDefaultImagesCount; ++i) {
image_urls.Append(new StringValue(GetDefaultImageUrl(i))); image_urls.Append(new StringValue(GetDefaultImageUrl(i)));
} }
web_ui()->CallJavascriptFunction("ChangePictureOptions.setDefaultImages", web_ui()->CallJavascriptFunction("ChangePictureOptions.setDefaultImages",
...@@ -251,10 +251,16 @@ void ChangePictureOptionsHandler::SendSelectedImage() { ...@@ -251,10 +251,16 @@ void ChangePictureOptionsHandler::SendSelectedImage() {
default: { default: {
DCHECK(previous_image_index_ >= 0 && DCHECK(previous_image_index_ >= 0 &&
previous_image_index_ < kDefaultImagesCount); previous_image_index_ < kDefaultImagesCount);
// User has image from the set of default images. if (previous_image_index_ >= kFirstDefaultImageIndex) {
base::StringValue image_url(GetDefaultImageUrl(previous_image_index_)); // User has image from the current set of default images.
web_ui()->CallJavascriptFunction("ChangePictureOptions.setSelectedImage", base::StringValue image_url(GetDefaultImageUrl(previous_image_index_));
image_url); web_ui()->CallJavascriptFunction(
"ChangePictureOptions.setSelectedImage", image_url);
} else {
// User has an old default image, so present it in the same manner as a
// previous image from file.
web_ui()->CallJavascriptFunction("ChangePictureOptions.setOldImage");
}
} }
} }
} }
...@@ -295,14 +301,23 @@ void ChangePictureOptionsHandler::HandleSelectImage(const ListValue* args) { ...@@ -295,14 +301,23 @@ void ChangePictureOptionsHandler::HandleSelectImage(const ListValue* args) {
bool waiting_for_camera_photo = false; bool waiting_for_camera_photo = false;
if (StartsWithASCII(image_url, chrome::kChromeUIUserImageURL, false)) { if (StartsWithASCII(image_url, chrome::kChromeUIUserImageURL, false)) {
// Image from file/camera uses kChromeUIUserImageURL as URL while // Image from file/camera uses |kChromeUIUserImageURL| as URL while
// current profile image always has a full data URL. // current profile image always has a full data URL.
// This way transition from (current profile image) to // This way transition from (current profile image) to
// (profile image, current image from file) is easier. // (profile image, current image from file) is easier.
// Also, old (not available for selection any more) default images use
// this URL, too.
DCHECK(!previous_image_.empty()); if (previous_image_index_ == User::kExternalImageIndex) {
user_manager->SaveUserImage(user.email(), DCHECK(!previous_image_.empty());
UserImage::CreateAndEncode(previous_image_)); user_manager->SaveUserImage(user.email(),
UserImage::CreateAndEncode(previous_image_));
} else {
DCHECK(previous_image_index_ >= 0 &&
previous_image_index_ < kFirstDefaultImageIndex);
user_manager->SaveUserDefaultImageIndex(user.email(),
previous_image_index_);
}
UMA_HISTOGRAM_ENUMERATION("UserImage.ChangeChoice", UMA_HISTOGRAM_ENUMERATION("UserImage.ChangeChoice",
kHistogramImageOld, kHistogramImageOld,
...@@ -313,7 +328,7 @@ void ChangePictureOptionsHandler::HandleSelectImage(const ListValue* args) { ...@@ -313,7 +328,7 @@ void ChangePictureOptionsHandler::HandleSelectImage(const ListValue* args) {
user_manager->SaveUserDefaultImageIndex(user.email(), image_index); user_manager->SaveUserDefaultImageIndex(user.email(), image_index);
UMA_HISTOGRAM_ENUMERATION("UserImage.ChangeChoice", UMA_HISTOGRAM_ENUMERATION("UserImage.ChangeChoice",
image_index, GetDefaultImageHistogramValue(image_index),
kHistogramImagesCount); kHistogramImagesCount);
VLOG(1) << "Selected default user image: " << image_index; VLOG(1) << "Selected default user image: " << image_index;
} else if (image_url == user_photo_data_url_) { } else if (image_url == user_photo_data_url_) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment