4#ifndef QOHOSPLUGINCORE_H
5#define QOHOSPLUGINCORE_H
7#include <QtCore/private/qcore_ohos_p.h>
8#include <QtCore/private/qnapi_p.h>
9#include <QtCore/private/qohoscommon_p.h>
10#include <QtCore/qobject.h>
18#include <qohosenums.h>
28template<
typename A,
typename B,
typename =
void>
31template<
typename A,
typename B>
35template<
typename A,
typename B>
49template<
typename T,
typename Func>
51 qohosplugincore_h_detail::isStdOptional<QOhosInvokeResult<Func, T>>,
52 QOhosInvokeResult<Func, T>>
53qAndThen(
const std::optional<T> &opt, Func &&func);
55template<
typename T,
typename Func>
84 virtual void setQWindow(Napi::Env env, QObjectThreadSafeRef qwindow) = 0;
118 QNapi::Object baseQAbility, QObjectThreadSafeRef qwindow,
119 QNapi::Object optStartOptions,
123 QNapi::Object baseQAbility,
const std::string &processId, QNapi::Object want,
124 QNapi::Object optStartOptions,
std::function<
void(
JsState &)> continueFunc) = 0;
155 QNapi::Object baseQAbility, QObjectThreadSafeRef qwindow,
156 QNapi::Object optStartOptions,
172 const std::type_info &objectTypeInfo, QOhosSupplier<std::shared_ptr<
void>> objectFactory) = 0;
192 std::function<
void(
JsState &, QNapi::Object, QOhosConsumer<JsState &, QOhosAbilityOnContinueResult>)> requestsHandler) = 0;
198 static const nullptr_t typeIdObject;
234 std::function<
void(
JsState &, QOhosTaskPromise<>)> &&task,
235 std::string callerContextName = {});
242 std::string callerContextName = {});
244template<
typename Func>
253 std::string callerContextName = {});
273 std::function<
void(
std::function<
void()>)> &&task,
274 std::chrono::nanoseconds timeout);
279 auto *objectPtr =
reinterpret_cast<T *>(
280 getAttachedObjectWithLazyCreate(
typeid(T), &
std::make_shared<T>));
287 return getJsSymbolForType(
typeid(T));
290template<
typename Func>
293 Q_UNUSED(callerContextName);
294 return QOhosJsThreadGateway::eval(
295 [&func](QOhosJsState &jsState) {
296 return func(
static_cast<JsState &>(jsState));
303 return QOhosJsThreadGateway::evalWithConsumer<T>(
304 [evalFunc = std::move(evalFunc)](QOhosJsState &jsState, std::function<
void(T)> consumer) {
305 evalFunc(
static_cast<JsState &>(jsState), std::move(consumer));
312 std::string callerContextName)
314 return evalInJsThreadWithConsumer<T>(
315 [evalFunc = std::move(evalFunc), callerContextName](
QtOhos::
JsState &jsState,
std::function<
void(T)> consumer) {
316 evalFunc(jsState, QOhosTaskPromise<T>(
std::move(consumer), {}, callerContextName));
322template<
typename T,
typename Func>
324 qohosplugincore_h_detail::isStdOptional<QOhosInvokeResult<Func, T>>,
325 QOhosInvokeResult<Func, T>>
326qAndThen(
const std::optional<T> &opt, Func &&func)
328 return opt.has_value() ? func(*opt) : QOhosInvokeResult<Func, T>();
331template<
typename T,
typename Func>
334 using TransformedT = std::remove_cv_t<QOhosInvokeResult<Func, T>>;
335 return opt.has_value()
336 ? std::optional<TransformedT>(func(*opt))
337 : std::optional<TransformedT>();
JsWindowRef(JsWindowRef &&)=delete
JsWindowRef(std::string owningQAbilityInstanceId, JsWindowId windowId, QNapi::Object jsWindow, QtOhos::QObjectThreadSafeRef owningQWindowRef)
JsWindowRef(const JsWindowRef &)=delete
QtOhos::QObjectThreadSafeRef owningQWindowRef() const
JsWindowRef & operator=(JsWindowRef &&)=delete
Result eval(const std::string &expr, const std::vector< QNapi::ValueWrapper > &exprArgs={}) const
bool isWindowShown() const
JsWindowRef & operator=(const JsWindowRef &)=delete
const std::string & owningQAbilityInstanceId() const
QNapi::Promise evalToPromiseOrRejectOnThrow(const std::string &expr, const std::vector< QNapi::ValueWrapper > &exprArgs={}) const
virtual void startQAbilityInstance(QNapi::Object baseQAbility, QObjectThreadSafeRef qwindow, QNapi::Object optStartOptions, std::function< void(JsState &, std::shared_ptr< QAbilityPeer >)> startupNotifyFunc)=0
virtual void tagWidgetOrWindowAsFloatWindow(QObject *widgetOrWindow, bool floatWindowEnabled)=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
virtual void * getAttachedObjectWithLazyCreate(const std::type_info &objectTypeInfo, QOhosSupplier< std::shared_ptr< void > > objectFactory)=0
virtual std::shared_ptr< QAbilityPeer > tryGetQAbilityPeerByQWindow(QObjectThreadSafeRef qwindow)=0
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
std::enable_if_t< std::is_default_constructible< T >::value, T > & getAttachedObjectWithLazyCreate()
virtual QNapi::Symbol getJsSymbolForType(const std::type_info &typeInfo)=0
JsWindowsTracker()=delete
static void tagWindowAsClosing(QNapi::Object jsWindow, const char *logContext)
static bool isWindowClosing(QNapi::Object jsWindow)
virtual QAbilityInfo readAbilityInfo(const QNapi::Object &ability) const =0
virtual ~QAbilityEngine()
virtual std::string instanceId()=0
virtual QObjectThreadSafeRef qWindowRef()=0
virtual QNapi::Object launchWant()=0
virtual bool isTerminating()=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
std::optional< WindowProperties > tryGetWindowProperties(JsWindowId jsWindowId)
Combined button and popup list for selecting options.
void invokeInJsThread(std::function< void(JsState &)> task)
void dispatchNewWant(QNapi::Object want, QNapi::Object launchParam)
void removeMatchingJsQAbilityPeer(QNapi::Object qAbility)
T evalInJsThreadWithPromise(std::function< void(QtOhos::JsState &, QOhosTaskPromise< T >)> evalFunc, std::string callerContextName={})
T evalInJsThreadWithConsumer(std::function< void(QtOhos::JsState &, std::function< void(T)>)> evalFunc)
void runInJsThreadAndWait(const std::function< void(JsState &)> &task, std::string callerContextName={})
void initJsThreadState(napi_env env, std::map< std::string, QNapi::Reference< QNapi::Function > > &&jsModulesFactories, std::shared_ptr< AppFunctions > appFunctions, QtRunMode qtRunMode)
Q_REQUIRED_RESULT bool tryInvokeInQtThreadAndTryWaitForContinue(std::function< void(std::function< void()>)> &&task, std::chrono::nanoseconds timeout)
void invokeInJsThreadAndWaitForContinue(std::function< void(JsState &, QOhosTaskPromise<>)> &&task, std::string callerContextName={})
auto evalInJsThread(Func &&func, std::string callerContextName={}) -> decltype(func(std::declval< JsState & >()))
void addJsQAbilityPeer(std::shared_ptr< QAbilityPeer > qAbilityPeer)
constexpr bool isStdOptional
constexpr bool hasEqualityComparator
std::optional< std::remove_cv_t< QOhosInvokeResult< Func, T > > > qTransform(const std::optional< T > &opt, Func &&func)
QT_END_NAMESPACE Q_DECLARE_METATYPE(QT_PREPEND_NAMESPACE(QtOhos::QOhosQpaFunctions::AudioStreamUsage))
std::optional< QOhosDisplayInfo::JsDisplayId > displayId
bool isDisplayMainOrExtended() const
std::optional< DisplaySourceMode > sourceMode
QSizeF physicalSize() const
QRect displayGeometryPixels() const
std::optional< QPoint > topLeftOffsetPixels
static QOhosDisplayInfo makeFromOhosDisplayObject(QtOhos::JsState &jsState, QNapi::Object displayObject)
std::optional< JsDisplayOrientation > orientation
static std::optional< QNapi::Object > tryGetDisplayById(QtOhos::JsState &jsState, QOhosDisplayInfo::JsDisplayId displayId)
bool shouldIgnoreDisplay() const