OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/chromeos/system/timezone_util.h" | 5 #include "chrome/browser/chromeos/system/timezone_util.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/i18n/rtl.h" | 9 #include "base/i18n/rtl.h" |
10 #include "base/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
58 if (zone_strings == NULL) | 58 if (zone_strings == NULL) |
59 zone_strings = ures_getByKey(zone_bundle, "zone_strings", NULL, &status); | 59 zone_strings = ures_getByKey(zone_bundle, "zone_strings", NULL, &status); |
60 } | 60 } |
61 | 61 |
62 icu::UnicodeString zone_id; | 62 icu::UnicodeString zone_id; |
63 zone.getID(zone_id); | 63 zone.getID(zone_id); |
64 std::string zone_id_str; | 64 std::string zone_id_str; |
65 zone_id.toUTF8String(zone_id_str); | 65 zone_id.toUTF8String(zone_id_str); |
66 | 66 |
67 // Resource keys for timezones use ':' in place of '/'. | 67 // Resource keys for timezones use ':' in place of '/'. |
68 ReplaceSubstringsAfterOffset(&zone_id_str, 0, "/", ":"); | 68 base::ReplaceSubstringsAfterOffset(&zone_id_str, 0, "/", ":"); |
69 scoped_ptr<UResourceBundle, UResClose> zone_item( | 69 scoped_ptr<UResourceBundle, UResClose> zone_item( |
70 ures_getByKey(zone_strings, zone_id_str.c_str(), NULL, &status)); | 70 ures_getByKey(zone_strings, zone_id_str.c_str(), NULL, &status)); |
71 icu::UnicodeString city; | 71 icu::UnicodeString city; |
72 if (!U_FAILURE(status)) { | 72 if (!U_FAILURE(status)) { |
73 city = icu::ures_getUnicodeStringByKey(zone_item.get(), "ec", &status); | 73 city = icu::ures_getUnicodeStringByKey(zone_item.get(), "ec", &status); |
74 if (U_SUCCESS(status)) | 74 if (U_SUCCESS(status)) |
75 return base::string16(city.getBuffer(), city.length()); | 75 return base::string16(city.getBuffer(), city.length()); |
76 } | 76 } |
77 | 77 |
78 // Fallback case in case of failure. | 78 // Fallback case in case of failure. |
79 ReplaceSubstringsAfterOffset(&zone_id_str, 0, ":", "/"); | 79 base::ReplaceSubstringsAfterOffset(&zone_id_str, 0, ":", "/"); |
80 // Take the last component of a timezone id (e.g. 'Baz' in 'Foo/Bar/Baz'). | 80 // Take the last component of a timezone id (e.g. 'Baz' in 'Foo/Bar/Baz'). |
81 // Depending on timezones, keeping all but the 1st component | 81 // Depending on timezones, keeping all but the 1st component |
82 // (e.g. Bar/Baz) may be better, but our current list does not have | 82 // (e.g. Bar/Baz) may be better, but our current list does not have |
83 // any timezone for which that's the case. | 83 // any timezone for which that's the case. |
84 std::string::size_type slash_pos = zone_id_str.rfind('/'); | 84 std::string::size_type slash_pos = zone_id_str.rfind('/'); |
85 if (slash_pos != std::string::npos && slash_pos < zone_id_str.size()) | 85 if (slash_pos != std::string::npos && slash_pos < zone_id_str.size()) |
86 zone_id_str.erase(0, slash_pos + 1); | 86 zone_id_str.erase(0, slash_pos + 1); |
87 // zone id has '_' in place of ' '. | 87 // zone id has '_' in place of ' '. |
88 ReplaceSubstringsAfterOffset(&zone_id_str, 0, "_", " "); | 88 base::ReplaceSubstringsAfterOffset(&zone_id_str, 0, "_", " "); |
89 return base::ASCIIToUTF16(zone_id_str); | 89 return base::ASCIIToUTF16(zone_id_str); |
90 } | 90 } |
91 | 91 |
92 // Gets the given timezone's name for visualization. | 92 // Gets the given timezone's name for visualization. |
93 base::string16 GetTimezoneName(const icu::TimeZone& timezone) { | 93 base::string16 GetTimezoneName(const icu::TimeZone& timezone) { |
94 // Instead of using the raw_offset, use the offset in effect now. | 94 // Instead of using the raw_offset, use the offset in effect now. |
95 // For instance, US Pacific Time, the offset shown will be -7 in summer | 95 // For instance, US Pacific Time, the offset shown will be -7 in summer |
96 // while it'll be -8 in winter. | 96 // while it'll be -8 in winter. |
97 int raw_offset, dst_offset; | 97 int raw_offset, dst_offset; |
98 UDate now = icu::Calendar::getNow(); | 98 UDate now = icu::Calendar::getNow(); |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
190 VLOG(1) << "Refresh TimeZone: setting timezone to '" << timezone->timeZoneId | 190 VLOG(1) << "Refresh TimeZone: setting timezone to '" << timezone->timeZoneId |
191 << "'"; | 191 << "'"; |
192 | 192 |
193 chromeos::system::TimezoneSettings::GetInstance()->SetTimezoneFromID( | 193 chromeos::system::TimezoneSettings::GetInstance()->SetTimezoneFromID( |
194 base::UTF8ToUTF16(timezone->timeZoneId)); | 194 base::UTF8ToUTF16(timezone->timeZoneId)); |
195 } | 195 } |
196 } | 196 } |
197 | 197 |
198 } // namespace system | 198 } // namespace system |
199 } // namespace chromeos | 199 } // namespace chromeos |
OLD | NEW |