package com.openfarmanager.android.controllers; import android.content.Context; import android.os.Handler; import android.os.Message; import java.nio.charset.Charset; import android.util.Pair; import android.view.inputmethod.InputMethodManager; import com.openfarmanager.android.App; import com.openfarmanager.android.R; import com.openfarmanager.android.adapters.LinesAdapter; import com.openfarmanager.android.dialogs.SelectEncodingDialog; import com.openfarmanager.android.fragments.*; /** * author: vnamashko */ public class EditViewController { public static final int SEARCH = 0; public static final int REPLACE = 1; public static final int SAVE = 2; public static final int EDIT = 3; public static final int GOTO = 4; public static final int ENCODING = 5; public static final int MSG_TEXT_CHANGED = 10; public static final int MSG_BIG_FILE = 11; public static final int MSG_SELECT_ENCODING = 12; private Viewer mViewer; private ViewerToolbar mViewerToolbar; private InputMethodManager mInputMethodManager; public EditViewController(Viewer viewer, ViewerToolbar viewerToolbar) { mViewer = viewer; mViewerToolbar = viewerToolbar; mViewer.setHandler(mViewerHandler); mViewerToolbar.setHandler(mToolbarHandler); mInputMethodManager = (InputMethodManager) mViewer.getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); } private Handler mToolbarHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case SEARCH: doSearch(); break; case REPLACE: doReplace(); break; case SAVE: mViewer.save(); break; case GOTO: goTo(); break; case EDIT: mViewer.changeMode(); mViewerToolbar.changeEditTextMode(mViewer.getMode()); // hide virtual keyboard when viewer mode is changed. mInputMethodManager.hideSoftInputFromWindow(mViewer.getView().getWindowToken(), 0); break; case ENCODING: mViewer.showSelectEncodingDialog(); break; } } }; private Handler mViewerHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case MSG_TEXT_CHANGED: boolean isTextChanged = (Boolean) msg.obj; mViewerToolbar.setTextChanged(isTextChanged); break; case MSG_BIG_FILE: mViewerToolbar.setBigFileMode(false); break; case MSG_SELECT_ENCODING: SelectEncodingDialog.SelectedEncodingInfo info = (SelectEncodingDialog.SelectedEncodingInfo) msg.obj; mViewer.setEncoding(info.charset); if (info.saveAsDefault) { // save default charset App.sInstance.getSettings().setDefaultCharset(info.charset.name()); } break; } } }; public Handler getToolbarHandler() { return mToolbarHandler; } public void hideToolbar() { mViewerToolbar.getFragmentManager().beginTransaction().hide(mViewerToolbar).commit(); } public void showToolbar() { mViewerToolbar.getFragmentManager().beginTransaction().show(mViewerToolbar).commit(); } private void doReplace() { EditViewReplaceDialog.newInstance(listener).show(mViewer.getFragmentManager(), "edit_view_replace"); } private void doSearch() { EditViewSearchDialog.newInstance(listener).show(mViewer.getFragmentManager(), "edit_view_search"); } private void goTo() { EditViewGotoDialog.newInstance(listener).show(mViewer.getFragmentManager(), "edit_view_goto"); } EditViewDialog.EditDialogListener listener = new EditViewDialog.EditDialogListener() { @Override public void doSearch(String pattern, boolean caseSensitive, boolean wholeWords, boolean regularExpression) { mViewer.search(pattern, caseSensitive, wholeWords, regularExpression); } @Override public void doReplace(String pattern, String replaceTo, boolean caseSensitive, boolean wholeWords, boolean regularExpression) { mViewer.replace(pattern, replaceTo, caseSensitive, wholeWords, regularExpression); } @Override public void goTo(int position, int unit) { mViewer.gotoLine(position, unit); } }; }