@react-native-ohos/react-native-reanimated 3.18.2 → 3.18.3-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/LICENSE +21 -21
  2. package/README.OpenSource +10 -10
  3. package/README.md +10 -10
  4. package/harmony/reanimated/BuildProfile.ets +1 -1
  5. package/harmony/reanimated/build-profile.json5 +11 -11
  6. package/harmony/reanimated/oh-package-lock.json5 +29 -0
  7. package/harmony/reanimated/oh-package.json5 +11 -11
  8. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/AnimatedSensor/AnimatedSensorModule.cpp +86 -86
  9. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/AnimatedSensor/AnimatedSensorModule.h +47 -47
  10. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/PropsRegistry.cpp +68 -68
  11. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/PropsRegistry.h +73 -68
  12. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/ReanimatedCommitHook.cpp +101 -101
  13. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/ReanimatedCommitHook.h +51 -51
  14. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/ReanimatedCommitShadowNode.h +49 -49
  15. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/ReanimatedMountHook.cpp +96 -96
  16. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/ReanimatedMountHook.h +33 -33
  17. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/ShadowTreeCloner.cpp +95 -95
  18. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/ShadowTreeCloner.h +29 -29
  19. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationType.h +9 -9
  20. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsManager.cpp +232 -232
  21. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsManager.h +90 -90
  22. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxy.cpp +870 -870
  23. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxy.h +147 -147
  24. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsUtils.cpp +91 -91
  25. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsUtils.h +176 -176
  26. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/NativeModules/ReanimatedModuleProxy.cpp +971 -971
  27. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/NativeModules/ReanimatedModuleProxy.h +252 -254
  28. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/NativeModules/ReanimatedModuleProxySpec.cpp +231 -231
  29. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/NativeModules/ReanimatedModuleProxySpec.h +109 -109
  30. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/RuntimeDecorators/RNRuntimeDecorator.cpp +56 -56
  31. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/RuntimeDecorators/RNRuntimeDecorator.h +20 -20
  32. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/RuntimeDecorators/UIRuntimeDecorator.cpp +70 -70
  33. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/RuntimeDecorators/UIRuntimeDecorator.h +35 -35
  34. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Tools/CollectionUtils.h +14 -14
  35. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Tools/FeaturesConfig.cpp +5 -5
  36. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Tools/FeaturesConfig.h +19 -19
  37. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Tools/PlatformDepMethodsHolder.h +98 -98
  38. package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Tools/ReanimatedSystraceSection.h +135 -135
  39. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/NativeModules/WorkletsModuleProxy.cpp +47 -47
  40. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/NativeModules/WorkletsModuleProxy.h +59 -59
  41. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/NativeModules/WorkletsModuleProxySpec.cpp +27 -27
  42. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/NativeModules/WorkletsModuleProxySpec.h +25 -25
  43. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Registries/EventHandlerRegistry.cpp +94 -94
  44. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Registries/EventHandlerRegistry.h +49 -49
  45. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Registries/WorkletRuntimeRegistry.cpp +8 -8
  46. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Registries/WorkletRuntimeRegistry.h +39 -39
  47. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/SharedItems/Shareables.cpp +326 -326
  48. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/SharedItems/Shareables.h +345 -345
  49. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/AsyncQueue.cpp +52 -52
  50. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/AsyncQueue.h +35 -35
  51. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/Defs.h +10 -10
  52. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/JSISerializer.cpp +342 -342
  53. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/JSISerializer.h +47 -47
  54. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/JSLogger.cpp +16 -16
  55. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/JSLogger.h +20 -20
  56. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/JSScheduler.cpp +20 -20
  57. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/JSScheduler.h +29 -29
  58. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/PlatformLogger.h +16 -16
  59. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/ReanimatedJSIUtils.cpp +26 -26
  60. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/ReanimatedJSIUtils.h +199 -199
  61. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/ReanimatedVersion.cpp +95 -95
  62. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/ReanimatedVersion.h +19 -19
  63. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/SingleInstanceChecker.h +72 -72
  64. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/ThreadSafeQueue.h +49 -49
  65. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/UIScheduler.cpp +20 -20
  66. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/UIScheduler.h +22 -22
  67. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/WorkletEventHandler.cpp +29 -29
  68. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/Tools/WorkletEventHandler.h +41 -41
  69. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/WorkletRuntime/RNRuntimeWorkletDecorator.cpp +16 -16
  70. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/WorkletRuntime/RNRuntimeWorkletDecorator.h +19 -19
  71. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/WorkletRuntime/ReanimatedHermesRuntime.cpp +112 -112
  72. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/WorkletRuntime/ReanimatedHermesRuntime.h +127 -127
  73. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/WorkletRuntime/ReanimatedRuntime.cpp +53 -53
  74. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/WorkletRuntime/ReanimatedRuntime.h +22 -22
  75. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/WorkletRuntime/RuntimeInitialization.md +191 -191
  76. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/WorkletRuntime/WorkletRuntime.cpp +173 -173
  77. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/WorkletRuntime/WorkletRuntime.h +90 -90
  78. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/WorkletRuntime/WorkletRuntimeCollector.h +36 -36
  79. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/WorkletRuntime/WorkletRuntimeDecorator.cpp +189 -189
  80. package/harmony/reanimated/src/main/cpp/Common/cpp/worklets/WorkletRuntime/WorkletRuntimeDecorator.h +22 -22
  81. package/harmony/reanimated/src/main/cpp/ReanimatedModule.cpp +4 -6
  82. package/harmony/reanimated/src/main/cpp/WorkletsModule.cpp +60 -60
  83. package/harmony/reanimated/src/main/cpp/patches/AnimatedSensor/AnimatedSensorModule.cpp +89 -89
  84. package/harmony/reanimated/src/main/cpp/patches/NativeModules/ReanimatedModuleProxy.cpp +22 -4
  85. package/harmony/reanimated/src/main/ets/ReanimatedModule.ts +88 -13
  86. package/harmony/reanimated/src/main/module.json5 +12 -12
  87. package/harmony/reanimated/src/main/resources/base/element/color.json +7 -7
  88. package/harmony/reanimated/src/main/resources/base/element/string.json +15 -15
  89. package/harmony/reanimated/src/main/resources/base/profile/main_pages.json +5 -5
  90. package/harmony/reanimated/src/main/resources/en_US/element/string.json +15 -15
  91. package/harmony/reanimated/src/main/resources/zh_CN/element/string.json +15 -15
  92. package/harmony/reanimated/ts.ts +6 -6
  93. package/harmony/reanimated.har +0 -0
  94. package/package.json +51 -50
