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"/>