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
// found in the LICENSE file.
......@@ -20,7 +20,7 @@ namespace {
const char kDefaultPathPrefix[] = "default:";
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[] = {
"default:gray",
......@@ -84,12 +84,12 @@ bool IsDefaultImagePath(const std::string& path, int* image_id) {
std::string GetDefaultImageUrl(int index) {
if (index == 0)
return kFirstDefaultUrl;
return kZeroDefaultUrl;
return GetDefaultImageString(index, kDefaultUrlPrefix);
}
bool IsDefaultImageUrl(const std::string url, int* image_id) {
if (url == kFirstDefaultUrl) {
if (url == kZeroDefaultUrl) {
*image_id = 0;
return true;
}
......@@ -127,12 +127,25 @@ const int kDefaultImageResources[] = {
const int kDefaultImagesCount = arraysize(kDefaultImageResources);
const int kFirstDefaultImageIndex = 0;
// The order and the values of these constants are important for histograms
// of different Chrome OS versions to be merged smoothly.
const int kHistogramImageFromCamera = kDefaultImagesCount;
const int kHistogramImageFromFile = kDefaultImagesCount + 1;
const int kHistogramImageOld = kDefaultImagesCount + 2;
const int kHistogramImageFromProfile = kDefaultImagesCount + 3;
const int kHistogramImagesCount = kDefaultImagesCount + 4;
const int kHistogramImageFromCamera = 19;
const int kHistogramImageFromFile = 20;
const int kHistogramImageOld = 21;
const int kHistogramImageFromProfile = 22;
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
// 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
// found in the LICENSE file.
......@@ -40,22 +40,36 @@ extern const int kDefaultImageResources[];
// Number of default images.
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;
// 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;
// Image index to be used in histograms when user selects a previously used
// image from camera/file.
// Histogram value a previously used image from camera/file.
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;
// 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;
// Returns the histogram value corresponding to the given default image index.
int GetDefaultImageHistogramValue(int index);
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_LOGIN_DEFAULT_USER_IMAGES_H_
......@@ -148,7 +148,7 @@ void UserImageScreen::OnDefaultImageSelected(int index) {
get_screen_observer()->OnExit(ScreenObserver::USER_IMAGE_SELECTED);
UMA_HISTOGRAM_ENUMERATION("UserImage.FirstTimeChoice",
index,
GetDefaultImageHistogramValue(index),
kHistogramImagesCount);
}
......
......@@ -77,7 +77,7 @@ void UserImageScreenHandler::GetLocalizedStrings(
void UserImageScreenHandler::Initialize() {
ListValue image_urls;
for (int i = 0; i < kDefaultImagesCount; ++i) {
for (int i = kFirstDefaultImageIndex; i < kDefaultImagesCount; ++i) {
image_urls.Append(new StringValue(GetDefaultImageUrl(i)));
}
web_ui()->CallJavascriptFunction("oobe.UserImageScreen.setUserImages",
......
......@@ -136,7 +136,7 @@ void ChangePictureOptionsHandler::RegisterMessages() {
void ChangePictureOptionsHandler::SendDefaultImages() {
ListValue image_urls;
for (int i = 0; i < kDefaultImagesCount; ++i) {
for (int i = kFirstDefaultImageIndex; i < kDefaultImagesCount; ++i) {
image_urls.Append(new StringValue(GetDefaultImageUrl(i)));
}
web_ui()->CallJavascriptFunction("ChangePictureOptions.setDefaultImages",
......@@ -251,10 +251,16 @@ void ChangePictureOptionsHandler::SendSelectedImage() {
default: {
DCHECK(previous_image_index_ >= 0 &&
previous_image_index_ < kDefaultImagesCount);
// User has image from the set of default images.
if (previous_image_index_ >= kFirstDefaultImageIndex) {
// User has image from the current set of default images.
base::StringValue image_url(GetDefaultImageUrl(previous_image_index_));
web_ui()->CallJavascriptFunction("ChangePictureOptions.setSelectedImage",
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) {
bool waiting_for_camera_photo = 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.
// This way transition from (current profile image) to
// (profile image, current image from file) is easier.
// Also, old (not available for selection any more) default images use
// this URL, too.
if (previous_image_index_ == User::kExternalImageIndex) {
DCHECK(!previous_image_.empty());
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",
kHistogramImageOld,
......@@ -313,7 +328,7 @@ void ChangePictureOptionsHandler::HandleSelectImage(const ListValue* args) {
user_manager->SaveUserDefaultImageIndex(user.email(), image_index);
UMA_HISTOGRAM_ENUMERATION("UserImage.ChangeChoice",
image_index,
GetDefaultImageHistogramValue(image_index),
kHistogramImagesCount);
VLOG(1) << "Selected default user image: " << image_index;
} 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