64 lines
2.2 KiB
Kotlin
64 lines
2.2 KiB
Kotlin
package io.gitlab.jfronny.hc05ac
|
|
|
|
import android.Manifest
|
|
import android.os.Build
|
|
import android.os.Bundle
|
|
import android.view.MotionEvent
|
|
import android.view.WindowManager
|
|
import androidx.appcompat.app.AppCompatActivity
|
|
import androidx.appcompat.widget.LinearLayoutCompat
|
|
|
|
abstract class InputActivity : AppCompatActivity() {
|
|
private var root: LinearLayoutCompat? = null
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
super.onCreate(savedInstanceState)
|
|
setContentView(R.layout.activity_main)
|
|
if (!hasPermission(Manifest.permission.ACCESS_NOTIFICATION_POLICY)) {
|
|
goToNotificationSettings()
|
|
}
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && !hasPermission(Manifest.permission.BLUETOOTH_CONNECT)) {
|
|
requestPermissions(Manifest.permission.BLUETOOTH_CONNECT)
|
|
}
|
|
window.addFlags(
|
|
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON or
|
|
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD or
|
|
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED or
|
|
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
|
|
)
|
|
|
|
root = findViewById(R.id.root)
|
|
}
|
|
|
|
override fun onTouchEvent(event: MotionEvent?): Boolean {
|
|
if (event != null) {
|
|
if (event.x > root!!.width / 2) right(event.y, root!!.height.toFloat(), event.jAction)
|
|
else left(event.y, root!!.height.toFloat(), event.jAction)
|
|
}
|
|
return false
|
|
}
|
|
|
|
private var left: Byte = 0
|
|
private var right: Byte = 0
|
|
|
|
private fun left(y: Float, height: Float, action: Action): Boolean {
|
|
left = when (action) {
|
|
Action.DOWN, Action.MOVE -> (127 - (y * 256 / height).clamp(0f, 256f)).toInt().toByte()
|
|
Action.UP -> 0
|
|
Action.OTHER -> return false
|
|
}
|
|
send(left, right)
|
|
return false
|
|
}
|
|
|
|
private fun right(y: Float, height: Float, action: Action): Boolean {
|
|
right = when (action) {
|
|
Action.DOWN, Action.MOVE -> (127 - (y * 256 / height).clamp(0f, 256f)).toInt().toByte()
|
|
Action.UP -> 0
|
|
Action.OTHER -> return false
|
|
}
|
|
send(left, right)
|
|
return false
|
|
}
|
|
|
|
protected abstract fun send(left: Byte, right: Byte)
|
|
} |