import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
+import android.graphics.Color;
import android.graphics.Typeface;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.preference.PreferenceManager;
+import android.speech.tts.TextToSpeech;
+import android.speech.tts.TextToSpeech.OnInitListener;
import android.text.ClipboardManager;
import android.text.Editable;
import android.text.Selection;
import android.text.Spannable;
import android.text.TextWatcher;
import android.text.method.LinkMovementMethod;
+import android.text.style.ClickableSpan;
import android.text.style.StyleSpan;
import android.util.Log;
import android.util.TypedValue;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
+import android.view.View.OnFocusChangeListener;
import android.view.View.OnLongClickListener;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
-import android.widget.AdapterView;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
+import android.widget.TextView.BufferType;
import android.widget.Toast;
import com.hughes.android.dictionary.DictionaryInfo.IndexInfo;
import com.hughes.android.dictionary.engine.TransliteratorManager;
import com.hughes.android.util.IntentLauncher;
import com.hughes.android.util.NonLinkClickableSpan;
+import com.hughes.util.StringUtil;
import java.io.File;
import java.io.FileWriter;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
+import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.List;
+import java.util.Locale;
import java.util.Random;
import java.util.Set;
import java.util.concurrent.Executor;
static final String LOG = "QuickDic";
- private String initialSearchText;
-
DictionaryApplication application;
File dictFile = null;
// package for test.
final Handler uiHandler = new Handler();
+ TextToSpeech textToSpeech;
+ volatile boolean ttsReady;
+
+ int textColorFg = Color.BLACK;
+
+
private final Executor searchExecutor = Executors.newSingleThreadExecutor(new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
application = (DictionaryApplication) getApplication();
theme = application.getSelectedTheme();
+ textColorFg = getResources().getColor(theme.tokenRowFgColor);
final Intent intent = getIntent();
dictFile = new File(intent.getStringExtra(C.DICT_FILE));
+ ttsReady = false;
+ textToSpeech = new TextToSpeech(getApplicationContext(), new OnInitListener() {
+ @Override
+ public void onInit(int status) {
+ ttsReady = true;
+ updateTTSLanuage();
+ }
+ });
+
try {
final String name = application.getDictionaryName(dictFile.getName());
this.setTitle("QuickDic: " + name);
searchText = (EditText) findViewById(R.id.SearchText);
searchText.requestFocus();
searchText.addTextChangedListener(searchTextWatcher);
+ searchText.setOnFocusChangeListener(new OnFocusChangeListener() {
+ @Override
+ public void onFocusChange(View v, boolean hasFocus) {
+ Log.d(LOG, "searchText onFocusChange hasFocus=" + hasFocus);
+ }
+ });
// Set the search text from the intent, then the saved state.
String text = getIntent().getStringExtra(C.SEARCH_TOKEN);
onUpDownButton(false);
}
});
+ upButton.setVisibility(PreferenceManager.getDefaultSharedPreferences(this)
+ .getBoolean(getString(R.string.showPrevNextButtonsKey), true) ? View.VISIBLE
+ : View.GONE);
+ downButton.setVisibility(PreferenceManager.getDefaultSharedPreferences(this)
+ .getBoolean(getString(R.string.showPrevNextButtonsKey), true) ? View.VISIBLE
+ : View.GONE);
- getListView().setOnItemSelectedListener(new ListView.OnItemSelectedListener() {
- @Override
- public void onItemSelected(AdapterView<?> adapterView, View arg1, final int position,
- long id) {
- if (!searchText.isFocused()) {
- if (!isFiltered()) {
- final RowBase row = (RowBase) getListAdapter().getItem(position);
- Log.d(LOG, "onItemSelected: " + row.index());
- final TokenRow tokenRow = row.getTokenRow(true);
- searchText.setText(tokenRow.getToken());
- }
- }
- }
-
- @Override
- public void onNothingSelected(AdapterView<?> arg0) {
- }
- });
-
+// getListView().setOnItemSelectedListener(new ListView.OnItemSelectedListener() {
+// @Override
+// public void onItemSelected(AdapterView<?> adapterView, View arg1, final int position,
+// long id) {
+// if (!searchText.isFocused()) {
+// if (!isFiltered()) {
+// final RowBase row = (RowBase) getListAdapter().getItem(position);
+// Log.d(LOG, "onItemSelected: " + row.index());
+// final TokenRow tokenRow = row.getTokenRow(true);
+// searchText.setText(tokenRow.getToken());
+// }
+// }
+// }
+//
+// @Override
+// public void onNothingSelected(AdapterView<?> arg0) {
+// }
+// });
+//
// ContextMenu.
registerForContextMenu(getListView());
@Override
protected void onResume() {
+ Log.d(LOG, "onResume");
super.onResume();
- if (PreferenceActivity.prefsMightHaveChanged) {
- PreferenceActivity.prefsMightHaveChanged = false;
+ if (SettingsActivity.settingsMightHaveChanged) {
+ SettingsActivity.settingsMightHaveChanged = false;
finish();
startActivity(getIntent());
}
- if (initialSearchText != null) {
- setSearchText(initialSearchText, true);
- }
+ showKeyboard();
}
@Override
super.onPause();
}
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent result) {
+ super.onActivityResult(requestCode, resultCode, result);
+ if (result != null && result.hasExtra(C.SEARCH_TOKEN)) {
+ Log.d(LOG, "onActivityResult: " + result.getStringExtra(C.SEARCH_TOKEN));
+ jumpToTextFromHyperLink(result.getStringExtra(C.SEARCH_TOKEN), indexIndex);
+ }
+ }
+
private static void setDictionaryPrefs(final Context context, final File dictFile,
final int indexIndex, final String searchToken) {
final SharedPreferences.Editor prefs = PreferenceManager.getDefaultSharedPreferences(
private void onClearSearchTextButton() {
setSearchText("", true);
- Log.d(LOG, "Trying to show soft keyboard.");
- final InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
- manager.showSoftInput(searchText, InputMethodManager.SHOW_IMPLICIT);
+ showKeyboard();
+ }
+
+ private void showKeyboard() {
+ searchText.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ Log.d(LOG, "Trying to show soft keyboard.");
+ final boolean searchTextHadFocus = searchText.hasFocus();
+ searchText.requestFocus();
+ final InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
+ manager.showSoftInput(searchText, InputMethodManager.SHOW_IMPLICIT);
+ if (!searchTextHadFocus) {
+ defocusSearchText();
+ }
+ }}, 100);
}
void updateLangButton() {
// langButton.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
langButton.setText(index.shortName);
// }
+ updateTTSLanuage();
+ }
+
+ private void updateTTSLanuage() {
+ if (!ttsReady || index == null || textToSpeech == null) {
+ Log.d(LOG, "Can't updateTTSLanguage.");
+ return;
+ }
+ final Locale locale = new Locale(index.sortLanguage.getIsoCode());
+ Log.d(LOG, "Setting TTS locale to: " + locale);
+ 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);
+ }
}
void onLanguageButton() {
currentSearchOperation.interrupted.set(true);
currentSearchOperation = null;
}
- changeIndexGetFocusAndResearch((indexIndex + 1) % dictionary.indices.size());
+ changeIndexAndResearch((indexIndex + 1) % dictionary.indices.size());
}
void onLanguageButtonLongClick(final Context context) {
listView.setAdapter(new BaseAdapter() {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
+ final DictionaryInfo dictionaryInfo = getItem(position);
+
final LinearLayout result = new LinearLayout(parent.getContext());
- final DictionaryInfo dictionaryInfo = getItem(position);
for (int i = 0; i < dictionaryInfo.indexInfos.size(); ++i) {
+ if (i > 0) {
+ final TextView dash = new TextView(parent.getContext());
+ dash.setText("-");
+ result.addView(dash);
+ }
+
final IndexInfo indexInfo = dictionaryInfo.indexInfos.get(i);
final Button button = new Button(parent.getContext());
-// final String name = application
-// .getDictionaryName(dictionaryInfo.uncompressedFilename);
button.setText(indexInfo.shortName);
final IntentLauncher intentLauncher = new IntentLauncher(parent.getContext(),
- getLaunchIntent(application.getPath(dictionaryInfo.uncompressedFilename),
+ getLaunchIntent(
+ application.getPath(dictionaryInfo.uncompressedFilename),
i, searchText.getText().toString())) {
@Override
protected void onGo() {
};
};
button.setOnClickListener(intentLauncher);
- final LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
- ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
- layoutParams.width = 0;
- layoutParams.weight = 1.0f;
- button.setLayoutParams(layoutParams);
result.addView(button);
+
}
+
+ final TextView nameView = new TextView(parent.getContext());
+ final String name = application
+ .getDictionaryName(dictionaryInfo.uncompressedFilename);
+ nameView.setText(name);
+ final LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
+ ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
+ layoutParams.width = 0;
+ layoutParams.weight = 1.0f;
+ nameView.setLayoutParams(layoutParams);
+ result.addView(nameView);
+
return result;
}
dialog.show();
}
- private void changeIndexGetFocusAndResearch(final int newIndex) {
+ private void changeIndexAndResearch(int newIndex) {
+ Log.d(LOG, "Changing index to: " + newIndex);
+ if (newIndex == -1) {
+ Log.e(LOG, "Invalid index.");
+ newIndex = 0;
+ }
indexIndex = newIndex;
index = dictionary.indices.get(indexIndex);
indexAdapter = new IndexAdapter(index);
Log.d(LOG, "changingIndex, newLang=" + index.longName);
+ setDictionaryPrefs(this, dictFile, indexIndex, searchText.getText().toString());
setListAdapter(indexAdapter);
updateLangButton();
- searchText.requestFocus(); // Otherwise, nothing may happen.
- onSearchTextChange(searchText.getText().toString());
- setDictionaryPrefs(this, dictFile, indexIndex, searchText.getText().toString());
+ setSearchText(searchText.getText().toString(), true);
}
void onUpDownButton(final boolean up) {
}
final Index.IndexEntry dest = index.sortedIndexEntries.get(destIndexEntry);
Log.d(LOG, "onUpDownButton, destIndexEntry=" + dest.token);
- searchText.removeTextChangedListener(searchTextWatcher);
- searchText.setText(dest.token);
- if (searchText.getLayout() != null) {
- // Surprising, but this can otherwise crash sometimes...
- Selection.moveToRightEdge(searchText.getText(), searchText.getLayout());
- }
+ setSearchText(dest.token, false);
jumpToRow(index.sortedIndexEntries.get(destIndexEntry).startRow);
- searchText.addTextChangedListener(searchTextWatcher);
+ defocusSearchText();
}
// --------------------------------------------------------------------------
public boolean onCreateOptionsMenu(final Menu menu) {
application.onCreateGlobalOptionsMenu(this, menu);
- {
- final MenuItem randomWord = menu.add(getString(R.string.randomWord));
- randomWord.setOnMenuItemClickListener(new OnMenuItemClickListener() {
- public boolean onMenuItemClick(final MenuItem menuItem) {
- final String word = index.sortedIndexEntries.get(random
- .nextInt(index.sortedIndexEntries.size())).token;
- setSearchText(word, true);
- return false;
- }
- });
- }
+// {
+// final MenuItem randomWord = menu.add(getString(R.string.randomWord));
+// randomWord.setOnMenuItemClickListener(new OnMenuItemClickListener() {
+// public boolean onMenuItemClick(final MenuItem menuItem) {
+// final String word = index.sortedIndexEntries.get(random
+// .nextInt(index.sortedIndexEntries.size())).token;
+// setSearchText(word, true);
+// return false;
+// }
+// });
+// }
{
final MenuItem dictionaryList = menu.add(getString(R.string.dictionaryManager));
}
});
+ final MenuItem share = menu.add("Share");
+ share.setOnMenuItemClickListener(new OnMenuItemClickListener() {
+ public boolean onMenuItemClick(MenuItem item) {
+ Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
+ shareIntent.setType("text/plain");
+ shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, row.getTokenRow(true).getToken());
+ shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, row.getRawText(saveOnlyFirstSubentry));
+ startActivity(shareIntent);
+ return false;
+ }
+ });
+
final MenuItem copy = menu.add(android.R.string.copy);
copy.setOnMenuItemClickListener(new OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
selectedSpannableText));
searchForSelection.setOnMenuItemClickListener(new OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
- int indexToUse = -1;
- for (int i = 0; i < dictionary.indices.size(); ++i) {
- final Index index = dictionary.indices.get(i);
- if (indexPrepFinished) {
- System.out.println("Doing index lookup: on " + selectedText);
- final IndexEntry indexEntry = index.findExact(selectedText);
- if (indexEntry != null) {
- final TokenRow tokenRow = index.rows.get(indexEntry.startRow)
- .getTokenRow(false);
- if (tokenRow != null && tokenRow.hasMainEntry) {
- indexToUse = i;
- break;
- }
- }
- } else {
- Log.w(LOG, "Skipping findExact on index " + index.shortName);
- }
- }
- if (indexToUse == -1) {
- indexToUse = selectedSpannableIndex;
- }
- final boolean changeIndex = indexIndex != indexToUse;
- setSearchText(selectedText, !changeIndex); // If we're not
- // changing
- // index, we have
- // to
- // triggerSearch.
- if (changeIndex) {
- changeIndexGetFocusAndResearch(indexToUse);
- }
- // Give focus back to list view because typing is done.
- getListView().requestFocus();
+ jumpToTextFromHyperLink(selectedText, selectedSpannableIndex);
return false;
}
});
}
+ if (row instanceof TokenRow && ttsReady) {
+ final MenuItem speak = menu.add(R.string.speak);
+ speak.setOnMenuItemClickListener(new OnMenuItemClickListener() {
+ @Override
+ public boolean onMenuItemClick(MenuItem item) {
+ textToSpeech.speak(((TokenRow) row).getToken(), TextToSpeech.QUEUE_FLUSH,
+ new HashMap<String, String>());
+ return false;
+ }
+ });
+ }
+ }
+
+ private void jumpToTextFromHyperLink(final String selectedText, final int defaultIndexToUse) {
+ int indexToUse = -1;
+ for (int i = 0; i < dictionary.indices.size(); ++i) {
+ final Index index = dictionary.indices.get(i);
+ if (indexPrepFinished) {
+ System.out.println("Doing index lookup: on " + selectedText);
+ final IndexEntry indexEntry = index.findExact(selectedText);
+ if (indexEntry != null) {
+ final TokenRow tokenRow = index.rows.get(indexEntry.startRow)
+ .getTokenRow(false);
+ if (tokenRow != null && tokenRow.hasMainEntry) {
+ indexToUse = i;
+ break;
+ }
+ }
+ } else {
+ Log.w(LOG, "Skipping findExact on index " + index.shortName);
+ }
+ }
+ if (indexToUse == -1) {
+ indexToUse = defaultIndexToUse;
+ }
+ final boolean changeIndex = indexIndex != indexToUse;
+ if (changeIndex) {
+ setSearchText(selectedText, false);
+ changeIndexAndResearch(indexToUse);
+ } else {
+ setSearchText(selectedText, true);
+ }
}
@Override
getListView().requestFocus();
// Visual indication that a new keystroke will clear the search text.
- searchText.selectAll();
+ // Doesn't seem to work unless earchText has focus.
+ // searchText.selectAll();
}
@SuppressWarnings("deprecation")
}
}
}, 20);
-
}
private final void jumpToRow(final int row) {
- setSelection(row);
+ final boolean refocusSearchText = searchText.hasFocus();
+ Log.d(LOG, "jumpToRow: " + row + ", refocusSearchText=" + refocusSearchText);
+ getListView().requestFocusFromTouch();
+ getListView().setSelectionFromTop(row, 0);
getListView().setSelected(true);
+ if (refocusSearchText) {
+ searchText.requestFocus();
+ }
+ //Log.d(LOG, "getSelectedItemPosition():" + getSelectedItemPosition());
}
static final Pattern WHITESPACE = Pattern.compile("\\s+");
boolean done = false;
SearchOperation(final String searchText, final Index index) {
- this.searchText = searchText.trim();
+ this.searchText = StringUtil.normalizeWhitespace(searchText);
this.index = index;
}
searchResult = index.findInsertionPoint(searchText, interrupted);
} else {
searchTokens = Arrays.asList(searchTokenArray);
- multiWordSearchResult = index.multiWordSearch(searchTokens, interrupted);
+ multiWordSearchResult = index.multiWordSearch(searchText, searchTokens, interrupted);
}
Log.d(LOG,
"searchText=" + searchText + ", searchDuration="
searchFinished(SearchOperation.this);
}
});
+ } else {
+ Log.d(LOG, "interrupted, skipping searchFinished.");
}
} catch (Exception e) {
Log.e(LOG, "Failure during search (can happen during Activity close.");
return result;
}
- private TableLayout getView(HtmlEntry.Row row, ViewGroup parent, final TableLayout result) {
+ private TableLayout getPossibleLinkToHtmlEntryView(final boolean isTokenRow,
+ final String text, final boolean hasMainEntry, final List<HtmlEntry> htmlEntries,
+ final String htmlTextToHighlight, ViewGroup parent, final TableLayout result) {
final Context context = parent.getContext();
- final HtmlEntry htmlEntry = row.getEntry();
-
- // final TableRow tableRow = new TableRow(context);
- final LinearLayout tableRow = new LinearLayout(context);
- result.addView(tableRow);
-
- // Text.
- final TextView textView = new TextView(context);
- textView.setText(htmlEntry.title);
- textView.setLayoutParams(new LinearLayout.LayoutParams(0,
- ViewGroup.LayoutParams.WRAP_CONTENT, 1.0f));
- tableRow.addView(textView);
-
- // Button.
- final Button button = new Button(context);
- button.setText("open");
- button.setLayoutParams(new LinearLayout.LayoutParams(
- ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, 0.0f));
- tableRow.addView(button);
-
- button.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- startActivity(HtmlDisplayActivity.getHtmlIntent(String.format(
- "<html><head></head><body>%s</body></html>", htmlEntry.html)));
- }
- });
-
- return result;
- }
-
- private TableLayout getView(TokenRow row, ViewGroup parent, final TableLayout result) {
- final Context context = parent.getContext();
-
final TableRow tableRow = new TableRow(result.getContext());
- tableRow.setBackgroundResource(row.hasMainEntry ? theme.tokenRowMainBg
+ tableRow.setBackgroundResource(hasMainEntry ? theme.tokenRowMainBg
: theme.tokenRowOtherBg);
- tableRow.setPadding(mPaddingDefault, mPaddingDefault, mPaddingDefault, 0);
+ if (isTokenRow) {
+ tableRow.setPadding(mPaddingDefault, mPaddingDefault, mPaddingDefault, 0);
+ } else {
+ tableRow.setPadding(mPaddingLarge, mPaddingDefault, mPaddingDefault, 0);
+ }
result.addView(tableRow);
-
- final IndexEntry indexEntry = row.getIndexEntry();
+ // Make it so we can long-click on these token rows, too:
final TextView textView = new TextView(context);
- textView.setText(indexEntry.token);
+ textView.setText(text, BufferType.SPANNABLE);
+ createTokenLinkSpans(textView, (Spannable) textView.getText(), text);
+ final TextViewLongClickListener textViewLongClickListenerIndex0 = new TextViewLongClickListener(
+ 0);
+ textView.setOnLongClickListener(textViewLongClickListenerIndex0);
+ result.setLongClickable(true);
+
// Doesn't work:
// textView.setTextColor(android.R.color.secondary_text_light);
- textView.setTextAppearance(context, theme.tokenRowFg);
textView.setTypeface(typeface);
- textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 5 * fontSizeSp / 4);
TableRow.LayoutParams lp = new TableRow.LayoutParams(0);
+ if (isTokenRow) {
+ textView.setTextAppearance(context, theme.tokenRowFg);
+ textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 4 * fontSizeSp / 3);
+ } else {
+ textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, fontSizeSp);
+ }
lp.weight = 1.0f;
+
textView.setLayoutParams(lp);
tableRow.addView(textView);
-
- if (!indexEntry.htmlEntries.isEmpty()) {
- final ImageButton button = new ImageButton(context);
- button.setImageResource(R.drawable.ic_menu_forward);
- button.setOnClickListener(new OnClickListener() {
+ if (!htmlEntries.isEmpty()) {
+ final ClickableSpan clickableSpan = new ClickableSpan() {
+ @Override
+ public void onClick(View widget) {
+ }
+ };
+ ((Spannable) textView.getText()).setSpan(clickableSpan, 0, text.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
+ result.setClickable(true);
+ textView.setClickable(true);
+ textView.setMovementMethod(LinkMovementMethod.getInstance());
+ textView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
- final String html = HtmlEntry.htmlBody(indexEntry.htmlEntries);
- startActivity(HtmlDisplayActivity.getHtmlIntent(String.format(
- "<html><head></head><body>%s</body></html>", html)));
+ String html = HtmlEntry.htmlBody(htmlEntries, index.shortName);
+ //Log.d(LOG, "html=" + html);
+ startActivityForResult(
+ HtmlDisplayActivity.getHtmlIntent(String.format(
+ "<html><head></head><body>%s</body></html>", html),
+ htmlTextToHighlight, false),
+ 0);
}
});
- tableRow.addView(button);
- lp = new TableRow.LayoutParams(1);
- lp.weight = 0.0f;
- button.setLayoutParams(lp);
- //result.setColumnStretchable(0, true);
- //result.setColumnStretchable(1, false);
}
-
-
return result;
}
+ private TableLayout getView(TokenRow row, ViewGroup parent, final TableLayout result) {
+ final IndexEntry indexEntry = row.getIndexEntry();
+ return getPossibleLinkToHtmlEntryView(true, indexEntry.token, row.hasMainEntry,
+ indexEntry.htmlEntries, null, parent, result);
+ }
+
+ private TableLayout getView(HtmlEntry.Row row, ViewGroup parent, final TableLayout result) {
+ final HtmlEntry htmlEntry = row.getEntry();
+ final TokenRow tokenRow = row.getTokenRow(true);
+ return getPossibleLinkToHtmlEntryView(false,
+ getString(R.string.seeAlso, htmlEntry.title, htmlEntry.entrySource.getName()),
+ false, Collections.singletonList(htmlEntry), tokenRow.getToken(), parent,
+ result);
+ }
+
}
static final Pattern CHAR_DASH = Pattern.compile("['\\p{L}\\p{M}\\p{N}]+");
-
+
private void createTokenLinkSpans(final TextView textView, final Spannable spannable,
final String text) {
// Saw from the source code that LinkMovementMethod sets the selection!
textView.setMovementMethod(LinkMovementMethod.getInstance());
final Matcher matcher = CHAR_DASH.matcher(text);
while (matcher.find()) {
- spannable.setSpan(new NonLinkClickableSpan(), matcher.start(), matcher.end(),
+ spannable.setSpan(new NonLinkClickableSpan(textColorFg), matcher.start(), matcher.end(),
Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
}
}
private class SearchTextWatcher implements TextWatcher {
public void afterTextChanged(final Editable searchTextEditable) {
if (searchText.hasFocus()) {
- Log.d(LOG, "Search text changed with focus: " + searchText.getText());
+ Log.d(LOG, "SearchTextWatcher: Search text changed with focus: " + searchText.getText());
// If they were typing to cause the change, update the UI.
onSearchTextChange(searchText.getText().toString());
}
}
void setFiltered(final SearchOperation searchOperation) {
- ((Button) findViewById(R.id.UpButton)).setEnabled(false);
- ((Button) findViewById(R.id.DownButton)).setEnabled(false);
+ ((ImageButton) findViewById(R.id.UpButton)).setEnabled(false);
+ ((ImageButton) findViewById(R.id.DownButton)).setEnabled(false);
rowsToShow = searchOperation.multiWordSearchResult;
setListAdapter(new IndexAdapter(index, rowsToShow, searchOperation.searchTokens));
}
void clearFiltered() {
- ((Button) findViewById(R.id.UpButton)).setEnabled(true);
- ((Button) findViewById(R.id.DownButton)).setEnabled(true);
+ ((ImageButton) findViewById(R.id.UpButton)).setEnabled(true);
+ ((ImageButton) findViewById(R.id.DownButton)).setEnabled(true);
setListAdapter(new IndexAdapter(index));
rowsToShow = null;
}