@@ -1,89 +1,89 @@
1
- #include <reanimated/AnimatedSensor/AnimatedSensorModule.h>
2
-
3
- #include <utility>
4
-
5
- namespace reanimated {
6
-
7
- AnimatedSensorModule::AnimatedSensorModule(
8
- const PlatformDepMethodsHolder &platformDepMethodsHolder)
9
- : platformRegisterSensorFunction_(platformDepMethodsHolder.registerSensor),
10
- platformUnregisterSensorFunction_(
11
- platformDepMethodsHolder.unregisterSensor) {}
12
-
13
- AnimatedSensorModule::~AnimatedSensorModule() {
14
- assert(sensorsIds_.empty());
15
- }
16
-
17
- jsi::Value AnimatedSensorModule::registerSensor(
18
- jsi::Runtime &rt,
19
- const std::shared_ptr<WorkletRuntime> &uiWorkletRuntime,
20
- const jsi::Value &sensorTypeValue,
21
- const jsi::Value &interval,
22
- const jsi::Value &iosReferenceFrame,
23
- const jsi::Value &sensorDataHandler) {
24
- SensorType sensorType = static_cast<SensorType>(sensorTypeValue.asNumber());
25
-
26
- auto shareableHandler = extractShareableOrThrow<ShareableWorklet>(
27
- rt,
28
- sensorDataHandler,
29
- "[Reanimated] Sensor event handler must be a worklet.");
30
-
31
- int sensorId = platformRegisterSensorFunction_(
32
- sensorType,
33
- interval.asNumber(),
34
- iosReferenceFrame.asNumber(),
35
- [sensorType,
36
- shareableHandler,
37
- weakUiWorkletRuntime = std::weak_ptr<WorkletRuntime>(uiWorkletRuntime)](
38
- double newValues[], int orientationDegrees) {
39
- auto uiWorkletRuntime = weakUiWorkletRuntime.lock();
40
- if (uiWorkletRuntime == nullptr) {
41
- return;
42
- }
43
-
44
- jsi::Runtime &uiRuntime = uiWorkletRuntime->getJSIRuntime();
45
- jsi::Object value(uiRuntime);
46
- if (sensorType == SensorType::ROTATION_VECTOR) {
47
- // TODO: timestamp should be provided by the platform implementation
48
- // such that the native side has a chance of providing a true event
49
- // timestamp
50
- value.setProperty(uiRuntime, "qx", newValues[0]);
51
- value.setProperty(uiRuntime, "qy", newValues[1]);
52
- value.setProperty(uiRuntime, "qz", newValues[2]);
53
- value.setProperty(uiRuntime, "qw", newValues[3]);
54
- value.setProperty(uiRuntime, "yaw", newValues[4]);
55
- value.setProperty(uiRuntime, "pitch", newValues[5]);
56
- value.setProperty(uiRuntime, "roll", newValues[6]);
57
- } else {
58
- value.setProperty(uiRuntime, "x", newValues[0]);
59
- value.setProperty(uiRuntime, "y", newValues[1]);
60
- value.setProperty(uiRuntime, "z", newValues[2]);
61
- }
62
- value.setProperty(
63
- uiRuntime, "interfaceOrientation", orientationDegrees);
64
-
65
- uiWorkletRuntime->runGuarded(shareableHandler, value);
66
- });
67
- if (sensorId != -1) {
68
- sensorsIds_.insert(sensorId);
69
- }
70
- return jsi::Value(sensorId);
71
- }
72
-
73
- void AnimatedSensorModule::unregisterSensor(const jsi::Value &sensorId) {
74
- // It is called during sensor hook unmounting
75
- if (!sensorId.isNumber()) {
76
- return;
77
- }
78
- sensorsIds_.erase(sensorId.getNumber());
79
- platformUnregisterSensorFunction_(sensorId.asNumber());
80
- }
81
-
82
- void AnimatedSensorModule::unregisterAllSensors() {
83
- for (auto sensorId : sensorsIds_) {
84
- platformUnregisterSensorFunction_(sensorId);
85
- }
86
- sensorsIds_.clear();
87
- }
88
-
89
- } // namespace reanimated
1
+ #include <reanimated/AnimatedSensor/AnimatedSensorModule.h>
2
+
3
+ #include <utility>
4
+
5
+ namespace reanimated {
6
+
7
+ AnimatedSensorModule::AnimatedSensorModule(
8
+ const PlatformDepMethodsHolder &platformDepMethodsHolder)
9
+ : platformRegisterSensorFunction_(platformDepMethodsHolder.registerSensor),
10
+ platformUnregisterSensorFunction_(
11
+ platformDepMethodsHolder.unregisterSensor) {}
12
+
13
+ AnimatedSensorModule::~AnimatedSensorModule() {
14
+ assert(sensorsIds_.empty());
15
+ }
16
+
17
+ jsi::Value AnimatedSensorModule::registerSensor(
18
+ jsi::Runtime &rt,
19
+ const std::shared_ptr<WorkletRuntime> &uiWorkletRuntime,
20
+ const jsi::Value &sensorTypeValue,
21
+ const jsi::Value &interval,
22
+ const jsi::Value &iosReferenceFrame,
23
+ const jsi::Value &sensorDataHandler) {
24
+ SensorType sensorType = static_cast<SensorType>(sensorTypeValue.asNumber());
25
+
26
+ auto shareableHandler = extractShareableOrThrow<ShareableWorklet>(
27
+ rt,
28
+ sensorDataHandler,
29
+ "[Reanimated] Sensor event handler must be a worklet.");
30
+
31
+ int sensorId = platformRegisterSensorFunction_(
32
+ sensorType,
33
+ interval.asNumber(),
34
+ iosReferenceFrame.asNumber(),
35
+ [sensorType,
36
+ shareableHandler,
37
+ weakUiWorkletRuntime = std::weak_ptr<WorkletRuntime>(uiWorkletRuntime)](
38
+ double newValues[], int orientationDegrees) {
39
+ auto uiWorkletRuntime = weakUiWorkletRuntime.lock();
40
+ if (uiWorkletRuntime == nullptr) {
41
+ return;
42
+ }
43
+
44
+ jsi::Runtime &uiRuntime = uiWorkletRuntime->getJSIRuntime();
45
+ jsi::Object value(uiRuntime);
46
+ if (sensorType == SensorType::ROTATION_VECTOR) {
47
+ // TODO: timestamp should be provided by the platform implementation
48
+ // such that the native side has a chance of providing a true event
49
+ // timestamp
50
+ value.setProperty(uiRuntime, "qx", newValues[0]);
51
+ value.setProperty(uiRuntime, "qy", newValues[1]);
52
+ value.setProperty(uiRuntime, "qz", newValues[2]);
53
+ value.setProperty(uiRuntime, "qw", newValues[3]);
54
+ value.setProperty(uiRuntime, "yaw", newValues[4]);
55
+ value.setProperty(uiRuntime, "pitch", newValues[5]);
56
+ value.setProperty(uiRuntime, "roll", newValues[6]);
57
+ } else {
58
+ value.setProperty(uiRuntime, "x", newValues[0]);
59
+ value.setProperty(uiRuntime, "y", newValues[1]);
60
+ value.setProperty(uiRuntime, "z", newValues[2]);
61
+ }
62
+ value.setProperty(
63
+ uiRuntime, "interfaceOrientation", orientationDegrees);
64
+
65
+ uiWorkletRuntime->runGuarded(shareableHandler, value);
66
+ });
67
+ if (sensorId != -1) {
68
+ sensorsIds_.insert(sensorId);
69
+ }
70
+ return jsi::Value(sensorId);
71
+ }
72
+
73
+ void AnimatedSensorModule::unregisterSensor(const jsi::Value &sensorId) {
74
+ // It is called during sensor hook unmounting
75
+ if (!sensorId.isNumber()) {
76
+ return;
77
+ }
78
+ sensorsIds_.erase(sensorId.getNumber());
79
+ platformUnregisterSensorFunction_(sensorId.asNumber());
80
+ }
81
+
82
+ void AnimatedSensorModule::unregisterAllSensors() {
83
+ for (auto sensorId : sensorsIds_) {
84
+ platformUnregisterSensorFunction_(sensorId);
85
+ }
86
+ sensorsIds_.clear();
87
+ }
88
+
89
+ } // namespace reanimated
@@ -228,16 +228,34 @@ void ReanimatedModuleProxy::init(
228
228
  }
