Files
NeoTerm_System/app/src/main/java/io/neoterm/MainActivity.kt
2017-06-11 19:24:09 +08:00

132 lines
4.5 KiB
Kotlin

package io.neoterm
import android.app.Activity
import android.content.Context
import android.graphics.Color
import android.graphics.Typeface
import android.os.Bundle
import android.view.InputDevice
import android.view.KeyEvent
import android.view.MotionEvent
import android.view.inputmethod.InputMethodManager
import io.neoterm.terminal.TerminalSession
import io.neoterm.view.ExtraKeysView
import io.neoterm.view.TerminalView
import io.neoterm.view.TerminalViewClient
class MainActivity : Activity() {
private lateinit var extraKeysView: ExtraKeysView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
extraKeysView = findViewById(R.id.extra_keys) as ExtraKeysView
val view = findViewById(R.id.terminal_view) as TerminalView
view.setBackgroundColor(Color.BLACK)
view.textSize = 30
view.setTypeface(Typeface.MONOSPACE)
val session = TerminalSession("/system/bin/sh", "/",
arrayOf("/system/bin/sh"),
arrayOf("TERM=screen", "HOME=" + filesDir),
object : TerminalSession.SessionChangedCallback {
override fun onBell(session: TerminalSession?) {
}
override fun onClipboardText(session: TerminalSession?, text: String?) {
}
override fun onColorsChanged(session: TerminalSession?) {
}
override fun onSessionFinished(finishedSession: TerminalSession?) {
}
override fun onTextChanged(changedSession: TerminalSession?) {
view.onScreenUpdated()
}
override fun onTitleChanged(changedSession: TerminalSession?) {
}
})
view.setOnKeyListener(object : TerminalViewClient {
internal var mVirtualControlKeyDown: Boolean = false
internal var mVirtualFnKeyDown: Boolean = false
override fun onScale(scale: Float): Float {
if (scale < 0.9f || scale > 1.1f) {
val increase = scale > 1f
val changedSize = (if (increase) 1 else -1) * 2
view.textSize = view.textSize + changedSize
return 1.0f
}
return scale
}
override fun onSingleTapUp(e: MotionEvent?) {
(getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager)
.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT)
}
override fun shouldBackButtonBeMappedToEscape(): Boolean {
return false
}
override fun copyModeChanged(copyMode: Boolean) {
// TODO
}
override fun onKeyDown(keyCode: Int, e: KeyEvent?, session: TerminalSession?): Boolean {
// TODO
return false
}
override fun onKeyUp(keyCode: Int, e: KeyEvent?): Boolean {
return handleVirtualKeys(keyCode, e, false)
}
override fun readControlKey(): Boolean {
return extraKeysView.readControlButton() || mVirtualControlKeyDown
}
override fun readAltKey(): Boolean {
return extraKeysView.readAltButton() || mVirtualFnKeyDown
}
override fun onCodePoint(codePoint: Int, ctrlDown: Boolean, session: TerminalSession?): Boolean {
// TODO
return false
}
override fun onLongPress(event: MotionEvent?): Boolean {
// TODO
return false
}
private fun handleVirtualKeys(keyCode: Int, event: KeyEvent?, down: Boolean): Boolean {
if (event == null) {
return false
}
val inputDevice = event.device
if (inputDevice != null && inputDevice.keyboardType == InputDevice.KEYBOARD_TYPE_ALPHABETIC) {
return false
} else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
mVirtualControlKeyDown = down
return true
} else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
mVirtualFnKeyDown = down
return true
}
return false
}
})
view.attachSession(session)
}
}