package com.openfarmanager.android.adapters;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import com.openfarmanager.android.App;
import com.openfarmanager.android.model.TextBuffer;
import com.openfarmanager.android.view.SearchableEditText;
import com.openfarmanager.android.view.SearchableTextView;
import com.openfarmanager.android.view.SearchableView;
import org.apache.commons.io.IOCase;
import java.util.ArrayList;
public class LinesAdapter extends BaseAdapter {
public static final int MODE_VIEW = 0;
public static final int MODE_EDIT = 1;
private TextBuffer mText;
private String mSearchPattern;
private IOCase mCaseSensitive;
private boolean mWholeWords;
private boolean mRegularExpression;
private boolean mDoSearch;
private int mAdapterMode;
public LinesAdapter(TextBuffer text) {
mText = text;
mAdapterMode = MODE_VIEW;
}
public void stopSearch() {
mDoSearch = false;
notifyDataSetChanged();
}
public void search(String pattern, boolean caseSensitive, boolean wholeWords, boolean regularExpression) {
initSearchParams(pattern, caseSensitive, wholeWords, regularExpression);
mDoSearch = true;
notifyDataSetChanged();
}
private void initSearchParams(String pattern, boolean caseSensitive, boolean wholeWords, boolean regularExpression) {
mSearchPattern = pattern;
mCaseSensitive = caseSensitive ? IOCase.SENSITIVE : IOCase.INSENSITIVE;
mWholeWords = wholeWords;
mRegularExpression = regularExpression;
}
public void setMode(int mode) {
mAdapterMode = mode;
if (mAdapterMode == MODE_EDIT && mText.size() == 0) {
mText.appendEmptyLine();
}
}
public int getMode() {
return mAdapterMode;
}
@Override
public int getCount() {
return mText.size();
}
@Override
public Object getItem(int i) {
return mText.getLine(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int lineNumber, View view, ViewGroup viewGroup) {
String text = (String) getItem(lineNumber);
if (view == null || ((SearchableView) view).getMode() != mAdapterMode) {
view = newInstance(text, lineNumber);
} else {
((SearchableView) view).setupText(text);
}
SearchableView textView = (SearchableView) view;
if (mDoSearch) {
textView.search(mSearchPattern, mCaseSensitive, mWholeWords);
} else {
textView.setText();
}
return (View) textView;
}
public void swapData(ArrayList<String> strings) {
mText.swapData(strings);
notifyDataSetChanged();
}
public ArrayList<String> getText() {
return mText.getTextLines();
}
private View newInstance(final String initText, final int lineNumber) {
if (mAdapterMode == MODE_EDIT) {
final SearchableEditText editText = new SearchableEditText(App.sInstance.getApplicationContext(), initText);
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean b) {
mText.setLine(lineNumber, editText.getText().toString());
}
});
editText.setTag(lineNumber);
return editText;
}
return new SearchableTextView(App.sInstance.getApplicationContext(), initText);
}
/**
* Save value from current edit line to buffer.
*
* @param focusedView current focued view
*/
public void saveCurrentEditLine(View focusedView) {
if (focusedView instanceof SearchableEditText) {
SearchableEditText view = (SearchableEditText) focusedView;
mText.setLine((Integer) view.getTag(), view.getText().toString());
}
}
}