HC05AC-CTRL/src/main/java/io/gitlab/jfronny/hc05ac/InputActivity.kt

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)
}