ohos: Offer only installed voices


listVoices() reports every timbre the engine knows about, including ones
whose model is not present on the device. Those cannot be used: creating
an engine with such a timbre fails, for example person 21 (zh_CN male)
was rejected with code 50008 and "HyVoiceSynthesizer error: Invalid
relative path" on a device where listVoices() reported it as
"Downloadable".

Read VoiceInfo.status and skip anything that is not "INSTALLED", so
availableVoices() and availableLocales() only offer what can actually be
selected. The status is optional in the OHOS API, so a voice that does
not report one is kept as usable.

The OHOS API does provide downloadVoice() to fetch a timbre model, but
QTextToSpeech has no interface for downloading a voice, so the user has
to install it outside the application before it becomes available here.

Task-number: QTBUG-149561
Pick-to: 6.12
Change-Id: Ibe644a38db62e64d2ec4ff75332ee1070ac93c20
Reviewed-by: Liang Qi <liang.qi@qt.io>
Reviewed-by: Zbigniew Chyla <zbigniew.chyla@qt.io>
commitab7bacad1cbb66bb06b43fd9280627bfe7ddc4fc
parenta9a3b5c54e36de05f7a26dd9c8a28749aed41d0e
authorArkadiusz Zarębski <arkadiusz.zarebski@qt.io>
committerArkadiusz Zarębski <arkadiusz.zarebski@qt.io>
commit timeThu, 17 Sep 2026 14:04:51 +0000