Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
qohosudmf.cpp
Go to the documentation of this file.
1
// Copyright (C) 2025 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
#
include
<
qohosudmf
.
h
>
5
6
#
include
<
QtCore
/
private
/
qohoslogger_p
.
h
>
7
#
include
<
qarkui
/
qarkuiutils
.
h
>
8
#
include
<
qohosutils
.
h
>
9
#
include
<
typeinfo
>
10
11
QT_BEGIN_NAMESPACE
12
13
namespace
14
{
15
16
template
<
typename
T,
typename
Deleter>
17
std
::unique_ptr<T, Deleter>
makeNonNullUniquePtrOrFail
(T *ptr, Deleter &&deleter)
18
{
19
if
(ptr ==
nullptr
) {
20
qOhosReportFatalErrorAndAbort(
21
"%s: got null pointer with deleter of type '%s'"
,
22
Q_FUNC_INFO,
typeid
(deleter).name());
23
}
24
25
return
std
::unique_ptr<T, Deleter>(ptr, deleter);
26
}
27
28
std
::
unique_ptr
<::
OH_UdmfRecordProvider
,
void
(*)(::
OH_UdmfRecordProvider
*)>
createUdmfRecordProvider
()
29
{
30
return
{
31
QArkUi::callArkUiOrFailOnNullResult(
32
Q_OHOS_NAMED_FUNC(::OH_UdmfRecordProvider_Create)),
33
[](::OH_UdmfRecordProvider *udmfRecordProvider) {
34
QArkUi::callArkUiOrFailOnErrorResult(
35
Q_OHOS_NAMED_FUNC(::OH_UdmfRecordProvider_Destroy),
36
udmfRecordProvider);
37
}
38
};
39
}
40
41
std
::
unique_ptr
<::
OH_UdmfRecordProvider
,
void
(*)(::
OH_UdmfRecordProvider
*)>
createUdmfRecordProviderForDataFetchFunction
(
42
std
::function<
void
*(
const
char
*)> dataFetchFunc)
43
{
44
using
DataFetchFunc =
std
::function<
void
*(
const
char
*)>;
45
46
auto
udmfRecordProvider = createUdmfRecordProvider();
47
48
auto
*dataFetchFuncPtr =
new
DataFetchFunc(std::move(dataFetchFunc));
49
QArkUi
::callArkUiOrFailOnErrorResult(
50
Q_OHOS_NAMED_FUNC(::OH_UdmfRecordProvider_SetData),
51
udmfRecordProvider.get(),
static_cast
<
void
*>(dataFetchFuncPtr),
52
[](
void
*context,
const
char
*type) {
53
auto
*dataFetchFuncPtr =
static_cast
<DataFetchFunc *>(context);
54
return
(*dataFetchFuncPtr)(type);
55
},
56
[](
void
*context) {
57
auto
*dataFetchFuncPtr =
static_cast
<DataFetchFunc *>(context);
58
delete
dataFetchFuncPtr;
59
});
60
61
return
udmfRecordProvider;
62
}
63
64
}
65
66
QOhosUdmfRecord
::
QOhosUdmfRecord
()
67
:
QOhosUdmfRecord
(
68
std
::
unique_ptr
<::
OH_UdmfRecord
,
void
(*)(::
OH_UdmfRecord
*)>(
69
QArkUi
::
callArkUiOrFailOnNullResult
(
Q_OHOS_NAMED_FUNC
(::
OH_UdmfRecord_Create
)),
70
::
OH_UdmfRecord_Destroy
))
71
{
72
}
73
74
QOhosUdmfRecord
::QOhosUdmfRecord(
75
std::unique_ptr<::OH_UdmfRecord,
void
(*)(::OH_UdmfRecord *)> &&nativePtr)
76
: m_nativePtr(std::move(nativePtr))
77
{
78
}
79
80
std
::
vector
<
std
::
string
>
QOhosUdmfRecord
::
getTypes
()
const
81
{
82
if
(m_invalidated) {
83
qOhosPrintfError(
"%s: This record is invalidated. Returning empty value."
, Q_FUNC_INFO);
84
return
{};
85
}
86
87
char
**types =
nullptr
;
88
unsigned
int
typesCount = 0;
89
auto
func = Q_OHOS_NAMED_FUNC(::OH_UdmfRecord_GetTypes);
90
types =
QArkUi
::callArkUi(func, m_nativePtr.get(), &typesCount);
91
if
(types ==
nullptr
&& typesCount != 0) {
92
qOhosReportFatalErrorAndAbort(
93
"%s: got inconsistent result from %s() call: array is null, size is %u"
,
94
Q_FUNC_INFO, func.name(), typesCount);
95
}
96
97
return
types !=
nullptr
98
? std::vector<std::string>(types, types + typesCount)
99
: std::vector<std::string>();
100
}
101
102
QOhosUdmfRecord
QOhosUdmfRecord
::makeAsView(::OH_UdmfRecord *nativePtr)
103
{
104
return
QOhosUdmfRecord(
105
std::unique_ptr<::OH_UdmfRecord,
void
(*)(::OH_UdmfRecord *)>(
106
nativePtr,
107
[](::OH_UdmfRecord *) {
108
}));
109
}
110
111
::OH_UdmfRecord *
QOhosUdmfRecord
::release() &&
112
{
113
return
m_nativePtr.release();
114
}
115
116
void
QOhosUdmfRecord
::
setProviderForDataFetchFunc
(
117
std::vector<std::string> typeIds,
std
::function<
void
*(
const
char
*)> dataFetchFunc)
118
{
119
std::vector<
const
char
*> typeIdsCStrs;
120
for
(
const
auto
&typeId : typeIds)
121
typeIdsCStrs.push_back(typeId.c_str());
122
123
QArkUi
::callArkUiOrFailOnErrorResult(
124
Q_OHOS_NAMED_FUNC(::OH_UdmfRecord_SetProvider),
125
m_nativePtr.get(), typeIdsCStrs.data(), typeIdsCStrs.size(),
126
createUdmfRecordProviderForDataFetchFunction(std::move(dataFetchFunc)).release());
127
}
128
129
void
QOhosUdmfRecord
::
addGeneralEntry
(
const
std
::string &typeId, QSpan<
const
std::uint8_t> buffer)
130
{
131
if
(m_invalidated) {
132
qOhosPrintfError(
"%s: This record is invalidated. Ignoring."
, Q_FUNC_INFO);
133
return
;
134
}
135
136
QArkUi
::callArkUiOrFailOnErrorResult(
137
Q_OHOS_NAMED_FUNC(::OH_UdmfRecord_AddGeneralEntry),
138
m_nativePtr.get(),
QArkUi
::
CZString
(typeId.c_str()),
139
const_cast
<
std
::uint8_t *>(buffer.data()), buffer.size());
140
}
141
142
std
::
optional
<
QSpan
<
const
std
::
uint8_t
>>
QOhosUdmfRecord
::
tryGetGeneralEntry
(
143
const
std
::string &typeId)
const
144
{
145
if
(m_invalidated) {
146
qOhosPrintfError(
"%s: This record is invalidated. Returning empty value."
, Q_FUNC_INFO);
147
return
std
::nullopt;
148
}
149
150
auto
availableTypes = getTypes();
151
auto
foundTypeIt = std::find(std::begin(availableTypes), std::end(availableTypes), typeId);
152
if
(foundTypeIt ==
std
::end(availableTypes))
153
return
std
::nullopt;
154
155
std
::uint8_t *buff;
156
std
::uint32_t buffSize;
157
if
(::OH_UdmfRecord_GetGeneralEntry(m_nativePtr.get(), typeId.c_str(), &buff, &buffSize)
158
!= ::Udmf_ErrCode::UDMF_E_OK) {
159
qOhosPrintfError(
160
"%s: OH_UdmfRecord_GetGeneralEntry() for typeId=%s resulted in an error even though "
161
"the requested type should have been available. This is abnormal."
162
"OH_UdmfRecord's inner state might have been compromised."
163
"Any further operations done to this record will be ignored or will result in dummy values."
,
164
Q_FUNC_INFO, typeId.c_str());
165
m_invalidated =
true
;
166
167
return
std
::nullopt;
168
}
169
170
return
QSpan<
const
std
::uint8_t>(buff, buffSize);
171
}
172
173
bool
QOhosUdmfRecord
::
isEmpty
()
const
174
{
175
return
getTypes().size() == 0;
176
}
177
178
QOhosUdmfData
QOhosUdmfData
::takeOwnership(::OH_UdmfData *nativePtr)
179
{
180
return
QOhosUdmfData
(nativePtr);
181
}
182
183
QOhosUdmfData
::
QOhosUdmfData
()
184
:
QOhosUdmfData
(
185
QArkUi
::
callArkUiOrFailOnNullResult
(
186
Q_OHOS_NAMED_FUNC
(::
OH_UdmfData_Create
)))
187
{
188
}
189
190
QOhosUdmfData
::QOhosUdmfData(::OH_UdmfData *nativePtr)
191
: m_nativePtr(makeNonNullUniquePtrOrFail(nativePtr, ::OH_UdmfData_Destroy))
192
{
193
}
194
195
std
::
vector
<
std
::
string
>
QOhosUdmfData
::
getTypes
()
const
196
{
197
char
**types =
nullptr
;
198
unsigned
int
typesCount = 0;
199
auto
func = Q_OHOS_NAMED_FUNC(::OH_UdmfData_GetTypes);
200
types =
QArkUi
::callArkUi(func, m_nativePtr.get(), &typesCount);
201
if
(types ==
nullptr
&& typesCount != 0) {
202
qOhosReportFatalErrorAndAbort(
203
"%s: got inconsistent result from %s() call: array is null, size is %u"
,
204
Q_FUNC_INFO, func.name(), typesCount);
205
}
206
207
return
types !=
nullptr
208
? std::vector<std::string>(types, types + typesCount)
209
: std::vector<std::string>();
210
}
211
212
std
::
vector
<
QOhosUdmfRecord
>
QOhosUdmfData
::
getRecords
()
213
{
214
::OH_UdmfRecord **records =
nullptr
;
215
std
::uint32_t recordsNum;
216
auto
func = Q_OHOS_NAMED_FUNC(::OH_UdmfData_GetRecords);
217
records =
QArkUi
::callArkUi(func, m_nativePtr.get(), &recordsNum);
218
if
(records ==
nullptr
&& recordsNum != 0) {
219
qOhosReportFatalErrorAndAbort(
220
"%s: got inconsistent result from %s() call: array is null, size is %u"
,
221
Q_FUNC_INFO, func.name(), recordsNum);
222
}
223
224
std::vector<QOhosUdmfRecord> resultRecords;
225
for
(
std
::uint32_t i = 0; i < recordsNum; ++i)
226
resultRecords.push_back(QOhosUdmfRecord::makeAsView(records[i]));
227
228
return
resultRecords;
229
}
230
231
void
QOhosUdmfData
::
addRecord
(
QOhosUdmfRecord
&&record)
232
{
233
if
(record.m_invalidated) {
234
qOhosPrintfError(
"%s: Cannot add an invalidated record. Ignoring."
, Q_FUNC_INFO);
235
return
;
236
}
237
238
QArkUi
::callArkUiOrFailOnErrorResult(
239
Q_OHOS_NAMED_FUNC(::OH_UdmfData_AddRecord),
240
m_nativePtr.get(),
std
::move(record).release());
241
}
242
243
::
OH_UdmfData
*
QOhosUdmfData
::
release
() &&
244
{
245
return
m_nativePtr.release();
246
}
247
248
::
OH_UdmfData
*
QOhosUdmfData
::
nativePtr
()
249
{
250
return
m_nativePtr.get();
251
}
252
253
QT_END_NAMESPACE
QArkUi::CZString
Definition
qarkuiutils.h:24
QOhosUdmfData
Definition
qohosudmf.h:64
QOhosUdmfData::nativePtr
::OH_UdmfData * nativePtr()
Definition
qohosudmf.cpp:248
QOhosUdmfData::QOhosUdmfData
QOhosUdmfData()
Definition
qohosudmf.cpp:183
QOhosUdmfData::getRecords
std::vector< QOhosUdmfRecord > getRecords()
Definition
qohosudmf.cpp:212
QOhosUdmfData::addRecord
void addRecord(QOhosUdmfRecord &&record)
Definition
qohosudmf.cpp:231
QOhosUdmfData::release
::OH_UdmfData * release() &&
Definition
qohosudmf.cpp:243
QOhosUdmfData::getTypes
std::vector< std::string > getTypes() const
Definition
qohosudmf.cpp:195
QOhosUdmfRecord
Definition
qohosudmf.h:23
QOhosUdmfRecord::tryGetGeneralEntry
std::optional< QSpan< const std::uint8_t > > tryGetGeneralEntry(const std::string &typeId) const
Definition
qohosudmf.cpp:142
QOhosUdmfRecord::addGeneralEntry
void addGeneralEntry(const std::string &typeId, QSpan< const std::uint8_t > buffer)
Definition
qohosudmf.cpp:129
QOhosUdmfRecord::isEmpty
bool isEmpty() const
Definition
qohosudmf.cpp:173
QOhosUdmfRecord::QOhosUdmfRecord
QOhosUdmfRecord()
Definition
qohosudmf.cpp:66
QOhosUdmfRecord::getTypes
std::vector< std::string > getTypes() const
Definition
qohosudmf.cpp:80
QOhosUdmfRecord::setProviderForDataFetchFunc
void setProviderForDataFetchFunc(std::vector< std::string > typeIds, std::function< void *(const char *)> dataFetchFunc)
Definition
qohosudmf.cpp:116
QArkUi
Definition
displaymanager.cpp:17
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qsequentialanimationgroup.cpp:47
QT_BEGIN_NAMESPACE::makeNonNullUniquePtrOrFail
std::unique_ptr< T, Deleter > makeNonNullUniquePtrOrFail(T *ptr, Deleter &&deleter)
Definition
qohosudmf.cpp:17
QT_BEGIN_NAMESPACE::createUdmfRecordProvider
std::unique_ptr<::OH_UdmfRecordProvider, void(*)(::OH_UdmfRecordProvider *)> createUdmfRecordProvider()
Definition
qohosudmf.cpp:28
QT_BEGIN_NAMESPACE::createUdmfRecordProviderForDataFetchFunction
std::unique_ptr<::OH_UdmfRecordProvider, void(*)(::OH_UdmfRecordProvider *)> createUdmfRecordProviderForDataFetchFunction(std::function< void *(const char *)> dataFetchFunc)
Definition
qohosudmf.cpp:41
std
[33]
Definition
src_corelib_tools_qhash.cpp:421
qtbase
src
plugins
platforms
ohos
qohosudmf.cpp
Generated on
for Qt by
1.18.0