Commit 95a26ab0 authored by Adam Barth's avatar Adam Barth Committed by GitHub

Switch to SemanticAction (#4791)

This patch updates the framework to use the new SemanticAction in
semantics.mojom.
parent 639532bd
bb9865538b3daf2b452fdff9e767cee5139695e1 71ce354a447dc3384c4e8b0f031eaa9f313d29e9
...@@ -90,7 +90,7 @@ class DragEndDetails { ...@@ -90,7 +90,7 @@ class DragEndDetails {
/// Creates details for a [GestureDragEndCallback]. /// Creates details for a [GestureDragEndCallback].
/// ///
/// The [velocity] argument must not be null. /// The [velocity] argument must not be null.
DragEndDetails({ this.velocity }) { DragEndDetails({ this.velocity: Velocity.zero }) {
assert(velocity != null); assert(velocity != null);
} }
......
...@@ -268,29 +268,19 @@ abstract class RenderToggleable extends RenderConstrainedBox implements Semantic ...@@ -268,29 +268,19 @@ abstract class RenderToggleable extends RenderConstrainedBox implements Semantic
@override @override
Iterable<SemanticAnnotator> getSemanticAnnotators() sync* { Iterable<SemanticAnnotator> getSemanticAnnotators() sync* {
yield (SemanticsNode semantics) { yield (SemanticsNode semantics) {
semantics.hasCheckedState = true; semantics
semantics.isChecked = _value; ..hasCheckedState = true
semantics.canBeTapped = isInteractive; ..isChecked = _value;
if (isInteractive)
semantics.addAction(SemanticAction.tap);
}; };
} }
@override @override
void handleSemanticTap() => _handleTap(); void performAction(SemanticAction action) {
if (action == SemanticAction.tap)
@override _handleTap();
void handleSemanticLongPress() { } }
@override
void handleSemanticScrollLeft() { }
@override
void handleSemanticScrollRight() { }
@override
void handleSemanticScrollUp() { }
@override
void handleSemanticScrollDown() { }
@override @override
void debugFillDescription(List<String> description) { void debugFillDescription(List<String> description) {
......
...@@ -2119,63 +2119,65 @@ class RenderSemanticsGestureHandler extends RenderProxyBox implements SemanticAc ...@@ -2119,63 +2119,65 @@ class RenderSemanticsGestureHandler extends RenderProxyBox implements SemanticAc
Iterable<SemanticAnnotator> getSemanticAnnotators() sync* { Iterable<SemanticAnnotator> getSemanticAnnotators() sync* {
if (hasSemantics) { if (hasSemantics) {
yield (SemanticsNode semantics) { yield (SemanticsNode semantics) {
semantics.canBeTapped = onTap != null; if (onTap != null)
semantics.canBeLongPressed = onLongPress != null; semantics.addAction(SemanticAction.tap);
semantics.canBeScrolledHorizontally = onHorizontalDragUpdate != null; if (onLongPress != null)
semantics.canBeScrolledVertically = onVerticalDragUpdate != null; semantics.addAction(SemanticAction.longPress);
if (onHorizontalDragUpdate != null)
semantics.addHorizontalScrollingActions();
if (onVerticalDragUpdate != null)
semantics.addVerticalScrollingActions();
}; };
} }
} }
@override @override
void handleSemanticTap() { void performAction(SemanticAction action) {
if (onTap != null) switch (action) {
onTap(); case SemanticAction.tap:
} if (onTap != null)
onTap();
@override break;
void handleSemanticLongPress() { case SemanticAction.longPress:
if (onLongPress != null) if (onLongPress != null)
onLongPress(); onLongPress();
} break;
case SemanticAction.scrollLeft:
@override if (onHorizontalDragUpdate != null) {
void handleSemanticScrollLeft() { final double primaryDelta = size.width * -scrollFactor;
if (onHorizontalDragUpdate != null) { onHorizontalDragUpdate(new DragUpdateDetails(
final double primaryDelta = size.width * -scrollFactor; delta: new Offset(primaryDelta, 0.0), primaryDelta: primaryDelta
onHorizontalDragUpdate(new DragUpdateDetails( ));
delta: new Offset(primaryDelta, 0.0), primaryDelta: primaryDelta }
)); break;
} case SemanticAction.scrollRight:
} if (onHorizontalDragUpdate != null) {
final double primaryDelta = size.width * scrollFactor;
@override onHorizontalDragUpdate(new DragUpdateDetails(
void handleSemanticScrollRight() { delta: new Offset(primaryDelta, 0.0), primaryDelta: primaryDelta
if (onHorizontalDragUpdate != null) { ));
final double primaryDelta = size.width * scrollFactor; }
onHorizontalDragUpdate(new DragUpdateDetails( break;
delta: new Offset(primaryDelta, 0.0), primaryDelta: primaryDelta case SemanticAction.scrollUp:
)); if (onVerticalDragUpdate != null) {
} final double primaryDelta = size.height * -scrollFactor;
} onVerticalDragUpdate(new DragUpdateDetails(
delta: new Offset(0.0, primaryDelta), primaryDelta: primaryDelta
@override ));
void handleSemanticScrollUp() { }
if (onVerticalDragUpdate != null) { break;
final double primaryDelta = size.height * -scrollFactor; case SemanticAction.scrollDown:
onVerticalDragUpdate(new DragUpdateDetails( if (onVerticalDragUpdate != null) {
delta: new Offset(0.0, primaryDelta), primaryDelta: primaryDelta final double primaryDelta = size.height * scrollFactor;
)); onVerticalDragUpdate(new DragUpdateDetails(
} delta: new Offset(0.0, primaryDelta), primaryDelta: primaryDelta
} ));
}
@override break;
void handleSemanticScrollDown() { case SemanticAction.increase:
if (onVerticalDragUpdate != null) { case SemanticAction.decrease:
final double primaryDelta = size.height * scrollFactor; assert(false);
onVerticalDragUpdate(new DragUpdateDetails( break;
delta: new Offset(0.0, primaryDelta), primaryDelta: primaryDelta
));
} }
} }
} }
......
...@@ -7,20 +7,22 @@ import 'dart:ui' show Rect; ...@@ -7,20 +7,22 @@ import 'dart:ui' show Rect;
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/painting.dart'; import 'package:flutter/painting.dart';
import 'package:meta/meta.dart';
import 'package:sky_services/semantics/semantics.mojom.dart' as mojom; import 'package:sky_services/semantics/semantics.mojom.dart' as mojom;
import 'package:vector_math/vector_math_64.dart'; import 'package:vector_math/vector_math_64.dart';
import 'node.dart'; import 'node.dart';
/// The type of function returned by [RenderObject.getSemanticAnnotators()]. enum SemanticAction {
/// tap,
/// These callbacks are called with the [SemanticsNode] object that longPress,
/// corresponds to the [RenderObject]. (One [SemanticsNode] can scrollLeft,
/// correspond to multiple [RenderObject] objects.) scrollRight,
/// scrollUp,
/// See [RenderObject.getSemanticAnnotators()] for details on the scrollDown,
/// contract that semantic annotators must follow. increase,
typedef void SemanticAnnotator(SemanticsNode semantics); decrease,
}
/// Interface for [RenderObject]s to implement when they want to support /// Interface for [RenderObject]s to implement when they want to support
/// being tapped, etc. /// being tapped, etc.
...@@ -29,33 +31,23 @@ typedef void SemanticAnnotator(SemanticsNode semantics); ...@@ -29,33 +31,23 @@ typedef void SemanticAnnotator(SemanticsNode semantics);
/// (e.g. [handleSemanticTap]() will only be called if /// (e.g. [handleSemanticTap]() will only be called if
/// [SemanticsNode.canBeTapped] is true, [handleSemanticScrollDown]() will only /// [SemanticsNode.canBeTapped] is true, [handleSemanticScrollDown]() will only
/// be called if [SemanticsNode.canBeScrolledVertically] is true, etc). /// be called if [SemanticsNode.canBeScrolledVertically] is true, etc).
abstract class SemanticActionHandler { abstract class SemanticActionHandler { // ignore: one_member_abstracts
/// Called when the user taps on the render object. void performAction(SemanticAction action);
void handleSemanticTap() { }
/// Called when the user presses on the render object for a long period of time.
void handleSemanticLongPress() { }
/// Called when the user scrolls to the left.
void handleSemanticScrollLeft() { }
/// Called when the user scrolls to the right.
void handleSemanticScrollRight() { }
/// Called when the user scrolls up.
void handleSemanticScrollUp() { }
/// Called when the user scrolls down.
void handleSemanticScrollDown() { }
} }
/// The type of function returned by [RenderObject.getSemanticAnnotators()].
///
/// These callbacks are called with the [SemanticsNode] object that
/// corresponds to the [RenderObject]. (One [SemanticsNode] can
/// correspond to multiple [RenderObject] objects.)
///
/// See [RenderObject.getSemanticAnnotators()] for details on the
/// contract that semantic annotators must follow.
typedef void SemanticAnnotator(SemanticsNode semantics);
enum _SemanticFlags { enum _SemanticFlags {
mergeAllDescendantsIntoThisNode, mergeAllDescendantsIntoThisNode,
inheritedMergeAllDescendantsIntoThisNode, // whether an ancestor had mergeAllDescendantsIntoThisNode set inheritedMergeAllDescendantsIntoThisNode, // whether an ancestor had mergeAllDescendantsIntoThisNode set
canBeTapped,
canBeLongPressed,
canBeScrolledHorizontally,
canBeScrolledVertically,
hasCheckedState, hasCheckedState,
isChecked, isChecked,
} }
...@@ -137,6 +129,27 @@ class SemanticsNode extends AbstractNode { ...@@ -137,6 +129,27 @@ class SemanticsNode extends AbstractNode {
// FLAGS AND LABELS // FLAGS AND LABELS
// These are supposed to be set by SemanticAnnotator obtained from getSemanticAnnotators // These are supposed to be set by SemanticAnnotator obtained from getSemanticAnnotators
final Set<SemanticAction> _actions = new Set<SemanticAction>();
void addAction(SemanticAction action) {
if (_actions.add(action))
_markDirty();
}
void addHorizontalScrollingActions() {
addAction(SemanticAction.scrollLeft);
addAction(SemanticAction.scrollRight);
}
void addVerticalScrollingActions() {
addAction(SemanticAction.scrollUp);
addAction(SemanticAction.scrollDown);
}
bool _hasAction(SemanticAction action) {
return _actionHandler != null && _actions.contains(action);
}
BitField<_SemanticFlags> _flags = new BitField<_SemanticFlags>.filled(_SemanticFlags.values.length, false); BitField<_SemanticFlags> _flags = new BitField<_SemanticFlags>.filled(_SemanticFlags.values.length, false);
void _setFlag(_SemanticFlags flag, bool value, { bool needsHandler: false }) { void _setFlag(_SemanticFlags flag, bool value, { bool needsHandler: false }) {
...@@ -148,10 +161,6 @@ class SemanticsNode extends AbstractNode { ...@@ -148,10 +161,6 @@ class SemanticsNode extends AbstractNode {
} }
} }
bool _canHandle(_SemanticFlags flag) {
return _actionHandler != null && _flags[flag];
}
/// Whether all this node and all of its descendants should be treated as one logical entity. /// Whether all this node and all of its descendants should be treated as one logical entity.
bool get mergeAllDescendantsIntoThisNode => _flags[_SemanticFlags.mergeAllDescendantsIntoThisNode]; bool get mergeAllDescendantsIntoThisNode => _flags[_SemanticFlags.mergeAllDescendantsIntoThisNode];
set mergeAllDescendantsIntoThisNode(bool value) => _setFlag(_SemanticFlags.mergeAllDescendantsIntoThisNode, value); set mergeAllDescendantsIntoThisNode(bool value) => _setFlag(_SemanticFlags.mergeAllDescendantsIntoThisNode, value);
...@@ -161,22 +170,6 @@ class SemanticsNode extends AbstractNode { ...@@ -161,22 +170,6 @@ class SemanticsNode extends AbstractNode {
bool get _shouldMergeAllDescendantsIntoThisNode => mergeAllDescendantsIntoThisNode || _inheritedMergeAllDescendantsIntoThisNode; bool get _shouldMergeAllDescendantsIntoThisNode => mergeAllDescendantsIntoThisNode || _inheritedMergeAllDescendantsIntoThisNode;
/// Whether this node responds to tap gestures.
bool get canBeTapped => _flags[_SemanticFlags.canBeTapped];
set canBeTapped(bool value) => _setFlag(_SemanticFlags.canBeTapped, value, needsHandler: true);
/// Whether this node responds to long-press gestures.
bool get canBeLongPressed => _flags[_SemanticFlags.canBeLongPressed];
set canBeLongPressed(bool value) => _setFlag(_SemanticFlags.canBeLongPressed, value, needsHandler: true);
/// Whether this node responds to horizontal scrolling.
bool get canBeScrolledHorizontally => _flags[_SemanticFlags.canBeScrolledHorizontally];
set canBeScrolledHorizontally(bool value) => _setFlag(_SemanticFlags.canBeScrolledHorizontally, value, needsHandler: true);
/// Whether this node responds to vertical scrolling.
bool get canBeScrolledVertically => _flags[_SemanticFlags.canBeScrolledVertically];
set canBeScrolledVertically(bool value) => _setFlag(_SemanticFlags.canBeScrolledVertically, value, needsHandler: true);
/// Whether this node has Boolean state that can be controlled by the user. /// Whether this node has Boolean state that can be controlled by the user.
bool get hasCheckedState => _flags[_SemanticFlags.hasCheckedState]; bool get hasCheckedState => _flags[_SemanticFlags.hasCheckedState];
set hasCheckedState(bool value) => _setFlag(_SemanticFlags.hasCheckedState, value); set hasCheckedState(bool value) => _setFlag(_SemanticFlags.hasCheckedState, value);
...@@ -199,6 +192,7 @@ class SemanticsNode extends AbstractNode { ...@@ -199,6 +192,7 @@ class SemanticsNode extends AbstractNode {
/// Restore this node to its default state. /// Restore this node to its default state.
void reset() { void reset() {
bool hadInheritedMergeAllDescendantsIntoThisNode = _inheritedMergeAllDescendantsIntoThisNode; bool hadInheritedMergeAllDescendantsIntoThisNode = _inheritedMergeAllDescendantsIntoThisNode;
_actions.clear();
_flags.reset(); _flags.reset();
if (hadInheritedMergeAllDescendantsIntoThisNode) if (hadInheritedMergeAllDescendantsIntoThisNode)
_inheritedMergeAllDescendantsIntoThisNode = true; _inheritedMergeAllDescendantsIntoThisNode = true;
...@@ -370,21 +364,16 @@ class SemanticsNode extends AbstractNode { ...@@ -370,21 +364,16 @@ class SemanticsNode extends AbstractNode {
result.geometry.width = math.max(rect.width, 0.0); result.geometry.width = math.max(rect.width, 0.0);
result.geometry.height = math.max(rect.height, 0.0); result.geometry.height = math.max(rect.height, 0.0);
result.flags = new mojom.SemanticFlags(); result.flags = new mojom.SemanticFlags();
result.flags.canBeTapped = canBeTapped;
result.flags.canBeLongPressed = canBeLongPressed;
result.flags.canBeScrolledHorizontally = canBeScrolledHorizontally;
result.flags.canBeScrolledVertically = canBeScrolledVertically;
result.flags.hasCheckedState = hasCheckedState; result.flags.hasCheckedState = hasCheckedState;
result.flags.isChecked = isChecked; result.flags.isChecked = isChecked;
result.strings = new mojom.SemanticStrings(); result.strings = new mojom.SemanticStrings();
result.strings.label = label; result.strings.label = label;
List<mojom.SemanticsNode> children = <mojom.SemanticsNode>[]; List<mojom.SemanticsNode> children = <mojom.SemanticsNode>[];
Set<SemanticAction> mergedActions = new Set<SemanticAction>();
mergedActions.addAll(_actions);
if (_shouldMergeAllDescendantsIntoThisNode) { if (_shouldMergeAllDescendantsIntoThisNode) {
_visitDescendants((SemanticsNode node) { _visitDescendants((SemanticsNode node) {
result.flags.canBeTapped = result.flags.canBeTapped || node.canBeTapped; mergedActions.addAll(node._actions);
result.flags.canBeLongPressed = result.flags.canBeLongPressed || node.canBeLongPressed;
result.flags.canBeScrolledHorizontally = result.flags.canBeScrolledHorizontally || node.canBeScrolledHorizontally;
result.flags.canBeScrolledVertically = result.flags.canBeScrolledVertically || node.canBeScrolledVertically;
result.flags.hasCheckedState = result.flags.hasCheckedState || node.hasCheckedState; result.flags.hasCheckedState = result.flags.hasCheckedState || node.hasCheckedState;
result.flags.isChecked = result.flags.isChecked || node.isChecked; result.flags.isChecked = result.flags.isChecked || node.isChecked;
if (node.label != '') if (node.label != '')
...@@ -400,6 +389,9 @@ class SemanticsNode extends AbstractNode { ...@@ -400,6 +389,9 @@ class SemanticsNode extends AbstractNode {
} }
} }
result.children = children; result.children = children;
result.actions = <int>[];
for (SemanticAction action in mergedActions)
result.actions.add(action.index);
_dirty = false; _dirty = false;
} }
return result; return result;
...@@ -499,37 +491,47 @@ class SemanticsNode extends AbstractNode { ...@@ -499,37 +491,47 @@ class SemanticsNode extends AbstractNode {
_dirtyNodes.clear(); _dirtyNodes.clear();
} }
static SemanticActionHandler _getSemanticActionHandlerForId(int id, { _SemanticFlags neededFlag }) { static SemanticActionHandler _getSemanticActionHandlerForId(int id, { @required SemanticAction action }) {
assert(neededFlag != null); assert(action != null);
SemanticsNode result = _nodes[id]; SemanticsNode result = _nodes[id];
if (result != null && result._shouldMergeAllDescendantsIntoThisNode && !result._canHandle(neededFlag)) { if (result != null && result._shouldMergeAllDescendantsIntoThisNode && !result._hasAction(action)) {
result._visitDescendants((SemanticsNode node) { result._visitDescendants((SemanticsNode node) {
if (node._actionHandler != null && node._flags[neededFlag]) { if (node._actionHandler != null && node._hasAction(action)) {
result = node; result = node;
return false; // found node, abort walk return false; // found node, abort walk
} }
return true; // continue walk return true; // continue walk
}); });
} }
if (result == null || !result._canHandle(neededFlag)) if (result == null || !result._hasAction(action))
return null; return null;
return result._actionHandler; return result._actionHandler;
} }
@override @override
String toString() { String toString() {
return '$runtimeType($_id' StringBuffer buffer = new StringBuffer();
'${_dirty ? " (${ _dirtyNodes.contains(this) ? 'dirty' : 'STALE' })" : ""}' buffer.write('$runtimeType($_id');
'${_shouldMergeAllDescendantsIntoThisNode ? " (leaf merge)" : ""}' if (_dirty)
'; $rect' buffer.write(" (${ _dirtyNodes.contains(this) ? 'dirty' : 'STALE' })");
'${wasAffectedByClip ? " (clipped)" : ""}' if (_shouldMergeAllDescendantsIntoThisNode)
'${canBeTapped ? "; canBeTapped" : ""}' buffer.write(' (leaf merge)');
'${canBeLongPressed ? "; canBeLongPressed" : ""}' buffer.write('; $rect');
'${canBeScrolledHorizontally ? "; canBeScrolledHorizontally" : ""}' if (wasAffectedByClip)
'${canBeScrolledVertically ? "; canBeScrolledVertically" : ""}' buffer.write(' (clipped)');
'${hasCheckedState ? (isChecked ? "; checked" : "; unchecked") : ""}' for (SemanticAction action in _actions) {
'${label != "" ? "; \"$label\"" : ""}' buffer.write('; $action');
')'; }
if (hasCheckedState) {
if (isChecked)
buffer.write('; checked');
else
buffer.write('; unchecked');
}
if (label.isNotEmpty)
buffer.write('; "$label"');
buffer.write(')');
return buffer.toString();
} }
/// Returns a string representation of this node and its descendants. /// Returns a string representation of this node and its descendants.
...@@ -556,32 +558,9 @@ class SemanticsServer extends mojom.SemanticsServer { ...@@ -556,32 +558,9 @@ class SemanticsServer extends mojom.SemanticsServer {
} }
@override @override
void tap(int nodeID) { void performAction(int id, mojom.SemanticAction encodedAction) {
SemanticsNode._getSemanticActionHandlerForId(nodeID, neededFlag: _SemanticFlags.canBeTapped)?.handleSemanticTap(); SemanticAction action = SemanticAction.values[encodedAction.mojoEnumValue];
} SemanticActionHandler node = SemanticsNode._getSemanticActionHandlerForId(id, action: action);
node?.performAction(action);
@override
void longPress(int nodeID) {
SemanticsNode._getSemanticActionHandlerForId(nodeID, neededFlag: _SemanticFlags.canBeLongPressed)?.handleSemanticLongPress();
}
@override
void scrollLeft(int nodeID) {
SemanticsNode._getSemanticActionHandlerForId(nodeID, neededFlag: _SemanticFlags.canBeScrolledHorizontally)?.handleSemanticScrollLeft();
}
@override
void scrollRight(int nodeID) {
SemanticsNode._getSemanticActionHandlerForId(nodeID, neededFlag: _SemanticFlags.canBeScrolledHorizontally)?.handleSemanticScrollRight();
}
@override
void scrollUp(int nodeID) {
SemanticsNode._getSemanticActionHandlerForId(nodeID, neededFlag: _SemanticFlags.canBeScrolledVertically)?.handleSemanticScrollUp();
}
@override
void scrollDown(int nodeID) {
SemanticsNode._getSemanticActionHandlerForId(nodeID, neededFlag: _SemanticFlags.canBeScrolledVertically)?.handleSemanticScrollDown();
} }
} }
...@@ -58,14 +58,14 @@ class _SemanticsDebuggerState extends State<SemanticsDebugger> { ...@@ -58,14 +58,14 @@ class _SemanticsDebuggerState extends State<SemanticsDebugger> {
void _handleTap() { void _handleTap() {
assert(_lastPointerDownLocation != null); assert(_lastPointerDownLocation != null);
_SemanticsDebuggerListener.instance.handleTap(_lastPointerDownLocation); _SemanticsDebuggerListener.instance._performAction(_lastPointerDownLocation, SemanticAction.tap);
setState(() { setState(() {
_lastPointerDownLocation = null; _lastPointerDownLocation = null;
}); });
} }
void _handleLongPress() { void _handleLongPress() {
assert(_lastPointerDownLocation != null); assert(_lastPointerDownLocation != null);
_SemanticsDebuggerListener.instance.handleLongPress(_lastPointerDownLocation); _SemanticsDebuggerListener.instance._performAction(_lastPointerDownLocation, SemanticAction.longPress);
setState(() { setState(() {
_lastPointerDownLocation = null; _lastPointerDownLocation = null;
}); });
...@@ -107,10 +107,7 @@ class _SemanticsDebuggerEntry { ...@@ -107,10 +107,7 @@ class _SemanticsDebuggerEntry {
_SemanticsDebuggerEntry(this.id); _SemanticsDebuggerEntry(this.id);
final int id; final int id;
bool canBeTapped = false; final Set<SemanticAction> actions = new Set<SemanticAction>();
bool canBeLongPressed = false;
bool canBeScrolledHorizontally = false;
bool canBeScrolledVertically = false;
bool hasCheckedState = false; bool hasCheckedState = false;
bool isChecked = false; bool isChecked = false;
String label; String label;
...@@ -120,13 +117,14 @@ class _SemanticsDebuggerEntry { ...@@ -120,13 +117,14 @@ class _SemanticsDebuggerEntry {
@override @override
String toString() { String toString() {
return '_SemanticsDebuggerEntry($id; $rect; "$label"' StringBuffer buffer = new StringBuffer();
'${canBeTapped ? "; canBeTapped" : ""}' buffer.write('_SemanticsDebuggerEntry($id; $rect; "$label"');
'${canBeLongPressed ? "; canBeLongPressed" : ""}' for (SemanticAction action in actions)
'${canBeScrolledHorizontally ? "; canBeScrolledHorizontally" : ""}' buffer.write('; $action');
'${canBeScrolledVertically ? "; canBeScrolledVertically" : ""}' buffer
'${hasCheckedState ? isChecked ? "; checked" : "; unchecked" : ""}' ..write('${hasCheckedState ? isChecked ? "; checked" : "; unchecked" : ""}')
')'; ..write(')');
return buffer.toString();
} }
String toStringDeep([ String prefix = '']) { String toStringDeep([ String prefix = '']) {
...@@ -142,13 +140,14 @@ class _SemanticsDebuggerEntry { ...@@ -142,13 +140,14 @@ class _SemanticsDebuggerEntry {
void updateWith(mojom.SemanticsNode node) { void updateWith(mojom.SemanticsNode node) {
if (node.flags != null) { if (node.flags != null) {
canBeTapped = node.flags.canBeTapped;
canBeLongPressed = node.flags.canBeLongPressed;
canBeScrolledHorizontally = node.flags.canBeScrolledHorizontally;
canBeScrolledVertically = node.flags.canBeScrolledVertically;
hasCheckedState = node.flags.hasCheckedState; hasCheckedState = node.flags.hasCheckedState;
isChecked = node.flags.isChecked; isChecked = node.flags.isChecked;
} }
if (node.actions != null) {
actions.clear();
for (int encodedAction in node.actions)
actions.add(SemanticAction.values[encodedAction]);
}
if (node.strings != null) { if (node.strings != null) {
assert(node.strings.label != null); assert(node.strings.label != null);
label = node.strings.label; label = node.strings.label;
...@@ -190,6 +189,13 @@ class _SemanticsDebuggerEntry { ...@@ -190,6 +189,13 @@ class _SemanticsDebuggerEntry {
height: 0.8 height: 0.8
); );
bool get _isScrollable {
return actions.contains(SemanticAction.scrollLeft)
|| actions.contains(SemanticAction.scrollRight)
|| actions.contains(SemanticAction.scrollUp)
|| actions.contains(SemanticAction.scrollDown);
}
TextPainter textPainter; TextPainter textPainter;
void _updateMessage() { void _updateMessage() {
List<String> annotations = <String>[]; List<String> annotations = <String>[];
...@@ -198,16 +204,16 @@ class _SemanticsDebuggerEntry { ...@@ -198,16 +204,16 @@ class _SemanticsDebuggerEntry {
annotations.add(isChecked ? 'checked' : 'unchecked'); annotations.add(isChecked ? 'checked' : 'unchecked');
wantsTap = true; wantsTap = true;
} }
if (canBeTapped) { if (actions.contains(SemanticAction.tap)) {
if (!wantsTap) if (!wantsTap)
annotations.add('button'); annotations.add('button');
} else { } else {
if (wantsTap) if (wantsTap)
annotations.add('disabled'); annotations.add('disabled');
} }
if (canBeLongPressed) if (actions.contains(SemanticAction.longPress))
annotations.add('long-pressable'); annotations.add('long-pressable');
if (canBeScrolledHorizontally || canBeScrolledVertically) if (_isScrollable)
annotations.add('scrollable'); annotations.add('scrollable');
String message; String message;
if (annotations.isEmpty) { if (annotations.isEmpty) {
...@@ -349,12 +355,11 @@ class _SemanticsDebuggerListener extends ChangeNotifier implements mojom.Semanti ...@@ -349,12 +355,11 @@ class _SemanticsDebuggerListener extends ChangeNotifier implements mojom.Semanti
return rootNode?.hitTest(position, filter); return rootNode?.hitTest(position, filter);
} }
void handleTap(Point position) { void _performAction(Point position, SemanticAction action) {
_server.tap(_hitTest(position, (_SemanticsDebuggerEntry entry) => entry.canBeTapped)?.id ?? 0); _SemanticsDebuggerEntry entry = _hitTest(position, (_SemanticsDebuggerEntry entry) => entry.actions.contains(action));
} _server.performAction(entry?.id ?? 0, mojom.SemanticAction.values[action.index]);
void handleLongPress(Point position) {
_server.longPress(_hitTest(position, (_SemanticsDebuggerEntry entry) => entry.canBeLongPressed)?.id ?? 0);
} }
void handlePanEnd(Point position, Velocity velocity) { void handlePanEnd(Point position, Velocity velocity) {
double vx = velocity.pixelsPerSecond.dx; double vx = velocity.pixelsPerSecond.dx;
double vy = velocity.pixelsPerSecond.dy; double vy = velocity.pixelsPerSecond.dy;
...@@ -362,14 +367,14 @@ class _SemanticsDebuggerListener extends ChangeNotifier implements mojom.Semanti ...@@ -362,14 +367,14 @@ class _SemanticsDebuggerListener extends ChangeNotifier implements mojom.Semanti
return; return;
if (vx.abs() > vy.abs()) { if (vx.abs() > vy.abs()) {
if (vx.sign < 0) if (vx.sign < 0)
_server.scrollLeft(_hitTest(position, (_SemanticsDebuggerEntry entry) => entry.canBeScrolledHorizontally)?.id ?? 0); _performAction(position, SemanticAction.scrollLeft);
else else
_server.scrollRight(_hitTest(position, (_SemanticsDebuggerEntry entry) => entry.canBeScrolledHorizontally)?.id ?? 0); _performAction(position, SemanticAction.scrollRight);
} else { } else {
if (vy.sign < 0) if (vy.sign < 0)
_server.scrollUp(_hitTest(position, (_SemanticsDebuggerEntry entry) => entry.canBeScrolledVertically)?.id ?? 0); _performAction(position, SemanticAction.scrollUp);
else else
_server.scrollDown(_hitTest(position, (_SemanticsDebuggerEntry entry) => entry.canBeScrolledVertically)?.id ?? 0); _performAction(position, SemanticAction.scrollDown);
} }
} }
} }
......
...@@ -421,10 +421,7 @@ void main() { ...@@ -421,10 +421,7 @@ void main() {
); );
expect(client.updates.length, equals(2)); expect(client.updates.length, equals(2));
expect(client.updates[0].id, equals(0)); expect(client.updates[0].id, equals(0));
expect(client.updates[0].flags.canBeTapped, isFalse); expect(client.updates[0].actions, isEmpty);
expect(client.updates[0].flags.canBeLongPressed, isFalse);
expect(client.updates[0].flags.canBeScrolledHorizontally, isFalse);
expect(client.updates[0].flags.canBeScrolledVertically, isFalse);
expect(client.updates[0].flags.hasCheckedState, isFalse); expect(client.updates[0].flags.hasCheckedState, isFalse);
expect(client.updates[0].flags.isChecked, isFalse); expect(client.updates[0].flags.isChecked, isFalse);
expect(client.updates[0].strings.label, equals('TIP')); expect(client.updates[0].strings.label, equals('TIP'));
...@@ -443,10 +440,7 @@ void main() { ...@@ -443,10 +440,7 @@ void main() {
await tester.pump(const Duration(seconds: 2)); // faded in, show timer started (and at 0.0) await tester.pump(const Duration(seconds: 2)); // faded in, show timer started (and at 0.0)
expect(client.updates.length, equals(2)); expect(client.updates.length, equals(2));
expect(client.updates[0].id, equals(0)); expect(client.updates[0].id, equals(0));
expect(client.updates[0].flags.canBeTapped, isFalse); expect(client.updates[0].actions, isEmpty);
expect(client.updates[0].flags.canBeLongPressed, isFalse);
expect(client.updates[0].flags.canBeScrolledHorizontally, isFalse);
expect(client.updates[0].flags.canBeScrolledVertically, isFalse);
expect(client.updates[0].flags.hasCheckedState, isFalse); expect(client.updates[0].flags.hasCheckedState, isFalse);
expect(client.updates[0].flags.isChecked, isFalse); expect(client.updates[0].flags.isChecked, isFalse);
expect(client.updates[0].strings.label, equals('TIP')); expect(client.updates[0].strings.label, equals('TIP'));
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:sky_services/semantics/semantics.mojom.dart' as mojom;
import 'test_semantics.dart'; import 'test_semantics.dart';
...@@ -23,10 +24,7 @@ void main() { ...@@ -23,10 +24,7 @@ void main() {
); );
expect(client.updates.length, equals(2)); expect(client.updates.length, equals(2));
expect(client.updates[0].id, equals(0)); expect(client.updates[0].id, equals(0));
expect(client.updates[0].flags.canBeTapped, isFalse); expect(client.updates[0].actions, isEmpty);
expect(client.updates[0].flags.canBeLongPressed, isFalse);
expect(client.updates[0].flags.canBeScrolledHorizontally, isFalse);
expect(client.updates[0].flags.canBeScrolledVertically, isFalse);
expect(client.updates[0].flags.hasCheckedState, isFalse); expect(client.updates[0].flags.hasCheckedState, isFalse);
expect(client.updates[0].flags.isChecked, isFalse); expect(client.updates[0].flags.isChecked, isFalse);
expect(client.updates[0].strings.label, equals('')); expect(client.updates[0].strings.label, equals(''));
...@@ -37,10 +35,7 @@ void main() { ...@@ -37,10 +35,7 @@ void main() {
expect(client.updates[0].geometry.height, equals(600.0)); expect(client.updates[0].geometry.height, equals(600.0));
expect(client.updates[0].children.length, equals(1)); expect(client.updates[0].children.length, equals(1));
expect(client.updates[0].children[0].id, equals(1)); expect(client.updates[0].children[0].id, equals(1));
expect(client.updates[0].children[0].flags.canBeTapped, isTrue); expect(client.updates[0].children[0].actions, equals(<int>[mojom.SemanticAction.tap.mojoEnumValue]));
expect(client.updates[0].children[0].flags.canBeLongPressed, isFalse);
expect(client.updates[0].children[0].flags.canBeScrolledHorizontally, isFalse);
expect(client.updates[0].children[0].flags.canBeScrolledVertically, isFalse);
expect(client.updates[0].children[0].flags.hasCheckedState, isFalse); expect(client.updates[0].children[0].flags.hasCheckedState, isFalse);
expect(client.updates[0].children[0].flags.isChecked, isFalse); expect(client.updates[0].children[0].flags.isChecked, isFalse);
expect(client.updates[0].children[0].strings.label, equals('Hello')); expect(client.updates[0].children[0].strings.label, equals('Hello'));
......
...@@ -24,10 +24,7 @@ void main() { ...@@ -24,10 +24,7 @@ void main() {
); );
expect(client.updates.length, equals(2)); expect(client.updates.length, equals(2));
expect(client.updates[0].id, equals(0)); expect(client.updates[0].id, equals(0));
expect(client.updates[0].flags.canBeTapped, isFalse); expect(client.updates[0].actions, isEmpty);
expect(client.updates[0].flags.canBeLongPressed, isFalse);
expect(client.updates[0].flags.canBeScrolledHorizontally, isFalse);
expect(client.updates[0].flags.canBeScrolledVertically, isFalse);
expect(client.updates[0].flags.hasCheckedState, isFalse); expect(client.updates[0].flags.hasCheckedState, isFalse);
expect(client.updates[0].flags.isChecked, isFalse); expect(client.updates[0].flags.isChecked, isFalse);
expect(client.updates[0].strings.label, equals('test1')); expect(client.updates[0].strings.label, equals('test1'));
...@@ -61,10 +58,7 @@ void main() { ...@@ -61,10 +58,7 @@ void main() {
); );
expect(client.updates.length, equals(2)); expect(client.updates.length, equals(2));
expect(client.updates[0].id, equals(0)); expect(client.updates[0].id, equals(0));
expect(client.updates[0].flags.canBeTapped, isFalse); expect(client.updates[0].actions, isEmpty);
expect(client.updates[0].flags.canBeLongPressed, isFalse);
expect(client.updates[0].flags.canBeScrolledHorizontally, isFalse);
expect(client.updates[0].flags.canBeScrolledVertically, isFalse);
expect(client.updates[0].flags.hasCheckedState, isFalse); expect(client.updates[0].flags.hasCheckedState, isFalse);
expect(client.updates[0].flags.isChecked, isFalse); expect(client.updates[0].flags.isChecked, isFalse);
expect(client.updates[0].strings.label, equals('child1')); expect(client.updates[0].strings.label, equals('child1'));
...@@ -98,10 +92,7 @@ void main() { ...@@ -98,10 +92,7 @@ void main() {
); );
expect(client.updates.length, equals(2)); expect(client.updates.length, equals(2));
expect(client.updates[0].id, equals(0)); expect(client.updates[0].id, equals(0));
expect(client.updates[0].flags.canBeTapped, isFalse); expect(client.updates[0].actions, isEmpty);
expect(client.updates[0].flags.canBeLongPressed, isFalse);
expect(client.updates[0].flags.canBeScrolledHorizontally, isFalse);
expect(client.updates[0].flags.canBeScrolledVertically, isFalse);
expect(client.updates[0].flags.hasCheckedState, isFalse); expect(client.updates[0].flags.hasCheckedState, isFalse);
expect(client.updates[0].flags.isChecked, isFalse); expect(client.updates[0].flags.isChecked, isFalse);
expect(client.updates[0].strings.label, equals('')); expect(client.updates[0].strings.label, equals(''));
...@@ -112,10 +103,7 @@ void main() { ...@@ -112,10 +103,7 @@ void main() {
expect(client.updates[0].geometry.height, equals(600.0)); expect(client.updates[0].geometry.height, equals(600.0));
expect(client.updates[0].children.length, equals(2)); expect(client.updates[0].children.length, equals(2));
expect(client.updates[0].children[0].id, equals(1)); expect(client.updates[0].children[0].id, equals(1));
expect(client.updates[0].children[0].flags.canBeTapped, isFalse); expect(client.updates[0].children[0].actions, isEmpty);
expect(client.updates[0].children[0].flags.canBeLongPressed, isFalse);
expect(client.updates[0].children[0].flags.canBeScrolledHorizontally, isFalse);
expect(client.updates[0].children[0].flags.canBeScrolledVertically, isFalse);
expect(client.updates[0].children[0].flags.hasCheckedState, isFalse); expect(client.updates[0].children[0].flags.hasCheckedState, isFalse);
expect(client.updates[0].children[0].flags.isChecked, isFalse); expect(client.updates[0].children[0].flags.isChecked, isFalse);
expect(client.updates[0].children[0].strings.label, equals('child1')); expect(client.updates[0].children[0].strings.label, equals('child1'));
...@@ -126,10 +114,7 @@ void main() { ...@@ -126,10 +114,7 @@ void main() {
expect(client.updates[0].children[0].geometry.height, equals(10.0)); expect(client.updates[0].children[0].geometry.height, equals(10.0));
expect(client.updates[0].children[0].children.length, equals(0)); expect(client.updates[0].children[0].children.length, equals(0));
expect(client.updates[0].children[1].id, equals(2)); expect(client.updates[0].children[1].id, equals(2));
expect(client.updates[0].children[1].flags.canBeTapped, isFalse); expect(client.updates[0].children[1].actions, isEmpty);
expect(client.updates[0].children[1].flags.canBeLongPressed, isFalse);
expect(client.updates[0].children[1].flags.canBeScrolledHorizontally, isFalse);
expect(client.updates[0].children[1].flags.canBeScrolledVertically, isFalse);
expect(client.updates[0].children[1].flags.hasCheckedState, isFalse); expect(client.updates[0].children[1].flags.hasCheckedState, isFalse);
expect(client.updates[0].children[1].flags.isChecked, isFalse); expect(client.updates[0].children[1].flags.isChecked, isFalse);
expect(client.updates[0].children[1].strings.label, equals('child2')); expect(client.updates[0].children[1].strings.label, equals('child2'));
...@@ -163,10 +148,7 @@ void main() { ...@@ -163,10 +148,7 @@ void main() {
); );
expect(client.updates.length, equals(2)); expect(client.updates.length, equals(2));
expect(client.updates[0].id, equals(0)); expect(client.updates[0].id, equals(0));
expect(client.updates[0].flags.canBeTapped, isFalse); expect(client.updates[0].actions, isEmpty);
expect(client.updates[0].flags.canBeLongPressed, isFalse);
expect(client.updates[0].flags.canBeScrolledHorizontally, isFalse);
expect(client.updates[0].flags.canBeScrolledVertically, isFalse);
expect(client.updates[0].flags.hasCheckedState, isFalse); expect(client.updates[0].flags.hasCheckedState, isFalse);
expect(client.updates[0].flags.isChecked, isFalse); expect(client.updates[0].flags.isChecked, isFalse);
expect(client.updates[0].strings.label, equals('child1')); expect(client.updates[0].strings.label, equals('child1'));
...@@ -200,10 +182,7 @@ void main() { ...@@ -200,10 +182,7 @@ void main() {
); );
expect(client.updates.length, equals(2)); expect(client.updates.length, equals(2));
expect(client.updates[0].id, equals(0)); expect(client.updates[0].id, equals(0));
expect(client.updates[0].flags.canBeTapped, isFalse); expect(client.updates[0].actions, isEmpty);
expect(client.updates[0].flags.canBeLongPressed, isFalse);
expect(client.updates[0].flags.canBeScrolledHorizontally, isFalse);
expect(client.updates[0].flags.canBeScrolledVertically, isFalse);
expect(client.updates[0].flags.hasCheckedState, isFalse); expect(client.updates[0].flags.hasCheckedState, isFalse);
expect(client.updates[0].flags.isChecked, isFalse); expect(client.updates[0].flags.isChecked, isFalse);
expect(client.updates[0].strings.label, equals('')); expect(client.updates[0].strings.label, equals(''));
...@@ -214,10 +193,7 @@ void main() { ...@@ -214,10 +193,7 @@ void main() {
expect(client.updates[0].geometry.height, equals(600.0)); expect(client.updates[0].geometry.height, equals(600.0));
expect(client.updates[0].children.length, equals(2)); expect(client.updates[0].children.length, equals(2));
expect(client.updates[0].children[0].id, equals(3)); expect(client.updates[0].children[0].id, equals(3));
expect(client.updates[0].children[0].flags.canBeTapped, isFalse); expect(client.updates[0].children[0].actions, isEmpty);
expect(client.updates[0].children[0].flags.canBeLongPressed, isFalse);
expect(client.updates[0].children[0].flags.canBeScrolledHorizontally, isFalse);
expect(client.updates[0].children[0].flags.canBeScrolledVertically, isFalse);
expect(client.updates[0].children[0].flags.hasCheckedState, isFalse); expect(client.updates[0].children[0].flags.hasCheckedState, isFalse);
expect(client.updates[0].children[0].flags.isChecked, isFalse); expect(client.updates[0].children[0].flags.isChecked, isFalse);
expect(client.updates[0].children[0].strings.label, equals('child1')); expect(client.updates[0].children[0].strings.label, equals('child1'));
...@@ -228,10 +204,7 @@ void main() { ...@@ -228,10 +204,7 @@ void main() {
expect(client.updates[0].children[0].geometry.height, equals(10.0)); expect(client.updates[0].children[0].geometry.height, equals(10.0));
expect(client.updates[0].children[0].children.length, equals(0)); expect(client.updates[0].children[0].children.length, equals(0));
expect(client.updates[0].children[1].id, equals(2)); expect(client.updates[0].children[1].id, equals(2));
expect(client.updates[0].children[1].flags.canBeTapped, isFalse); expect(client.updates[0].children[1].actions, isEmpty);
expect(client.updates[0].children[1].flags.canBeLongPressed, isFalse);
expect(client.updates[0].children[1].flags.canBeScrolledHorizontally, isFalse);
expect(client.updates[0].children[1].flags.canBeScrolledVertically, isFalse);
expect(client.updates[0].children[1].flags.hasCheckedState, isFalse); expect(client.updates[0].children[1].flags.hasCheckedState, isFalse);
expect(client.updates[0].children[1].flags.isChecked, isFalse); expect(client.updates[0].children[1].flags.isChecked, isFalse);
expect(client.updates[0].children[1].strings.label, equals('child2')); expect(client.updates[0].children[1].strings.label, equals('child2'));
......
...@@ -38,10 +38,7 @@ void main() { ...@@ -38,10 +38,7 @@ void main() {
); );
expect(client.updates.length, equals(2)); expect(client.updates.length, equals(2));
expect(client.updates[0].id, equals(0)); expect(client.updates[0].id, equals(0));
expect(client.updates[0].flags.canBeTapped, isFalse); expect(client.updates[0].actions, isEmpty);
expect(client.updates[0].flags.canBeLongPressed, isFalse);
expect(client.updates[0].flags.canBeScrolledHorizontally, isFalse);
expect(client.updates[0].flags.canBeScrolledVertically, isFalse);
expect(client.updates[0].flags.hasCheckedState, isFalse); expect(client.updates[0].flags.hasCheckedState, isFalse);
expect(client.updates[0].flags.isChecked, isFalse); expect(client.updates[0].flags.isChecked, isFalse);
expect(client.updates[0].strings.label, equals('')); expect(client.updates[0].strings.label, equals(''));
...@@ -52,10 +49,7 @@ void main() { ...@@ -52,10 +49,7 @@ void main() {
expect(client.updates[0].geometry.height, equals(600.0)); expect(client.updates[0].geometry.height, equals(600.0));
expect(client.updates[0].children.length, equals(2)); expect(client.updates[0].children.length, equals(2));
expect(client.updates[0].children[0].id, equals(1)); expect(client.updates[0].children[0].id, equals(1));
expect(client.updates[0].children[0].flags.canBeTapped, isFalse); expect(client.updates[0].children[0].actions, isEmpty);
expect(client.updates[0].children[0].flags.canBeLongPressed, isFalse);
expect(client.updates[0].children[0].flags.canBeScrolledHorizontally, isFalse);
expect(client.updates[0].children[0].flags.canBeScrolledVertically, isFalse);
expect(client.updates[0].children[0].flags.hasCheckedState, isFalse); expect(client.updates[0].children[0].flags.hasCheckedState, isFalse);
expect(client.updates[0].children[0].flags.isChecked, isFalse); expect(client.updates[0].children[0].flags.isChecked, isFalse);
expect(client.updates[0].children[0].strings.label, equals('child1')); expect(client.updates[0].children[0].strings.label, equals('child1'));
...@@ -66,10 +60,7 @@ void main() { ...@@ -66,10 +60,7 @@ void main() {
expect(client.updates[0].children[0].geometry.height, equals(10.0)); expect(client.updates[0].children[0].geometry.height, equals(10.0));
expect(client.updates[0].children[0].children.length, equals(0)); expect(client.updates[0].children[0].children.length, equals(0));
expect(client.updates[0].children[1].id, equals(2)); expect(client.updates[0].children[1].id, equals(2));
expect(client.updates[0].children[1].flags.canBeTapped, isFalse); expect(client.updates[0].children[1].actions, isEmpty);
expect(client.updates[0].children[1].flags.canBeLongPressed, isFalse);
expect(client.updates[0].children[1].flags.canBeScrolledHorizontally, isFalse);
expect(client.updates[0].children[1].flags.canBeScrolledVertically, isFalse);
expect(client.updates[0].children[1].flags.hasCheckedState, isFalse); expect(client.updates[0].children[1].flags.hasCheckedState, isFalse);
expect(client.updates[0].children[1].flags.isChecked, isFalse); expect(client.updates[0].children[1].flags.isChecked, isFalse);
expect(client.updates[0].children[1].strings.label, equals('child2')); expect(client.updates[0].children[1].strings.label, equals('child2'));
...@@ -103,10 +94,7 @@ void main() { ...@@ -103,10 +94,7 @@ void main() {
); );
expect(client.updates.length, equals(2)); expect(client.updates.length, equals(2));
expect(client.updates[0].id, equals(0)); expect(client.updates[0].id, equals(0));
expect(client.updates[0].flags.canBeTapped, isFalse); expect(client.updates[0].actions, isEmpty);
expect(client.updates[0].flags.canBeLongPressed, isFalse);
expect(client.updates[0].flags.canBeScrolledHorizontally, isFalse);
expect(client.updates[0].flags.canBeScrolledVertically, isFalse);
expect(client.updates[0].flags.hasCheckedState, isFalse); expect(client.updates[0].flags.hasCheckedState, isFalse);
expect(client.updates[0].flags.isChecked, isFalse); expect(client.updates[0].flags.isChecked, isFalse);
expect(client.updates[0].strings.label, equals('child1')); expect(client.updates[0].strings.label, equals('child1'));
...@@ -140,10 +128,7 @@ void main() { ...@@ -140,10 +128,7 @@ void main() {
); );
expect(client.updates.length, equals(2)); expect(client.updates.length, equals(2));
expect(client.updates[0].id, equals(0)); expect(client.updates[0].id, equals(0));
expect(client.updates[0].flags.canBeTapped, isFalse); expect(client.updates[0].actions, isEmpty);
expect(client.updates[0].flags.canBeLongPressed, isFalse);
expect(client.updates[0].flags.canBeScrolledHorizontally, isFalse);
expect(client.updates[0].flags.canBeScrolledVertically, isFalse);
expect(client.updates[0].flags.hasCheckedState, isFalse); expect(client.updates[0].flags.hasCheckedState, isFalse);
expect(client.updates[0].flags.isChecked, isFalse); expect(client.updates[0].flags.isChecked, isFalse);
expect(client.updates[0].strings.label, equals('')); expect(client.updates[0].strings.label, equals(''));
...@@ -154,10 +139,7 @@ void main() { ...@@ -154,10 +139,7 @@ void main() {
expect(client.updates[0].geometry.height, equals(600.0)); expect(client.updates[0].geometry.height, equals(600.0));
expect(client.updates[0].children.length, equals(2)); expect(client.updates[0].children.length, equals(2));
expect(client.updates[0].children[0].id, equals(3)); expect(client.updates[0].children[0].id, equals(3));
expect(client.updates[0].children[0].flags.canBeTapped, isFalse); expect(client.updates[0].children[0].actions, isEmpty);
expect(client.updates[0].children[0].flags.canBeLongPressed, isFalse);
expect(client.updates[0].children[0].flags.canBeScrolledHorizontally, isFalse);
expect(client.updates[0].children[0].flags.canBeScrolledVertically, isFalse);
expect(client.updates[0].children[0].flags.hasCheckedState, isFalse); expect(client.updates[0].children[0].flags.hasCheckedState, isFalse);
expect(client.updates[0].children[0].flags.isChecked, isFalse); expect(client.updates[0].children[0].flags.isChecked, isFalse);
expect(client.updates[0].children[0].strings.label, equals('child1')); expect(client.updates[0].children[0].strings.label, equals('child1'));
...@@ -168,10 +150,7 @@ void main() { ...@@ -168,10 +150,7 @@ void main() {
expect(client.updates[0].children[0].geometry.height, equals(10.0)); expect(client.updates[0].children[0].geometry.height, equals(10.0));
expect(client.updates[0].children[0].children.length, equals(0)); expect(client.updates[0].children[0].children.length, equals(0));
expect(client.updates[0].children[1].id, equals(2)); expect(client.updates[0].children[1].id, equals(2));
expect(client.updates[0].children[1].flags.canBeTapped, isFalse); expect(client.updates[0].children[1].actions, isEmpty);
expect(client.updates[0].children[1].flags.canBeLongPressed, isFalse);
expect(client.updates[0].children[1].flags.canBeScrolledHorizontally, isFalse);
expect(client.updates[0].children[1].flags.canBeScrolledVertically, isFalse);
expect(client.updates[0].children[1].flags.hasCheckedState, isFalse); expect(client.updates[0].children[1].flags.hasCheckedState, isFalse);
expect(client.updates[0].children[1].flags.isChecked, isFalse); expect(client.updates[0].children[1].flags.isChecked, isFalse);
expect(client.updates[0].children[1].strings.label, equals('child2')); expect(client.updates[0].children[1].strings.label, equals('child2'));
......
...@@ -27,10 +27,7 @@ void main() { ...@@ -27,10 +27,7 @@ void main() {
); );
expect(client.updates.length, equals(2)); expect(client.updates.length, equals(2));
expect(client.updates[0].id, equals(0)); expect(client.updates[0].id, equals(0));
expect(client.updates[0].flags.canBeTapped, isFalse); expect(client.updates[0].actions, isEmpty);
expect(client.updates[0].flags.canBeLongPressed, isFalse);
expect(client.updates[0].flags.canBeScrolledHorizontally, isFalse);
expect(client.updates[0].flags.canBeScrolledVertically, isFalse);
expect(client.updates[0].flags.hasCheckedState, isTrue); expect(client.updates[0].flags.hasCheckedState, isTrue);
expect(client.updates[0].flags.isChecked, isTrue); expect(client.updates[0].flags.isChecked, isTrue);
expect(client.updates[0].strings.label, equals('test')); expect(client.updates[0].strings.label, equals('test'));
...@@ -55,10 +52,7 @@ void main() { ...@@ -55,10 +52,7 @@ void main() {
); );
expect(client.updates.length, equals(2)); expect(client.updates.length, equals(2));
expect(client.updates[0].id, equals(0)); expect(client.updates[0].id, equals(0));
expect(client.updates[0].flags.canBeTapped, isFalse); expect(client.updates[0].actions, isEmpty);
expect(client.updates[0].flags.canBeLongPressed, isFalse);
expect(client.updates[0].flags.canBeScrolledHorizontally, isFalse);
expect(client.updates[0].flags.canBeScrolledVertically, isFalse);
expect(client.updates[0].flags.hasCheckedState, isTrue); expect(client.updates[0].flags.hasCheckedState, isTrue);
expect(client.updates[0].flags.isChecked, isTrue); expect(client.updates[0].flags.isChecked, isTrue);
expect(client.updates[0].strings.label, equals('')); expect(client.updates[0].strings.label, equals(''));
...@@ -83,10 +77,7 @@ void main() { ...@@ -83,10 +77,7 @@ void main() {
); );
expect(client.updates.length, equals(2)); expect(client.updates.length, equals(2));
expect(client.updates[0].id, equals(0)); expect(client.updates[0].id, equals(0));
expect(client.updates[0].flags.canBeTapped, isFalse); expect(client.updates[0].actions, isEmpty);
expect(client.updates[0].flags.canBeLongPressed, isFalse);
expect(client.updates[0].flags.canBeScrolledHorizontally, isFalse);
expect(client.updates[0].flags.canBeScrolledVertically, isFalse);
expect(client.updates[0].flags.hasCheckedState, isFalse); expect(client.updates[0].flags.hasCheckedState, isFalse);
expect(client.updates[0].flags.isChecked, isFalse); expect(client.updates[0].flags.isChecked, isFalse);
expect(client.updates[0].strings.label, equals('test')); expect(client.updates[0].strings.label, equals('test'));
...@@ -114,10 +105,7 @@ void main() { ...@@ -114,10 +105,7 @@ void main() {
); );
expect(client.updates.length, equals(2)); expect(client.updates.length, equals(2));
expect(client.updates[0].id, equals(0)); expect(client.updates[0].id, equals(0));
expect(client.updates[0].flags.canBeTapped, isFalse); expect(client.updates[0].actions, isEmpty);
expect(client.updates[0].flags.canBeLongPressed, isFalse);
expect(client.updates[0].flags.canBeScrolledHorizontally, isFalse);
expect(client.updates[0].flags.canBeScrolledVertically, isFalse);
expect(client.updates[0].flags.hasCheckedState, isTrue); expect(client.updates[0].flags.hasCheckedState, isTrue);
expect(client.updates[0].flags.isChecked, isTrue); expect(client.updates[0].flags.isChecked, isTrue);
expect(client.updates[0].strings.label, equals('test')); expect(client.updates[0].strings.label, equals('test'));
......
...@@ -46,10 +46,7 @@ void main() { ...@@ -46,10 +46,7 @@ void main() {
); );
expect(client.updates.length, equals(2)); expect(client.updates.length, equals(2));
expect(client.updates[0].id, equals(0)); expect(client.updates[0].id, equals(0));
expect(client.updates[0].flags.canBeTapped, isFalse); expect(client.updates[0].actions, isEmpty);
expect(client.updates[0].flags.canBeLongPressed, isFalse);
expect(client.updates[0].flags.canBeScrolledHorizontally, isFalse);
expect(client.updates[0].flags.canBeScrolledVertically, isFalse);
expect(client.updates[0].flags.hasCheckedState, isFalse); expect(client.updates[0].flags.hasCheckedState, isFalse);
expect(client.updates[0].flags.isChecked, isFalse); expect(client.updates[0].flags.isChecked, isFalse);
expect(client.updates[0].strings.label, equals('')); expect(client.updates[0].strings.label, equals(''));
...@@ -60,10 +57,7 @@ void main() { ...@@ -60,10 +57,7 @@ void main() {
expect(client.updates[0].geometry.height, equals(600.0)); expect(client.updates[0].geometry.height, equals(600.0));
expect(client.updates[0].children.length, equals(2)); expect(client.updates[0].children.length, equals(2));
expect(client.updates[0].children[0].id, equals(1)); expect(client.updates[0].children[0].id, equals(1));
expect(client.updates[0].children[0].flags.canBeTapped, isFalse); expect(client.updates[0].children[0].actions, isEmpty);
expect(client.updates[0].children[0].flags.canBeLongPressed, isFalse);
expect(client.updates[0].children[0].flags.canBeScrolledHorizontally, isFalse);
expect(client.updates[0].children[0].flags.canBeScrolledVertically, isFalse);
expect(client.updates[0].children[0].flags.hasCheckedState, isTrue); expect(client.updates[0].children[0].flags.hasCheckedState, isTrue);
expect(client.updates[0].children[0].flags.isChecked, isTrue); expect(client.updates[0].children[0].flags.isChecked, isTrue);
expect(client.updates[0].children[0].strings.label, equals(label)); expect(client.updates[0].children[0].strings.label, equals(label));
...@@ -75,10 +69,7 @@ void main() { ...@@ -75,10 +69,7 @@ void main() {
expect(client.updates[0].children[0].children.length, equals(0)); expect(client.updates[0].children[0].children.length, equals(0));
// IDs 2 and 3 are used up by the nodes that get merged in // IDs 2 and 3 are used up by the nodes that get merged in
expect(client.updates[0].children[1].id, equals(4)); expect(client.updates[0].children[1].id, equals(4));
expect(client.updates[0].children[1].flags.canBeTapped, isFalse); expect(client.updates[0].children[1].actions, isEmpty);
expect(client.updates[0].children[1].flags.canBeLongPressed, isFalse);
expect(client.updates[0].children[1].flags.canBeScrolledHorizontally, isFalse);
expect(client.updates[0].children[1].flags.canBeScrolledVertically, isFalse);
expect(client.updates[0].children[1].flags.hasCheckedState, isTrue); expect(client.updates[0].children[1].flags.hasCheckedState, isTrue);
expect(client.updates[0].children[1].flags.isChecked, isTrue); expect(client.updates[0].children[1].flags.isChecked, isTrue);
expect(client.updates[0].children[1].strings.label, equals(label)); expect(client.updates[0].children[1].strings.label, equals(label));
...@@ -135,10 +126,7 @@ void main() { ...@@ -135,10 +126,7 @@ void main() {
} }
expect(a.id, equals(1)); expect(a.id, equals(1));
expect(a.flags.canBeTapped, isFalse); expect(a.actions, isEmpty);
expect(a.flags.canBeLongPressed, isFalse);
expect(a.flags.canBeScrolledHorizontally, isFalse);
expect(a.flags.canBeScrolledVertically, isFalse);
expect(a.flags.hasCheckedState, isTrue); expect(a.flags.hasCheckedState, isTrue);
expect(a.flags.isChecked, isTrue); expect(a.flags.isChecked, isTrue);
expect(a.strings.label, equals(label)); expect(a.strings.label, equals(label));
...@@ -150,10 +138,7 @@ void main() { ...@@ -150,10 +138,7 @@ void main() {
expect(a.children.length, equals(0)); expect(a.children.length, equals(0));
expect(b.id, equals(4)); expect(b.id, equals(4));
expect(b.flags.canBeTapped, isFalse); expect(b.actions, isEmpty);
expect(b.flags.canBeLongPressed, isFalse);
expect(b.flags.canBeScrolledHorizontally, isFalse);
expect(b.flags.canBeScrolledVertically, isFalse);
expect(b.flags.hasCheckedState, isTrue); expect(b.flags.hasCheckedState, isTrue);
expect(b.flags.isChecked, isTrue); expect(b.flags.isChecked, isTrue);
expect(b.strings.label, equals(label)); expect(b.strings.label, equals(label));
......
...@@ -34,10 +34,7 @@ void main() { ...@@ -34,10 +34,7 @@ void main() {
); );
expect(client.updates.length, equals(2)); expect(client.updates.length, equals(2));
expect(client.updates[0].id, equals(0)); expect(client.updates[0].id, equals(0));
expect(client.updates[0].flags.canBeTapped, isFalse); expect(client.updates[0].actions, isEmpty);
expect(client.updates[0].flags.canBeLongPressed, isFalse);
expect(client.updates[0].flags.canBeScrolledHorizontally, isFalse);
expect(client.updates[0].flags.canBeScrolledVertically, isFalse);
expect(client.updates[0].flags.hasCheckedState, isTrue); expect(client.updates[0].flags.hasCheckedState, isTrue);
expect(client.updates[0].flags.isChecked, isTrue); expect(client.updates[0].flags.isChecked, isTrue);
expect(client.updates[0].strings.label, equals('label')); expect(client.updates[0].strings.label, equals('label'));
...@@ -73,10 +70,7 @@ void main() { ...@@ -73,10 +70,7 @@ void main() {
); );
expect(client.updates.length, equals(2)); expect(client.updates.length, equals(2));
expect(client.updates[0].id, equals(0)); expect(client.updates[0].id, equals(0));
expect(client.updates[0].flags.canBeTapped, isFalse); expect(client.updates[0].actions, isEmpty);
expect(client.updates[0].flags.canBeLongPressed, isFalse);
expect(client.updates[0].flags.canBeScrolledHorizontally, isFalse);
expect(client.updates[0].flags.canBeScrolledVertically, isFalse);
expect(client.updates[0].flags.hasCheckedState, isTrue); expect(client.updates[0].flags.hasCheckedState, isTrue);
expect(client.updates[0].flags.isChecked, isTrue); expect(client.updates[0].flags.isChecked, isTrue);
expect(client.updates[0].strings.label, equals('label')); expect(client.updates[0].strings.label, equals('label'));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment