162 size_t num_bytes = 0;
163 for (
const auto&
value : update) {
168 num_bytes +=
value.second.customAccessibilityActions.size() *
174 num_bytes +=
value.second.increasedValueAttributes.size() *
176 num_bytes +=
value.second.decreasedValueAttributes.size() *
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]);
193 std::vector<std::string> strings;
194 std::vector<std::vector<uint8_t>> string_attribute_args;
196 for (
const auto&
value : update) {
201 buffer_int32[position++] = node.
id;
202 int64_t flags = flagsToInt64(node.
flags);
203 std::memcpy(&buffer_int32[position], &flags, 8);
205 buffer_int32[position++] = node.
actions;
214 buffer_float32[position++] =
static_cast<float>(node.
scrollPosition);
218 putStringIntoBuffer(node.
identifier, buffer_int32, &position, strings);
220 putStringIntoBuffer(node.
label, buffer_int32, &position, strings);
222 &position, string_attribute_args);
224 putStringIntoBuffer(node.
value, buffer_int32, &position, strings);
226 &position, string_attribute_args);
231 &position, string_attribute_args);
236 &position, string_attribute_args);
238 putStringIntoBuffer(node.
hint, buffer_int32, &position, strings);
240 &position, string_attribute_args);
242 putStringIntoBuffer(node.
tooltip, buffer_int32, &position, strings);
243 putStringIntoBuffer(node.
linkUrl, buffer_int32, &position, strings);
244 putStringIntoBuffer(node.
locale, buffer_int32, &position, strings);
248 buffer_float32[position++] = node.
rect.left();
249 buffer_float32[position++] = node.
rect.top();
250 buffer_float32[position++] = node.
rect.right();
251 buffer_float32[position++] = node.
rect.bottom();
252 node.
transform.getColMajor(&buffer_float32[position]);
258 buffer_int32[position++] = child;
263 buffer_int32[position++] = child;
268 buffer_int32[position++] = child;
274 std::vector<uint8_t> actions_buffer(num_action_bytes);
275 int32_t* actions_buffer_int32 =
276 reinterpret_cast<int32_t*
>(&actions_buffer[0]);
278 std::vector<std::string> action_strings;
279 size_t actions_position = 0;
280 for (
const auto&
value : actions) {
285 actions_buffer_int32[actions_position++] =
action.id;
286 actions_buffer_int32[actions_position++] =
action.overrideId;
287 putStringIntoBuffer(
action.label, actions_buffer_int32, &actions_position,
289 putStringIntoBuffer(
action.hint, actions_buffer_int32, &actions_position,
295 if (!actions_buffer.empty()) {
296 jni_facade_->FlutterViewUpdateCustomAccessibilityActions(actions_buffer,
301 jni_facade_->FlutterViewUpdateSemantics(
buffer, strings,
302 string_attribute_args);