Skip to content

Commit 5b44c72

Browse files
committed
Update
1 parent aa23881 commit 5b44c72

2 files changed

Lines changed: 39 additions & 47 deletions

File tree

app/src/main/AndroidManifest.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
android:icon="@mipmap/ic_launcher"
2828
android:label="@string/app_name"
2929
android:supportsRtl="true"
30-
android:gwpAsanMode="never"
3130
android:largeHeap="true"
3231
android:enableOnBackInvokedCallback="true"
3332
android:requestLegacyExternalStorage="true"

app/src/main/java/com/omarea/krscript/ui/DialogLogFragment.kt

Lines changed: 39 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ class DialogLogFragment : DialogFragment() {
233233
private var pendingOverwrite = false
234234

235235
init {
236-
logView?.text = Editable.Factory.getInstance().newEditable("")
236+
logView?.setText(logBuffer, TextView.BufferType.EDITABLE)
237237
}
238238

239239
private fun getColor(resId: Int): Int {
@@ -244,13 +244,13 @@ class DialogLogFragment : DialogFragment() {
244244
return (dp * context.resources.displayMetrics.density).toInt()
245245
}
246246

247-
fun release() {
248-
logViewRef.clear()
249-
progressRef.clear()
250-
inputRowRef.clear()
251-
shellInputRef.clear()
252-
unbindStdin()
253-
actionEventHandler = null
247+
private fun resetLogState() {
248+
AnsiColorParser.reset()
249+
lineCount = 0
250+
lineStart = 0
251+
pendingOverwrite = false
252+
logBuffer.clear()
253+
logViewRef.get()?.text = logBuffer
254254
}
255255

256256
override fun onInputRequest(prompt: String) {
@@ -382,64 +382,57 @@ class DialogLogFragment : DialogFragment() {
382382
val logView = logViewRef.get() ?: return
383383

384384
logView.post {
385-
val editable = logView.editableText ?: return@post
386-
387-
var start = 0
388385
var i = 0
389386
val len = formattedText.length
390387

391388
while (i < len) {
392-
when (formattedText[i]) {
393-
'\r', '\n' -> {
394-
395-
if (i > start) {
396-
if (pendingOverwrite) {
397-
if (lineStart <= editable.length) {
398-
editable.delete(lineStart, editable.length)
399-
}
400-
pendingOverwrite = false
401-
}
389+
var j = i
390+
while (j < len) {
391+
val c = formattedText[j]
392+
if (c == '\r' || c == '\n') break
393+
j++
394+
}
402395

403-
editable.append(formattedText, start, i)
396+
if (j > i) {
397+
if (pendingOverwrite) {
398+
val end = logBuffer.length
399+
if (lineStart <= end) {
400+
logBuffer.delete(lineStart, end)
404401
}
402+
pendingOverwrite = false
403+
}
405404

406-
if (formattedText[i] == '\r') {
407-
val isCRLF =
408-
(i + 1 < len && formattedText[i + 1] == '\n')
405+
logBuffer.append(formattedText, i, j)
406+
}
409407

410-
if (!isCRLF) {
408+
if (j < len) {
409+
when (formattedText[j]) {
410+
'\r' -> {
411+
if (j + 1 >= len || formattedText[j + 1] != '\n') {
411412
pendingOverwrite = true
412413
}
413-
} else {
414+
}
415+
416+
'\n' -> {
414417
if (pendingOverwrite) {
415-
if (lineStart <= editable.length) {
416-
editable.delete(lineStart, editable.length)
418+
val end = logBuffer.length
419+
if (lineStart <= end) {
420+
logBuffer.delete(lineStart, end)
417421
}
418422
pendingOverwrite = false
419423
}
420424

421-
editable.append('\n')
425+
logBuffer.append('\n')
422426
lineCount++
423-
lineStart = editable.length
427+
lineStart = logBuffer.length
424428
}
425-
426-
start = i + 1
427429
}
428430
}
429431

430-
i++
432+
i = j + 1
431433
}
432434

433-
if (start < len) {
434-
if (pendingOverwrite) {
435-
if (lineStart <= editable.length) {
436-
editable.delete(lineStart, editable.length)
437-
}
438-
pendingOverwrite = false
439-
}
440-
441-
editable.append(formattedText, start, len)
442-
}
435+
logView.text = logBuffer
443436

444437
val scrollView = logView.parent as? ScrollView
445438
if (scrollView != null) {
@@ -449,8 +442,8 @@ class DialogLogFragment : DialogFragment() {
449442
val inputRow = inputRowRef.get()
450443
val input = shellInputRef.get()
451444

452-
if (inputRow?.visibility == View.VISIBLE && input != null) {
453-
input.requestFocus()
445+
if (inputRow?.visibility == View.VISIBLE) {
446+
input?.requestFocus()
454447
}
455448
}
456449
}

0 commit comments

Comments
 (0)