-
Notifications
You must be signed in to change notification settings - Fork 24.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Showing
3 changed files
with
72 additions
and
79 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
76 changes: 0 additions & 76 deletions
76
.../ReactAndroid/src/main/java/com/facebook/react/modules/core/DeviceEventManagerModule.java
This file was deleted.
Oops, something went wrong.
64 changes: 64 additions & 0 deletions
64
...ve/ReactAndroid/src/main/java/com/facebook/react/modules/core/DeviceEventManagerModule.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
/* | ||
* Copyright (c) Meta Platforms, Inc. and affiliates. | ||
* | ||
* This source code is licensed under the MIT license found in the | ||
* LICENSE file in the root directory of this source tree. | ||
*/ | ||
|
||
package com.facebook.react.modules.core | ||
|
||
import android.net.Uri | ||
import com.facebook.proguard.annotations.DoNotStrip | ||
import com.facebook.react.bridge.Arguments | ||
import com.facebook.react.bridge.JavaScriptModule | ||
import com.facebook.react.bridge.ReactApplicationContext | ||
import com.facebook.react.bridge.UiThreadUtil | ||
import com.facebook.react.module.annotations.ReactModule | ||
|
||
/** Native module that handles device hardware events like hardware back presses. */ | ||
@ReactModule(name = com.facebook.fbreact.specs.NativeDeviceEventManagerSpec.NAME) | ||
public class DeviceEventManagerModule( | ||
reactContext: ReactApplicationContext?, | ||
backBtnHandler: DefaultHardwareBackBtnHandler | ||
) : com.facebook.fbreact.specs.NativeDeviceEventManagerSpec(reactContext) { | ||
@DoNotStrip | ||
public fun interface RCTDeviceEventEmitter : JavaScriptModule { | ||
public fun emit(eventName: String, data: Any?) | ||
} | ||
|
||
private val invokeDefaultBackPressRunnable: Runnable = Runnable { | ||
UiThreadUtil.assertOnUiThread() | ||
backBtnHandler.invokeDefaultOnBackPressed() | ||
} | ||
|
||
/** Sends an event to the JS instance that the hardware back has been pressed. */ | ||
public fun emitHardwareBackPressed() { | ||
val reactApplicationContext: ReactApplicationContext? = | ||
getReactApplicationContextIfActiveOrWarn() | ||
reactApplicationContext?.emitDeviceEvent("hardwareBackPress", null) | ||
} | ||
|
||
/** Sends an event to the JS instance that a new intent was received. */ | ||
public fun emitNewIntentReceived(uri: Uri) { | ||
val reactApplicationContext: ReactApplicationContext? = | ||
getReactApplicationContextIfActiveOrWarn() | ||
val map = Arguments.createMap() | ||
map.putString("url", uri.toString()) | ||
reactApplicationContext?.emitDeviceEvent("url", map) | ||
} | ||
|
||
/** | ||
* Invokes the default back handler for the host of this catalyst instance. This should be invoked | ||
* if JS does not want to handle the back press itself. | ||
*/ | ||
override fun invokeDefaultBackPressHandler() { | ||
// There should be no need to check if the catalyst instance is alive. After initialization | ||
// the thread instances cannot be null, and scheduling on a thread after ReactApplicationContext | ||
// teardown is a noop. | ||
getReactApplicationContext().runOnUiQueueThread(invokeDefaultBackPressRunnable) | ||
} | ||
|
||
public companion object { | ||
public const val NAME: String = com.facebook.fbreact.specs.NativeDeviceEventManagerSpec.NAME | ||
} | ||
} |