diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/edit/EditorView.java b/app/src/main/java/com/stardust/scriptdroid/ui/edit/EditorView.java index 07661df2..6d17bdb9 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/edit/EditorView.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/edit/EditorView.java @@ -8,6 +8,7 @@ import android.content.IntentFilter; import android.support.annotation.Nullable; import android.support.design.widget.Snackbar; import android.support.v4.widget.DrawerLayout; +import android.text.Editable; import android.text.TextUtils; import android.util.AttributeSet; import android.view.Gravity; @@ -38,6 +39,7 @@ import com.stardust.scriptdroid.ui.edit.theme.Theme; import com.stardust.scriptdroid.ui.edit.theme.Themes; import com.stardust.scriptdroid.ui.log.LogActivity_; import com.stardust.scriptdroid.ui.widget.EWebView; +import com.stardust.scriptdroid.ui.widget.SimpleTextWatcher; import com.stardust.scriptdroid.ui.widget.ToolbarMenuItem; import com.stardust.util.BackPressedHandler; import com.stardust.widget.ViewSwitcher; @@ -99,8 +101,6 @@ public class EditorView extends FrameLayout implements CodeCompletionBar.OnHintC @ViewById(R.id.drawer_layout) DrawerLayout mDrawerLayout; - private static final String KEY_EDITOR_THEME = "我...深爱着...你呀...17.9.28"; - private String mName; private File mFile; private boolean mReadOnly = false; @@ -111,7 +111,7 @@ public class EditorView extends FrameLayout implements CodeCompletionBar.OnHintC private BroadcastReceiver mOnRunFinishedReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { - if (intent.getAction().equals(ACTION_ON_EXECUTION_FINISHED)) { + if (ACTION_ON_EXECUTION_FINISHED.equals(intent.getAction())) { mScriptExecution = null; setMenuItemStatus(R.id.run, true); String msg = intent.getStringExtra(Scripts.EXTRA_EXCEPTION_MESSAGE); @@ -252,12 +252,12 @@ public class EditorView extends FrameLayout implements CodeCompletionBar.OnHintC private void setUpEditor() { - mEditor.setCursorChangeCallback((line, cursor) -> { + mEditor.getCodeEditText().addTextChangedListener(new SimpleTextWatcher(s -> { setMenuItemStatus(R.id.save, mEditor.isTextChanged()); - autoComplete(line, cursor); - }); - - + setMenuItemStatus(R.id.undo, mEditor.canUndo()); + setMenuItemStatus(R.id.redo, mEditor.canRedo()); + })); + mEditor.setCursorChangeCallback(this::autoComplete); } private void autoComplete(String line, int cursor) { @@ -319,6 +319,9 @@ public class EditorView extends FrameLayout implements CodeCompletionBar.OnHintC .doOnNext(s -> { mEditor.markTextAsSaved(); setMenuItemStatus(R.id.save, false); + setMenuItemStatus(R.id.undo, false); + setMenuItemStatus(R.id.redo, false); + }); } diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/edit/editor/CodeEditor.java b/app/src/main/java/com/stardust/scriptdroid/ui/edit/editor/CodeEditor.java index 12aa5061..bdf669f0 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/edit/editor/CodeEditor.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/edit/editor/CodeEditor.java @@ -10,9 +10,6 @@ import com.stardust.scriptdroid.R; import com.stardust.scriptdroid.ui.edit.theme.Theme; import com.stardust.util.ClipboardUtil; -import org.apache.commons.lang3.StringUtils; - -import java.util.Collections; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -37,6 +34,7 @@ import io.reactivex.Observable; */ public class CodeEditor extends HVScrollView { + public interface CursorChangeCallback { void onCursorChange(String line, int ch); @@ -48,7 +46,7 @@ public class CodeEditor extends HVScrollView { private String mKeywords; private int mFoundIndex = -1; private CodeEditText mCodeEditText; - private PreformEdit mPreformEdit; + private TextViewRedoUndo mTextViewRedoUndo; private JavaScriptHighlighter mJavaScriptHighlighter; private Theme mTheme; private JsBeautifier mJsBeautifier; @@ -69,7 +67,7 @@ public class CodeEditor extends HVScrollView { setFillViewport(true); inflate(getContext(), R.layout.code_editor, this); mCodeEditText = (CodeEditText) findViewById(R.id.code_edit_text); - mPreformEdit = new PreformEdit(mCodeEditText); + mTextViewRedoUndo = new TextViewRedoUndo(mCodeEditText); mJavaScriptHighlighter = new JavaScriptHighlighter(mTheme, mCodeEditText); setTheme(Theme.getDefault(getContext())); mJsBeautifier = new JsBeautifier(this, "js/beautify.js"); @@ -147,7 +145,15 @@ public class CodeEditor extends HVScrollView { public boolean isTextChanged() { - return mPreformEdit.isTextChanged(); + return mTextViewRedoUndo.isTextChanged(); + } + + public boolean canUndo() { + return mTextViewRedoUndo.canUndo(); + } + + public boolean canRedo(){ + return mTextViewRedoUndo.canRedo(); } @Override @@ -162,7 +168,7 @@ public class CodeEditor extends HVScrollView { public void setInitialText(String text) { mCodeEditText.setText(text); - mPreformEdit.setDefaultText(text); + mTextViewRedoUndo.setDefaultText(text); } public void jumpTo(int line, int col) { @@ -205,11 +211,11 @@ public class CodeEditor extends HVScrollView { public void undo() { - mPreformEdit.undo(); + mTextViewRedoUndo.undo(); } public void redo() { - mPreformEdit.redo(); + mTextViewRedoUndo.redo(); } @@ -304,7 +310,7 @@ public class CodeEditor extends HVScrollView { public void markTextAsSaved() { - mPreformEdit.clearHistory(); + mTextViewRedoUndo.clearHistory(); } } diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/edit/editor/PreformEdit.java b/app/src/main/java/com/stardust/scriptdroid/ui/edit/editor/TextViewRedoUndo.java similarity index 98% rename from app/src/main/java/com/stardust/scriptdroid/ui/edit/editor/PreformEdit.java rename to app/src/main/java/com/stardust/scriptdroid/ui/edit/editor/TextViewRedoUndo.java index cf4ca082..e234dd23 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/edit/editor/PreformEdit.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/edit/editor/TextViewRedoUndo.java @@ -27,7 +27,7 @@ import java.util.Stack; * 撤销和恢复撤销 * Created by 沈钦赐 on 16/6/23. */ -public class PreformEdit { +public class TextViewRedoUndo { //操作序号(一次编辑可能对应多个操作,如替换文字,就是删除+插入) int index; //撤销栈 @@ -40,7 +40,7 @@ public class PreformEdit { //自动操作标志,防止重复回调,导致无限撤销 private boolean flag = false; - public PreformEdit(@NonNull EditText editText) { + public TextViewRedoUndo(@NonNull EditText editText) { CheckNull(editText, "EditText不能为空"); this.editable = editText.getText(); this.editText = editText; @@ -219,7 +219,7 @@ public class PreformEdit { editable = s; onEditableChanged(s); } - PreformEdit.this.onTextChanged(s); + TextViewRedoUndo.this.onTextChanged(s); } }