1 // Copyright 2014 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 "components/user_manager/user_image/default_user_images.h"
7 #include "base/basictypes.h"
8 #include "base/logging.h"
9 #include "base/strings/string_number_conversions.h"
10 #include "base/strings/string_piece.h"
11 #include "base/strings/string_util.h"
12 #include "base/strings/stringprintf.h"
13 #include "base/sys_info.h"
14 #include "grit/ui_chromeos_resources.h"
15 #include "grit/ui_chromeos_strings.h"
16 #include "ui/base/l10n/l10n_util.h"
17 #include "ui/base/resource/resource_bundle.h"
18 #include "ui/gfx/image/image_skia.h"
20 namespace user_manager
{
24 const char kDefaultUrlPrefix
[] = "chrome://theme/IDR_LOGIN_DEFAULT_USER_";
25 const char kZeroDefaultUrl
[] = "chrome://theme/IDR_LOGIN_DEFAULT_USER";
27 // IDs of default user image descriptions.
28 const int kDefaultImageDescriptions
[] = {
29 0, // No description for deprecated user image 0.
30 0, // No description for deprecated user image 1.
31 0, // No description for deprecated user image 2.
32 0, // No description for deprecated user image 3.
33 0, // No description for deprecated user image 4.
34 0, // No description for deprecated user image 5.
35 0, // No description for deprecated user image 6.
36 0, // No description for deprecated user image 7.
37 0, // No description for deprecated user image 8.
38 0, // No description for deprecated user image 9.
39 0, // No description for deprecated user image 10.
40 0, // No description for deprecated user image 11.
41 0, // No description for deprecated user image 12.
42 0, // No description for deprecated user image 13.
43 0, // No description for deprecated user image 14.
44 0, // No description for deprecated user image 15.
45 0, // No description for deprecated user image 16.
46 0, // No description for deprecated user image 17.
47 0, // No description for deprecated user image 18.
48 IDS_LOGIN_DEFAULT_USER_DESC_19
,
49 IDS_LOGIN_DEFAULT_USER_DESC_20
,
50 IDS_LOGIN_DEFAULT_USER_DESC_21
,
51 IDS_LOGIN_DEFAULT_USER_DESC_22
,
52 IDS_LOGIN_DEFAULT_USER_DESC_23
,
53 IDS_LOGIN_DEFAULT_USER_DESC_24
,
54 IDS_LOGIN_DEFAULT_USER_DESC_25
,
55 IDS_LOGIN_DEFAULT_USER_DESC_26
,
56 IDS_LOGIN_DEFAULT_USER_DESC_27
,
57 IDS_LOGIN_DEFAULT_USER_DESC_28
,
58 IDS_LOGIN_DEFAULT_USER_DESC_29
,
59 IDS_LOGIN_DEFAULT_USER_DESC_30
,
60 IDS_LOGIN_DEFAULT_USER_DESC_31
,
61 IDS_LOGIN_DEFAULT_USER_DESC_32
,
64 // Returns a string consisting of the prefix specified and the index of the
65 // image if its valid.
66 std::string
GetDefaultImageString(int index
, const std::string
& prefix
) {
67 if (index
< 0 || index
>= kDefaultImagesCount
) {
68 DCHECK(!base::SysInfo::IsRunningOnChromeOS());
71 return base::StringPrintf("%s%d", prefix
.c_str(), index
);
74 // Returns true if the string specified consists of the prefix and one of
75 // the default images indices. Returns the index of the image in |image_id|
77 bool IsDefaultImageString(const std::string
& s
,
78 const std::string
& prefix
,
81 if (!StartsWithASCII(s
, prefix
, true))
85 if (base::StringToInt(base::StringPiece(s
.begin() + prefix
.length(), s
.end()),
87 if (image_index
< 0 || image_index
>= kDefaultImagesCount
)
89 *image_id
= image_index
;
97 std::string
GetDefaultImageUrl(int index
) {
99 return kZeroDefaultUrl
;
100 return GetDefaultImageString(index
, kDefaultUrlPrefix
);
103 bool IsDefaultImageUrl(const std::string
& url
, int* image_id
) {
104 if (url
== kZeroDefaultUrl
) {
108 return IsDefaultImageString(url
, kDefaultUrlPrefix
, image_id
);
111 const gfx::ImageSkia
& GetDefaultImage(int index
) {
112 DCHECK(index
>= 0 && index
< kDefaultImagesCount
);
113 return *ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
114 kDefaultImageResourceIDs
[index
]);
117 base::string16
GetDefaultImageDescription(int index
) {
118 DCHECK(index
>= 0 && index
< kDefaultImagesCount
);
119 int string_id
= kDefaultImageDescriptions
[index
];
121 return l10n_util::GetStringUTF16(string_id
);
123 return base::string16();
126 // Resource IDs of default user images.
127 const int kDefaultImageResourceIDs
[] = {
128 IDR_LOGIN_DEFAULT_USER
,
129 IDR_LOGIN_DEFAULT_USER_1
,
130 IDR_LOGIN_DEFAULT_USER_2
,
131 IDR_LOGIN_DEFAULT_USER_3
,
132 IDR_LOGIN_DEFAULT_USER_4
,
133 IDR_LOGIN_DEFAULT_USER_5
,
134 IDR_LOGIN_DEFAULT_USER_6
,
135 IDR_LOGIN_DEFAULT_USER_7
,
136 IDR_LOGIN_DEFAULT_USER_8
,
137 IDR_LOGIN_DEFAULT_USER_9
,
138 IDR_LOGIN_DEFAULT_USER_10
,
139 IDR_LOGIN_DEFAULT_USER_11
,
140 IDR_LOGIN_DEFAULT_USER_12
,
141 IDR_LOGIN_DEFAULT_USER_13
,
142 IDR_LOGIN_DEFAULT_USER_14
,
143 IDR_LOGIN_DEFAULT_USER_15
,
144 IDR_LOGIN_DEFAULT_USER_16
,
145 IDR_LOGIN_DEFAULT_USER_17
,
146 IDR_LOGIN_DEFAULT_USER_18
,
147 IDR_LOGIN_DEFAULT_USER_19
,
148 IDR_LOGIN_DEFAULT_USER_20
,
149 IDR_LOGIN_DEFAULT_USER_21
,
150 IDR_LOGIN_DEFAULT_USER_22
,
151 IDR_LOGIN_DEFAULT_USER_23
,
152 IDR_LOGIN_DEFAULT_USER_24
,
153 IDR_LOGIN_DEFAULT_USER_25
,
154 IDR_LOGIN_DEFAULT_USER_26
,
155 IDR_LOGIN_DEFAULT_USER_27
,
156 IDR_LOGIN_DEFAULT_USER_28
,
157 IDR_LOGIN_DEFAULT_USER_29
,
158 IDR_LOGIN_DEFAULT_USER_30
,
159 IDR_LOGIN_DEFAULT_USER_31
,
160 IDR_LOGIN_DEFAULT_USER_32
,
163 const int kDefaultImageAuthorIDs
[] = {
164 IDS_LOGIN_DEFAULT_USER_AUTHOR
,
165 IDS_LOGIN_DEFAULT_USER_AUTHOR_1
,
166 IDS_LOGIN_DEFAULT_USER_AUTHOR_2
,
167 IDS_LOGIN_DEFAULT_USER_AUTHOR_3
,
168 IDS_LOGIN_DEFAULT_USER_AUTHOR_4
,
169 IDS_LOGIN_DEFAULT_USER_AUTHOR_5
,
170 IDS_LOGIN_DEFAULT_USER_AUTHOR_6
,
171 IDS_LOGIN_DEFAULT_USER_AUTHOR_7
,
172 IDS_LOGIN_DEFAULT_USER_AUTHOR_8
,
173 IDS_LOGIN_DEFAULT_USER_AUTHOR_9
,
174 IDS_LOGIN_DEFAULT_USER_AUTHOR_10
,
175 IDS_LOGIN_DEFAULT_USER_AUTHOR_11
,
176 IDS_LOGIN_DEFAULT_USER_AUTHOR_12
,
177 IDS_LOGIN_DEFAULT_USER_AUTHOR_13
,
178 IDS_LOGIN_DEFAULT_USER_AUTHOR_14
,
179 IDS_LOGIN_DEFAULT_USER_AUTHOR_15
,
180 IDS_LOGIN_DEFAULT_USER_AUTHOR_16
,
181 IDS_LOGIN_DEFAULT_USER_AUTHOR_17
,
182 IDS_LOGIN_DEFAULT_USER_AUTHOR_18
,
183 IDS_LOGIN_DEFAULT_USER_AUTHOR_19
,
184 IDS_LOGIN_DEFAULT_USER_AUTHOR_20
,
185 IDS_LOGIN_DEFAULT_USER_AUTHOR_21
,
186 IDS_LOGIN_DEFAULT_USER_AUTHOR_22
,
187 IDS_LOGIN_DEFAULT_USER_AUTHOR_23
,
188 IDS_LOGIN_DEFAULT_USER_AUTHOR_24
,
189 IDS_LOGIN_DEFAULT_USER_AUTHOR_25
,
190 IDS_LOGIN_DEFAULT_USER_AUTHOR_26
,
191 IDS_LOGIN_DEFAULT_USER_AUTHOR_27
,
192 IDS_LOGIN_DEFAULT_USER_AUTHOR_28
,
193 IDS_LOGIN_DEFAULT_USER_AUTHOR_29
,
194 IDS_LOGIN_DEFAULT_USER_AUTHOR_30
,
195 IDS_LOGIN_DEFAULT_USER_AUTHOR_31
,
196 IDS_LOGIN_DEFAULT_USER_AUTHOR_32
,
199 const int kDefaultImageWebsiteIDs
[] = {
200 IDS_LOGIN_DEFAULT_USER_WEBSITE
,
201 IDS_LOGIN_DEFAULT_USER_WEBSITE_1
,
202 IDS_LOGIN_DEFAULT_USER_WEBSITE_2
,
203 IDS_LOGIN_DEFAULT_USER_WEBSITE_3
,
204 IDS_LOGIN_DEFAULT_USER_WEBSITE_4
,
205 IDS_LOGIN_DEFAULT_USER_WEBSITE_5
,
206 IDS_LOGIN_DEFAULT_USER_WEBSITE_6
,
207 IDS_LOGIN_DEFAULT_USER_WEBSITE_7
,
208 IDS_LOGIN_DEFAULT_USER_WEBSITE_8
,
209 IDS_LOGIN_DEFAULT_USER_WEBSITE_9
,
210 IDS_LOGIN_DEFAULT_USER_WEBSITE_10
,
211 IDS_LOGIN_DEFAULT_USER_WEBSITE_11
,
212 IDS_LOGIN_DEFAULT_USER_WEBSITE_12
,
213 IDS_LOGIN_DEFAULT_USER_WEBSITE_13
,
214 IDS_LOGIN_DEFAULT_USER_WEBSITE_14
,
215 IDS_LOGIN_DEFAULT_USER_WEBSITE_15
,
216 IDS_LOGIN_DEFAULT_USER_WEBSITE_16
,
217 IDS_LOGIN_DEFAULT_USER_WEBSITE_17
,
218 IDS_LOGIN_DEFAULT_USER_WEBSITE_18
,
219 IDS_LOGIN_DEFAULT_USER_WEBSITE_19
,
220 IDS_LOGIN_DEFAULT_USER_WEBSITE_20
,
221 IDS_LOGIN_DEFAULT_USER_WEBSITE_21
,
222 IDS_LOGIN_DEFAULT_USER_WEBSITE_22
,
223 IDS_LOGIN_DEFAULT_USER_WEBSITE_23
,
224 IDS_LOGIN_DEFAULT_USER_WEBSITE_24
,
225 IDS_LOGIN_DEFAULT_USER_WEBSITE_25
,
226 IDS_LOGIN_DEFAULT_USER_WEBSITE_26
,
227 IDS_LOGIN_DEFAULT_USER_WEBSITE_27
,
228 IDS_LOGIN_DEFAULT_USER_WEBSITE_28
,
229 IDS_LOGIN_DEFAULT_USER_WEBSITE_29
,
230 IDS_LOGIN_DEFAULT_USER_WEBSITE_30
,
231 IDS_LOGIN_DEFAULT_USER_WEBSITE_31
,
232 IDS_LOGIN_DEFAULT_USER_WEBSITE_32
,
235 const int kDefaultImagesCount
= arraysize(kDefaultImageResourceIDs
);
237 const int kFirstDefaultImageIndex
= 19;
239 // The order and the values of these constants are important for histograms
240 // of different Chrome OS versions to be merged smoothly.
241 const int kHistogramImageFromCamera
= 19;
242 const int kHistogramImageFromFile
= 20;
243 const int kHistogramImageOld
= 21;
244 const int kHistogramImageFromProfile
= 22;
245 const int kHistogramVideoFromCamera
= 23;
246 const int kHistogramVideoFromFile
= 24;
247 const int kHistogramImagesCount
= kDefaultImagesCount
+ 6;
249 int GetDefaultImageHistogramValue(int index
) {
250 DCHECK(index
>= 0 && index
< kDefaultImagesCount
);
251 // Create a gap in histogram values for
252 // [kHistogramImageFromCamera..kHistogramImageFromProfile] block to fit.
253 if (index
< kHistogramImageFromCamera
)
258 } // namespace user_manager