package com.hughes.android.dictionary;
+import android.annotation.SuppressLint;
import android.app.Dialog;
-import android.app.ListActivity;
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.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.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.KeyEvent;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.MenuItem.OnMenuItemClickListener;
+import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.ViewGroup;
import android.view.WindowManager;
+import android.view.inputmethod.EditorInfo;
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.EditText;
+import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView.BufferType;
import android.widget.Toast;
+import com.actionbarsherlock.app.ActionBar;
+import com.actionbarsherlock.app.SherlockListActivity;
+import com.actionbarsherlock.view.Menu;
+import com.actionbarsherlock.view.MenuItem;
+import com.actionbarsherlock.view.MenuItem.OnMenuItemClickListener;
+import com.actionbarsherlock.widget.SearchView;
+import com.actionbarsherlock.widget.SearchView.OnQueryTextListener;
import com.hughes.android.dictionary.DictionaryInfo.IndexInfo;
import com.hughes.android.dictionary.engine.Dictionary;
import com.hughes.android.dictionary.engine.EntrySource;
import com.hughes.android.dictionary.engine.HtmlEntry;
import com.hughes.android.dictionary.engine.Index;
import com.hughes.android.dictionary.engine.Index.IndexEntry;
+import com.hughes.android.dictionary.engine.Language;
+import com.hughes.android.dictionary.engine.Language.LanguageResources;
import com.hughes.android.dictionary.engine.PairEntry;
import com.hughes.android.dictionary.engine.PairEntry.Pair;
import com.hughes.android.dictionary.engine.RowBase;
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.regex.Matcher;
import java.util.regex.Pattern;
-public class DictionaryActivity extends ListActivity {
+public class DictionaryActivity extends SherlockListActivity {
static final String LOG = "QuickDic";
TextToSpeech textToSpeech;
volatile boolean ttsReady;
+
+ int textColorFg = Color.BLACK;
+
private final Executor searchExecutor = Executors.newSingleThreadExecutor(new ThreadFactory() {
@Override
int fontSizeSp;
- EditText searchText;
+// EditText searchText;
+ SearchView searchView;
+ ImageView searchHintIcon;
- Button langButton;
+ MenuItem nextWordMenuItem, previousWordMenuItem;
// Never null.
private File wordList = null;
@Override
protected void onSaveInstanceState(final Bundle outState) {
- super.onSaveInstanceState(outState);
- Log.d(LOG, "onSaveInstanceState: " + searchText.getText().toString());
+ super.onSaveInstanceState(outState);
+ Log.d(LOG, "onSaveInstanceState: " + searchView.getQuery().toString());
outState.putInt(C.INDEX_INDEX, indexIndex);
- outState.putString(C.SEARCH_TOKEN, searchText.getText().toString());
+ outState.putString(C.SEARCH_TOKEN, searchView.getQuery().toString());
}
@Override
application = (DictionaryApplication) getApplication();
theme = application.getSelectedTheme();
+ textColorFg = getResources().getColor(theme.tokenRowFgColor);
final Intent intent = getIntent();
dictFile = new File(intent.getStringExtra(C.DICT_FILE));
updateTTSLanuage();
}
});
-
+
try {
final String name = application.getDictionaryName(dictFile.getName());
this.setTitle("QuickDic: " + name);
uiHandler.post(new Runnable() {
@Override
public void run() {
- onSearchTextChange(searchText.getText().toString());
+ onSearchTextChange(searchView.getQuery().toString());
}
});
}
}
setContentView(R.layout.dictionary_activity);
- 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);
- if (savedInstanceState != null) {
- text = savedInstanceState.getString(C.SEARCH_TOKEN);
- }
- if (text == null) {
- text = "";
- }
- setSearchText(text, true);
- Log.d(LOG, "Trying to restore searchText=" + text);
+// 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);
+// }
+// });
- final View clearSearchTextButton = findViewById(R.id.ClearSearchTextButton);
- clearSearchTextButton.setOnClickListener(new OnClickListener() {
- public void onClick(View v) {
- onClearSearchTextButton();
- }
- });
- clearSearchTextButton.setVisibility(PreferenceManager.getDefaultSharedPreferences(this)
- .getBoolean(getString(R.string.showClearSearchTextButtonKey), true) ? View.VISIBLE
- : View.GONE);
-
- langButton = (Button) findViewById(R.id.LangButton);
- langButton.setOnClickListener(new OnClickListener() {
- public void onClick(View v) {
- onLanguageButton();
- }
- });
- langButton.setOnLongClickListener(new OnLongClickListener() {
- @Override
- public boolean onLongClick(View v) {
- onLanguageButtonLongClick(v.getContext());
- return true;
- }
- });
- updateLangButton();
- final View upButton = findViewById(R.id.UpButton);
- upButton.setOnClickListener(new OnClickListener() {
- public void onClick(View v) {
- onUpDownButton(true);
- }
- });
- final View downButton = findViewById(R.id.DownButton);
- downButton.setOnClickListener(new OnClickListener() {
- public void onClick(View v) {
- onUpDownButton(false);
- }
- });
+
+// final View clearSearchTextButton = findViewById(R.id.ClearSearchTextButton);
+// clearSearchTextButton.setOnClickListener(new OnClickListener() {
+// public void onClick(View v) {
+// onClearSearchTextButton();
+// }
+// });
+// clearSearchTextButton.setVisibility(PreferenceManager.getDefaultSharedPreferences(this)
+// .getBoolean(getString(R.string.showClearSearchTextButtonKey), 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 (!searchText.hasFocus()) {
// if (!isFiltered()) {
// final RowBase row = (RowBase) getListAdapter().getItem(position);
// Log.d(LOG, "onItemSelected: " + row.index());
// }
Log.d(LOG, "wordList=" + wordList + ", saveOnlyFirstSubentry=" + saveOnlyFirstSubentry);
- setDictionaryPrefs(this, dictFile, indexIndex, searchText.getText().toString());
+ ActionBar actionBar = getSupportActionBar();
+ actionBar.setDisplayShowTitleEnabled(false);
+
+ //Inflate the custom view
+// View customNav = LayoutInflater.from(this).inflate(R.layout.dictionary_search_view, null);
+ searchView = new SearchView(getSupportActionBar().getThemedContext());
+ searchView.setIconifiedByDefault(false);
+// searchView.setIconified(false); // puts the magifying glass in the wrong place.
+ searchView.setQueryHint(getString(R.string.searchText));
+ searchView.setSubmitButtonEnabled(false);
+ final int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 300, getResources().getDisplayMetrics());
+ FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(width, FrameLayout.LayoutParams.WRAP_CONTENT);
+ searchView.setLayoutParams(lp);
+// searchView.setMaxWidth(200);
+ searchView.setImeOptions(
+ EditorInfo.IME_ACTION_SEARCH |
+ EditorInfo.IME_FLAG_NO_EXTRACT_UI |
+ EditorInfo.IME_FLAG_NO_ENTER_ACTION |
+// EditorInfo.IME_FLAG_NO_FULLSCREEN | // Requires API 11
+ EditorInfo.IME_MASK_ACTION |
+ EditorInfo.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
+ searchView.setOnQueryTextListener(new OnQueryTextListener() {
+ @Override
+ public boolean onQueryTextSubmit(String query) {
+ Log.d(LOG, "OnQueryTextListener: onQueryTextSubmit: " + searchView.getQuery());
+ return true;
+ }
+
+ @Override
+ public boolean onQueryTextChange(String newText) {
+// if (searchView.hasFocus()) {
+ Log.d(LOG, "OnQueryTextListener: onQueryTextChange: " + searchView.getQuery());
+ // If they were typing to cause the change, update the UI.
+ onSearchTextChange(searchView.getQuery().toString());
+// }
+ return true;
+ }
+ });
+
+ // Set the search text from the intent, then the saved state.
+ String text = getIntent().getStringExtra(C.SEARCH_TOKEN);
+ if (savedInstanceState != null) {
+ text = savedInstanceState.getString(C.SEARCH_TOKEN);
+ }
+ if (text == null) {
+ text = "";
+ }
+ setSearchText(text, true);
+ Log.d(LOG, "Trying to restore searchText=" + text);
+
+ setDictionaryPrefs(this, dictFile, indexIndex, searchView.getQuery().toString());
+
+ searchHintIcon = (ImageView) searchView.findViewById(R.id.abs__search_mag_icon);
+ searchHintIcon.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View arg0) {
+ onLanguageButton();
+ }
+ });
+ searchHintIcon.setOnLongClickListener(new OnLongClickListener() {
+ @Override
+ public boolean onLongClick(View v) {
+ onLanguageButtonLongClick(v.getContext());
+ return true;
+ }
+ });
+
+
+
+// ImageView searchHintIcon = (ImageView) searchView.findViewById(searchView.getContext().getResources().
+// getIdentifier("android:id/search_mag_icon", null, null));
+// searchHintIcon.setImageResource(android.R.color.transparent);
+// searchView.setOnQueryTextListener(this);
+// menu.add("Search")
+//// .setIcon(isLight ? R.drawable.ic_search_inverse : R.drawable.abs__ic_search)
+// .setActionView(searchView)
+// .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
+ actionBar.setCustomView(searchView);
+ actionBar.setDisplayShowCustomEnabled(true);
+
+ updateLangButton();
}
@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());
}
}
private void showKeyboard() {
- searchText.postDelayed(new Runnable() {
- @Override
- public void run() {
- Log.d(LOG, "Trying to show soft keyboard.");
- final InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
- manager.showSoftInput(searchText, InputMethodManager.SHOW_IMPLICIT);
- }}, 100);
+// 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() {
- // final LanguageResources languageResources =
- // Language.isoCodeToResources.get(index.shortName);
- // if (languageResources != null && languageResources.flagId != 0) {
- // langButton.setCompoundDrawablesWithIntrinsicBounds(0, 0,
- // languageResources.flagId, 0);
- // } else {
- // langButton.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
- langButton.setText(index.shortName);
- // }
+ final LanguageResources languageResources =
+ Language.isoCodeToResources.get(index.shortName);
+ if (languageResources != null && languageResources.flagId != 0) {
+ searchHintIcon.setImageResource(languageResources.flagId);
+ } else {
+ if (index == dictionary.indices.get(0)) {
+ searchHintIcon.setImageResource(android.R.drawable.ic_media_next);
+ } else {
+ searchHintIcon.setImageResource(android.R.drawable.ic_media_previous);
+ }
+ }
updateTTSLanuage();
- }
+ }
private void updateTTSLanuage() {
- if (!ttsReady) {
+ 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) {
+ if (ttsResult != TextToSpeech.LANG_AVAILABLE ||
+ ttsResult != TextToSpeech.LANG_COUNTRY_AVAILABLE) {
Log.e(LOG, "TTS not available in this language: ttsResult=" + ttsResult);
}
}
final IntentLauncher intentLauncher = new IntentLauncher(parent.getContext(),
getLaunchIntent(
application.getPath(dictionaryInfo.uncompressedFilename),
- i, searchText.getText().toString())) {
+ i, searchView.getQuery().toString())) {
@Override
protected void onGo() {
dialog.dismiss();
index = dictionary.indices.get(indexIndex);
indexAdapter = new IndexAdapter(index);
Log.d(LOG, "changingIndex, newLang=" + index.longName);
- setDictionaryPrefs(this, dictFile, indexIndex, searchText.getText().toString());
+ setDictionaryPrefs(this, dictFile, indexIndex, searchView.getQuery().toString());
setListAdapter(indexAdapter);
updateLangButton();
- setSearchText(searchText.getText().toString(), true);
+ setSearchText(searchView.getQuery().toString(), true);
}
void onUpDownButton(final boolean up) {
// --------------------------------------------------------------------------
final Random random = new Random();
-
+
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
+ //Create the search view
+// SearchView searchView = new SearchView(getSupportActionBar().getThemedContext());
+// searchView.setIconifiedByDefault(false);
+// searchView.setQueryHint(getString(R.string.searchText));
+// searchView.setSubmitButtonEnabled(false);
+// searchView.setMaxWidth(200);
+// searchView.setImeOptions(
+// EditorInfo.IME_ACTION_SEARCH |
+// EditorInfo.IME_FLAG_NO_EXTRACT_UI |
+// EditorInfo.IME_FLAG_NO_ENTER_ACTION |
+//// EditorInfo.IME_FLAG_NO_FULLSCREEN |
+// EditorInfo.IME_MASK_ACTION |
+// EditorInfo.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
+//// searchView.setOnQueryTextListener(this);
+// menu.add("Search")
+//// .setIcon(isLight ? R.drawable.ic_search_inverse : R.drawable.abs__ic_search)
+// .setActionView(searchView)
+// .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
+
+// final ImageView searchHintIcon =
+// (ImageView) searchView.findViewById(R.id.abs__search_mag_icon);
+// searchHintIcon.setImageResource(android.R.id.empty);
+// searchHintIcon.setAdjustViewBounds(true);
+// searchHintIcon.setMaxWidth(1);
+// searchHintIcon.setMaxHeight(1);
+// searchHintIcon.setVisibility(ImageView.GONE);
+// searchView.setOnQueryTextFocusChangeListener(new OnFocusChangeListener() {
+// @Override
+// public void onFocusChange(View arg0, boolean arg1) {
+// searchHintIcon.setVisibility(ImageView.GONE);
+// searchHintIcon.refreshDrawableState();
+// }
+// });
+
+
+ if (PreferenceManager.getDefaultSharedPreferences(this)
+ .getBoolean(getString(R.string.showPrevNextButtonsKey), true)) {
+ // Next word.
+ nextWordMenuItem = menu.add(getString(R.string.nextWord))
+ .setIcon(R.drawable.arrow_down_float);
+ nextWordMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
+ nextWordMenuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
+ @Override
+ public boolean onMenuItemClick(MenuItem item) {
+ onUpDownButton(false);
+ return true;
+ }
+ });
+
+ // Previous word.
+ previousWordMenuItem = menu.add(getString(R.string.previousWord))
+ .setIcon(R.drawable.arrow_up_float);
+ previousWordMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
+ previousWordMenuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
+ @Override
+ public boolean onMenuItemClick(MenuItem item) {
+ onUpDownButton(true);
+ return true;
+ }
+ });
+ }
+
application.onCreateGlobalOptionsMenu(this, menu);
// {
{
final MenuItem dictionaryList = menu.add(getString(R.string.dictionaryManager));
+ dictionaryList.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
dictionaryList.setOnMenuItemClickListener(new OnMenuItemClickListener() {
public boolean onMenuItemClick(final MenuItem menuItem) {
startActivity(DictionaryManagerActivity.getLaunchIntent());
{
final MenuItem aboutDictionary = menu.add(getString(R.string.aboutDictionary));
+ aboutDictionary.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
aboutDictionary.setOnMenuItemClickListener(new OnMenuItemClickListener() {
public boolean onMenuItemClick(final MenuItem menuItem) {
final Context context = getListView().getContext();
AdapterContextMenuInfo adapterContextMenuInfo = (AdapterContextMenuInfo) menuInfo;
final RowBase row = (RowBase) getListAdapter().getItem(adapterContextMenuInfo.position);
- final MenuItem addToWordlist = menu.add(getString(R.string.addToWordList,
+ final android.view.MenuItem addToWordlist = menu.add(getString(R.string.addToWordList,
wordList.getName()));
- addToWordlist.setOnMenuItemClickListener(new OnMenuItemClickListener() {
- public boolean onMenuItemClick(MenuItem item) {
+ addToWordlist.setOnMenuItemClickListener(new android.view.MenuItem.OnMenuItemClickListener() {
+ public boolean onMenuItemClick(android.view.MenuItem item) {
onAppendToWordList(row);
return false;
}
});
- final MenuItem copy = menu.add(android.R.string.copy);
- copy.setOnMenuItemClickListener(new OnMenuItemClickListener() {
- public boolean onMenuItemClick(MenuItem item) {
+ final android.view.MenuItem share = menu.add("Share");
+ share.setOnMenuItemClickListener(new android.view.MenuItem.OnMenuItemClickListener() {
+ public boolean onMenuItemClick(android.view.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 android.view.MenuItem copy = menu.add(android.R.string.copy);
+ copy.setOnMenuItemClickListener(new android.view.MenuItem.OnMenuItemClickListener() {
+ public boolean onMenuItemClick(android.view.MenuItem item) {
onCopy(row);
return false;
}
if (selectedSpannableText != null) {
final String selectedText = selectedSpannableText;
- final MenuItem searchForSelection = menu.add(getString(R.string.searchForSelection,
+ final android.view.MenuItem searchForSelection = menu.add(getString(R.string.searchForSelection,
selectedSpannableText));
- searchForSelection.setOnMenuItemClickListener(new OnMenuItemClickListener() {
- public boolean onMenuItemClick(MenuItem item) {
+ searchForSelection.setOnMenuItemClickListener(new android.view.MenuItem.OnMenuItemClickListener() {
+ public boolean onMenuItemClick(android.view.MenuItem item) {
jumpToTextFromHyperLink(selectedText, selectedSpannableIndex);
return false;
}
}
if (row instanceof TokenRow && ttsReady) {
- final MenuItem speak = menu.add(R.string.speak);
- speak.setOnMenuItemClickListener(new OnMenuItemClickListener() {
+ final android.view.MenuItem speak = menu.add(R.string.speak);
+ speak.setOnMenuItemClickListener(new android.view.MenuItem.OnMenuItemClickListener() {
@Override
- public boolean onMenuItemClick(MenuItem item) {
+ public boolean onMenuItemClick(android.view.MenuItem item) {
textToSpeech.speak(((TokenRow) row).getToken(), TextToSpeech.QUEUE_FLUSH,
new HashMap<String, String>());
return false;
}
}
+ @SuppressLint("SimpleDateFormat")
void onAppendToWordList(final RowBase row) {
defocusSearchText();
@Override
public boolean onKeyDown(final int keyCode, final KeyEvent event) {
if (event.getUnicodeChar() != 0) {
- if (!searchText.hasFocus()) {
+ if (!searchView.hasFocus()) {
setSearchText("" + (char) event.getUnicodeChar(), true);
}
return true;
if (!triggerSearch) {
getListView().requestFocus();
}
- searchText.setText(text);
- searchText.requestFocus();
+ searchView.setQuery(text, false);
+ searchView.requestFocus();
moveCursorToRight();
if (triggerSearch) {
onSearchTextChange(text);
}
}
- private long cursorDelayMillis = 100;
+// private long cursorDelayMillis = 100;
private void moveCursorToRight() {
- if (searchText.getLayout() != null) {
- cursorDelayMillis = 100;
- // Surprising, but this can crash when you rotate...
- Selection.moveToRightEdge(searchText.getText(), searchText.getLayout());
- } else {
- uiHandler.postDelayed(new Runnable() {
- @Override
- public void run() {
- moveCursorToRight();
- }
- }, cursorDelayMillis);
- cursorDelayMillis = Math.min(10 * 1000, 2 * cursorDelayMillis);
- }
+// if (searchText.getLayout() != null) {
+// cursorDelayMillis = 100;
+// // Surprising, but this can crash when you rotate...
+// Selection.moveToRightEdge(searchView.getQuery(), searchText.getLayout());
+// } else {
+// uiHandler.postDelayed(new Runnable() {
+// @Override
+// public void run() {
+// moveCursorToRight();
+// }
+// }, cursorDelayMillis);
+// cursorDelayMillis = Math.min(10 * 1000, 2 * cursorDelayMillis);
+// }
}
// --------------------------------------------------------------------------
}
private final void jumpToRow(final int row) {
- final boolean refocusSearchText = searchText.hasFocus();
+ final boolean refocusSearchText = searchView.hasFocus();
Log.d(LOG, "jumpToRow: " + row + ", refocusSearchText=" + refocusSearchText);
getListView().requestFocusFromTouch();
getListView().setSelectionFromTop(row, 0);
getListView().setSelected(true);
if (refocusSearchText) {
- searchText.requestFocus();
+ searchView.requestFocus();
}
//Log.d(LOG, "getSelectedItemPosition():" + getSelectedItemPosition());
}
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="
final TextViewLongClickListener textViewLongClickListenerIndex0 = new TextViewLongClickListener(
0);
textView.setOnLongClickListener(textViewLongClickListenerIndex0);
+ result.setLongClickable(true);
// Doesn't work:
// textView.setTextColor(android.R.color.secondary_text_light);
tableRow.addView(textView);
if (!htmlEntries.isEmpty()) {
- final ImageButton button = new ImageButton(context);
- button.setImageResource(R.drawable.ic_menu_forward);
- button.setOnClickListener(new OnClickListener() {
+ 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(htmlEntries, index.shortName);
+ 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),
0);
}
});
- tableRow.addView(button);
- lp = new TableRow.LayoutParams(1);
- lp.weight = 0.0f;
- button.setLayoutParams(lp);
- // result.setColumnStretchable(0, true);
- // result.setColumnStretchable(1, false);
}
- result.setLongClickable(true);
return 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);
}
}
Log.d(LOG, "searchText changed during shutdown, doing nothing.");
return;
}
- if (!searchText.isFocused()) {
+ if (!searchView.hasFocus()) {
Log.d(LOG, "searchText changed without focus, doing nothing.");
return;
}
private class SearchTextWatcher implements TextWatcher {
public void afterTextChanged(final Editable searchTextEditable) {
- if (searchText.hasFocus()) {
- Log.d(LOG, "SearchTextWatcher: Search text changed with focus: " + searchText.getText());
+ if (searchView.hasFocus()) {
+ Log.d(LOG, "SearchTextWatcher: Search text changed with focus: " + searchView.getQuery());
// If they were typing to cause the change, update the UI.
- onSearchTextChange(searchText.getText().toString());
+ onSearchTextChange(searchView.getQuery().toString());
}
}
}
void setFiltered(final SearchOperation searchOperation) {
- ((ImageButton) findViewById(R.id.UpButton)).setEnabled(false);
- ((ImageButton) findViewById(R.id.DownButton)).setEnabled(false);
+ if (nextWordMenuItem != null) {
+ nextWordMenuItem.setEnabled(false);
+ previousWordMenuItem.setEnabled(false);
+ }
rowsToShow = searchOperation.multiWordSearchResult;
setListAdapter(new IndexAdapter(index, rowsToShow, searchOperation.searchTokens));
}
void clearFiltered() {
- ((ImageButton) findViewById(R.id.UpButton)).setEnabled(true);
- ((ImageButton) findViewById(R.id.DownButton)).setEnabled(true);
+ if (nextWordMenuItem != null) {
+ nextWordMenuItem.setEnabled(true);
+ previousWordMenuItem.setEnabled(true);
+ }
setListAdapter(new IndexAdapter(index));
rowsToShow = null;
}