import android.support.v7.widget.SearchView.OnQueryTextListener;
import android.support.v7.widget.Toolbar;
import android.text.ClipboardManager;
+import android.text.InputType;
import android.text.Spannable;
import android.text.method.LinkMovementMethod;
import android.text.style.ClickableSpan;
@Override
public void onInit(int status) {
ttsReady = true;
- updateTTSLanguage();
+ updateTTSLanguage(indexIndex);
}
});
final String searchToken = index.sortedIndexEntries.get(0).token;
final IndexEntry entry = index.findExact(searchToken);
if (entry == null || !searchToken.equals(entry.token)) {
- Log.e(LOG, "Couldn't find token: " + searchToken + ", " + entry.token);
+ Log.e(LOG, "Couldn't find token: " + searchToken + ", " + (entry == null ? "null" : entry.token));
}
}
indexPrepFinished = true;
// wrong place.
searchView.setQueryHint(getString(R.string.searchText));
searchView.setSubmitButtonEnabled(false);
+ searchView.setInputType(InputType.TYPE_CLASS_TEXT);
searchView.setImeOptions(
EditorInfo.IME_ACTION_DONE |
EditorInfo.IME_FLAG_NO_EXTRACT_UI |
languageButton.setImageResource(android.R.drawable.ic_media_previous);
}
}
- updateTTSLanguage();
+ updateTTSLanguage(indexIndex);
}
- private void updateTTSLanguage() {
+ private void updateTTSLanguage(int i) {
if (!ttsReady || index == null || textToSpeech == null) {
Log.d(LOG, "Can't updateTTSLanguage.");
return;
}
- final Locale locale = new Locale(index.sortLanguage.getIsoCode());
+ final Locale locale = new Locale(dictionary.indices.get(i).sortLanguage.getIsoCode());
Log.d(LOG, "Setting TTS locale to: " + locale);
+ try {
final int ttsResult = textToSpeech.setLanguage(locale);
if (ttsResult != TextToSpeech.LANG_AVAILABLE &&
ttsResult != TextToSpeech.LANG_COUNTRY_AVAILABLE) {
Log.e(LOG, "TTS not available in this language: ttsResult=" + ttsResult);
}
+ } catch (Exception e) {
+ Toast.makeText(this, getString(R.string.TTSbroken), Toast.LENGTH_LONG).show();
+ }
}
void onLanguageButtonClick() {
}
};
button.setOnClickListener(intentLauncher);
+ if (i == indexIndex && dictFile != null &&
+ dictFile.getName().equals(dictionaryInfo.uncompressedFilename)) {
+ button.setPressed(true);
+ }
result.addView(button);
}
//searchForSelection.setIcon(R.drawable.abs__ic_search);
}
- if (row instanceof TokenRow && ttsReady) {
+ if ((row instanceof TokenRow || selectedSpannableText != null) && ttsReady) {
final android.view.MenuItem speak = menu.add(R.string.speak);
+ final String textToSpeak = row instanceof TokenRow ? ((TokenRow) row).getToken() : selectedSpannableText;
+ updateTTSLanguage(row instanceof TokenRow ? indexIndex : selectedSpannableIndex);
speak.setOnMenuItemClickListener(new android.view.MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(android.view.MenuItem item) {
- textToSpeech.speak(((TokenRow) row).getToken(), TextToSpeech.QUEUE_FLUSH,
+ textToSpeech.speak(textToSpeak, TextToSpeech.QUEUE_FLUSH,
new HashMap<String, String>());
return false;
}
private void jumpToTextFromHyperLink(
final String selectedText, final int defaultIndexToUse) {
int indexToUse = -1;
+ int numFound = 0;
for (int i = 0; i < dictionary.indices.size(); ++i) {
final Index index = dictionary.indices.get(i);
if (indexPrepFinished) {
.getTokenRow(false);
if (tokenRow != null && tokenRow.hasMainEntry) {
indexToUse = i;
- break;
+ ++numFound;
}
}
} else {
Log.w(LOG, "Skipping findExact on index " + index.shortName);
}
}
- if (indexToUse == -1) {
+ if (numFound != 1 || indexToUse == -1) {
indexToUse = defaultIndexToUse;
}
// Without this extra delay, the call to jumpToRow that this
searchView.setIconifiedByDefault(text.length() > 0);
searchView.setIconified(false);
- // We don't want to show virtual keyboard when we're changing searchView text programatically:
- hideKeyboard();
-
if (triggerSearch) {
- onQueryTextListener.onQueryTextChange(text);
+ onSearchTextChange(text);
}
+
+ // We don't want to show virtual keyboard when we're changing searchView text programatically:
+ hideKeyboard();
}
// private long cursorDelayMillis = 100;
final TextView textView = new TextView(context);
textView.setText(text, BufferType.SPANNABLE);
createTokenLinkSpans(textView, (Spannable) textView.getText(), text);
- final TextViewLongClickListener textViewLongClickListenerIndex0 = new TextViewLongClickListener(
- 0);
- textView.setOnLongClickListener(textViewLongClickListenerIndex0);
+ textView.setOnLongClickListener(indexIndex > 0 ? textViewLongClickListenerIndex1 : textViewLongClickListenerIndex0);
result.setLongClickable(true);
// Doesn't work: