package ee.ioc.phon.android.speak.model; import android.content.ComponentName; import android.content.Context; import android.graphics.drawable.Drawable; import android.util.Pair; import java.util.Comparator; import ee.ioc.phon.android.speak.R; import ee.ioc.phon.android.speechutils.RecognitionServiceManager; public class Combo { public static final Comparator SORT_BY_LANGUAGE = new SortByLanguage(); public static final Comparator SORT_BY_SELECTED_BY_LANGUAGE = new SortBySelectedByLanguage(); private final String mId; private final String mServiceLabel; private final String mLocaleShortLabel; private final String mLocaleLongLabel; private final String mAsString; private final String mFormatLabelComboItem; private final ComponentName mComponentName; private final String mLocaleAsStr; private boolean mIsSelected; public Combo(Context context, String id) { // Can return <null, ""> Pair<ComponentName, String> pair = RecognitionServiceManager.unflattenFromString(id); mId = id; mComponentName = pair.first; mLocaleAsStr = pair.second; mServiceLabel = RecognitionServiceManager.getServiceLabel(context, mComponentName); mLocaleShortLabel = RecognitionServiceManager.getDisplayLanguage(mLocaleAsStr); mLocaleLongLabel = RecognitionServiceManager.makeLangLabel(mLocaleAsStr); mFormatLabelComboItem = context.getString(R.string.labelComboItem); mAsString = String.format(context.getString(R.string.labelComboListItem), mServiceLabel, mLocaleLongLabel); } public String getId() { return mId; } public ComponentName getServiceComponent() { return mComponentName; } public String getLocaleAsStr() { return mLocaleAsStr; } public String getService() { return mServiceLabel; } public String getLanguage() { return mLocaleLongLabel; } public String getShortLabel() { return String.format(mFormatLabelComboItem, mServiceLabel, mLocaleShortLabel); } public String getLongLabel() { return String.format(mFormatLabelComboItem, mServiceLabel, mLocaleLongLabel); } public Drawable getIcon(Context context) { return RecognitionServiceManager.getServiceIcon(context, mComponentName); } public String toString() { return mAsString; } public boolean isSelected() { return mIsSelected; } public void setSelected(boolean b) { mIsSelected = b; } private static class SortByLanguage implements Comparator { public int compare(Object o1, Object o2) { Combo c1 = (Combo) o1; Combo c2 = (Combo) o2; return c1.getLanguage().compareToIgnoreCase(c2.getLanguage()); } } private static class SortBySelectedByLanguage implements Comparator { public int compare(Object o1, Object o2) { Combo c1 = (Combo) o1; Combo c2 = (Combo) o2; if (c1.isSelected() && c2.isSelected() || !c1.isSelected() && !c2.isSelected()) { return c1.getLanguage().compareToIgnoreCase(c2.getLanguage()); } if (c1.isSelected()) return -1; return 1; } } }