Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 84 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,15 +36,15 @@ Run `yarn add react-native-keyevent`

1. In `android/setting.gradle`

```
```gradle
...
include ':react-native-keyevent'
project(':react-native-keyevent').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-keyevent/android')
```

2. In `android/app/build.gradle`

```
```gradle
...
dependencies {
...
Expand All @@ -54,7 +54,7 @@ Run `yarn add react-native-keyevent`

3. Register module (in MainApplication.java)

```
``` java
import com.github.kevinejohn.keyevent.KeyEventPackage; // <--- import

public class MainApplication extends Application implements ReactApplication {
Expand All @@ -81,9 +81,88 @@ Follow the instrutions listed here: [Manually Linking iOS](https://facebook.gith

#### Android

Implement onConfigurationChanged method in MainActivity.java
<details>
<summary>RN version >= 0.73.0</summary>
<br>
Implement these methods in MainActivity.kt

```kotlin
import android.view.KeyEvent; // <--- import
import com.github.kevinejohn.keyevent.KeyEventModule; // <--- import


class MainActivity : ReactActivity() {
......
// Add this method if you want to react to keyDown
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {

// A. Prevent multiple events on long button press
// In the default behavior multiple events are fired if a button
// is pressed for a while. You can prevent this behavior if you
// forward only the first event:
// if (event.getRepeatCount() == 0) {
// KeyEventModule.getInstance().onKeyDownEvent(keyCode, event);
// }
//
// B. If multiple Events shall be fired when the button is pressed
// for a while use this code:
// KeyEventModule.getInstance().onKeyDownEvent(keyCode, event);
//
// Using B.
KeyEventModule.getInstance().onKeyDownEvent(keyCode, event);

// There are 2 ways this can be done:
// 1. Override the default keyboard event behavior
// super.onKeyDown(keyCode, event);
// return true;

// 2. Keep default keyboard event behavior
// return super.onKeyDown(keyCode, event);

// Using method #1 without blocking multiple
super.onKeyDown(keyCode, event)
return true

// Using method #2
return super.onKeyDown(keyCode, event);
}

// Add this method if you want to react to keyUp
override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean {
KeyEventModule.getInstance().onKeyUpEvent(keyCode, event);

// There are 2 ways this can be done:
// 1. Override the default keyboard event behavior
// super.onKeyUp(keyCode, event)
// return true

// 2. Keep default keyboard event behavior
// return super.onKeyUp(keyCode, event)

// Using method #1
super.onKeyUp(keyCode, event)
return true

// Using method #2
return super.onKeyUp(keyCode, event)
}

override fun onKeyMultiple(keyCode: Int, repeatCount: Int, event: KeyEvent): Boolean {
KeyEventModule.getInstance().onKeyMultipleEvent(keyCode, repeatCount, event);
return super.onKeyMultiple(keyCode, repeatCount, event);
}
......

}
```
</details>
<br>
<details>
<summary>RN version <= 0.72.20</summary>
<br>
Implement onConfigurationChanged method in MainActivity.java

```java
import android.view.KeyEvent; // <--- import
import com.github.kevinejohn.keyevent.KeyEventModule; // <--- import

Expand Down Expand Up @@ -147,6 +226,7 @@ Implement onConfigurationChanged method in MainActivity.java

}
```
</details>

#### iOS

Expand Down
8 changes: 5 additions & 3 deletions index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@ declare module 'react-native-keyevent';

export type KeyEventProps = { action: number; keyCode: number; pressedKey: string; characters: string };

export function onKeyDownListener(keyEvent: any): void;
export function onKeyUpListener(keyEvent: any): void;
export function onKeyMultipleListener(keyEvent: any): void;
type eventListenerCallback = (keyEvent: KeyEventProps) => void;

export function onKeyDownListener(callback: eventListenerCallback): void;
export function onKeyUpListener(callback: eventListenerCallback): void;
export function onKeyMultipleListener(callback: eventListenerCallback): void;

export function removeKeyDownListener(): void;
export function removeKeyUpListener(): void;
Expand Down