Need help--TTS in settings crashes ("secure table" in 4.4.4?) $ incentive for help...
--The device is a Note Edge running 4.4.4, but I do not believe the problem is device-specific.
--The app is one specific Cereproc Text to Speech voice/engine
What happened? I was upgrading from a Note 3 to Edge. I used TiBu to backup and restore. I know better than to restore system apps. This is a user/data app. This app installs the apk, library files, and voice resource files to internal storage. Naturally TiBu does not properly backup this app. When I upgrade to a new device, I usually have to re-download. No big deal.
In this case, I forgot. After everything got restored, I went to Settings>Language/Input>TTS, and chose the Cereproc voice. Immediately, I get "Settings is not responding". The only way for me to select another TTS is to deinstall the Cereproc voice. Yes, I've tried wiping cache/dalvik and uninstall/reinstall, no joy.
The interesting thing is that I am able to install another Cereproc voice, any other, and it works just fine. It's only this specific one that will cause Settings to crash every time.
After doing some looking, I found these below. In excerpt:
When updating our TTS engine to comply with Android 4.4 from Android 4.3 we have experienced odd behaviour in relation to the TextToSpeechSettings and java.util.Locale.getISO3Country when the application had an active install during the update process on a Google Nexus 4. The result of this behaviour is that the TextToSpeech Settings crashes as a result of MissingResourceException when the Android system is handed the locale eng_NULL.
I am pretty sure this locale (eng_NULL) was somehow associated with the package name of our application as it's default. An uninstall/reinstall doesn't fix the problem, leading me to believe it is cached somewhere in the system settings, however, a reinstall with a different package name results in an error/warning free install/operation.
I think the correct behaviour should be that the application should be handed an eng_GBR locale and not eng_NULL as it's default. Without rooting the device, there does not seem to be a way to alter this value.
It seems to be fixed here:
This is an attempt to fix uncaught MissingResourceException
that would be thrown if default language of selected engine is
set to a locale that has no 3-letter country/language code.
Yet another post related to seemingly the same thing:
This in an Android bug and it's very frustrating.
There is a bug reported here (which is fixed as of this, but not yet rolled out to actual devices) and a related one here.
If the locale you are declaring cannot be matched by the system, then the Settings will persist to crash. I tried clearing everything to prevent this from happening, but the System is caching this value somewhere and attempting to match it prior to checking any updated locale in your app.
I changed my code to a locale that I knew would be matched, wiped my device and resintalled...
You need to make sure that you declare the locale correctly as heb-HEB I think!!! But beware!!! If Android doesn't recognise it, you'll get the crash again....
It's best to declare an extra locale that you default to and then check in the Settings if the locale code you are using is displayed correctly. If it's not, don't select it! And try again....
I posted on the bug report above, asking where Android persisted this incorrect locale, but I got no answer.... If you can find out, you wouldn't need to wipe your device. I tried wiping all caches in recovery, but it didn't work.
The engine settings are stored in secure table, and there is no way to alter those values (unless rooted)
The important take-aways are :
1) Wiping cache and reinstalling doesn't solve the problem
2) If it's a different version or package of the same app, it works just fine
3) Again, I can install any other Cereproc voice, and it works just fine
4) There is a "secure table"(?) where it *CAN* be altered and fixed if I have root? I do have root, but how do I fix this??
I can really use some help on this folks. I'll pledge $15 via PayPal to anyone who gives me specific information/instruction on getting past this. I really don't want to factory reset.....