[Android TV] TVコントローラ

Developerの説明
https://developer.android.com/training/tv/start/controllers
キーイベント
https://developer.android.com/reference/android/view/KeyEvent

TVコントローラの適切な対応が必要とあるけど具体的には?
今のところは戻るボタンの対応くらいしか思い浮かばない

とりあえず戻るボタンのハンドリングとキーイベントのフック
onPreviewKeyEvent -> onKeyEventの流れで呼ばれてtrueを返すとイベントが消費されて以下にイベントが渡らなくなる
KeyEvent.KEYCODE_BACKでtrueを返してしまうとBackHandlerが呼ばれなくなる

TVコントローラのホームとかショットカットキーはキーフックされないようで直接対応したアプリが呼び出されるようです
※エミュレータでのみ確認

var backHandlingEnabled by remember { mutableStateOf(true) }
BackHandler(backHandlingEnabled) {
    Log.d(TAG, "BackHandler")
}
val requester = remember { FocusRequester() }
LaunchedEffect(Unit) {
    requester.requestFocus()
}

Surface(
    shape = RectangleShape,
    modifier = Modifier
        .fillMaxSize()
        .onKeyEvent {
            val name = KeyEvent.keyCodeToString(it.nativeKeyEvent.keyCode)
            when(it.nativeKeyEvent.action) {
                KeyEvent.ACTION_DOWN -> {
                    Log.d(TAG, "onKeyEvent:ACTION_DOWN: $name(${it.nativeKeyEvent.keyCode})")
                }
                KeyEvent.ACTION_UP -> {
                    Log.d(TAG, "onKeyEvent:ACTION_UP: $name(${it.nativeKeyEvent.keyCode})")
                }
            }
            false
        }
        .onPreviewKeyEvent {
            val name = KeyEvent.keyCodeToString(it.nativeKeyEvent.keyCode)
            when(it.nativeKeyEvent.action) {
                KeyEvent.ACTION_DOWN -> {
                    Log.d(TAG, "onPreviewKeyEvent:ACTION_DOWN: $name(${it.nativeKeyEvent.keyCode})")
                }
                KeyEvent.ACTION_UP -> {
                    Log.d(TAG, "onPreviewKeyEvent:ACTION_UP: $name(${it.nativeKeyEvent.keyCode})")
                }
            }
            false
        }
        .focusRequester(requester)
        .focusable()
    ,
) {}

Android Studio Hedgehog 2023.1.1 RC 3 built on November 3, 2023