package com.reactnativeandroidvolumecontrol import android.view.KeyEvent import com.facebook.react.bridge.* import com.facebook.react.modules.core.DeviceEventManagerModule.RCTDeviceEventEmitter class AndroidVolumeControlModule(private val reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext) { override fun getName(): String { return "AndroidVolumeControlModule" } companion object Factory { private lateinit var instance: AndroidVolumeControlModule fun init(reactContext: ReactApplicationContext): AndroidVolumeControlModule { instance = AndroidVolumeControlModule(reactContext) return instance } fun getInstance(): AndroidVolumeControlModule { return instance } } private var isActivated = false @ReactMethod fun addListener(eventName: String?) { } @ReactMethod fun removeListeners(count: Int?) { } @ReactMethod fun setIsActivated(activate: Boolean) { isActivated = activate } private var allowedKeys = intArrayOf(24, 25) fun onKeyDownEvent(keyCode: Int, keyEvent: KeyEvent): Boolean { if (!isActivated || !reactContext.hasActiveReactInstance()) { return false } if (!allowedKeys.contains(keyCode)) { return false } reactContext.getJSModule(RCTDeviceEventEmitter::class.java).emit("onKeyDown", getJsEventParams(keyCode, keyEvent)) return true } private fun getJsEventParams(keyCode: Int, keyEvent: KeyEvent): WritableMap { val params: WritableMap = WritableNativeMap() val action = keyEvent.getAction() val pressedKey = keyEvent.getUnicodeChar() params.putInt("keyCode", keyCode) params.putInt("action", action) params.putString("pressedKey", pressedKey.toString()) return params } }