diff --git a/OAT.xml b/OAT.xml
new file mode 100644
index 0000000000000000000000000000000000000000..71add429ae1af895d4a0937ae74c67bb581da257
--- /dev/null
+++ b/OAT.xml
@@ -0,0 +1,65 @@
+
+
+
+ LICENSE
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/README.md b/README.md
index e9c0ddf4f0a729355806d7866a2d800c47ad5c76..7d854b638b6c5447ed34a02b9c1da3e9bc289437 100644
--- a/README.md
+++ b/README.md
@@ -1,91 +1,13 @@
-# `@react-native-community/toolbar-android`
-[](https://circleci.com/gh/react-native-toolbar-android/toolbar-android/tree/master)   [](https://www.npmjs.com/package/@react-native-community/toolbar-android) [](https://github.com/facebook/react-native/issues/23313)
+# @react-native-ohos/toolbar-android
-## What is it?
-A React component that wraps the Android-only [Toolbar widget](https://developer.android.com/reference/android/widget/Toolbar).
+This project is based on [toolbar-android](https://github.com/react-native-oh-library/toolbar-android)
-This is extracted from react-native per [lean core](https://github.com/facebook/react-native/issues/23313) initiative, which removed `ToolbarAndroid` at v0.61. The goal of this repo is to house the original component and continue to improve and maintain a lean wrapper with zero dependency other than react and react-native.
+## Documentation
+- [中文](https://gitee.com/react-native-oh-library/usage-docs/blob/master/zh-cn/react-native-community-toolbar-android.md)
-
-
-## Getting started
-
-`yarn add @react-native-community/toolbar-android`
-
-or
-
-`npm install @react-native-community/toolbar-android --save`
-
-Now link the native code with your project:
-
-```
-# RN >= 0.60
-npx pod-install
-
-# RN < 0.60
-react-native link @react-native-community/toolbar-android
-```
-
-### Manual installation
-
-
-Manually link the library on Android
-
-#### `android/settings.gradle`
-```groovy
-include ':react-native-community-toolbar-android'
-project(':react-native-community-toolbar-android').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-community/toolbar-android/android')
-```
-
-#### `android/app/build.gradle`
-```groovy
-dependencies {
- ...
- implementation project(':react-native-community-toolbar-android')
-}
-```
-
-#### `android/app/src/main/.../MainApplication.java`
-On top, where imports are:
-
-```java
-import com.reactnativecommunity.toolbarandroid.ReactToolbarPackage;
-```
-
-Add the `toolbar-android` class to your list of exported packages.
-
-```java
-@Override
-protected List getPackages() {
- return Arrays.asList(
- new MainReactPackage(),
- new ReactToolbarPackage()
- );
-}
-```
-
-
-## Migrating from the core `react-native` module
-This module was created when the ToolbarAndroid was split out from the core of React Native. To migrate to this module you need to follow the installation instructions above and then change you imports from:
-
-```javascript
-import { ToolbarAndroid } from 'react-native';
-```
-
-to:
-
-```javascript
-import ToolbarAndroid from '@react-native-community/toolbar-android';
-```
-
-## Usage
-
-see [ToolbarAndroid](./doc/toolbarandroid.md)
-
-## Contributors
-
-This module was extracted from `react-native` core.
+- [English](https://gitee.com/react-native-oh-library/usage-docs/blob/master/en/react-native-community-toolbar-android.md)
## License
-The library is released under the MIT licence. For more information see `LICENSE`.
+
+This library is licensed under [The MIT License (MIT)](https://github.com/react-native-toolbar-android/toolbar-android/blob/master/LICENSE)
\ No newline at end of file
diff --git a/harmony/toolbar_android/BuildProfile.ets b/harmony/toolbar_android/BuildProfile.ets
new file mode 100644
index 0000000000000000000000000000000000000000..98a8a90f28cdf62f149f5c98245062c56024b433
--- /dev/null
+++ b/harmony/toolbar_android/BuildProfile.ets
@@ -0,0 +1,17 @@
+/**
+ * Use these variables when you tailor your ArkTS code. They must be of the const type.
+ */
+export const HAR_VERSION = '0.2.1-0.0.1';
+export const BUILD_MODE_NAME = 'debug';
+export const DEBUG = true;
+export const TARGET_NAME = 'default';
+
+/**
+ * BuildProfile Class is used only for compatibility purposes.
+ */
+export default class BuildProfile {
+ static readonly HAR_VERSION = HAR_VERSION;
+ static readonly BUILD_MODE_NAME = BUILD_MODE_NAME;
+ static readonly DEBUG = DEBUG;
+ static readonly TARGET_NAME = TARGET_NAME;
+}
\ No newline at end of file
diff --git a/harmony/toolbar_android/Index.ets b/harmony/toolbar_android/Index.ets
new file mode 100644
index 0000000000000000000000000000000000000000..ea5a75457f0c2a0df64058b2a5f9b1e5a1f09294
--- /dev/null
+++ b/harmony/toolbar_android/Index.ets
@@ -0,0 +1 @@
+export { RNCToolbarAndroid } from './src/main/ets/RNCToolbarAndroid'
diff --git a/harmony/toolbar_android/build-profile.json5 b/harmony/toolbar_android/build-profile.json5
new file mode 100644
index 0000000000000000000000000000000000000000..79961f96a6fe0507354b7952a378c3be2ae4bfab
--- /dev/null
+++ b/harmony/toolbar_android/build-profile.json5
@@ -0,0 +1,10 @@
+{
+ "apiType": "stageMode",
+ "buildOption": {
+ },
+ "targets": [
+ {
+ "name": "default"
+ }
+ ]
+}
diff --git a/harmony/toolbar_android/hvigorfile.ts b/harmony/toolbar_android/hvigorfile.ts
new file mode 100644
index 0000000000000000000000000000000000000000..42187071482d292588ad40babeda74f7b8d97a23
--- /dev/null
+++ b/harmony/toolbar_android/hvigorfile.ts
@@ -0,0 +1,6 @@
+import { harTasks } from '@ohos/hvigor-ohos-plugin';
+
+export default {
+ system: harTasks, /* Built-in plugin of Hvigor. It cannot be modified. */
+ plugins:[] /* Custom plugin to extend the functionality of Hvigor. */
+}
diff --git a/harmony/toolbar_android/oh-package.json5 b/harmony/toolbar_android/oh-package.json5
new file mode 100644
index 0000000000000000000000000000000000000000..24d76c8438b3ecfcfe2a061e12f0f23e0675d03a
--- /dev/null
+++ b/harmony/toolbar_android/oh-package.json5
@@ -0,0 +1,10 @@
+{
+ "name": "rnoh-toolbar-android",
+ "version": "0.2.1",
+ "description": "",
+ "type": "module",
+ "main": "Index.ets",
+ "author": "",
+ "license": "ISC",
+ "dependencies": {}
+}
\ No newline at end of file
diff --git a/harmony/toolbar_android/src/main/cpp/CMakeLists.txt b/harmony/toolbar_android/src/main/cpp/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..354b509c53f46059433e9543c84c24b142e1bedd
--- /dev/null
+++ b/harmony/toolbar_android/src/main/cpp/CMakeLists.txt
@@ -0,0 +1,10 @@
+# the minimum version of CMake
+cmake_minimum_required(VERSION 3.13)
+set(CMAKE_VERBOSE_MAKEFILE on)
+
+set(rnoh_toolbar_android_generated_dir "${CMAKE_CURRENT_SOURCE_DIR}/generated")
+file(GLOB_RECURSE rnoh_toolbar_android_generated_SRC "${rnoh_toolbar_android_generated_dir}/**/*.cpp")
+file(GLOB rnoh_toolbar_android_SRC CONFIGURE_DEPENDS *.cpp)
+add_library(rnoh_toolbar_android SHARED ${rnoh_toolbar_android_SRC} ${rnoh_toolbar_android_generated_SRC})
+target_include_directories(rnoh_toolbar_android PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${rnoh_toolbar_android_generated_dir})
+target_link_libraries(rnoh_toolbar_android PUBLIC rnoh)
\ No newline at end of file
diff --git a/harmony/toolbar_android/src/main/cpp/ToolbarAndroidPackage.h b/harmony/toolbar_android/src/main/cpp/ToolbarAndroidPackage.h
new file mode 100644
index 0000000000000000000000000000000000000000..2391009cfda6d60b66e0dbb4f3d965b2b09cb514
--- /dev/null
+++ b/harmony/toolbar_android/src/main/cpp/ToolbarAndroidPackage.h
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2024 Huawei Device Co., Ltd.
+ * Licensed under the MIT License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://github.com/react-native-sensors/react-native-sensors/blob/master/LICENSE
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include "generated/RNOH/generated/BaseToolbarAndroidPackage.h"
+
+namespace rnoh {
+class ToolbarAndroidPackage : public BaseToolbarAndroidPackage {
+ using Super = BaseToolbarAndroidPackage;
+ using Super::Super;
+};
+} // namespace rnoh
\ No newline at end of file
diff --git a/harmony/toolbar_android/src/main/cpp/generated/RNOH/generated/BaseToolbarAndroidPackage.h b/harmony/toolbar_android/src/main/cpp/generated/RNOH/generated/BaseToolbarAndroidPackage.h
new file mode 100644
index 0000000000000000000000000000000000000000..d81cdf5212e12ce46832475c80c349e7d8977e23
--- /dev/null
+++ b/harmony/toolbar_android/src/main/cpp/generated/RNOH/generated/BaseToolbarAndroidPackage.h
@@ -0,0 +1,68 @@
+/**
+ * This code was generated by "react-native codegen-lib-harmony"
+ */
+
+#pragma once
+
+#include
+#include "RNOH/Package.h"
+#include "RNOH/ArkTSTurboModule.h"
+#include "RNOH/generated/components/ToolbarAndroidJSIBinder.h"
+
+namespace rnoh {
+
+class BaseToolbarAndroidPackageTurboModuleFactoryDelegate : public TurboModuleFactoryDelegate {
+ public:
+ SharedTurboModule createTurboModule(Context ctx, const std::string &name) const override {
+ return nullptr;
+ };
+};
+
+class BaseToolbarAndroidPackageEventEmitRequestHandler : public EventEmitRequestHandler {
+ public:
+ void handleEvent(Context const &ctx) override {
+ auto eventEmitter = ctx.shadowViewRegistry->getEventEmitter(ctx.tag);
+ if (eventEmitter == nullptr) {
+ return;
+ }
+
+ std::vector supportedEventNames = {
+ "select",
+ "actionSelected",
+ "iconClicked",
+ };
+ if (std::find(supportedEventNames.begin(), supportedEventNames.end(), ctx.eventName) != supportedEventNames.end()) {
+ eventEmitter->dispatchEvent(ctx.eventName, ArkJS(ctx.env).getDynamic(ctx.payload));
+ }
+ }
+};
+
+
+class BaseToolbarAndroidPackage : public Package {
+ public:
+ BaseToolbarAndroidPackage(Package::Context ctx) : Package(ctx){};
+
+ std::unique_ptr createTurboModuleFactoryDelegate() override {
+ return std::make_unique();
+ }
+
+ std::vector createComponentDescriptorProviders() override {
+ return {
+ facebook::react::concreteComponentDescriptorProvider(),
+ };
+ }
+
+ ComponentJSIBinderByString createComponentJSIBinderByName() override {
+ return {
+ {"ToolbarAndroid", std::make_shared()},
+ };
+ };
+
+ EventEmitRequestHandlers createEventEmitRequestHandlers() override {
+ return {
+ std::make_shared(),
+ };
+ }
+};
+
+} // namespace rnoh
diff --git a/harmony/toolbar_android/src/main/cpp/generated/RNOH/generated/components/ToolbarAndroidJSIBinder.h b/harmony/toolbar_android/src/main/cpp/generated/RNOH/generated/components/ToolbarAndroidJSIBinder.h
new file mode 100644
index 0000000000000000000000000000000000000000..67bef0bb871ac946c50ca06e02ad628eb4a4dd49
--- /dev/null
+++ b/harmony/toolbar_android/src/main/cpp/generated/RNOH/generated/components/ToolbarAndroidJSIBinder.h
@@ -0,0 +1,42 @@
+/**
+ * This code was generated by "react-native codegen-lib-harmony"
+ */
+
+#pragma once
+#include "RNOHCorePackage/ComponentBinders/ViewComponentJSIBinder.h"
+
+namespace rnoh {
+class ToolbarAndroidJSIBinder : public ViewComponentJSIBinder {
+ protected:
+ facebook::jsi::Object createNativeProps(facebook::jsi::Runtime &rt) override {
+ auto object = ViewComponentJSIBinder::createNativeProps(rt);
+ object.setProperty(rt, "nativeActions", true);
+ object.setProperty(rt, "actions", true);
+ object.setProperty(rt, "logo", true);
+ object.setProperty(rt, "navIcon", true);
+ object.setProperty(rt, "overflowIcon", true);
+ object.setProperty(rt, "subtitle", true);
+ object.setProperty(rt, "subtitleColor", true);
+ object.setProperty(rt, "title", true);
+ object.setProperty(rt, "titleColor", true);
+ object.setProperty(rt, "contentInsetStart", true);
+ object.setProperty(rt, "contentInsetEnd", true);
+ object.setProperty(rt, "rtl", true);
+ object.setProperty(rt, "testID", true);
+ return object;
+ }
+
+ facebook::jsi::Object createBubblingEventTypes(facebook::jsi::Runtime &rt) override {
+ facebook::jsi::Object events(rt);
+ return events;
+ }
+
+ facebook::jsi::Object createDirectEventTypes(facebook::jsi::Runtime &rt) override {
+ facebook::jsi::Object events(rt);
+ events.setProperty(rt, "topSelect", createDirectEvent(rt, "onSelect"));
+ events.setProperty(rt, "topActionSelected", createDirectEvent(rt, "onActionSelected"));
+ events.setProperty(rt, "topIconClicked", createDirectEvent(rt, "onIconClicked"));
+ return events;
+ }
+};
+} // namespace rnoh
diff --git a/harmony/toolbar_android/src/main/cpp/generated/react/renderer/components/toolbar_android/ComponentDescriptors.h b/harmony/toolbar_android/src/main/cpp/generated/react/renderer/components/toolbar_android/ComponentDescriptors.h
new file mode 100644
index 0000000000000000000000000000000000000000..13be61e283fed66d574d794f9458d9a10d7bea9e
--- /dev/null
+++ b/harmony/toolbar_android/src/main/cpp/generated/react/renderer/components/toolbar_android/ComponentDescriptors.h
@@ -0,0 +1,22 @@
+
+/**
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
+ *
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
+ * once the code is regenerated.
+ *
+ * @generated by codegen project: GenerateComponentDescriptorH.js
+ */
+
+#pragma once
+
+#include
+#include
+
+namespace facebook {
+namespace react {
+
+using ToolbarAndroidComponentDescriptor = ConcreteComponentDescriptor;
+
+} // namespace react
+} // namespace facebook
diff --git a/harmony/toolbar_android/src/main/cpp/generated/react/renderer/components/toolbar_android/EventEmitters.cpp b/harmony/toolbar_android/src/main/cpp/generated/react/renderer/components/toolbar_android/EventEmitters.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..71726e674ac8f8b46f114e0fad16398dd48fc945
--- /dev/null
+++ b/harmony/toolbar_android/src/main/cpp/generated/react/renderer/components/toolbar_android/EventEmitters.cpp
@@ -0,0 +1,44 @@
+
+/**
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
+ *
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
+ * once the code is regenerated.
+ *
+ * @generated by codegen project: GenerateEventEmitterCpp.js
+ */
+
+#include
+
+
+namespace facebook {
+namespace react {
+
+void ToolbarAndroidEventEmitter::onSelect(OnSelect $event) const {
+ dispatchEvent("select", [$event=std::move($event)](jsi::Runtime &runtime) {
+ auto $payload = jsi::Object(runtime);
+ $payload.setProperty(runtime, "position", $event.position);
+ return $payload;
+ });
+}
+
+
+void ToolbarAndroidEventEmitter::onActionSelected(OnActionSelected $event) const {
+ dispatchEvent("actionSelected", [$event=std::move($event)](jsi::Runtime &runtime) {
+ auto $payload = jsi::Object(runtime);
+ $payload.setProperty(runtime, "position", $event.position);
+ return $payload;
+ });
+}
+
+
+void ToolbarAndroidEventEmitter::onIconClicked(OnIconClicked $event) const {
+ dispatchEvent("iconClicked", [](jsi::Runtime &runtime) {
+ auto $payload = jsi::Object(runtime);
+
+ return $payload;
+ });
+}
+
+} // namespace react
+} // namespace facebook
diff --git a/harmony/toolbar_android/src/main/cpp/generated/react/renderer/components/toolbar_android/EventEmitters.h b/harmony/toolbar_android/src/main/cpp/generated/react/renderer/components/toolbar_android/EventEmitters.h
new file mode 100644
index 0000000000000000000000000000000000000000..69b47713e5c1f6e7dd2d3d37ba7d6a4a2f30696e
--- /dev/null
+++ b/harmony/toolbar_android/src/main/cpp/generated/react/renderer/components/toolbar_android/EventEmitters.h
@@ -0,0 +1,39 @@
+
+/**
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
+ *
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
+ * once the code is regenerated.
+ *
+ * @generated by codegen project: GenerateEventEmitterH.js
+ */
+#pragma once
+
+#include
+
+
+namespace facebook {
+namespace react {
+class ToolbarAndroidEventEmitter : public ViewEventEmitter {
+ public:
+ using ViewEventEmitter::ViewEventEmitter;
+
+ struct OnSelect {
+ int position;
+ };
+
+ struct OnActionSelected {
+ int position;
+ };
+
+ struct OnIconClicked {
+
+ };
+ void onSelect(OnSelect value) const;
+
+ void onActionSelected(OnActionSelected value) const;
+
+ void onIconClicked(OnIconClicked value) const;
+};
+} // namespace react
+} // namespace facebook
diff --git a/harmony/toolbar_android/src/main/cpp/generated/react/renderer/components/toolbar_android/Props.cpp b/harmony/toolbar_android/src/main/cpp/generated/react/renderer/components/toolbar_android/Props.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b0a19b794fa42774a871a599ad8c25a7b9eb4913
--- /dev/null
+++ b/harmony/toolbar_android/src/main/cpp/generated/react/renderer/components/toolbar_android/Props.cpp
@@ -0,0 +1,41 @@
+
+/**
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
+ *
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
+ * once the code is regenerated.
+ *
+ * @generated by codegen project: GeneratePropsCpp.js
+ */
+
+#include
+#include
+#include
+#include
+#include
+
+namespace facebook {
+namespace react {
+
+ToolbarAndroidProps::ToolbarAndroidProps(
+ const PropsParserContext &context,
+ const ToolbarAndroidProps &sourceProps,
+ const RawProps &rawProps): ViewProps(context, sourceProps, rawProps),
+
+ nativeActions(convertRawProp(context, rawProps, "nativeActions", sourceProps.nativeActions, {})),
+ actions(convertRawProp(context, rawProps, "actions", sourceProps.actions, {})),
+ logo(convertRawProp(context, rawProps, "logo", sourceProps.logo, {})),
+ navIcon(convertRawProp(context, rawProps, "navIcon", sourceProps.navIcon, {})),
+ overflowIcon(convertRawProp(context, rawProps, "overflowIcon", sourceProps.overflowIcon, {})),
+ subtitle(convertRawProp(context, rawProps, "subtitle", sourceProps.subtitle, {})),
+ subtitleColor(convertRawProp(context, rawProps, "subtitleColor", sourceProps.subtitleColor, {})),
+ title(convertRawProp(context, rawProps, "title", sourceProps.title, {})),
+ titleColor(convertRawProp(context, rawProps, "titleColor", sourceProps.titleColor, {})),
+ contentInsetStart(convertRawProp(context, rawProps, "contentInsetStart", sourceProps.contentInsetStart, {0})),
+ contentInsetEnd(convertRawProp(context, rawProps, "contentInsetEnd", sourceProps.contentInsetEnd, {0})),
+ rtl(convertRawProp(context, rawProps, "rtl", sourceProps.rtl, {false})),
+ testID(convertRawProp(context, rawProps, "testID", sourceProps.testID, {}))
+ {}
+
+} // namespace react
+} // namespace facebook
diff --git a/harmony/toolbar_android/src/main/cpp/generated/react/renderer/components/toolbar_android/Props.h b/harmony/toolbar_android/src/main/cpp/generated/react/renderer/components/toolbar_android/Props.h
new file mode 100644
index 0000000000000000000000000000000000000000..2652ca1b910b9fd04df8acf6059d325e0fbe6cb0
--- /dev/null
+++ b/harmony/toolbar_android/src/main/cpp/generated/react/renderer/components/toolbar_android/Props.h
@@ -0,0 +1,42 @@
+
+/**
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
+ *
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
+ * once the code is regenerated.
+ *
+ * @generated by codegen project: GeneratePropsH.js
+ */
+#pragma once
+
+#include
+#include
+#include
+
+namespace facebook {
+namespace react {
+
+class ToolbarAndroidProps final : public ViewProps {
+ public:
+ ToolbarAndroidProps() = default;
+ ToolbarAndroidProps(const PropsParserContext& context, const ToolbarAndroidProps &sourceProps, const RawProps &rawProps);
+
+#pragma mark - Props
+
+ folly::dynamic nativeActions{};
+ folly::dynamic actions{};
+ ImageSource logo{};
+ ImageSource navIcon{};
+ ImageSource overflowIcon{};
+ std::string subtitle{};
+ std::string subtitleColor{};
+ std::string title{};
+ std::string titleColor{};
+ int contentInsetStart{0};
+ int contentInsetEnd{0};
+ bool rtl{false};
+ std::string testID{};
+};
+
+} // namespace react
+} // namespace facebook
diff --git a/harmony/toolbar_android/src/main/cpp/generated/react/renderer/components/toolbar_android/ShadowNodes.cpp b/harmony/toolbar_android/src/main/cpp/generated/react/renderer/components/toolbar_android/ShadowNodes.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e0376829f5e3b7e4febc85823e7d5c7c3ea63583
--- /dev/null
+++ b/harmony/toolbar_android/src/main/cpp/generated/react/renderer/components/toolbar_android/ShadowNodes.cpp
@@ -0,0 +1,19 @@
+
+/**
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
+ *
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
+ * once the code is regenerated.
+ *
+ * @generated by codegen project: GenerateShadowNodeCpp.js
+ */
+
+#include
+
+namespace facebook {
+namespace react {
+
+extern const char ToolbarAndroidComponentName[] = "ToolbarAndroid";
+
+} // namespace react
+} // namespace facebook
diff --git a/harmony/toolbar_android/src/main/cpp/generated/react/renderer/components/toolbar_android/ShadowNodes.h b/harmony/toolbar_android/src/main/cpp/generated/react/renderer/components/toolbar_android/ShadowNodes.h
new file mode 100644
index 0000000000000000000000000000000000000000..0758651011df63f450b3bcde91ce3a9ef000cdbf
--- /dev/null
+++ b/harmony/toolbar_android/src/main/cpp/generated/react/renderer/components/toolbar_android/ShadowNodes.h
@@ -0,0 +1,34 @@
+
+/**
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
+ *
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
+ * once the code is regenerated.
+ *
+ * @generated by codegen project: GenerateShadowNodeH.js
+ */
+
+#pragma once
+
+#include
+#include
+#include
+#include
+#include
+
+namespace facebook {
+namespace react {
+
+JSI_EXPORT extern const char ToolbarAndroidComponentName[];
+
+/*
+ * `ShadowNode` for component.
+ */
+using ToolbarAndroidShadowNode = ConcreteViewShadowNode<
+ ToolbarAndroidComponentName,
+ ToolbarAndroidProps,
+ ToolbarAndroidEventEmitter,
+ ToolbarAndroidState>;
+
+} // namespace react
+} // namespace facebook
diff --git a/harmony/toolbar_android/src/main/cpp/generated/react/renderer/components/toolbar_android/States.cpp b/harmony/toolbar_android/src/main/cpp/generated/react/renderer/components/toolbar_android/States.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..c676b58024415422bb76b877188023befb3942a0
--- /dev/null
+++ b/harmony/toolbar_android/src/main/cpp/generated/react/renderer/components/toolbar_android/States.cpp
@@ -0,0 +1,18 @@
+
+/**
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
+ *
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
+ * once the code is regenerated.
+ *
+ * @generated by codegen project: GenerateStateCpp.js
+ */
+#include
+
+namespace facebook {
+namespace react {
+
+
+
+} // namespace react
+} // namespace facebook
diff --git a/harmony/toolbar_android/src/main/cpp/generated/react/renderer/components/toolbar_android/States.h b/harmony/toolbar_android/src/main/cpp/generated/react/renderer/components/toolbar_android/States.h
new file mode 100644
index 0000000000000000000000000000000000000000..665a9d5537b9d6a52e6dda720bc7bbaf43ce7da1
--- /dev/null
+++ b/harmony/toolbar_android/src/main/cpp/generated/react/renderer/components/toolbar_android/States.h
@@ -0,0 +1,36 @@
+/**
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
+ *
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
+ * once the code is regenerated.
+ *
+ * @generated by codegen project: GenerateStateH.js
+ */
+#pragma once
+
+#ifdef ANDROID
+#include
+#include
+#include
+#endif
+
+namespace facebook {
+namespace react {
+
+class ToolbarAndroidState {
+public:
+ ToolbarAndroidState() = default;
+
+#ifdef ANDROID
+ ToolbarAndroidState(ToolbarAndroidState const &previousState, folly::dynamic data){};
+ folly::dynamic getDynamic() const {
+ return {};
+ };
+ MapBuffer getMapBuffer() const {
+ return MapBufferBuilder::EMPTY();
+ };
+#endif
+};
+
+} // namespace react
+} // namespace facebook
\ No newline at end of file
diff --git a/harmony/toolbar_android/src/main/ets/Constants.ets b/harmony/toolbar_android/src/main/ets/Constants.ets
new file mode 100644
index 0000000000000000000000000000000000000000..25e0829f717d007c43c43e4464e5add79d22336d
--- /dev/null
+++ b/harmony/toolbar_android/src/main/ets/Constants.ets
@@ -0,0 +1,39 @@
+/**
+ * MIT License
+ *
+ * Copyright (C) 2024 Huawei Device Co., Ltd.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+export class Constants {
+ public static EVENT_NAME = 'ToolbarAndroid';
+
+ public static DEFAULT_WINDOW_WIDTH = 1080;
+
+ public static DEFAULT_NAV_ICON_SIZE = 56;
+
+ public static DEFAULT_LOGO_SIZE = 48;
+
+ public static DEFAULT_MENU_ITEM_SIZE = 36;
+
+ public static DEFAULT_MENU_ITEM_MARGIN = 8;
+
+ public static DEFAULT_MORE_ICON_SIZE = 24;
+}
\ No newline at end of file
diff --git a/harmony/toolbar_android/src/main/ets/RNCToolbarAndroid.ets b/harmony/toolbar_android/src/main/ets/RNCToolbarAndroid.ets
new file mode 100644
index 0000000000000000000000000000000000000000..b1026f3855f3b527c8f1e4b6b1fee26d1d31be42
--- /dev/null
+++ b/harmony/toolbar_android/src/main/ets/RNCToolbarAndroid.ets
@@ -0,0 +1,67 @@
+/**
+ * MIT License
+ *
+ * Copyright (C) 2024 Huawei Device Co., Ltd.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+import { RNComponentContext, RNViewBase } from '@rnoh/react-native-openharmony';
+import { ToolbarAndroid as GENERATED } from './generated/components/ToolbarAndroid'
+import { Toolbar } from './Toolbar';
+
+
+@Component
+export struct RNCToolbarAndroid {
+ public static readonly NAME = GENERATED.NAME
+ public ctx!: RNComponentContext
+ public tag: number = 0
+ @State private descriptorWrapper: GENERATED.DescriptorWrapper = {} as GENERATED.DescriptorWrapper
+ @State private descriptor: GENERATED.Descriptor = {} as GENERATED.Descriptor
+ private cleanUpCallbacks: (() => void)[] = []
+
+ aboutToAppear(){
+ this.descriptor = this.ctx.descriptorRegistry.getDescriptor(this.tag);
+ this.onDescriptorWrapperChange(this.ctx.descriptorRegistry.findDescriptorWrapperByTag(this.tag)!)
+ this.cleanUpCallbacks.push(this.ctx.descriptorRegistry.subscribeToDescriptorChanges(this.tag,
+ (_descriptor, newDescriptorWrapper) => {
+ this.onDescriptorWrapperChange(newDescriptorWrapper! as GENERATED.DescriptorWrapper)
+ }
+ ))
+ }
+
+ private onDescriptorWrapperChange(descriptorWrapper: GENERATED.DescriptorWrapper){
+ this.descriptorWrapper = descriptorWrapper
+ }
+
+ aboutToDisappear(){
+ this.cleanUpCallbacks.forEach(cb => cb())
+ }
+
+ build(){
+ RNViewBase({ ctx: this.ctx, tag: this.tag }) {
+ Toolbar({
+ ctx: this.ctx,
+ tag: this.tag,
+ descriptorWrapper: this.descriptorWrapper,
+ layoutSize: this.descriptor.layoutMetrics.frame.size
+ })
+ }
+ }
+}
\ No newline at end of file
diff --git a/harmony/toolbar_android/src/main/ets/Toolbar.ets b/harmony/toolbar_android/src/main/ets/Toolbar.ets
new file mode 100644
index 0000000000000000000000000000000000000000..09dd9d5634b30cba17ee9e321b6d2f62168bcba2
--- /dev/null
+++ b/harmony/toolbar_android/src/main/ets/Toolbar.ets
@@ -0,0 +1,609 @@
+/**
+ * MIT License
+ *
+ * Copyright (C) 2024 Huawei Device Co., Ltd.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+import { image } from '@kit.ImageKit';
+import { http } from '@kit.NetworkKit';
+import measure from '@ohos.measure';
+import ResponseCode from '@ohos.net.http';
+import { RNOHContext, Size } from '@rnoh/react-native-openharmony';
+import { Constants } from './Constants';
+import { ToolbarAndroid as GENERATED } from './generated/components/ToolbarAndroid'
+
+interface ImageSource {
+ uri: string,
+ width: number,
+ height: number
+}
+
+interface Action {
+ title: string,
+ icon?: ImageSource,
+ show?: string,
+ showWithText?: boolean
+};
+
+enum ShowAsAction {
+ SHOW_AS_ACTION_NEVER = 0,
+ SHOW_AS_ACTION_IF_ROOM = 1,
+ SHOW_AS_ACTION_ALWAYS = 2,
+ SHOW_AS_ACTION_WITH_TEXT = 4
+}
+
+class MenuItem {
+ value: ResourceStr;
+ icon?: ImageSource | undefined;
+ action?: () => void;
+ showAsAction: ShowAsAction;
+ order: number
+
+ constructor(value: ResourceStr, icon: ImageSource | undefined, showAsAction: ShowAsAction, order: number){
+ this.value = value
+ this.icon = icon
+ this.showAsAction = showAsAction
+ this.order = order
+ }
+}
+
+@Component
+export struct Toolbar {
+ private ctx!: RNOHContext;
+ private tag: number = 0;
+ private descriptorWrapper: GENERATED.DescriptorWrapper | undefined = undefined;
+ private layoutSize?: Size;
+ @State navIcon: ImageSource | undefined = undefined;
+ @State navImage: PixelMap | Resource | undefined = undefined;
+ @State isTouchNav: boolean = false;
+ @State logo: ImageSource | undefined = undefined;
+ @State logoImage: PixelMap | Resource | undefined = undefined;
+ @State overflowIcon: ImageSource | undefined = undefined;
+ @State overflowImage: PixelMap | Resource | undefined = undefined;
+ @State isLogoShow: boolean = true;
+ @State isTitleShow: boolean = true;
+ @State touchActionIndex: number = -1;
+ @State isPressAction: boolean = false;
+ @State isTouchMore: boolean = false;
+ @State isInitFinish: boolean = false;
+ @State isShowMenu: boolean = false;
+ @State touchMenuIndex: number = -1;
+ private title: string | undefined= '';
+ private titleColor: string | undefined = '';
+ private subtitle: string | undefined = '';
+ private subtitleColor: string | undefined = '';
+ private actions: Array | undefined = [];
+ private showActions: Array