6#include <QtCore/private/qnapi_p.h>
7#include <QtCore/private/qohoscommon_p.h>
8#include <QtCore/qfileinfo.h>
9#include <QtCore/qscopeguard.h>
10#include <QtGui/QColor>
12#include <filemanagement/file_uri/oh_file_uri.h>
13#include <qohosplugincore.h>
14#include <qohosqpafunctions_p.h>
28 static constexpr const char *
fullTypeName =
"@ohos.app.ability.wantConstant.Flags";
39void callStartAbility(QNapi::Object baseQAbility, QNapi::Object want, QOhosConsumer<
bool> resultConsumer)
41 qOhosPrintfDebug(
"Calling startAbility() with Want '%s'", QNapi::toJsonString(want).c_str());
43 baseQAbility.call<QNapi::Promise>(
"context.startAbility", {want})
44 .withContext(std::move(resultConsumer))
46 [](
const QtOhos::CallbackInfo &,
auto &resultConsumer) {
47 qOhosPrintfDebug(
"Got success from startAbility()");
51 [](
const QtOhos::CallbackInfo &cbInfo,
auto &resultConsumer) {
52 QtOhos::logJsCallbackError(cbInfo,
"Got error from startAbility()");
53 resultConsumer(
false);
57std::string callOhFileUriConversionFunc(
58 FileManagement_ErrCode (*convFunc)(
const char *,
unsigned int,
char **),
59 const char *convFuncName,
const std::string &input)
61 std::string outputString;
63 char *outputPtr =
nullptr;
64 auto outputPtrGuard = qScopeGuard(std::bind(::free, outputPtr));
65 auto convFuncRetVal = convFunc(input.c_str(), input.size(), &outputPtr);
67 if (convFuncRetVal == FileManagement_ErrCode::ERR_OK && outputPtr !=
nullptr) {
68 outputString = outputPtr;
71 "OH FileUri conversion function '%s' failed for input '%s', retval: %d",
72 convFuncName, input.c_str(),
static_cast<
int>(convFuncRetVal));
85 m_ohosColorPickingHandler.reset();
90 m_ohosColorPickingHandler =
91 QtOhos::getQOhosQpaFunctions().startPickingColorFromScreenWithConsumer(
92 [
this](QOhosOptional<quint32> rgbaColor) {
93 if (rgbaColor.hasValue())
94 emit
this->colorPicked(QColor::fromRgba(rgbaColor.value()));
98 std::shared_ptr<
void> m_ohosColorPickingHandler;
111 switch (capability) {
121 return QtOhos::evalInJsThreadWithConsumer<
bool>(
122 [&](
QtOhos::
JsState &jsState, QOhosConsumer<
bool> resultConsumer) {
123 auto mainUiAbility = jsState.defaultQAbilityPeer()->qAbility();
124 if (mainUiAbility.IsEmpty()) {
125 resultConsumer(
false);
134 {
"action",
"ohos.want.action.viewData"},
135 {
"entities", QNapi::makeArray(jsState.env(), {
"entity.system.browsable"})},
136 {
"uri", url.toString().toStdString()},
138 : QFileInfo(url.path()).isDir()
142 {
"abilityName",
"MainAbility"},
143 {
"bundleName",
"com.huawei.hmos.filemanager"},
149 {
"fileUri", mapPathToOhosUriInJsThread(url.path().toStdString())},
156 {
"action",
"ohos.want.action.viewData"},
157 {
"uri", mapPathToOhosUriInJsThread(url.path().toStdString())},
160 jsState.mapOhosEnumToJs(QOhosWantConstantFlags::FLAG_AUTH_READ_URI_PERMISSION).Int32Value()
161 | jsState.mapOhosEnumToJs(QOhosWantConstantFlags::FLAG_AUTH_WRITE_URI_PERMISSION).Int32Value()
164 callStartAbility(mainUiAbility, want,
std::move(resultConsumer));
175 return QByteArray(
"Ohos");
180 return callOhFileUriConversionFunc(OH_FileUri_GetUriFromPath,
"OH_FileUri_GetUriFromPath", path);
185 return callOhFileUriConversionFunc(OH_FileUri_GetPathFromUri,
"OH_FileUri_GetPathFromUri", ohosFileUri);
void pickColor() override
Combined button and popup list for selecting options.