Commit Graph

3 Commits

Author SHA1 Message Date
Neil Fuller
4a18012a5d Fix for Settings timezone names when boot time is wrong
Avoid the libcore.icu.TimeZoneNames cache for time zone
settings by using ICU4J: it will not use timezone names
that were cached and can be missing / incorrect if the
clock was incorrect at zygote start. Instead, the devices
current time will be used when generating the names.

This change values correctness over performance. ICU does
perform its caching of names so I don't expect any
degredation to be noticeable.

Bug: 20879084
Bug: 26158280
Bug: 21015187
Bug: 26182881
Change-Id: I9f68e3e5232434949468305bbdaf7e697e58da1e
2015-12-17 11:43:29 +00:00
Neil Fuller
6394a39280 Stop showing long names for local timezones when it is ambiguous
Context:

Android uses a hand-crafted list for timezones to pick from in
Settings. Independently of what we actually show the user, when a
user is selecting their timezone they are selecting an olson timezone
ID. Separate olson ids exist for a sets of zone rules. If two places
have differed in their zone rules in the past they have different
olson ids. Olson Ids are usually named after cities and have
"exemplar locations", e.g. "Europe/London" covers the UK and the
exemplar location is "London".
Exemplar locations were often chosen based on historic considerations
and do not necessarily make sense to contemporary users.

Normal Android users don't know or care about any of this, but they do
understand geography/cities and sometimes understand things like
timezone names like "British Summer Time" (but usually not in other
countries).

Unfortunately timezone names understood by users also don't have a
one-to-one mapping with olson IDs. Two places can have the same
timezone name for part of the year but not the rest. For example, all
of a the country Foo may be using "Foo Standard Time" for part of the
year, but in summer some parts of the country may switch to "Foo
Summer Time" while others stay on "Foo Standard Time". These would
have different Olson Ids.

Also, two places that historically differed in their choice of
timezone rules may have since aligned. e.g. parts of Europe. They
still have their own olson ids.

The Android hand-crafted list is (I assume) based on a set of
compromises to provide reasonable coverage of users' needs without
overwhelming them with too many choices for historic irrelevancies.

To assist with picking a timezone that makes sense to a user, Android
currently does the following:

When selecting a timezone:

For "local" timezones Android shows the timezone "long name". e.g.
"British Summer Time", "Eastern Standard Time".
For non-local timezones Android uses the exemplar location (e.g. the
city).

This had an issue:

Some "local" timezones, e.g. Australia for English (Australian),
would show multiple entries for the same long timezone name without
any way of telling them apart.

After this change:

This change means that settings now uses the exemplar location in
preference when the Android display strings would be ambiguous. For
countries where there is no ambiguity (e.g. the UK) Android continues
to use the timezone long name.

Bug: 19058953
Bug: https://code.google.com/p/android-developer-preview/issues/detail?id=2132
Change-Id: I01651f2416f500652bd2bcf447d056efd4fd3598
2015-06-09 10:14:44 +01:00
Tony Mantler
b3543e0d1d Move ZoneGetter into SettingsLib
Change-Id: I8ecfc018e6de2514e9ada4c1b6fe9c8d71cc4e88
2015-05-28 14:49:11 -07:00