Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
sxychenjing
engine
提交
4a55b4fd
E
engine
项目概览
sxychenjing
/
engine
与 Fork 源项目一致
从无法访问的项目Fork
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
E
engine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
4a55b4fd
编写于
1月 29, 2020
作者:
A
Alexander Brusher
提交者:
GitHub
1月 29, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Modifies accessibility bridge to populate new node fields in semantic… (#15116)
上级
cb9d1bf0
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
177 addition
and
7 deletion
+177
-7
shell/platform/fuchsia/flutter/accessibility_bridge.cc
shell/platform/fuchsia/flutter/accessibility_bridge.cc
+31
-4
shell/platform/fuchsia/flutter/accessibility_bridge.h
shell/platform/fuchsia/flutter/accessibility_bridge.h
+2
-1
shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc
...platform/fuchsia/flutter/accessibility_bridge_unittest.cc
+144
-2
未找到文件。
shell/platform/fuchsia/flutter/accessibility_bridge.cc
浏览文件 @
4a55b4fd
...
...
@@ -80,11 +80,38 @@ AccessibilityBridge::GetNodeAttributes(const flutter::SemanticsNode& node,
}
fuchsia
::
accessibility
::
semantics
::
States
AccessibilityBridge
::
GetNodeStates
(
const
flutter
::
SemanticsNode
&
node
)
const
{
const
flutter
::
SemanticsNode
&
node
,
size_t
*
additional_size
)
const
{
fuchsia
::
accessibility
::
semantics
::
States
states
;
if
(
node
.
HasFlag
(
flutter
::
SemanticsFlags
::
kHasCheckedState
))
{
states
.
set_checked
(
node
.
HasFlag
(
flutter
::
SemanticsFlags
::
kIsChecked
));
(
*
additional_size
)
+=
sizeof
(
fuchsia
::
accessibility
::
semantics
::
States
);
// Set checked state.
if
(
!
node
.
HasFlag
(
flutter
::
SemanticsFlags
::
kHasCheckedState
))
{
states
.
set_checked_state
(
fuchsia
::
accessibility
::
semantics
::
CheckedState
::
NONE
);
}
else
{
states
.
set_checked_state
(
node
.
HasFlag
(
flutter
::
SemanticsFlags
::
kIsChecked
)
?
fuchsia
::
accessibility
::
semantics
::
CheckedState
::
CHECKED
:
fuchsia
::
accessibility
::
semantics
::
CheckedState
::
UNCHECKED
);
}
// Set selected state.
states
.
set_selected
(
node
.
HasFlag
(
flutter
::
SemanticsFlags
::
kIsSelected
));
// Set hidden state.
states
.
set_hidden
(
node
.
HasFlag
(
flutter
::
SemanticsFlags
::
kIsHidden
));
// Set value.
if
(
node
.
value
.
size
()
>
fuchsia
::
accessibility
::
semantics
::
MAX_VALUE_SIZE
)
{
states
.
set_value
(
node
.
value
.
substr
(
0
,
fuchsia
::
accessibility
::
semantics
::
MAX_VALUE_SIZE
));
(
*
additional_size
)
+=
fuchsia
::
accessibility
::
semantics
::
MAX_VALUE_SIZE
;
}
else
{
states
.
set_value
(
node
.
value
);
(
*
additional_size
)
+=
node
.
value
.
size
();
}
return
states
;
}
...
...
@@ -199,7 +226,7 @@ void AccessibilityBridge::AddSemanticsNodeUpdate(
.
set_location
(
GetNodeLocation
(
flutter_node
))
.
set_transform
(
GetNodeTransform
(
flutter_node
))
.
set_attributes
(
GetNodeAttributes
(
flutter_node
,
&
this_node_size
))
.
set_states
(
GetNodeStates
(
flutter_node
))
.
set_states
(
GetNodeStates
(
flutter_node
,
&
this_node_size
))
.
set_child_ids
(
child_ids
);
this_node_size
+=
kNodeIdSize
*
flutter_node
.
childrenInTraversalOrder
.
size
();
...
...
shell/platform/fuchsia/flutter/accessibility_bridge.h
浏览文件 @
4a55b4fd
...
...
@@ -133,7 +133,8 @@ class AccessibilityBridge
// Derives the states for a Fuchsia semantics node from a Flutter semantics
// node.
fuchsia
::
accessibility
::
semantics
::
States
GetNodeStates
(
const
flutter
::
SemanticsNode
&
node
)
const
;
const
flutter
::
SemanticsNode
&
node
,
size_t
*
additional_size
)
const
;
// Gets the set of reachable descendants from the given node id.
std
::
unordered_set
<
int32_t
>
GetDescendants
(
int32_t
node_id
)
const
;
...
...
shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc
浏览文件 @
4a55b4fd
...
...
@@ -130,6 +130,106 @@ TEST_F(AccessibilityBridgeTest, DeletesChildrenTransitively) {
EXPECT_FALSE
(
semantics_manager_
.
UpdateOverflowed
());
}
TEST_F
(
AccessibilityBridgeTest
,
PopulatesCheckedState
)
{
flutter
::
SemanticsNode
node0
;
node0
.
id
=
0
;
// HasCheckedState = true
// IsChecked = true
// IsSelected = false
// IsHidden = false
node0
.
flags
|=
static_cast
<
int
>
(
flutter
::
SemanticsFlags
::
kHasCheckedState
);
node0
.
flags
|=
static_cast
<
int
>
(
flutter
::
SemanticsFlags
::
kIsChecked
);
node0
.
value
=
"value"
;
accessibility_bridge_
->
AddSemanticsNodeUpdate
({{
0
,
node0
}});
RunLoopUntilIdle
();
EXPECT_EQ
(
0
,
semantics_manager_
.
DeleteCount
());
EXPECT_EQ
(
1
,
semantics_manager_
.
UpdateCount
());
EXPECT_EQ
(
1
,
semantics_manager_
.
CommitCount
());
EXPECT_EQ
(
1U
,
semantics_manager_
.
LastUpdatedNodes
().
size
());
const
auto
&
fuchsia_node
=
semantics_manager_
.
LastUpdatedNodes
().
at
(
0u
);
EXPECT_EQ
(
fuchsia_node
.
node_id
(),
static_cast
<
unsigned
int
>
(
node0
.
id
));
EXPECT_TRUE
(
fuchsia_node
.
has_states
());
const
auto
&
states
=
fuchsia_node
.
states
();
EXPECT_TRUE
(
states
.
has_checked_state
());
EXPECT_EQ
(
states
.
checked_state
(),
fuchsia
::
accessibility
::
semantics
::
CheckedState
::
CHECKED
);
EXPECT_TRUE
(
states
.
has_selected
());
EXPECT_FALSE
(
states
.
selected
());
EXPECT_TRUE
(
states
.
has_hidden
());
EXPECT_FALSE
(
states
.
hidden
());
EXPECT_TRUE
(
states
.
has_value
());
EXPECT_EQ
(
states
.
value
(),
node0
.
value
);
EXPECT_FALSE
(
semantics_manager_
.
DeleteOverflowed
());
EXPECT_FALSE
(
semantics_manager_
.
UpdateOverflowed
());
}
TEST_F
(
AccessibilityBridgeTest
,
PopulatesSelectedState
)
{
flutter
::
SemanticsNode
node0
;
node0
.
id
=
0
;
// HasCheckedState = false
// IsChecked = false
// IsSelected = true
// IsHidden = false
node0
.
flags
=
static_cast
<
int
>
(
flutter
::
SemanticsFlags
::
kIsSelected
);
accessibility_bridge_
->
AddSemanticsNodeUpdate
({{
0
,
node0
}});
RunLoopUntilIdle
();
EXPECT_EQ
(
0
,
semantics_manager_
.
DeleteCount
());
EXPECT_EQ
(
1
,
semantics_manager_
.
UpdateCount
());
EXPECT_EQ
(
1
,
semantics_manager_
.
CommitCount
());
EXPECT_EQ
(
1U
,
semantics_manager_
.
LastUpdatedNodes
().
size
());
const
auto
&
fuchsia_node
=
semantics_manager_
.
LastUpdatedNodes
().
at
(
0u
);
EXPECT_EQ
(
fuchsia_node
.
node_id
(),
static_cast
<
unsigned
int
>
(
node0
.
id
));
EXPECT_TRUE
(
fuchsia_node
.
has_states
());
const
auto
&
states
=
fuchsia_node
.
states
();
EXPECT_TRUE
(
states
.
has_checked_state
());
EXPECT_EQ
(
states
.
checked_state
(),
fuchsia
::
accessibility
::
semantics
::
CheckedState
::
NONE
);
EXPECT_TRUE
(
states
.
has_selected
());
EXPECT_TRUE
(
states
.
selected
());
EXPECT_TRUE
(
states
.
has_hidden
());
EXPECT_FALSE
(
states
.
hidden
());
EXPECT_FALSE
(
semantics_manager_
.
DeleteOverflowed
());
EXPECT_FALSE
(
semantics_manager_
.
UpdateOverflowed
());
}
TEST_F
(
AccessibilityBridgeTest
,
PopulatesHiddenState
)
{
flutter
::
SemanticsNode
node0
;
node0
.
id
=
0
;
// HasCheckedState = false
// IsChecked = false
// IsSelected = false
// IsHidden = true
node0
.
flags
=
static_cast
<
int
>
(
flutter
::
SemanticsFlags
::
kIsHidden
);
accessibility_bridge_
->
AddSemanticsNodeUpdate
({{
0
,
node0
}});
RunLoopUntilIdle
();
EXPECT_EQ
(
0
,
semantics_manager_
.
DeleteCount
());
EXPECT_EQ
(
1
,
semantics_manager_
.
UpdateCount
());
EXPECT_EQ
(
1
,
semantics_manager_
.
CommitCount
());
EXPECT_EQ
(
1u
,
semantics_manager_
.
LastUpdatedNodes
().
size
());
const
auto
&
fuchsia_node
=
semantics_manager_
.
LastUpdatedNodes
().
at
(
0u
);
EXPECT_EQ
(
fuchsia_node
.
node_id
(),
static_cast
<
unsigned
int
>
(
node0
.
id
));
EXPECT_TRUE
(
fuchsia_node
.
has_states
());
const
auto
&
states
=
fuchsia_node
.
states
();
EXPECT_TRUE
(
states
.
has_checked_state
());
EXPECT_EQ
(
states
.
checked_state
(),
fuchsia
::
accessibility
::
semantics
::
CheckedState
::
NONE
);
EXPECT_TRUE
(
states
.
has_selected
());
EXPECT_FALSE
(
states
.
selected
());
EXPECT_TRUE
(
states
.
has_hidden
());
EXPECT_TRUE
(
states
.
hidden
());
EXPECT_FALSE
(
semantics_manager_
.
DeleteOverflowed
());
EXPECT_FALSE
(
semantics_manager_
.
UpdateOverflowed
());
}
TEST_F
(
AccessibilityBridgeTest
,
TruncatesLargeLabel
)
{
// Test that labels which are too long are truncated.
flutter
::
SemanticsNode
node0
;
...
...
@@ -174,6 +274,48 @@ TEST_F(AccessibilityBridgeTest, TruncatesLargeLabel) {
EXPECT_FALSE
(
semantics_manager_
.
UpdateOverflowed
());
}
TEST_F
(
AccessibilityBridgeTest
,
TruncatesLargeValue
)
{
// Test that values which are too long are truncated.
flutter
::
SemanticsNode
node0
;
node0
.
id
=
0
;
flutter
::
SemanticsNode
node1
;
node1
.
id
=
1
;
flutter
::
SemanticsNode
bad_node
;
bad_node
.
id
=
2
;
bad_node
.
value
=
std
::
string
(
fuchsia
::
accessibility
::
semantics
::
MAX_VALUE_SIZE
+
1
,
'2'
);
node0
.
childrenInTraversalOrder
=
{
1
,
2
};
accessibility_bridge_
->
AddSemanticsNodeUpdate
({
{
0
,
node0
},
{
1
,
node1
},
{
2
,
bad_node
},
});
RunLoopUntilIdle
();
EXPECT_EQ
(
0
,
semantics_manager_
.
DeleteCount
());
EXPECT_EQ
(
1
,
semantics_manager_
.
UpdateCount
());
EXPECT_EQ
(
1
,
semantics_manager_
.
CommitCount
());
EXPECT_EQ
(
3U
,
semantics_manager_
.
LastUpdatedNodes
().
size
());
auto
trimmed_node
=
std
::
find_if
(
semantics_manager_
.
LastUpdatedNodes
().
begin
(),
semantics_manager_
.
LastUpdatedNodes
().
end
(),
[
id
=
static_cast
<
uint32_t
>
(
bad_node
.
id
)](
fuchsia
::
accessibility
::
semantics
::
Node
const
&
node
)
{
return
node
.
node_id
()
==
id
;
});
ASSERT_NE
(
trimmed_node
,
semantics_manager_
.
LastUpdatedNodes
().
end
());
ASSERT_TRUE
(
trimmed_node
->
has_states
());
EXPECT_EQ
(
trimmed_node
->
states
().
value
(),
std
::
string
(
fuchsia
::
accessibility
::
semantics
::
MAX_VALUE_SIZE
,
'2'
));
EXPECT_FALSE
(
semantics_manager_
.
DeleteOverflowed
());
EXPECT_FALSE
(
semantics_manager_
.
UpdateOverflowed
());
}
TEST_F
(
AccessibilityBridgeTest
,
SplitsLargeUpdates
)
{
// Test that labels which are too long are truncated.
flutter
::
SemanticsNode
node0
;
...
...
@@ -194,8 +336,8 @@ TEST_F(AccessibilityBridgeTest, SplitsLargeUpdates) {
flutter
::
SemanticsNode
node4
;
node4
.
id
=
4
;
node4
.
label
=
std
::
string
(
fuchsia
::
accessibility
::
semantics
::
MAX_
LABEL
_SIZE
,
'4'
);
node4
.
value
=
std
::
string
(
fuchsia
::
accessibility
::
semantics
::
MAX_
VALUE
_SIZE
,
'4'
);
node0
.
childrenInTraversalOrder
=
{
1
,
2
};
node0
.
childrenInHitTestOrder
=
{
1
,
2
};
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录