---
title: "onPreInterceptKeyBeforeSoftKeyboard"
description: "Adding this [modifier][Modifier] to the [modifier][Modifier] parameter of a component will allow
it to intercept hardware key events before they are sent to the software keyboard. This can be
used to intercept key input from a DPad, or physical keyboard connected to the device and is not
applicable to input that is sent to the soft keyboard via spell check or autocomplete. This
modifier is similar to [onInterceptKeyBeforeSoftKeyboard], but allows a parent composable to
intercept the hardware key event before any child."
type: "modifier"
---

<div class='type'>Compose Modifier</div>

<a id='references'></a>
<div class='sourceset sourceset-common'>Common</div>


```kotlin
fun Modifier.onPreInterceptKeyBeforeSoftKeyboard(
    onPreInterceptKeyBeforeSoftKeyboard: (KeyEvent) -> Boolean
): Modifier
```


Adding this `modifier` to the `modifier` parameter of a component will allow
it to intercept hardware key events before they are sent to the software keyboard. This can be
used to intercept key input from a DPad, or physical keyboard connected to the device and is not
applicable to input that is sent to the soft keyboard via spell check or autocomplete. This
modifier is similar to `onInterceptKeyBeforeSoftKeyboard`, but allows a parent composable to
intercept the hardware key event before any child.

#### Parameters

| | |
| --- | --- |
| onPreInterceptKeyBeforeSoftKeyboard | This callback is invoked when the user interacts with the hardware keyboard. It gives ancestors of a focused component the chance to intercept a `KeyEvent`. Return true to stop propagation of this event. If you return false, the key event will be sent to this `SoftKeyboardInterceptionModifierNode`'s child. If none of the children consume the event, it will be sent back up to the root `KeyInputModifierNode` using the onKeyEvent callback, and ultimately to the software keyboard. |




## Code Examples
### KeyEventSample
```kotlin
@Suppress("UNUSED_ANONYMOUS_PARAMETER")
@Composable
fun KeyEventSample() {
    // When the inner Box is focused, and the user presses a key, the key goes down the hierarchy
    // and then back up to the parent. At any stage you can stop the propagation by returning
    // true to indicate that you consumed the event.
    Box(Modifier.onPreviewKeyEvent { keyEvent1 -> false }.onKeyEvent { keyEvent4 -> false }) {
        Box(
            Modifier.onPreviewKeyEvent { keyEvent2 -> false }
                .onKeyEvent { keyEvent3 -> false }
                .focusable()
        )
    }
}
```

