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
It enables customizations for certain cases like whether the user is able to
create restricted profiles or multiuser UI is disabled.
Bug: 21197002
Change-Id: Ia672c0f9bb451877f8debe04438b46cb2b7e9242
- In particular, tells OEMs how to add their own settings
Change-Id: I45e4fb7ff59705a2bcb53a72c71fd230f2e085c5
# Conflicts:
# src/com/android/settings/location/LocationSettings.java
When deciding to show the user section or not, Just rely
on supportsMultipleUsers. Don't check hasMultipleUsers.
BUG:21119929
Change-Id: Ifbddac10e2f6dc02b8e2e55b41ab9f5be018dfca
This change avoids the following SELinux denial:
W/SharedPreferenc(28238): type=1400 audit(0.0:8): avc: denied\
{ search } for name="com.android.settings" dev="mmcblk0p25"\
ino=8209 scontext=u:r:radio:s0 tcontext=u:object_r:system_app\
_data_file:s0 tclass=dir op_res=-13 ppid=318 pcomm="main"\
tgid=1850 tgcomm="m.android.phone"
When accessing Settings->Security->Set up SIM card lock.
There is really no need to store this information in
SharedPreferences anyway.
Change-Id: I3ba30d5d5e2c5b3c379397fbb06325101acaf490
Default phone information is not available for a secondary
user and when accessed using service command *#*#INFO#*#*,
it causes crash in Settings. Removed the preference for a
secondary user.
To verify:
1. Add user(slide down status bar>user icon>Add user>
OK>finish the setup guide).
2. As new user launch Phone app>input “*#*#4636#*#*”>
tap Phone information>check
Causes Settings to crash with:
Caused by: java.lang.IllegalStateException: Default phones haven't been made yet!
at com.android.internal.telephony.PhoneFactory.getDefaultPhone(PhoneFactory.java:214)
at com.android.settings.RadioInfo.onCreate(RadioInfo.java:263)
at android.app.Activity.performCreate(Activity.java:5990)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
Change-Id: Ie23107c5eead04183cfd8b5460a9a7a3426a99b8
Set persistent attribute to false so preferences are not
stored in shared preferences, this avoids the SElinux
denial:
W/SharedPreferenc( 6950): type=1400 audit(0.0:4): avc: \
denied { search } for name="com.android.settings" \
dev="mmcblk0p25" ino=48929 scontext=u:r:radio:s0 \
tcontext=u:object_r:system_app_data_file:s0 tclass=dir\
op_res=-13 ppid=319 pcomm="main" tgid=1589\
tgcomm="m.android.phone"
Observed when entering IMEI information in:
Settings > About Phone > Status > IMEI information.
It makes no sense to store this information in shared
preferences anyway so no functinoality is lost with this
change.
Change-Id: Id778bbadc8141167d679177b39e1d7a540d5752c
The fact that isSpellCheckerEnabled returns true does not mean
that getCurrentSpellChecker will return non null. By default
isSpellCheckerEnabled is true in TextServicesSettings, even when
there is no spellchecker service active on the device.
The issue can be verified by disabling the Google Keyboard (assuming
the GMS LatinImeGoogle is used) in Settings|Apps and later
entering Settings|Language & input. Without this patch Settings
crashes at that point with the following stack:
E/AndroidRuntime(13020): Caused by: java.lang.NullPointerException: \
Attempt to invoke virtual method 'java.lang.CharSequence android.vie\
w.textservice.SpellCheckerInfo.loadLabel(android.content.pm.PackageM\
anager)' on a null object reference
E/AndroidRuntime(13020): at com.android.settings.inputmethod.\
InputMethodAndLanguageSettings.onResume(InputMethodAndLanguageSettin\
gs.java:253)
E/AndroidRuntime(13020): at android.app.Fragment.performResum\
e(Fragment.java:2096)
E/AndroidRuntime(13020): at android.app.FragmentManagerImpl.m\
oveToState(FragmentManager.java:928)
E/AndroidRuntime(13020): at android.app.FragmentManagerImpl.m\
oveToState(FragmentManager.java:1067)
Bug: 19832033
Change-Id: I65e6d269572e064aa6897807b6611ef947d90211