Make TTS languages list sorted.
Also makes sure that languages list always have underlying array after onCreate. Bug: 5640782 Change-Id: Id85d0099efccc9a64458d24853b5c98a35307b38
This commit is contained in:
@@ -31,11 +31,15 @@ import android.speech.tts.TextToSpeech;
|
|||||||
import android.speech.tts.TtsEngines;
|
import android.speech.tts.TtsEngines;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
import android.util.Pair;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.SettingsPreferenceFragment;
|
import com.android.settings.SettingsPreferenceFragment;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Comparator;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
|
|
||||||
@@ -119,12 +123,15 @@ public class TtsEngineSettingsFragment extends SettingsPreferenceFragment implem
|
|||||||
mInstallVoicesPreference.setEnabled(false);
|
mInstallVoicesPreference.setEnabled(false);
|
||||||
|
|
||||||
mLocalePreference.setEnabled(false);
|
mLocalePreference.setEnabled(false);
|
||||||
|
mLocalePreference.setEntries(new CharSequence[0]);
|
||||||
|
mLocalePreference.setEntryValues(new CharSequence[0]);
|
||||||
|
|
||||||
mVoiceDataDetails = getArguments().getParcelable(TtsEnginePreference.FRAGMENT_ARGS_VOICES);
|
mVoiceDataDetails = getArguments().getParcelable(TtsEnginePreference.FRAGMENT_ARGS_VOICES);
|
||||||
|
|
||||||
mTts = new TextToSpeech(getActivity().getApplicationContext(), mTtsInitListener,
|
mTts = new TextToSpeech(getActivity().getApplicationContext(), mTtsInitListener,
|
||||||
getEngineName());
|
getEngineName());
|
||||||
|
|
||||||
|
|
||||||
// Check if data packs changed
|
// Check if data packs changed
|
||||||
checkTtsData();
|
checkTtsData();
|
||||||
|
|
||||||
@@ -194,10 +201,8 @@ public class TtsEngineSettingsFragment extends SettingsPreferenceFragment implem
|
|||||||
String currentLocale = mEnginesHelper.getLocalePrefForEngine(
|
String currentLocale = mEnginesHelper.getLocalePrefForEngine(
|
||||||
getEngineName());
|
getEngineName());
|
||||||
|
|
||||||
CharSequence[] entries = new CharSequence[availableLangs.size()];
|
ArrayList<Pair<String, String>> entryPairs =
|
||||||
CharSequence[] entryValues = new CharSequence[availableLangs.size()];
|
Lists.newArrayListWithCapacity(availableLangs.size());
|
||||||
|
|
||||||
int selectedLanguageIndex = -1;
|
|
||||||
for (int i = 0; i < availableLangs.size(); i++) {
|
for (int i = 0; i < availableLangs.size(); i++) {
|
||||||
String[] langCountryVariant = availableLangs.get(i).split("-");
|
String[] langCountryVariant = availableLangs.get(i).split("-");
|
||||||
Locale loc = null;
|
Locale loc = null;
|
||||||
@@ -210,14 +215,32 @@ public class TtsEngineSettingsFragment extends SettingsPreferenceFragment implem
|
|||||||
langCountryVariant[2]);
|
langCountryVariant[2]);
|
||||||
}
|
}
|
||||||
if (loc != null){
|
if (loc != null){
|
||||||
entries[i] = loc.getDisplayName();
|
entryPairs.add(new Pair<String, String>(
|
||||||
entryValues[i] = availableLangs.get(i);
|
loc.getDisplayName(), availableLangs.get(i)));
|
||||||
if (availableLangs.get(i).equalsIgnoreCase(currentLocale)) {
|
|
||||||
selectedLanguageIndex = i;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Sort it
|
||||||
|
Collections.sort(entryPairs, new Comparator<Pair<String, String>>() {
|
||||||
|
@Override
|
||||||
|
public int compare(Pair<String, String> lhs, Pair<String, String> rhs) {
|
||||||
|
return lhs.first.compareToIgnoreCase(rhs.first);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Get two arrays out of one of pairs
|
||||||
|
int selectedLanguageIndex = -1;
|
||||||
|
CharSequence[] entries = new CharSequence[availableLangs.size()];
|
||||||
|
CharSequence[] entryValues = new CharSequence[availableLangs.size()];
|
||||||
|
int i = 0;
|
||||||
|
for (Pair<String, String> entry : entryPairs) {
|
||||||
|
if (entry.second.equalsIgnoreCase(currentLocale)) {
|
||||||
|
selectedLanguageIndex = i;
|
||||||
|
}
|
||||||
|
entries[i] = entry.first;
|
||||||
|
entryValues[i++] = entry.second;
|
||||||
|
}
|
||||||
|
|
||||||
mLocalePreference.setEntries(entries);
|
mLocalePreference.setEntries(entries);
|
||||||
mLocalePreference.setEntryValues(entryValues);
|
mLocalePreference.setEntryValues(entryValues);
|
||||||
if (selectedLanguageIndex > -1) {
|
if (selectedLanguageIndex > -1) {
|
||||||
|
Reference in New Issue
Block a user