Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qohosplugincore.h
Go to the documentation of this file.
1// Copyright (C) 2026 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QOHOSPLUGINCORE_H
5#define QOHOSPLUGINCORE_H
6
7#include <QtCore/private/qcore_ohos_p.h>
8#include <QtCore/private/qnapi_p.h>
9#include <QtCore/private/qohoscommon_p.h>
10#include <atomic>
11#include <chrono>
12#include <cstdlib>
13#include <functional>
14#include <map>
15#include <memory>
16#include <optional>
17#include <qohosqpaenums.h>
18#include <string>
19#include <type_traits>
20#include <typeinfo>
21#include <vector>
22
23QT_BEGIN_NAMESPACE
24
25namespace QtOhos {
26
28{
29public:
30 static void tagWindowAsClosing(QNapi::Object jsWindow, const char *logContext);
31 static bool isWindowClosing(QNapi::Object jsWindow);
32
33 JsWindowsTracker() = delete;
34};
35
37{
38public:
39 virtual ~QAbilityPeer();
40
41 virtual std::string instanceId() = 0;
42 virtual QNapi::Object uiContext() = 0;
43 virtual QNapi::Object qAbility() = 0;
44 virtual QNapi::Object launchWant() = 0;
47 virtual void forceResolveQWindowDestroyPromiseIfPresent(Napi::Env env) = 0;
48 virtual std::shared_ptr<std::atomic_bool> destroyAllowedFlag() = 0;
49
50 virtual void setQWindow(Napi::Env env, QObjectThreadSafeRef qwindow) = 0;
51
52 virtual void *tryCastWithTypeIdObject(const void *matchTypeIdObject) = 0;
53
54protected:
56};
57
58class JsState;
59
61{
62public:
63 virtual ~AppFunctions();
64
66 QNapi::Object baseQAbility, QObjectThreadSafeRef qwindow,
67 QNapi::Object optStartOptions,
68 std::function<void(JsState &, std::shared_ptr<QAbilityPeer>)> startupNotifyFunc) = 0;
69
70 virtual void startAppProcess(
71 QNapi::Object baseQAbility, const std::string &processId, QNapi::Object want,
72 QNapi::Object optStartOptions, std::function<void(JsState &)> continueFunc) = 0;
73
74 virtual void startNoUiChildProcess(JsState &jsState, const std::string &libraryName, const std::vector<std::string> &args) = 0;
75};
76
82
83class JsState : public QOhosJsState
84{
85public:
86 static JsState &castFrom(QOhosJsState &jsState);
87
88 JsState(const JsState &) = delete;
89 JsState &operator=(const JsState &) = delete;
90
92
93 virtual std::shared_ptr<QAbilityPeer> defaultQAbilityPeer() = 0;
94 virtual std::shared_ptr<QAbilityPeer> tryGetQAbilityPeerByInstanceId(const std::string &instanceId) = 0;
95 virtual std::shared_ptr<QAbilityPeer> tryGetQAbilityPeerByInstance(QNapi::Object qAbility) = 0;
96
97 virtual void visitEachQAbilityPeer(const std::function<void(std::shared_ptr<QAbilityPeer>)> &visitor) = 0;
98
100 QNapi::Object baseQAbility, QObjectThreadSafeRef qwindow,
101 QNapi::Object optStartOptions,
102 std::function<void(JsState &, std::shared_ptr<QAbilityPeer>)> startupNotifyFunc) = 0;
103
104 virtual QtRunMode qtRunMode() = 0;
105
106 template<typename T>
108
109protected:
111
112private:
113 virtual QNapi::Symbol getJsSymbolForType(const std::type_info &typeInfo) = 0;
114};
115
117
119{
120public:
121 static std::shared_ptr<QUiAbilityPeer> tryCastFromQAbilityPeerOrNull(std::shared_ptr<QAbilityPeer> qAbilityPeer);
122
123 ~QUiAbilityPeer() override;
124
125 virtual QNapi::Object launchParam() = 0;
126
127 virtual QNapi::Object windowStage() = 0;
128 virtual QNapi::Object window() = 0;
129
131 std::function<void(JsState &, QNapi::Object, QOhosConsumer<JsState &, QOhosAbilityOnContinueResult>)> requestsHandler) = 0;
132
133protected:
135
136private:
137 static const nullptr_t typeIdObject;
138
139 void *tryCastWithTypeIdObject(const void *matchTypeIdObject) final;
140};
141
143{
144public:
146
147 JsState &jsState() const;
148};
149
150// this function should be called once from JS thread at some point during startup
154
155// returns true iff the calling thread is the JS thread
156bool isJsThread();
157
158// this function should be called from JS thread for each UIAbility when it's ready
159void addJsQAbilityPeer(std::shared_ptr<QAbilityPeer> qAbilityPeer);
160
161// this function should be called from JS thread when WindowStage of UIAbility is destroyed
162void removeMatchingJsQAbilityPeer(QNapi::Object qAbility);
163
164// this function should be called from JS thread when new Want object is received
165void dispatchNewWant(QNapi::Object qAbility, QNapi::Object want, QNapi::Object launchParam);
166
167// Invokes the task inside the Qt thread and blocks the caller's thread until either:
168// - the "continue" function (std::function<void()>, passed as second argument to
169// the task) is called on the Qt side and returns,
170// - timeout occurs (we don't receive response from the finished task within the
171// specified time limit),
172// - deadlock is detected (both Qt and JS thread use synchronous calls at the same
173// time).
174// It can be called from the JS thread. Calling it from the Qt thread is illegal.
175//
176// Returns true iff the caller receives confirmation about finishing the task within
177// the time limit.
178//
179// Note:
180// If the function returns false then:
181// - either the task wasn't started at all (timeout or deadlock)
182// - or the task was still running (and may be still running!) in the Qt thread
183// after reaching the timeout.
185 std::function<void(std::function<void()>)> &&task,
186 std::chrono::nanoseconds timeout);
187
188template<typename T>
190{
191 return getJsSymbolForType(typeid(T));
192}
193
194}
195
196QT_END_NAMESPACE
197
198#endif
operator std::string() const
operator const char *() const
const char * value() const
CZString(const char *value)
QNapi::Object jsObject()
Definition window.cpp:91
JsWindowRef(JsWindowRef &&)=delete
JsWindowRef(std::string owningQAbilityInstanceId, JsWindowId windowId, QNapi::Object jsWindow, QtOhos::QObjectThreadSafeRef owningQWindowRef)
Definition window.cpp:46
bool isFocused() const
Definition window.cpp:69
JsWindowRef(const JsWindowRef &)=delete
QtOhos::QObjectThreadSafeRef owningQWindowRef() const
Definition window.cpp:86
JsWindowRef & operator=(JsWindowRef &&)=delete
Result eval(const std::string &expr, const std::vector< QNapi::ValueWrapper > &exprArgs={}) const
Definition window.h:69
bool isWindowShown() const
Definition window.cpp:56
JsWindowId id() const
Definition window.cpp:81
JsWindowRef & operator=(const JsWindowRef &)=delete
const std::string & owningQAbilityInstanceId() const
Definition window.cpp:76
QNapi::Promise evalToPromiseOrRejectOnThrow(const std::string &expr, const std::vector< QNapi::ValueWrapper > &exprArgs={}) const
Definition window.h:74
virtual void startQAbilityInstance(QNapi::Object baseQAbility, QObjectThreadSafeRef qwindow, QNapi::Object optStartOptions, std::function< void(JsState &, std::shared_ptr< QAbilityPeer >)> startupNotifyFunc)=0
virtual void startAppProcess(QNapi::Object baseQAbility, const std::string &processId, QNapi::Object want, QNapi::Object optStartOptions, std::function< void(JsState &)> continueFunc)=0
virtual void startNoUiChildProcess(JsState &jsState, const std::string &libraryName, const std::vector< std::string > &args)=0
JsState & jsState() const
JsState & operator=(const JsState &)=delete
virtual QtRunMode qtRunMode()=0
JsState(const JsState &)=delete
virtual std::shared_ptr< QAbilityPeer > tryGetQAbilityPeerByInstanceId(const std::string &instanceId)=0
~JsState() override
static JsState & castFrom(QOhosJsState &jsState)
virtual void visitEachQAbilityPeer(const std::function< void(std::shared_ptr< QAbilityPeer >)> &visitor)=0
QNapi::Symbol getJsSymbolForType()
virtual std::shared_ptr< QAbilityPeer > defaultQAbilityPeer()=0
virtual std::shared_ptr< QAbilityPeer > tryGetQAbilityPeerByInstance(QNapi::Object qAbility)=0
virtual void startNewQAbilityInstance(QNapi::Object baseQAbility, QObjectThreadSafeRef qwindow, QNapi::Object optStartOptions, std::function< void(JsState &, std::shared_ptr< QAbilityPeer >)> startupNotifyFunc)=0
virtual QNapi::Symbol getJsSymbolForType(const std::type_info &typeInfo)=0
static void tagWindowAsClosing(QNapi::Object jsWindow, const char *logContext)
static bool isWindowClosing(QNapi::Object jsWindow)
virtual std::string instanceId()=0
virtual QObjectThreadSafeRef qWindowRef()=0
virtual QNapi::Object launchWant()=0
virtual void setQWindow(Napi::Env env, QObjectThreadSafeRef qwindow)=0
virtual void * tryCastWithTypeIdObject(const void *matchTypeIdObject)=0
virtual std::shared_ptr< std::atomic_bool > destroyAllowedFlag()=0
virtual std::optional< QNapi::Promise > qWindowDestroyPromise()=0
virtual QNapi::Object qAbility()=0
virtual QNapi::Object uiContext()=0
virtual void forceResolveQWindowDestroyPromiseIfPresent(Napi::Env env)=0
virtual void setOnContinueRequestsHandler(std::function< void(JsState &, QNapi::Object, QOhosConsumer< JsState &, QOhosAbilityOnContinueResult >)> requestsHandler)=0
virtual QNapi::Object launchParam()=0
virtual QNapi::Object windowStage()=0
void * tryCastWithTypeIdObject(const void *matchTypeIdObject) final
static std::shared_ptr< QUiAbilityPeer > tryCastFromQAbilityPeerOrNull(std::shared_ptr< QAbilityPeer > qAbilityPeer)
~QUiAbilityPeer() override
virtual QNapi::Object window()=0
bool operator!=(const TypedId &other) const
Definition qohosutils.h:149
IdValueType value() const
Definition qohosutils.h:161
IdValueType ValueType
Definition qohosutils.h:29
bool operator==(const TypedId &other) const
Definition qohosutils.h:143
TypedId(IdValueType value)
Definition qohosutils.h:137
TypedId(const TypedId &other)
TypedId & operator=(const TypedId &other)
~TypedId()=default
TypedId & operator=(TypedId &&other)
bool operator<(const TypedId &other) const
Definition qohosutils.h:155
TypedId()=default
TypedId(TypedId &&other)
std::string buildFuncCallString(const char *funcName, FuncArgs &&...funcArgs)
Definition qarkuiutils.h:95
std::enable_if_t< std::is_arithmetic< T >::value, std::string > buildFuncArgString(const T &funcArg)
Definition qarkuiutils.h:61
constexpr bool arkUiCallsLogging
Definition qarkuiutils.h:57
std::string buildFuncArgString(CZString funcArg)
Definition qarkuiutils.h:89
std::enable_if_t< std::is_void< QOhosInvokeResult< Func, FuncArgs... > >::value, void > callArkUiFunc(const char *funcName, Func &&func, FuncArgs &&...funcArgs)
std::array< float, 2 > toFloatArray(const QPointF &point)
QOhosInvokeResult< Func, FuncArgs... > callArkUi(QOhosNamedFunc< Func, f > func, FuncArgs &&...funcArgs)
std::optional< WindowProperties > tryGetWindowProperties(JsWindowId jsWindowId)
Definition window.cpp:28
std::enable_if_t< std::is_same< QOhosInvokeResult< Func, FuncArgs... >, std::int32_t >::value||std::is_enum< QOhosInvokeResult< Func, FuncArgs... > >::value, void > callArkUiOrFailOnErrorResult(QOhosNamedFunc< Func, f > func, FuncArgs &&...funcArgs)
Combined button and popup list for selecting options.
std::optional< QNapi::Object > tryMapOptMainWindowToQAbility(QOhosJsState &jsState, std::optional< QtOhos::QObjectThreadSafeRef > optInstanceMainWindowRef)
std::string const char * mapBoolToTrueFalseStr(bool value)
QOhosConsumer< T > makeCompressingAsyncConsumer(QOhosConsumer< T > baseConsumer, QOhosConsumer< std::function< void()> > asyncExecutor)
Definition qohosutils.h:179
void removeMatchingJsQAbilityPeer(QNapi::Object qAbility)
ForwardIt removeMatchingWithLookahead(ForwardIt firstIt, ForwardIt lastIt, Predicate &&predicate)
Definition qohosutils.h:89
void initJsThreadState(napi_env env, std::map< std::string, QNapi::Reference< QNapi::Function > > &&jsModulesFactories, std::shared_ptr< AppFunctions > appFunctions, QtRunMode qtRunMode)
std::optional< double > tryParseStringAsFiniteDouble(const std::string &inputString)
Q_REQUIRED_RESULT bool tryInvokeInQtThreadAndTryWaitForContinue(std::function< void(std::function< void()>)> &&task, std::chrono::nanoseconds timeout)
void tupleForEach(const std::tuple< TupleElements... > &tuple, UnaryFunc func, std::index_sequence< TupleIndices... >)
Definition qohosutils.h:119
bool isJsThread()
QtOhosQpa::enums::ohos::app::ability::AbilityConstant::OnContinueResult QOhosAbilityOnContinueResult
void tupleForEach(const std::tuple< TupleElements... > &tuple, UnaryFunc func)
Definition qohosutils.h:125
void addJsQAbilityPeer(std::shared_ptr< QAbilityPeer > qAbilityPeer)
void dispatchNewWant(QNapi::Object qAbility, QNapi::Object want, QNapi::Object launchParam)
constexpr T makeCopyByValue(T value)
Definition qohosutils.h:131
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::bundle::bundleManager::SupportWindowMode))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::window::WindowStatusType))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::window::ModalityType))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::app::ability::ConfigurationConstant::ColorMode))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::file::picker::DocumentSelectMode))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::app::ability::AbilityConstant::WindowMode))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::app::ability::wantConstant::Flags))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::app::ability::AbilityConstant::ContinueState))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::window::AnimationType))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::window::MaximizePresentation))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::inputMethod::Direction))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::display::Orientation))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::display::DisplaySourceMode))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::multimodalInput::pointer::PointerStyle))
QT_END_NAMESPACE Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::kit::ShareKit::systemShare::SelectionMode))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::notificationManager::ContentType))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::window::AvoidAreaType))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::app::ability::AbilityConstant::LaunchReason))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::app::ability::contextConstant::ProcessMode))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::inputMethod::RequestKeyboardReason))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::app::ability::contextConstant::StartupVisibility))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::inputMethod::EnterKeyType))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::kit::ShareKit::systemShare::SharePreviewMode))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::app::ability::AbilityConstant::OnContinueResult))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::window::WindowEventType))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::abilityAccessCtrl::PermissionStatus))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::graphics::text::SystemFontType))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::inputMethod::TextInputType))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::ohos::window::RectChangeReason))
Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhosQpa::enums::kit::ShareKit::systemShare::ShareAbilityType))
std::optional< QOhosDisplayInfo::JsDisplayId > displayId
Definition window.h:29
bool isDisplayMainOrExtended() const
QtOhosQpa::enums::ohos::display::Orientation JsDisplayOrientation
QtOhosQpa::enums::ohos::display::DisplaySourceMode DisplaySourceMode
std::optional< DisplaySourceMode > sourceMode
QSizeF physicalSize() const
QRect displayGeometryPixels() const
static std::optional< QNapi::Object > tryGetDisplayById(QOhosJsState &jsState, QOhosDisplayInfo::JsDisplayId displayId)
std::optional< QPoint > topLeftOffsetPixels
static QOhosDisplayInfo makeFromOhosDisplayObject(QOhosJsState &jsState, QNapi::Object displayObject)
std::optional< JsDisplayOrientation > orientation
bool shouldIgnoreDisplay() const
QtOhosQpa::enums::kit::ShareKit::systemShare::SelectionMode Enum
static constexpr std::array< std::pair< Enum, const char * >, 2 > enumeratorsNames
QtOhosQpa::enums::kit::ShareKit::systemShare::ShareAbilityType Enum
static constexpr std::array< std::pair< Enum, const char * >, 5 > enumeratorsNames
QtOhosQpa::enums::kit::ShareKit::systemShare::SharePreviewMode Enum
static constexpr std::array< std::pair< Enum, const char * >, 2 > enumeratorsNames
static constexpr std::array< std::pair< Enum, const char * >, 5 > enumeratorsNames
QtOhosQpa::enums::ohos::abilityAccessCtrl::PermissionStatus Enum
QtOhosQpa::enums::ohos::app::ability::AbilityConstant::ContinueState Enum
static constexpr std::array< std::pair< Enum, const char * >, 2 > enumeratorsNames
static constexpr std::array< std::pair< Enum, const char * >, 10 > enumeratorsNames
QtOhosQpa::enums::ohos::app::ability::AbilityConstant::LaunchReason Enum
static constexpr std::array< std::pair< Enum, const char * >, 3 > enumeratorsNames
QtOhosQpa::enums::ohos::app::ability::AbilityConstant::OnContinueResult Enum
QtOhosQpa::enums::ohos::app::ability::AbilityConstant::WindowMode Enum
static constexpr std::array< std::pair< Enum, const char * >, 3 > enumeratorsNames
QtOhosQpa::enums::ohos::app::ability::ConfigurationConstant::ColorMode Enum
static constexpr std::array< std::pair< Enum, const char * >, 3 > enumeratorsNames
static constexpr std::array< std::pair< Enum, const char * >, 3 > enumeratorsNames
QtOhosQpa::enums::ohos::app::ability::contextConstant::ProcessMode Enum
QtOhosQpa::enums::ohos::app::ability::contextConstant::StartupVisibility Enum
static constexpr std::array< std::pair< Enum, const char * >, 2 > enumeratorsNames
static constexpr std::array< std::pair< Enum, const char * >, 6 > enumeratorsNames
QtOhosQpa::enums::ohos::app::ability::wantConstant::Flags Enum
static constexpr std::array< std::pair< Enum, const char * >, 3 > enumeratorsNames
QtOhosQpa::enums::ohos::bundle::bundleManager::SupportWindowMode Enum
static constexpr std::array< std::pair< Enum, const char * >, 5 > enumeratorsNames
QtOhosQpa::enums::ohos::display::DisplaySourceMode Enum
static constexpr std::array< std::pair< Enum, const char * >, 4 > enumeratorsNames
QtOhosQpa::enums::ohos::file::picker::DocumentSelectMode Enum
static constexpr std::array< std::pair< Enum, const char * >, 3 > enumeratorsNames
QtOhosQpa::enums::ohos::graphics::text::SystemFontType Enum
static constexpr std::array< std::pair< Enum, const char * >, 5 > enumeratorsNames
static constexpr std::array< std::pair< Enum, const char * >, 4 > enumeratorsNames
static constexpr std::array< std::pair< Enum, const char * >, 9 > enumeratorsNames
QtOhosQpa::enums::ohos::inputMethod::RequestKeyboardReason Enum
static constexpr std::array< std::pair< Enum, const char * >, 4 > enumeratorsNames
static constexpr std::array< std::pair< Enum, const char * >, 15 > enumeratorsNames
QtOhosQpa::enums::ohos::inputMethod::TextInputType Enum
static constexpr std::array< std::pair< Enum, const char * >, 53 > enumeratorsNames
QtOhosQpa::enums::ohos::multimodalInput::pointer::PointerStyle Enum
QtOhosQpa::enums::ohos::notificationManager::ContentType Enum
static constexpr std::array< std::pair< Enum, const char * >, 7 > enumeratorsNames
static constexpr std::array< std::pair< Enum, const char * >, 1 > enumeratorsNames
static constexpr std::array< std::pair< Enum, const char * >, 5 > enumeratorsNames
static constexpr std::array< std::pair< Enum, const char * >, 4 > enumeratorsNames
QtOhosQpa::enums::ohos::window::MaximizePresentation Enum
static constexpr std::array< std::pair< Enum, const char * >, 2 > enumeratorsNames
static constexpr std::array< std::pair< Enum, const char * >, 7 > enumeratorsNames
static constexpr std::array< std::pair< Enum, const char * >, 5 > enumeratorsNames
static constexpr std::array< std::pair< Enum, const char * >, 6 > enumeratorsNames