229
229
 
230
230
  ReanimatedModuleProxy::~ReanimatedModuleProxy() {
231
- invalidate();
232
- }
233
-
234
- void ReanimatedModuleProxy::invalidate() {
235
231
  // event handler registry and frame callbacks store some JSI values from UI
236
232
  // runtime, so they have to go away before we tear down the runtime
237
233
  eventHandlerRegistry_.reset();
238
234
  frameCallbacks_.clear();
239
235
  #ifdef RCT_NEW_ARCH_ENABLED
240
236
  operationsInBatch_.clear();
237
+ // 清空 PropsRegistry 中持有的 ShadowNode 引用,避免析构时级联释放已被框架回收的 ShadowNodeFamily
238
+ if (propsRegistry_) {
239
+ auto lock = propsRegistry_->createLock();
240
+ // 清空内部 map,释放所有 ShadowNode::Shared
241
+ propsRegistry_->clear();
242
+ }
243
+ propsRegistry_.reset();
244
+
245
+ // LayoutAnimationsProxy 持有 ShadowView/MutationNode 引用(内部包含
246
+ // ShadowNode::Shared),需要在 runtime 销毁前清空,避免 runtime 析构时
247
+ // GC 级联触发 ShadowNodeFamily::~ShadowNodeFamily() 崩溃
248
+ if (layoutAnimationsProxy_) {
249
+ auto lock = std::unique_lock<std::recursive_mutex>(
250
+ layoutAnimationsProxy_->mutex);
251
+ layoutAnimationsProxy_->layoutAnimations_.clear();
252
+ layoutAnimationsProxy_->nodeForTag_.clear();
253
+ layoutAnimationsProxy_->deadNodes.clear();
254
+ layoutAnimationsProxy_->leastRemoved.clear();
255
+ layoutAnimationsProxy_->surfaceManager.props_.clear();
256
+ }
257
+ layoutAnimationsProxy_.reset();
258
+
241
259
  #endif // RCT_NEW_ARCH_ENABLED
242
260
  uiWorkletRuntime_.reset();
243
261
  }
