diff --git a/app/src/main/java/org/autojs/autojs/ui/edit/EditorView.kt b/app/src/main/java/org/autojs/autojs/ui/edit/EditorView.kt index fca0271b..7b27ec37 100644 --- a/app/src/main/java/org/autojs/autojs/ui/edit/EditorView.kt +++ b/app/src/main/java/org/autojs/autojs/ui/edit/EditorView.kt @@ -72,7 +72,7 @@ import org.autojs.autojs.ui.edit.completion.CodeCompletionBar.OnHintClickListene import org.autojs.autojs.ui.edit.debug.DebugBar import org.autojs.autojs.ui.edit.editor.CodeEditor import org.autojs.autojs.ui.edit.editor.CodeEditor.CheckedPatternSyntaxException -import org.autojs.autojs.ui.edit.editor.JavaScriptHighlighter.MAX_HIGHLIGHT_CHARS +import org.autojs.autojs.ui.edit.editor.JavaScriptHighlighter import org.autojs.autojs.ui.edit.editor.LayoutHelper import org.autojs.autojs.ui.edit.keyboard.FunctionsKeyboardHelper import org.autojs.autojs.ui.edit.keyboard.FunctionsKeyboardView @@ -420,6 +420,10 @@ class EditorView : LinearLayout, OnHintClickListener, ClickCallback, ToolbarFrag findViewById(R.id.redo).visibility = GONE findViewById(R.id.save).visibility = GONE } + if (mLargeFileMode) { + findViewById(R.id.undo).visibility = GONE + findViewById(R.id.redo).visibility = GONE + } if (!intent.getBooleanExtra(EXTRA_RUN_ENABLED, true)) { findViewById(R.id.run).visibility = GONE } @@ -698,7 +702,7 @@ class EditorView : LinearLayout, OnHintClickListener, ClickCallback, ToolbarFrag } private fun loadUri(uri: Uri): Observable { - val streamThresholdBytes = MAX_HIGHLIGHT_CHARS + val streamThresholdBytes = LARGE_FILE_MODE_THRESHOLD val sizeOrNull = runCatching { queryContentLengthOrNull(uri) }.getOrNull() if (sizeOrNull != null && sizeOrNull >= streamThresholdBytes) { @@ -1143,7 +1147,7 @@ class EditorView : LinearLayout, OnHintClickListener, ClickCallback, ToolbarFrag return } - val progressiveThreshold = MAX_HIGHLIGHT_CHARS + val progressiveThreshold = LARGE_FILE_MODE_THRESHOLD if (text.length > progressiveThreshold) { mLargeFileMode = true setInitialTextProgressively(text) @@ -1175,7 +1179,7 @@ class EditorView : LinearLayout, OnHintClickListener, ClickCallback, ToolbarFrag // Re-highlight once after fast load, but only when size is within highlighter limit. // zh-CN: 快速加载完成后主动触发一次高亮, 但仅在文本大小不超过高亮上限时执行. - if (text.length <= MAX_HIGHLIGHT_CHARS) { + if (text.length <= JavaScriptHighlighter.MAX_HIGHLIGHT_CHARS) { post { editor.refreshHighlightTokensIfAllowed() } } } @@ -2679,6 +2683,8 @@ class EditorView : LinearLayout, OnHintClickListener, ClickCallback, ToolbarFrag private const val MIN_CONFIDENCE_TO_WRITE_FILE = 90 private val DEFAULT_CHARSET_TO_WRITE_FILE = StandardCharsets.UTF_8 + private const val LARGE_FILE_MODE_THRESHOLD = JavaScriptHighlighter.MAX_HIGHLIGHT_CHARS + // Internal storage root (no external SD). // zh-CN: 内部存储根目录 (不访问外置 SD). private const val INTERNAL_STORAGE_ROOT: String = "/storage/emulated/0" diff --git a/app/src/main/java/org/autojs/autojs/ui/edit/editor/CodeEditText.kt b/app/src/main/java/org/autojs/autojs/ui/edit/editor/CodeEditText.kt index 88282b95..2e80e020 100644 --- a/app/src/main/java/org/autojs/autojs/ui/edit/editor/CodeEditText.kt +++ b/app/src/main/java/org/autojs/autojs/ui/edit/editor/CodeEditText.kt @@ -137,6 +137,15 @@ class CodeEditText : AppCompatEditText { } mCursorChangeCallbacks = CopyOnWriteArrayList() + // Prevent Android framework from saving/restoring huge editor text via View state. + // Otherwise minimizing the Activity may trigger TransactionTooLargeException for large files. + // + // zh-CN: + // 禁止系统通过 View state 自动保存/恢复超大的编辑器文本. + // 否则在最小化 Activity 时, 大文件很容易触发 TransactionTooLargeException. + isSaveEnabled = false + freezesText = false + // Ensure selection is possible by default. // zh-CN: 默认确保可以进行文本选择. setTextIsSelectable(true) @@ -590,9 +599,9 @@ class CodeEditText : AppCompatEditText { // Also drop selection-changed events entirely in large-text mode. // zh-CN: 大文本模式下直接丢弃 selection-changed 事件. - if (event.eventType == AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED) { - return - } + if (event.eventType == AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED) return + if (event.eventType == AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED) return + if (event.eventType == AccessibilityEvent.TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY) return } super.sendAccessibilityEventUnchecked(event) } diff --git a/version.properties b/version.properties index 08a774cb..b87b4a10 100644 --- a/version.properties +++ b/version.properties @@ -1,5 +1,5 @@ -#Wed Feb 25 03:02:22 CST 2026 -BUILD_TIME=1771959742388 +#Wed Feb 25 16:44:22 CST 2026 +BUILD_TIME=1772009062191 COMPILE_SDK_VERSION=36 IMAGE_QUANT_CMAKE_VERSION=3.22.1 IMAGE_QUANT_NDK_VERSION=26.1.10909125 @@ -27,6 +27,6 @@ RAPID_OCR_OPENCV_MOBILE_LABEL_VERSION=13 RAPID_OCR_OPENCV_MOBILE_VERSION=4.5.3 TARGET_SDK_VERSION=36 TARGET_SDK_VERSION_INRT=29 -VERSION_BUILD=3752 +VERSION_BUILD=3753 VERSION_NAME=6.7.0 Alpha21 VSCODE_EXT_REQUIRED_VERSION=1.0.13