Miscellaneous Android 4.2 Regressions

Lots of people have already chimed in on StackOverflow about Settings.Global, notably the fact that AIRPLANE_MODE is no longer available to be modified in Settings.System. Now, only signature|system apps will be able to toggle on and off airplane mode, which will wipe out many an app widget. To be honest, this did not surprise me, as I never fully understood why it was left in Settings.System in the first place when Settings.Secure was carved out in 1.5.

That being said, I don’t think that it’s unreasonable for there to be a secured means from within the Android SDK to modify these sorts of settings. If a regular permission is deemed insufficient, then make them toggle-able via the device admin API, the way we can disable the camera.

Along a similar line, there has been another regression in the world of APN settings. Android 4.0 locked down the WRITE_APN_SETTINGS permission, making it signature|system, so ordinary SDK apps could no longer modify APN values. Android 4.2 has taken the next step and is using WRITE_APN_SETTINGS to secure read access to APNs. The argument given in the commit is:

Since the DB may contain corp passwords, we should secure it. Using the same permission as writing to the DB as the read is potentially as damaging as a write.

Once again, while I certainly can see the argument for blocking unfettered access to APN data, these are the sorts of changes that really should be available to device admin apps. While the vast majority of Android users do not need apps messing with APNs, and carriers should be working with their device manufacturers (who can offer signature|system apps), enterprises are left in the cold.

Another issue with all these changes is their unannounced nature. Sometimes, as is the case with Settings.Global, we are informed about them. Sometimes, as in both of the WRITE_APN_SETTINGS changes, we find out about them because apps crash in testing, and developers wonder why. You would think that by a version 4.2, a process could be in place where app-affecting changes like WRITE_APN_SETTINGS changes would be collected and published as part of the release notes.