package ee.ioc.phon.android.speak.model;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.speech.RecognizerIntent;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import ee.ioc.phon.android.speak.R;
import ee.ioc.phon.android.speak.activity.RewritesActivity;
import ee.ioc.phon.android.speechutils.Extras;
import ee.ioc.phon.android.speechutils.editor.UtteranceRewriter;
import ee.ioc.phon.android.speechutils.utils.PreferenceUtils;
public class Rewrites {
private static final Comparator SORT_BY_ID = new Rewrites.SortById();
private SharedPreferences mPrefs;
private Resources mRes;
private final String mId;
public Rewrites(SharedPreferences prefs, Resources res, String id) {
mPrefs = prefs;
mRes = res;
mId = id;
}
public String getId() {
return mId;
}
public String toString() {
return mId;
}
public boolean isSelected() {
return getDefaults().contains(mId);
}
public boolean toggle() {
Set<String> set = new HashSet(getDefaults());
if (set.contains(mId)) {
set.remove(mId);
putDefaults(set);
return false;
}
set.add(mId);
putDefaults(set);
return true;
}
public Intent getK6neleIntent() {
Intent intent = new Intent();
intent.setClassName("ee.ioc.phon.android.speak", "ee.ioc.phon.android.speak.activity.SpeechActionActivity");
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, mId);
intent.putExtra(Extras.EXTRA_AUTO_START, true);
intent.putExtra(Extras.EXTRA_RESULT_REWRITES, new String[]{mId});
return intent;
}
public Intent getShowIntent() {
Intent intent = new Intent();
intent.setClassName("ee.ioc.phon.android.speak", "ee.ioc.phon.android.speak.activity.RewritesActivity");
intent.putExtra(RewritesActivity.EXTRA_NAME, mId);
return intent;
}
public Intent getSendIntent() {
String rewrites = PreferenceUtils.getPrefMapEntry(mPrefs, mRes, R.string.keyRewritesMap, mId);
UtteranceRewriter ur = new UtteranceRewriter(rewrites);
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_SUBJECT, mId);
intent.putExtra(Intent.EXTRA_TEXT, ur.toTsv());
intent.setType("text/tab-separated-values");
return intent;
}
public String[] getRules() {
String rewrites = PreferenceUtils.getPrefMapEntry(mPrefs, mRes, R.string.keyRewritesMap, mId);
UtteranceRewriter ur = new UtteranceRewriter(rewrites);
return ur.toStringArray();
}
public void rename(String newName) {
if (!mId.equals(newName)) {
if (newName != null) {
String rewrites = PreferenceUtils.getPrefMapEntry(mPrefs, mRes, R.string.keyRewritesMap, mId);
PreferenceUtils.putPrefMapEntry(mPrefs, mRes, R.string.keyRewritesMap, newName, rewrites);
}
Set<String> deleteKeys = new HashSet<>();
deleteKeys.add(mId);
PreferenceUtils.clearPrefMap(mPrefs, mRes, R.string.keyRewritesMap, deleteKeys);
Set<String> defaults = new HashSet(getDefaults());
if (defaults.contains(mId)) {
defaults.remove(mId);
if (newName != null) {
defaults.add(newName);
}
putDefaults(defaults);
}
}
}
public void delete() {
rename(null);
}
private Set<String> getDefaults() {
return PreferenceUtils.getPrefStringSet(mPrefs, mRes, R.string.defaultRewriteTables);
}
private void putDefaults(Set<String> set) {
PreferenceUtils.putPrefStringSet(mPrefs, mRes, R.string.defaultRewriteTables, set);
}
public static List<Rewrites> getTables(SharedPreferences prefs, Resources res) {
List<String> rewritesIds = new ArrayList<>(PreferenceUtils.getPrefMapKeys(prefs, res, R.string.keyRewritesMap));
List<Rewrites> rewritesTables = new ArrayList<>();
for (String id : rewritesIds) {
rewritesTables.add(new Rewrites(prefs, res, id));
}
Collections.sort(rewritesTables, SORT_BY_ID);
return rewritesTables;
}
private static class SortById implements Comparator {
public int compare(Object o1, Object o2) {
Rewrites c1 = (Rewrites) o1;
Rewrites c2 = (Rewrites) o2;
return c1.getId().compareToIgnoreCase(c2.getId());
}
}
}