PROBLEM: setelah konek SSH, prompt tidak keluar & keyboard tidak muncul.
FIX (input):
- TerminalView: implementasi InputConnection (BaseInputConnection) jadi soft
keyboard bisa muncul; onCheckIsTextEditor=true; commitText/key events
diteruskan ke SSH session (onKeyInput). Handle hardware keyboard: Ctrl+letter
-> ascii control, Enter/panah/PgUp/PgDn/Home/End/Esc/Tab/Del.
- TerminalController.attach(): hubungkan view.onKeyInput -> engine.write()
- TerminalActivity: requestFocus() + showKeyboard() saat 'Terhubung'.
FIX (render — bug ditemukan via unit test baru):
- TerminalModel.write('\n') kini reset cursorCol=0 (LF berperilaku seperti
LF+CR). Sebelumnya LF tidak reset kolom sehingga baris lanjutan ditulis di
posisi salah & scroll ganda terjadi.
- TerminalModel.scrollUp() tidak lagi mengubah cursorRow (pemanggil yang atur).
- Tambah 8+ unit test (TerminalParserTest): prompt shell, CRLF, truecolor SGR,
erase, scroll, multiline. Semua 10 lulus.
verified: gradle :app:testDebugUnitTest BUILD SUCCESSFUL (10 tests, 0 fail);
gradle :app:assembleDebug BUILD SUCCESSFUL.
Tambah Log.e(TAG, ..., e) di catch untuk menampilkan stacktrace / pesan
error sebenarnya (ConnectException, AuthFailException, UnknownHost, dll)
di logcat. Memudahkan diagnosa 'koneksi gagal setelah N percobaan'.
Di Android tidak ada file known_hosts di path JVM default, sehingga sshj
loadKnownHosts() melempar peringatan 'could not load known_host'. Karena v1
pakai PromiscuousVerifier (accept-all) dengan TODO known_host pinning di backlog,
loadKnownHosts() tidak berguna dan dihapus. Auth password tetap jalan.
- ItemTouchHelper: swipe kiri -> dialog konfirmasi hapus profil (+kredensial)
- Swipe kanan -> buka ProfileEditorActivity untuk edit
- Item kembali ke posisi semula setelah swipe (hapus menunggu konfirmasi,
edit pindah ke layar editor)
- ConnectActivity refactor: callback onEdit, helper openEditor(profileId)