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: I6d4d34ea950f94e569e133670c2287b34ba50e30
2 files changed