From c56157d8da2869a91039c51c3b345e9a031b1785 Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Sat, 8 Sep 2018 01:53:51 +0800 Subject: [PATCH] feat(ui): fix debug mode exception on orientation change --- app/src/main/AndroidManifest.xml | 6 +- .../org/autojs/autojs/ui/edit/EditorView.java | 12 +++- .../autojs/ui/edit/editor/CodeEditText.java | 39 +++++++++++- .../autojs/ui/edit/editor/CodeEditor.java | 9 ++- .../ui/edit/toolbar/DebugToolbarFragment.java | 63 ++++++++++++------- app/src/main/res/layout/code_editor.xml | 1 + .../res/layout/fragment_debug_toolbar.xml | 2 +- .../stardust/autojs/ScriptEngineService.java | 23 +++++-- .../autojs/core/looper/TimerThread.java | 3 +- .../com/stardust/autojs/rhino/debug/Dim.java | 2 + .../autojs/runtime/ScriptRuntime.java | 2 +- common/release/output.json | 2 +- .../inrt/launch/AssetsProjectLauncher.java | 3 +- 13 files changed, 127 insertions(+), 40 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 81cdb5c1..ad608775 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -73,6 +73,7 @@ @@ -81,7 +82,10 @@ android:name=".ui.settings.SettingsActivity_" android:theme="@style/AppTheme.Settings"/> - + = mCodeEditText.getLayout().getLineCount() || line < 0) { + Layout layout = mCodeEditText.getLayout(); + if (line < 0 || (layout != null && line >= layout.getLineCount())) { return; } mCodeEditText.setSelection(mCodeEditText.getLayout().getLineStart(line) + col); @@ -334,13 +336,14 @@ public class CodeEditor extends HVScrollView { return mCodeEditText.getBreakpoints(); } - public void setDebuggingLine(int line){ + public void setDebuggingLine(int line) { + jumpTo(line, 0); mCodeEditText.setDebuggingLine(line); } public void addOrRemoveBreakpoint(int line) { LinkedHashMap breakpoints = mCodeEditText.getBreakpoints(); - if(breakpoints.remove(line) == null){ + if (breakpoints.remove(line) == null) { breakpoints.put(line, new Breakpoint(line)); } mCodeEditText.invalidate(); diff --git a/app/src/main/java/org/autojs/autojs/ui/edit/toolbar/DebugToolbarFragment.java b/app/src/main/java/org/autojs/autojs/ui/edit/toolbar/DebugToolbarFragment.java index d2c7d640..21feb219 100644 --- a/app/src/main/java/org/autojs/autojs/ui/edit/toolbar/DebugToolbarFragment.java +++ b/app/src/main/java/org/autojs/autojs/ui/edit/toolbar/DebugToolbarFragment.java @@ -1,6 +1,5 @@ package org.autojs.autojs.ui.edit.toolbar; -import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.os.Looper; @@ -29,14 +28,11 @@ import java.util.List; public class DebugToolbarFragment extends ToolbarFragment implements DebugCallback { private static final String LOG_TAG = "DebugToolbarFragment"; - private Dim mDim = new Dim(); + private Dim mDim; private EditorView mEditorView; private Handler mHandler; public DebugToolbarFragment() { - mDim.setGuiCallback(this); - mDim.setBreak(); - mDim.attachTo(AutoJs.getInstance().getScriptEngineService(), ContextFactory.getGlobal()); Log.d(LOG_TAG, "DebugToolbarFragment()"); } @@ -50,29 +46,54 @@ public class DebugToolbarFragment extends ToolbarFragment implements DebugCallba public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); mEditorView = findEditorView(view); - mEditorView.run(); + ScriptExecution scriptExecution = mEditorView.getScriptExecution(); + if (scriptExecution != null) { + mDim = (Dim) scriptExecution.getEngine().getTag(Dim.TAG); + } + if (mDim == null) { + mDim = new Dim(); + mDim.setBreak(); + mDim.setBreakOnExceptions(true); + mDim.attachTo(AutoJs.getInstance().getScriptEngineService(), ContextFactory.getGlobal()); + mDim.setGuiCallback(this); + setInterrupted(false); + mEditorView.run(); + } else { + mDim.setGuiCallback(this); + } Log.d(LOG_TAG, "onViewCreated"); } + private void setInterrupted(boolean interrupted) { + setMenuItemStatus(R.id.step_into, interrupted); + setMenuItemStatus(R.id.step_over, interrupted); + setMenuItemStatus(R.id.step_out, interrupted); + setMenuItemStatus(R.id.resume_script, interrupted); + if (!interrupted) { + mEditorView.getEditor().setDebuggingLine(-1); + } + } + public void detachDebugger() { mDim.detach(); + mDim.setGuiCallback(null); } @Click(R.id.step_over) void stepOver() { - mEditorView.getEditor().setDebuggingLine(-1); + setInterrupted(false); mDim.setReturnValue(Dim.STEP_OVER); } @Click(R.id.step_into) void stepInto() { - mEditorView.getEditor().setDebuggingLine(-1); + setInterrupted(false); mDim.setReturnValue(Dim.STEP_INTO); } - @Click(R.id.stop_out) + @Click(R.id.step_out) void stepOut() { - mEditorView.getEditor().setDebuggingLine(-1); + setInterrupted(false); mDim.setReturnValue(Dim.STEP_OUT); } @@ -83,13 +104,13 @@ public class DebugToolbarFragment extends ToolbarFragment implements DebugCallba @Click(R.id.resume_script) void resumeScript() { - mEditorView.getEditor().setDebuggingLine(-1); + setInterrupted(false); mDim.setReturnValue(Dim.GO); } @Override public void updateSourceText(Dim.SourceInfo sourceInfo) { - Log.d(LOG_TAG, "updateSourceText: url = " + sourceInfo.url() + ", source = " + sourceInfo.source()); + Log.d(LOG_TAG, "updateSourceText: url = " + sourceInfo.url()); if (!sourceInfo.url().equals(mEditorView.getFile().toString())) { return; } @@ -107,7 +128,12 @@ public class DebugToolbarFragment extends ToolbarFragment implements DebugCallba public void enterInterrupt(Dim.StackFrame stackFrame, String threadName, String s1) { Log.d(LOG_TAG, "enterInterrupt: threadName = " + threadName + ", url = " + stackFrame.getUrl() + ", line = " + stackFrame.getLineNumber()); if (stackFrame.getUrl().equals(mEditorView.getFile().toString())) { - mEditorView.getEditor().setDebuggingLine(stackFrame.getLineNumber() - 1); + final int line = stackFrame.getLineNumber() - 1; + mHandler.post(() -> { + mEditorView.getEditor().setDebuggingLine(line); + setInterrupted(true); + }); + } else { mHandler.post(this::resumeScript); } @@ -120,25 +146,18 @@ public class DebugToolbarFragment extends ToolbarFragment implements DebugCallba @Override public void dispatchNextGuiEvent() { - Log.d(LOG_TAG, "dispatchNextGuiEvent"); - } @Override public boolean shouldAttachDebugger(RhinoJavaScriptEngine engine) { - ScriptExecution execution = AutoJs.getInstance().getScriptEngineService().getScriptExecution(mEditorView.getScriptExecutionId()); + ScriptExecution execution = mEditorView.getScriptExecution(); return execution != null && execution.getId() == engine.getId(); } @Override public List getMenuItemIds() { - return Arrays.asList(R.id.step_over, R.id.step_into, R.id.stop_out, R.id.resume_script, R.id.stop_script); + return Arrays.asList(R.id.step_over, R.id.step_into, R.id.step_out, R.id.resume_script, R.id.stop_script); } - @Override - public void onDestroy() { - super.onDestroy(); - mDim.detach(); - } } diff --git a/app/src/main/res/layout/code_editor.xml b/app/src/main/res/layout/code_editor.xml index 85c20411..72b09fd7 100644 --- a/app/src/main/res/layout/code_editor.xml +++ b/app/src/main/res/layout/code_editor.xml @@ -5,6 +5,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:scrollHorizontally="true" + android:imeOptions="flagNoExtractUi" android:textColor="@android:color/transparent" android:textCursorDrawable="@drawable/code_edit_text_cursor" android:textSize="15sp"/> diff --git a/app/src/main/res/layout/fragment_debug_toolbar.xml b/app/src/main/res/layout/fragment_debug_toolbar.xml index 6752d24f..0831e974 100644 --- a/app/src/main/res/layout/fragment_debug_toolbar.xml +++ b/app/src/main/res/layout/fragment_debug_toolbar.xml @@ -21,7 +21,7 @@ app:text="@string/text_debug_step_into"/>