package com.openfarmanager.android.view; import android.content.Context; import android.graphics.Color; import android.text.SpannableString; import android.text.Spanned; import android.text.style.BackgroundColorSpan; import android.widget.EditText; import com.openfarmanager.android.App; import com.openfarmanager.android.R; import com.openfarmanager.android.adapters.LinesAdapter; import com.openfarmanager.android.utils.FileUtilsExt; import org.apache.commons.io.IOCase; import java.util.regex.Matcher; import java.util.regex.Pattern; public class SearchableEditText extends EditText implements SearchableView { private String mText; public SearchableEditText(Context context, String text) { super(context); mText = text; setBackgroundResource(R.color.transparent); setTextColor(Color.CYAN); setPadding(0, 0, 0, 0); setTextSize(App.sInstance.getSettings().getViewerFontSize()); setTypeface(App.sInstance.getSettings().getViewerFontType()); //setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS); } @Override public void setText() { setText(mText); } @Override public void setupText(String newText) { mText = newText; } @Override public String getViewText() { return null; } @Override public void search(String pattern, IOCase caseSensitive, boolean wholeWords) { generalSearch(pattern, caseSensitive, wholeWords, false); } @Override public int getMode() { return LinesAdapter.MODE_EDIT; } private void generalSearch(String pattern, IOCase caseSensitive, boolean wholeWords, boolean replace) { if (pattern == null) { setText(mText); return; } Pattern patternMatch = FileUtilsExt.createWordSearchPattern(pattern, wholeWords, caseSensitive); Matcher matcher = patternMatch.matcher(mText); if (matcher.find()) { SpannableString string = new SpannableString(mText); int firstOccurrence; do { firstOccurrence = matcher.start(); setSelection(pattern, string, firstOccurrence); } while (matcher.find()); setText(string); } else { setText(mText); } } private void setSelection(String pattern, SpannableString string, int firstOccurrence) { string.setSpan(new BackgroundColorSpan( Color.YELLOW), firstOccurrence, firstOccurrence + pattern.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE); } }