160 {
161 {
162 size_t num_bytes = 0;
163 for (const auto& value : update) {
165 num_bytes +=
168 num_bytes +=
value.second.customAccessibilityActions.size() *
170 num_bytes +=
172 num_bytes +=
174 num_bytes +=
value.second.increasedValueAttributes.size() *
176 num_bytes +=
value.second.decreasedValueAttributes.size() *
178 num_bytes +=
180 }
181
182
183
184
185
186
187
188
189 std::vector<uint8_t>
buffer(num_bytes);
190 int32_t* buffer_int32 =
reinterpret_cast<int32_t*
>(&
buffer[0]);
191 float* buffer_float32 =
reinterpret_cast<float*
>(&
buffer[0]);
192
193 std::vector<std::string> strings;
194 std::vector<std::vector<uint8_t>> string_attribute_args;
195 size_t position = 0;
196 for (const auto& value : update) {
197
198
199
201 buffer_int32[position++] = node.
id;
202 int64_t flags = flagsToInt64(node.
flags);
203 std::memcpy(&buffer_int32[position], &flags, 8);
204 position += 2;
205 buffer_int32[position++] = node.
actions;
214 buffer_float32[position++] =
static_cast<float>(node.
scrollPosition);
217 buffer_int32[position++] =
static_cast<int32_t
>(node.
role);
218
219 putStringIntoBuffer(node.
identifier, buffer_int32, &position, strings);
220
221 putStringIntoBuffer(node.
label, buffer_int32, &position, strings);
223 &position, string_attribute_args);
224
225 putStringIntoBuffer(node.
value, buffer_int32, &position, strings);
227 &position, string_attribute_args);
228
230 strings);
232 &position, string_attribute_args);
233
235 strings);
237 &position, string_attribute_args);
238
239 putStringIntoBuffer(node.
hint, buffer_int32, &position, strings);
241 &position, string_attribute_args);
242
243 putStringIntoBuffer(node.
tooltip, buffer_int32, &position, strings);
244 putStringIntoBuffer(node.
linkUrl, buffer_int32, &position, strings);
245 putStringIntoBuffer(node.
locale, buffer_int32, &position, strings);
246 putStringIntoBuffer(node.
minValue, buffer_int32, &position, strings);
247 putStringIntoBuffer(node.
maxValue, buffer_int32, &position, strings);
248
251 buffer_float32[position++] = node.
rect.left();
252 buffer_float32[position++] = node.
rect.top();
253 buffer_float32[position++] = node.
rect.right();
254 buffer_float32[position++] = node.
rect.bottom();
255 node.
transform.getColMajor(&buffer_float32[position]);
256 position += 16;
258 position += 16;
260 for (int32_t child : node.childrenInTraversalOrder) {
261 buffer_int32[position++] = child;
262 }
263
265 for (int32_t child : node.childrenInHitTestOrder) {
266 buffer_int32[position++] = child;
267 }
268
270 for (int32_t child : node.customAccessibilityActions) {
271 buffer_int32[position++] = child;
272 }
273 }
274
275
277 std::vector<uint8_t> actions_buffer(num_action_bytes);
278 int32_t* actions_buffer_int32 =
279 reinterpret_cast<int32_t*>(&actions_buffer[0]);
280
281 std::vector<std::string> action_strings;
282 size_t actions_position = 0;
283 for (const auto& value : actions) {
284
285
286
288 actions_buffer_int32[actions_position++] =
action.id;
289 actions_buffer_int32[actions_position++] =
action.overrideId;
290 putStringIntoBuffer(
action.label, actions_buffer_int32, &actions_position,
291 action_strings);
292 putStringIntoBuffer(
action.hint, actions_buffer_int32, &actions_position,
293 action_strings);
294 }
295
296
297
298 if (!actions_buffer.empty()) {
299 jni_facade_->FlutterViewUpdateCustomAccessibilityActions(actions_buffer,
300 action_strings);
301 }
302
304 jni_facade_->FlutterViewUpdateSemantics(buffer, strings,
305 string_attribute_args);
306 }
307 }
308}
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot The VM snapshot data that will be memory mapped as read only SnapshotAssetPath must be present isolate snapshot The isolate snapshot data that will be memory mapped as read only SnapshotAssetPath must be present cache dir Path to the cache directory This is different from the persistent_cache_path in embedder which is used for Skia shader cache icu native lib Path to the library file that exports the ICU data vm service The hostname IP address on which the Dart VM Service should be served If not defaults to or::depending on whether ipv6 is specified disable vm Disable the Dart VM Service The Dart VM Service is never available in release mode Bind to the IPv6 localhost address for the Dart VM Service Ignored if vm service host is set profile Make the profiler discard new samples once the profiler sample buffer is full When this flag is not the profiler sample buffer is used as a ring buffer
StringAttributes decreasedValueAttributes
std::string increasedValue
StringAttributes hintAttributes
StringAttributes increasedValueAttributes
StringAttributes valueAttributes
StringAttributes labelAttributes
std::vector< int32_t > childrenInHitTestOrder
int32_t textSelectionExtent
int32_t currentValueLength
std::vector< int32_t > customAccessibilityActions
std::string decreasedValue
std::vector< int32_t > childrenInTraversalOrder
int32_t textSelectionBase