OLD | NEW |
| (Empty) |
1 // Copyright (c) 2012 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. | |
4 | |
5 #include "chrome/browser/chromeos/login/default_user_images.h" | |
6 | |
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/generated_resources.h" | |
15 #include "grit/theme_resources.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" | |
19 | |
20 namespace chromeos { | |
21 | |
22 namespace { | |
23 | |
24 const char kDefaultPathPrefix[] = "default:"; | |
25 const char kDefaultUrlPrefix[] = "chrome://theme/IDR_LOGIN_DEFAULT_USER_"; | |
26 const char kZeroDefaultUrl[] = "chrome://theme/IDR_LOGIN_DEFAULT_USER"; | |
27 | |
28 const char* kOldDefaultImageNames[] = { | |
29 "default:gray", | |
30 "default:green", | |
31 "default:blue", | |
32 "default:yellow", | |
33 "default:red", | |
34 }; | |
35 | |
36 // IDs of default user image descriptions. | |
37 const int kDefaultImageDescriptions[] = { | |
38 0, // No description for deprecated user image 0. | |
39 0, // No description for deprecated user image 1. | |
40 0, // No description for deprecated user image 2. | |
41 0, // No description for deprecated user image 3. | |
42 0, // No description for deprecated user image 4. | |
43 0, // No description for deprecated user image 5. | |
44 0, // No description for deprecated user image 6. | |
45 0, // No description for deprecated user image 7. | |
46 0, // No description for deprecated user image 8. | |
47 0, // No description for deprecated user image 9. | |
48 0, // No description for deprecated user image 10. | |
49 0, // No description for deprecated user image 11. | |
50 0, // No description for deprecated user image 12. | |
51 0, // No description for deprecated user image 13. | |
52 0, // No description for deprecated user image 14. | |
53 0, // No description for deprecated user image 15. | |
54 0, // No description for deprecated user image 16. | |
55 0, // No description for deprecated user image 17. | |
56 0, // No description for deprecated user image 18. | |
57 IDS_LOGIN_DEFAULT_USER_DESC_19, | |
58 IDS_LOGIN_DEFAULT_USER_DESC_20, | |
59 IDS_LOGIN_DEFAULT_USER_DESC_21, | |
60 IDS_LOGIN_DEFAULT_USER_DESC_22, | |
61 IDS_LOGIN_DEFAULT_USER_DESC_23, | |
62 IDS_LOGIN_DEFAULT_USER_DESC_24, | |
63 IDS_LOGIN_DEFAULT_USER_DESC_25, | |
64 IDS_LOGIN_DEFAULT_USER_DESC_26, | |
65 IDS_LOGIN_DEFAULT_USER_DESC_27, | |
66 IDS_LOGIN_DEFAULT_USER_DESC_28, | |
67 IDS_LOGIN_DEFAULT_USER_DESC_29, | |
68 IDS_LOGIN_DEFAULT_USER_DESC_30, | |
69 IDS_LOGIN_DEFAULT_USER_DESC_31, | |
70 IDS_LOGIN_DEFAULT_USER_DESC_32, | |
71 }; | |
72 | |
73 // Returns a string consisting of the prefix specified and the index of the | |
74 // image if its valid. | |
75 std::string GetDefaultImageString(int index, const std::string& prefix) { | |
76 if (index < 0 || index >= kDefaultImagesCount) { | |
77 DCHECK(!base::SysInfo::IsRunningOnChromeOS()); | |
78 return std::string(); | |
79 } | |
80 return base::StringPrintf("%s%d", prefix.c_str(), index); | |
81 } | |
82 | |
83 // Returns true if the string specified consists of the prefix and one of | |
84 // the default images indices. Returns the index of the image in |image_id| | |
85 // variable. | |
86 bool IsDefaultImageString(const std::string& s, | |
87 const std::string& prefix, | |
88 int* image_id) { | |
89 DCHECK(image_id); | |
90 if (!StartsWithASCII(s, prefix, true)) | |
91 return false; | |
92 | |
93 int image_index = -1; | |
94 if (base::StringToInt(base::StringPiece(s.begin() + prefix.length(), | |
95 s.end()), | |
96 &image_index)) { | |
97 if (image_index < 0 || image_index >= kDefaultImagesCount) | |
98 return false; | |
99 *image_id = image_index; | |
100 return true; | |
101 } | |
102 | |
103 return false; | |
104 } | |
105 } // namespace | |
106 | |
107 std::string GetDefaultImagePath(int index) { | |
108 return GetDefaultImageString(index, kDefaultPathPrefix); | |
109 } | |
110 | |
111 bool IsDefaultImagePath(const std::string& path, int* image_id) { | |
112 if (IsDefaultImageString(path, kDefaultPathPrefix, image_id)) | |
113 return true; | |
114 | |
115 // Check old default image names for back-compatibility. | |
116 for (size_t i = 0; i < arraysize(kOldDefaultImageNames); ++i) { | |
117 if (path == kOldDefaultImageNames[i]) { | |
118 *image_id = static_cast<int>(i); | |
119 return true; | |
120 } | |
121 } | |
122 return false; | |
123 } | |
124 | |
125 std::string GetDefaultImageUrl(int index) { | |
126 if (index == 0) | |
127 return kZeroDefaultUrl; | |
128 return GetDefaultImageString(index, kDefaultUrlPrefix); | |
129 } | |
130 | |
131 bool IsDefaultImageUrl(const std::string& url, int* image_id) { | |
132 if (url == kZeroDefaultUrl) { | |
133 *image_id = 0; | |
134 return true; | |
135 } | |
136 return IsDefaultImageString(url, kDefaultUrlPrefix, image_id); | |
137 } | |
138 | |
139 const gfx::ImageSkia& GetDefaultImage(int index) { | |
140 DCHECK(index >= 0 && index < kDefaultImagesCount); | |
141 return *ResourceBundle::GetSharedInstance(). | |
142 GetImageSkiaNamed(kDefaultImageResourceIDs[index]); | |
143 } | |
144 | |
145 base::string16 GetDefaultImageDescription(int index) { | |
146 DCHECK(index >= 0 && index < kDefaultImagesCount); | |
147 int string_id = kDefaultImageDescriptions[index]; | |
148 if (string_id) | |
149 return l10n_util::GetStringUTF16(string_id); | |
150 else | |
151 return base::string16(); | |
152 } | |
153 | |
154 // Resource IDs of default user images. | |
155 const int kDefaultImageResourceIDs[] = { | |
156 IDR_LOGIN_DEFAULT_USER, | |
157 IDR_LOGIN_DEFAULT_USER_1, | |
158 IDR_LOGIN_DEFAULT_USER_2, | |
159 IDR_LOGIN_DEFAULT_USER_3, | |
160 IDR_LOGIN_DEFAULT_USER_4, | |
161 IDR_LOGIN_DEFAULT_USER_5, | |
162 IDR_LOGIN_DEFAULT_USER_6, | |
163 IDR_LOGIN_DEFAULT_USER_7, | |
164 IDR_LOGIN_DEFAULT_USER_8, | |
165 IDR_LOGIN_DEFAULT_USER_9, | |
166 IDR_LOGIN_DEFAULT_USER_10, | |
167 IDR_LOGIN_DEFAULT_USER_11, | |
168 IDR_LOGIN_DEFAULT_USER_12, | |
169 IDR_LOGIN_DEFAULT_USER_13, | |
170 IDR_LOGIN_DEFAULT_USER_14, | |
171 IDR_LOGIN_DEFAULT_USER_15, | |
172 IDR_LOGIN_DEFAULT_USER_16, | |
173 IDR_LOGIN_DEFAULT_USER_17, | |
174 IDR_LOGIN_DEFAULT_USER_18, | |
175 IDR_LOGIN_DEFAULT_USER_19, | |
176 IDR_LOGIN_DEFAULT_USER_20, | |
177 IDR_LOGIN_DEFAULT_USER_21, | |
178 IDR_LOGIN_DEFAULT_USER_22, | |
179 IDR_LOGIN_DEFAULT_USER_23, | |
180 IDR_LOGIN_DEFAULT_USER_24, | |
181 IDR_LOGIN_DEFAULT_USER_25, | |
182 IDR_LOGIN_DEFAULT_USER_26, | |
183 IDR_LOGIN_DEFAULT_USER_27, | |
184 IDR_LOGIN_DEFAULT_USER_28, | |
185 IDR_LOGIN_DEFAULT_USER_29, | |
186 IDR_LOGIN_DEFAULT_USER_30, | |
187 IDR_LOGIN_DEFAULT_USER_31, | |
188 IDR_LOGIN_DEFAULT_USER_32, | |
189 }; | |
190 | |
191 const int kDefaultImageAuthorIDs[] = { | |
192 IDS_LOGIN_DEFAULT_USER_AUTHOR, | |
193 IDS_LOGIN_DEFAULT_USER_AUTHOR_1, | |
194 IDS_LOGIN_DEFAULT_USER_AUTHOR_2, | |
195 IDS_LOGIN_DEFAULT_USER_AUTHOR_3, | |
196 IDS_LOGIN_DEFAULT_USER_AUTHOR_4, | |
197 IDS_LOGIN_DEFAULT_USER_AUTHOR_5, | |
198 IDS_LOGIN_DEFAULT_USER_AUTHOR_6, | |
199 IDS_LOGIN_DEFAULT_USER_AUTHOR_7, | |
200 IDS_LOGIN_DEFAULT_USER_AUTHOR_8, | |
201 IDS_LOGIN_DEFAULT_USER_AUTHOR_9, | |
202 IDS_LOGIN_DEFAULT_USER_AUTHOR_10, | |
203 IDS_LOGIN_DEFAULT_USER_AUTHOR_11, | |
204 IDS_LOGIN_DEFAULT_USER_AUTHOR_12, | |
205 IDS_LOGIN_DEFAULT_USER_AUTHOR_13, | |
206 IDS_LOGIN_DEFAULT_USER_AUTHOR_14, | |
207 IDS_LOGIN_DEFAULT_USER_AUTHOR_15, | |
208 IDS_LOGIN_DEFAULT_USER_AUTHOR_16, | |
209 IDS_LOGIN_DEFAULT_USER_AUTHOR_17, | |
210 IDS_LOGIN_DEFAULT_USER_AUTHOR_18, | |
211 IDS_LOGIN_DEFAULT_USER_AUTHOR_19, | |
212 IDS_LOGIN_DEFAULT_USER_AUTHOR_20, | |
213 IDS_LOGIN_DEFAULT_USER_AUTHOR_21, | |
214 IDS_LOGIN_DEFAULT_USER_AUTHOR_22, | |
215 IDS_LOGIN_DEFAULT_USER_AUTHOR_23, | |
216 IDS_LOGIN_DEFAULT_USER_AUTHOR_24, | |
217 IDS_LOGIN_DEFAULT_USER_AUTHOR_25, | |
218 IDS_LOGIN_DEFAULT_USER_AUTHOR_26, | |
219 IDS_LOGIN_DEFAULT_USER_AUTHOR_27, | |
220 IDS_LOGIN_DEFAULT_USER_AUTHOR_28, | |
221 IDS_LOGIN_DEFAULT_USER_AUTHOR_29, | |
222 IDS_LOGIN_DEFAULT_USER_AUTHOR_30, | |
223 IDS_LOGIN_DEFAULT_USER_AUTHOR_31, | |
224 IDS_LOGIN_DEFAULT_USER_AUTHOR_32, | |
225 }; | |
226 | |
227 const int kDefaultImageWebsiteIDs[] = { | |
228 IDS_LOGIN_DEFAULT_USER_WEBSITE, | |
229 IDS_LOGIN_DEFAULT_USER_WEBSITE_1, | |
230 IDS_LOGIN_DEFAULT_USER_WEBSITE_2, | |
231 IDS_LOGIN_DEFAULT_USER_WEBSITE_3, | |
232 IDS_LOGIN_DEFAULT_USER_WEBSITE_4, | |
233 IDS_LOGIN_DEFAULT_USER_WEBSITE_5, | |
234 IDS_LOGIN_DEFAULT_USER_WEBSITE_6, | |
235 IDS_LOGIN_DEFAULT_USER_WEBSITE_7, | |
236 IDS_LOGIN_DEFAULT_USER_WEBSITE_8, | |
237 IDS_LOGIN_DEFAULT_USER_WEBSITE_9, | |
238 IDS_LOGIN_DEFAULT_USER_WEBSITE_10, | |
239 IDS_LOGIN_DEFAULT_USER_WEBSITE_11, | |
240 IDS_LOGIN_DEFAULT_USER_WEBSITE_12, | |
241 IDS_LOGIN_DEFAULT_USER_WEBSITE_13, | |
242 IDS_LOGIN_DEFAULT_USER_WEBSITE_14, | |
243 IDS_LOGIN_DEFAULT_USER_WEBSITE_15, | |
244 IDS_LOGIN_DEFAULT_USER_WEBSITE_16, | |
245 IDS_LOGIN_DEFAULT_USER_WEBSITE_17, | |
246 IDS_LOGIN_DEFAULT_USER_WEBSITE_18, | |
247 IDS_LOGIN_DEFAULT_USER_WEBSITE_19, | |
248 IDS_LOGIN_DEFAULT_USER_WEBSITE_20, | |
249 IDS_LOGIN_DEFAULT_USER_WEBSITE_21, | |
250 IDS_LOGIN_DEFAULT_USER_WEBSITE_22, | |
251 IDS_LOGIN_DEFAULT_USER_WEBSITE_23, | |
252 IDS_LOGIN_DEFAULT_USER_WEBSITE_24, | |
253 IDS_LOGIN_DEFAULT_USER_WEBSITE_25, | |
254 IDS_LOGIN_DEFAULT_USER_WEBSITE_26, | |
255 IDS_LOGIN_DEFAULT_USER_WEBSITE_27, | |
256 IDS_LOGIN_DEFAULT_USER_WEBSITE_28, | |
257 IDS_LOGIN_DEFAULT_USER_WEBSITE_29, | |
258 IDS_LOGIN_DEFAULT_USER_WEBSITE_30, | |
259 IDS_LOGIN_DEFAULT_USER_WEBSITE_31, | |
260 IDS_LOGIN_DEFAULT_USER_WEBSITE_32, | |
261 }; | |
262 | |
263 const int kDefaultImagesCount = arraysize(kDefaultImageResourceIDs); | |
264 | |
265 const int kFirstDefaultImageIndex = 19; | |
266 | |
267 // The order and the values of these constants are important for histograms | |
268 // of different Chrome OS versions to be merged smoothly. | |
269 const int kHistogramImageFromCamera = 19; | |
270 const int kHistogramImageFromFile = 20; | |
271 const int kHistogramImageOld = 21; | |
272 const int kHistogramImageFromProfile = 22; | |
273 const int kHistogramVideoFromCamera = 23; | |
274 const int kHistogramVideoFromFile = 24; | |
275 const int kHistogramImagesCount = kDefaultImagesCount + 6; | |
276 | |
277 int GetDefaultImageHistogramValue(int index) { | |
278 DCHECK(index >= 0 && index < kDefaultImagesCount); | |
279 // Create a gap in histogram values for | |
280 // [kHistogramImageFromCamera..kHistogramImageFromProfile] block to fit. | |
281 if (index < kHistogramImageFromCamera) | |
282 return index; | |
283 return index + 6; | |
284 } | |
285 | |
286 } // namespace chromeos | |
OLD | NEW |