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 std::vector<std::string> strings;
191 std::vector<std::vector<uint8_t>> string_attribute_args;
194 int32_t* buffer_int32 =
reinterpret_cast<int32_t*
>(
buffer.data());
195 float* buffer_float32 =
reinterpret_cast<float*
>(
buffer.data());
198 for (
const auto&
value : update) {
203 buffer_int32[position++] = node.
id;
204 int64_t flags = flagsToInt64(node.
flags);
205 std::memcpy(&buffer_int32[position], &flags, 8);
207 buffer_int32[position++] = node.
actions;
216 buffer_float32[position++] =
static_cast<float>(node.
scrollPosition);
219 buffer_int32[position++] =
static_cast<int32_t
>(node.
role);
221 putStringIntoBuffer(node.
identifier, buffer_int32, &position, strings);
223 putStringIntoBuffer(node.
label, buffer_int32, &position, strings);
225 &position, string_attribute_args);
227 putStringIntoBuffer(node.
value, buffer_int32, &position, strings);
229 &position, string_attribute_args);
234 buffer_int32, &position,
235 string_attribute_args);
240 buffer_int32, &position,
241 string_attribute_args);
243 putStringIntoBuffer(node.
hint, buffer_int32, &position, strings);
245 &position, string_attribute_args);
247 putStringIntoBuffer(node.
tooltip, buffer_int32, &position, strings);
248 putStringIntoBuffer(node.
linkUrl, buffer_int32, &position, strings);
249 putStringIntoBuffer(node.
locale, buffer_int32, &position, strings);
250 putStringIntoBuffer(node.
minValue, buffer_int32, &position, strings);
251 putStringIntoBuffer(node.
maxValue, buffer_int32, &position, strings);
255 buffer_float32[position++] = node.
rect.left();
256 buffer_float32[position++] = node.
rect.top();
257 buffer_float32[position++] = node.
rect.right();
258 buffer_float32[position++] = node.
rect.bottom();
259 node.
transform.getColMajor(&buffer_float32[position]);
265 buffer_int32[position++] = child;
270 buffer_int32[position++] = child;
275 buffer_int32[position++] = child;
282 std::vector<uint8_t> actions_buffer(num_action_bytes);
284 if (!actions_buffer.empty()) {
285 int32_t* actions_buffer_int32 =
286 reinterpret_cast<int32_t*
>(actions_buffer.data());
288 std::vector<std::string> action_strings;
289 size_t actions_position = 0;
290 for (
const auto&
value : actions) {
295 actions_buffer_int32[actions_position++] =
action.id;
296 actions_buffer_int32[actions_position++] =
action.overrideId;
297 putStringIntoBuffer(
action.label, actions_buffer_int32,
298 &actions_position, action_strings);
299 putStringIntoBuffer(
action.hint, actions_buffer_int32,
300 &actions_position, action_strings);
304 jni_facade_->FlutterViewUpdateCustomAccessibilityActions(actions_buffer,
309 jni_facade_->FlutterViewUpdateSemantics(
buffer, strings,
310 string_attribute_args);