@@ -3,40 +3,104 @@
3
3
  // found in the LICENSE file.
4
4
 
5
5
  import { RNOHLogger, Tag, UITurboModule, UITurboModuleContext } from "@rnoh/react-native-openharmony/ts";
6
- import { window } from '@kit.ArkUI';
7
- import { AnimationManager } from './AnimationManager'
6
+ import { Animator, AnimatorResult, window } from '@kit.ArkUI';
7
+ import { KeyboardState } from "./AnimationManager";
8
8
 
9
9
  export class ReanimatedModule extends UITurboModule {
10
10
  static NAME = "ReanimatedModule"
11
11
  private logger: RNOHLogger
12
12
  private keyBordHeight = 0;
13
+ private currentAnimator: AnimatorResult ;
14
+ private currentAnimatedHeight = 0;
13
15
 
14
- constructor(ctx: UITurboModuleContext) {
16
+ constructor(ctx: UITurboModuleContext) {
15
17
  super(ctx);
16
18
  this.logger = ctx.logger.clone("Reanimated");
17
19
  }
20
+
18
21
  public setViewProps(tag: Tag, props: Object) {
19
22
  this.ctx.descriptorRegistry.setAnimatedRawProps(tag, props);
20
23
  }
21
24
 
22
- public async subscribeKeyBordListeners() {
25
+ public async subscribeKeyBordListeners(isStatusBarTranslucent: boolean, isNavigationBarTranslucent: boolean) {
26
+ //ignore isStatusBarTranslucent - those are Android only
23
27
  const windowInstance = await window.getLastWindow(this.ctx.uiAbilityContext);
28
+ const navIndicatorArea = windowInstance.getWindowAvoidArea(
29
+ window.AvoidAreaType.TYPE_NAVIGATION_INDICATOR
30
+ );
31
+ const navIndicatorHeight = this.ctx.getUIContext().px2vp(
32
+ navIndicatorArea.bottomRect.height
33
+ );
34
+
35
+ const isEdgeToEdge = this.isEdgeToEdgeMode(windowInstance);
36
+ const effectiveNavBarTranslucent = isEdgeToEdge && isNavigationBarTranslucent;
37
+
24
38
  windowInstance.on('keyboardHeightChange', async (height) => {
25
- let keyBordHeight = this.ctx.getUIContext().px2vp(height);
26
- const animationManager = new AnimationManager();
27
- animationManager.setUpdateCallback((value, status) => {
39
+ let rawKeyboardHeight = this.ctx.getUIContext().px2vp(height);
40
+ //If the immersive mode is not enabled, then the area around the bottom navigation bar that needs to be avoided needs to be removed.
41
+ //If the immersive mode is enabled, the returned value will be the height of the current keyboard.
42
+ let keyBordHeight = effectiveNavBarTranslucent
43
+ ? rawKeyboardHeight
44
+ : Math.max(0, rawKeyboardHeight - navIndicatorHeight);
45
+
46
+ //Unchanged height, skip handle
47
+ if (Math.abs(keyBordHeight - this.currentAnimatedHeight) < 0.01) {
48
+ return;
49
+ }
50
+
51
+ const isOpening = keyBordHeight > this.keyBordHeight;
52
+
53
+ if (this.currentAnimator) {
54
+ this.currentAnimator.onFrame = null;
55
+ this.currentAnimator.onFinish = null;
56
+ this.currentAnimator.cancel();
57
+ this.currentAnimator = null;
58
+ }
59
+
60
+ this.currentAnimator = Animator.create({
61
+ duration: isOpening ? 480 : 350,
62
+ delay: 0,
63
+ //simulate the keyboard pop-up and retraction animations in harmony
64
+ easing: isOpening ? "cubic-bezier(0.2, 0.0, 0.1, 1.0)"
65
+ : "cubic-bezier(0.0, 0.0, 0.1, 1.0)",
66
+ fill: "forwards",
67
+ direction: "normal",
68
+ iterations: 1,
69
+ begin: this.currentAnimatedHeight,
70
+ end: keyBordHeight
71
+ }
72
+ )
73
+ this.currentAnimator.onFrame = (progress: number) => {
74
+ this.currentAnimatedHeight = progress;
75
+ if (Math.abs(progress - keyBordHeight) < 0.01) { //The final instruction is sent by "onFinish".
76
+ return;
77
+ }
78
+ let status = keyBordHeight > this.keyBordHeight ? KeyboardState.OPENING : KeyboardState.CLOSING;
28
79
  this.ctx.rnInstance.postMessageToCpp("REANIMATED_KEY_BOARD_CHANGE",
29
- { keyboardHeight: value, status: status.valueOf() });
30
- });
31
- animationManager.startAnimation(this.keyBordHeight, keyBordHeight, 200);
32
- this.keyBordHeight = keyBordHeight;
80
+ { keyboardHeight: progress, status: status.valueOf() });
81
+ }
82
+ this.currentAnimator.onFinish = () => {
83
+ this.currentAnimatedHeight = keyBordHeight;
84
+ let status = keyBordHeight > this.keyBordHeight ? KeyboardState.OPEN : KeyboardState.CLOSED;
85
+ this.keyBordHeight = keyBordHeight;
86
+ this.ctx.rnInstance.postMessageToCpp("REANIMATED_KEY_BOARD_CHANGE",
87
+ { keyboardHeight: keyBordHeight, status: status.valueOf() });
88
+ }
89
+ this.currentAnimator.play();
33
90
  })
34
91
  }
35
92
 
36
93
  public async unsubscribeKeyBordListeners() {
37
94
  const windowInstance = await window.getLastWindow(this.ctx.uiAbilityContext);
38
- windowInstance.off('keyboardHeightChange', (v) => {
39
- })
95
+ windowInstance.off('keyboardHeightChange')
96
+ if (this.currentAnimator) {
97
+ this.currentAnimator.onFrame = null;
98
+ this.currentAnimator.onFinish = null;
99
+ this.currentAnimator.cancel();
100
+ this.currentAnimator = null;
101
+ }
102
+ this.keyBordHeight = 0;
103
+ this.currentAnimatedHeight = 0;
40
104
  }
41
105
 
42
106
  public setGestureHandlerState(handlerTag: Tag, newState: number) {
@@ -45,4 +109,15 @@ export class ReanimatedModule extends UITurboModule {
45
109
  module.setGestureHandlerState(handlerTag, newState);
46
110
  }
47
111
  }
112
+
113
+ private isEdgeToEdgeMode(windowInstance: window.Window) {
114
+ let isLayoutFullScreen = false;
115
+ try {
116
+ const windowProperties = windowInstance.getWindowProperties();
117
+ isLayoutFullScreen = windowProperties.isLayoutFullScreen;
118
+ } catch (e: ESObject) {
119
+ isLayoutFullScreen = false;
120
+ }
121
+ return isLayoutFullScreen;
122
+ }
48
123
  }
@@ -1,13 +1,13 @@
1
- {
2
- "module": {
3
- "name": "reanimated",
4
- "type": "har",
5
- "description": "$string:module_desc",
6
- "mainElement": "ReanimatedAbility",
7
- "deviceTypes": [
8
- "phone",
9
- "tablet",
10
- "2in1"
11
- ],
12
- }
1
+ {
2
+ "module": {
3
+ "name": "reanimated",
4
+ "type": "har",
5
+ "description": "$string:module_desc",
6
+ "mainElement": "ReanimatedAbility",
7
+ "deviceTypes": [
8
+ "phone",
9
+ "tablet",
10
+ "2in1"
11
+ ],
12
+ }
13
13
  }
@@ -1,8 +1,8 @@
1
- {
2
- "color": [
3
- {
4
- "name": "start_window_background",
5
- "value": "#FFFFFF"
6
- }
7
- ]
1
+ {
2
+ "color": [
3
+ {
4
+ "name": "start_window_background",
5
+ "value": "#FFFFFF"
6
+ }
7
+ ]
8
8
  }
@@ -1,16 +1,16 @@
1
- {
2
- "string": [
3
- {
4
- "name": "module_desc",
5
- "value": "module description"
6
- },
7
- {
8
- "name": "ReanimatedAbility_desc",
9
- "value": "description"
10
- },
11
- {
12
- "name": "ReanimatedAbility_label",
13
- "value": "label"
14
- }
15
- ]
1
+ {
2
+ "string": [
3
+ {
4
+ "name": "module_desc",
5
+ "value": "module description"
6
+ },
7
+ {
8
+ "name": "ReanimatedAbility_desc",
9
+ "value": "description"
10
+ },
11
+ {
12
+ "name": "ReanimatedAbility_label",
13
+ "value": "label"
14
+ }
15
+ ]
16
16
  }
@@ -1,5 +1,5 @@
1
- {
2
- "src": [
3
- "pages/Index"
4
- ]
5
- }
1
+ {
2
+ "src": [
3
+ "pages/Index"
4
+ ]
5
+ }
@@ -1,16 +1,16 @@
1
- {
2
- "string": [
3
- {
4
- "name": "module_desc",
5
- "value": "module description"
6
- },
7
- {
8
- "name": "ReanimatedAbility_desc",
9
- "value": "description"
10
- },
11
- {
12
- "name": "ReanimatedAbility_label",
13
- "value": "label"
14
- }
15
- ]
1
+ {
2
+ "string": [
3
+ {
4
+ "name": "module_desc",
5
+ "value": "module description"
6
+ },
7
+ {
8
+ "name": "ReanimatedAbility_desc",
9
+ "value": "description"
10
+ },
11
+ {
12
+ "name": "ReanimatedAbility_label",
13
+ "value": "label"
14
+ }
15
+ ]
16
16
  }
@@ -1,16 +1,16 @@
1
- {
2
- "string": [
3
- {
4
- "name": "module_desc",
5
- "value": "模块描述"
6
- },
7
- {
8
- "name": "ReanimatedAbility_desc",
9
- "value": "description"
10
- },
11
- {
12
- "name": "ReanimatedAbility_label",
13
- "value": "label"
14
- }
15
- ]
1
+ {
2
+ "string": [
3
+ {
4
+ "name": "module_desc",
5
+ "value": "模块描述"
6
+ },
7
+ {
8
+ "name": "ReanimatedAbility_desc",
9
+ "value": "description"
10
+ },
11
+ {
12
+ "name": "ReanimatedAbility_label",
13
+ "value": "label"
14
+ }
15
+ ]
16
16
  }
@@ -1,6 +1,6 @@
1
- // Copyright (c) 2025 Huawei Device Co., Ltd. All rights reserved
2
- // Use of this source code is governed by a MIT license that can be
3
- // found in the LICENSE file.
4
-
5
- export * from './src/main/ets/ReanimatedPackage';
6
- export * from './src/main/ets/ReanimatedModule';
1
+ // Copyright (c) 2025 Huawei Device Co., Ltd. All rights reserved
2
+ // Use of this source code is governed by a MIT license that can be
3
+ // found in the LICENSE file.
4
+
5
+ export * from './src/main/ets/ReanimatedPackage';
6
+ export * from './src/main/ets/ReanimatedModule';
Binary file
package/package.json CHANGED
@@ -1,50 +1,51 @@
1
- {
2
- "name": "@react-native-ohos/react-native-reanimated",
3
- "harmony": {
4
- "alias": "react-native-reanimated",
5
- "redirectInternalImports": true
6
- },
7
- "version": "3.18.2",
8
- "description": "",
9
- "main": "lib/index.js",
10
- "scripts": {
11
- "build": "tsc",
12
- "pack:prod": "npm pack",
13
- "prepack": "npm run build",
14
- "prepublishOnly": "npm run prepack && react-native verify-package-harmony --package-path . --skip-checks oh_package_name_is_derived_from_npm_package_name",
15
- "update_version": "node ./scripts/update-version.js",
16
- "deploy": "node ./scripts/deploy.js"
17
- },
18
- "peerDependencies": {
19
- "react": "*",
20
- "react-native": "*",
21
- "react-native-harmony": "*",
22
- "react-native-reanimated": "3.18.0"
23
- },
24
- "author": "",
25
- "license": "ISC",
26
- "dependencies": {
27
- "@types/node": "^20.11.4",
28
- "react-native-reanimated": "3.18.0"
29
- },
30
- "devDependencies": {
31
- "@babel/cli": "^7.23.4",
32
- "@babel/core": "^7.23.7",
33
- "@babel/preset-env": "^7.23.8",
34
- "@babel/preset-typescript": "^7.23.3",
35
- "@babel/runtime": "^7.23.8",
36
- "@types/invariant": "^2.2.35",
37
- "@types/react": "^18.2.15",
38
- "metro-react-native-babel-preset": "^0.77.0",
39
- "react": "18.3.1",
40
- "react-native": "0.77.1",
41
- "react-native-builder-bob": "^0.21.3",
42
- "typescript": "^5.1.6"
43
- },
44
- "files": [
45
- "lib",
46
- "harmony",
47
- "src",
48
- "./harmony.tar.gz"
49
- ]
50
- }
1
+ {
2
+ "name": "@react-native-ohos/react-native-reanimated",
3
+ "harmony": {
4
+ "alias": "react-native-reanimated",
5
+ "redirectInternalImports": true
6
+ },
7
+ "version": "3.18.3-beta.2",
8
+ "description": "",
9
+ "main": "lib/index.js",
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "pack":"npm pack",
13
+ "pack:prod": "npm pack",
14
+ "prepack": "npm run build",
15
+ "prepublishOnly": "npm run prepack && react-native verify-package-harmony --package-path . --skip-checks oh_package_name_is_derived_from_npm_package_name",
16
+ "update_version": "node ./scripts/update-version.js",
17
+ "deploy": "node ./scripts/deploy.js"
18
+ },
19
+ "peerDependencies": {
20
+ "react": "*",
21
+ "react-native": "*",
22
+ "react-native-harmony": "*",
23
+ "react-native-reanimated": "3.18.0"
24
+ },
25
+ "author": "",
26
+ "license": "ISC",
27
+ "dependencies": {
28
+ "@types/node": "^20.11.4",
29
+ "react-native-reanimated": "3.18.0"
30
+ },
31
+ "devDependencies": {
32
+ "@babel/cli": "^7.23.4",
33
+ "@babel/core": "^7.23.7",
34
+ "@babel/preset-env": "^7.23.8",
35
+ "@babel/preset-typescript": "^7.23.3",
36
+ "@babel/runtime": "^7.23.8",
37
+ "@types/invariant": "^2.2.35",
38
+ "@types/react": "^18.2.15",
39
+ "metro-react-native-babel-preset": "^0.77.0",
40
+ "react": "18.3.1",
41
+ "react-native": "0.77.1",
42
+ "react-native-builder-bob": "^0.21.3",
43
+ "typescript": "^5.1.6"
44
+ },
45
+ "files": [
46
+ "lib",
47
+ "harmony",
48
+ "src",
49
+ "./harmony.tar.gz"
50
+ ]
51
+ }