Unverified Commit dfe5b591 authored by Jonah Williams's avatar Jonah Williams Committed by GitHub

Increase time picker clock touch targets to 48 by 48 (#19936)

parent 58190083
...@@ -327,6 +327,7 @@ class _HourControl extends StatelessWidget { ...@@ -327,6 +327,7 @@ class _HourControl extends StatelessWidget {
child: new Semantics( child: new Semantics(
hint: localizations.timePickerHourModeAnnouncement, hint: localizations.timePickerHourModeAnnouncement,
value: formattedHour, value: formattedHour,
excludeSemantics: true,
increasedValue: formattedNextHour, increasedValue: formattedNextHour,
onIncrease: () { onIncrease: () {
fragmentContext.onTimeChange(nextHour); fragmentContext.onTimeChange(nextHour);
...@@ -335,10 +336,8 @@ class _HourControl extends StatelessWidget { ...@@ -335,10 +336,8 @@ class _HourControl extends StatelessWidget {
onDecrease: () { onDecrease: () {
fragmentContext.onTimeChange(previousHour); fragmentContext.onTimeChange(previousHour);
}, },
child: new ExcludeSemantics(
child: new Text(formattedHour, style: hourStyle), child: new Text(formattedHour, style: hourStyle),
), ),
),
); );
} }
} }
...@@ -378,12 +377,10 @@ class _MinuteControl extends StatelessWidget { ...@@ -378,12 +377,10 @@ class _MinuteControl extends StatelessWidget {
? fragmentContext.activeStyle ? fragmentContext.activeStyle
: fragmentContext.inactiveStyle; : fragmentContext.inactiveStyle;
final String formattedMinute = localizations.formatMinute(fragmentContext.selectedTime); final String formattedMinute = localizations.formatMinute(fragmentContext.selectedTime);
final TimeOfDay nextMinute = fragmentContext.selectedTime.replacing( final TimeOfDay nextMinute = fragmentContext.selectedTime.replacing(
minute: (fragmentContext.selectedTime.minute + 1) % TimeOfDay.minutesPerHour, minute: (fragmentContext.selectedTime.minute + 1) % TimeOfDay.minutesPerHour,
); );
final String formattedNextMinute = localizations.formatMinute(nextMinute); final String formattedNextMinute = localizations.formatMinute(nextMinute);
final TimeOfDay previousMinute = fragmentContext.selectedTime.replacing( final TimeOfDay previousMinute = fragmentContext.selectedTime.replacing(
minute: (fragmentContext.selectedTime.minute - 1) % TimeOfDay.minutesPerHour, minute: (fragmentContext.selectedTime.minute - 1) % TimeOfDay.minutesPerHour,
); );
...@@ -392,6 +389,7 @@ class _MinuteControl extends StatelessWidget { ...@@ -392,6 +389,7 @@ class _MinuteControl extends StatelessWidget {
return new GestureDetector( return new GestureDetector(
onTap: Feedback.wrapForTap(() => fragmentContext.onModeChange(_TimePickerMode.minute), context), onTap: Feedback.wrapForTap(() => fragmentContext.onModeChange(_TimePickerMode.minute), context),
child: new Semantics( child: new Semantics(
excludeSemantics: true,
hint: localizations.timePickerMinuteModeAnnouncement, hint: localizations.timePickerMinuteModeAnnouncement,
value: formattedMinute, value: formattedMinute,
increasedValue: formattedNextMinute, increasedValue: formattedNextMinute,
...@@ -402,10 +400,8 @@ class _MinuteControl extends StatelessWidget { ...@@ -402,10 +400,8 @@ class _MinuteControl extends StatelessWidget {
onDecrease: () { onDecrease: () {
fragmentContext.onTimeChange(previousMinute); fragmentContext.onTimeChange(previousMinute);
}, },
child: new ExcludeSemantics(
child: new Text(formattedMinute, style: minuteStyle), child: new Text(formattedMinute, style: minuteStyle),
), ),
),
); );
} }
} }
...@@ -935,21 +931,24 @@ class _DialPainter extends CustomPainter { ...@@ -935,21 +931,24 @@ class _DialPainter extends CustomPainter {
if (labels == null) if (labels == null)
return; return;
final double labelThetaIncrement = -_kTwoPi / labels.length; final double labelThetaIncrement = -_kTwoPi / labels.length;
final double ordinalOffset = ring == _DialRing.inner ? 12.0 : 0.0;
double labelTheta = math.pi / 2.0; double labelTheta = math.pi / 2.0;
for (_TappableLabel label in labels) { for (int i = 0; i < labels.length; i++) {
final _TappableLabel label = labels[i];
final TextPainter labelPainter = label.painter; final TextPainter labelPainter = label.painter;
final double width = labelPainter.width * _semanticNodeSizeScale; final double width = labelPainter.width * _semanticNodeSizeScale;
final double height = labelPainter.height * _semanticNodeSizeScale; final double height = labelPainter.height * _semanticNodeSizeScale;
final Offset nodeOffset = getOffsetForTheta(labelTheta, ring) + new Offset(-width / 2.0, -height / 2.0); final Offset nodeOffset = getOffsetForTheta(labelTheta, ring) + new Offset(-width / 2.0, -height / 2.0);
final CustomPainterSemantics node = new CustomPainterSemantics( final CustomPainterSemantics node = new CustomPainterSemantics(
rect: new Rect.fromLTRB( rect: new Rect.fromLTRB(
nodeOffset.dx, nodeOffset.dx - 24.0 + width / 2,
nodeOffset.dy, nodeOffset.dy - 24.0 + height / 2,
nodeOffset.dx + width, nodeOffset.dx + 24.0 + width / 2,
nodeOffset.dy + height nodeOffset.dy + 24.0 + height / 2,
), ),
properties: new SemanticsProperties( properties: new SemanticsProperties(
sortKey: new OrdinalSortKey(i.toDouble() + ordinalOffset),
selected: label.value == selectedValue, selected: label.value == selectedValue,
value: labelPainter.text.text, value: labelPainter.text.text,
textDirection: textDirection, textDirection: textDirection,
...@@ -960,7 +959,6 @@ class _DialPainter extends CustomPainter { ...@@ -960,7 +959,6 @@ class _DialPainter extends CustomPainter {
const SemanticsTag('dial-label'), const SemanticsTag('dial-label'),
]), ]),
); );
nodes.add(node); nodes.add(node);
labelTheta += labelThetaIncrement; labelTheta += labelThetaIncrement;
} }
......
...@@ -809,7 +809,9 @@ class RenderCustomPaint extends RenderProxyBox { ...@@ -809,7 +809,9 @@ class RenderCustomPaint extends RenderProxyBox {
final SemanticsProperties properties = newSemantics.properties; final SemanticsProperties properties = newSemantics.properties;
final SemanticsConfiguration config = new SemanticsConfiguration(); final SemanticsConfiguration config = new SemanticsConfiguration();
if (properties.sortKey != null) {
config.sortKey = properties.sortKey;
}
if (properties.checked != null) { if (properties.checked != null) {
config.isChecked = properties.checked; config.isChecked = properties.checked;
} }
......
...@@ -326,30 +326,30 @@ void _tests() { ...@@ -326,30 +326,30 @@ void _tests() {
final CustomPainter dialPainter = dialPaint.painter; final CustomPainter dialPainter = dialPaint.painter;
final _CustomPainterSemanticsTester painterTester = new _CustomPainterSemanticsTester(tester, dialPainter, semantics); final _CustomPainterSemanticsTester painterTester = new _CustomPainterSemanticsTester(tester, dialPainter, semantics);
painterTester.addLabel('00', 86.0, 12.0, 134.0, 36.0); painterTester.addLabel('00', 86.0, 0.0, 134.0, 48.0);
painterTester.addLabel('13', 129.0, 23.5, 177.0, 47.5); painterTester.addLabel('13', 129.0, 11.5, 177.0, 59.5);
painterTester.addLabel('14', 160.5, 55.0, 208.5, 79.0); painterTester.addLabel('14', 160.5, 43.0, 208.5, 91.0);
painterTester.addLabel('15', 172.0, 98.0, 220.0, 122.0); painterTester.addLabel('15', 172.0, 86.0, 220.0, 134.0);
painterTester.addLabel('16', 160.5, 141.0, 208.5, 165.0); painterTester.addLabel('16', 160.5, 129.0, 208.5, 177.0);
painterTester.addLabel('17', 129.0, 172.5, 177.0, 196.5); painterTester.addLabel('17', 129.0, 160.5, 177.0, 208.5);
painterTester.addLabel('18', 86.0, 184.0, 134.0, 208.0); painterTester.addLabel('18', 86.0, 172.0, 134.0, 220.0);
painterTester.addLabel('19', 43.0, 172.5, 91.0, 196.5); painterTester.addLabel('19', 43.0, 160.5, 91.0, 208.5);
painterTester.addLabel('20', 11.5, 141.0, 59.5, 165.0); painterTester.addLabel('20', 11.5, 129.0, 59.5, 177.0);
painterTester.addLabel('21', 0.0, 98.0, 48.0, 122.0); painterTester.addLabel('21', 0.0, 86.0, 48.0, 134.0);
painterTester.addLabel('22', 11.5, 55.0, 59.5, 79.0); painterTester.addLabel('22', 11.5, 43.0, 59.5, 91.0);
painterTester.addLabel('23', 43.0, 23.5, 91.0, 47.5); painterTester.addLabel('23', 43.0, 11.5, 91.0, 59.5);
painterTester.addLabel('12', 86.0, 48.0, 134.0, 72.0); painterTester.addLabel('12', 86.0, 36.0, 134.0, 84.0);
painterTester.addLabel('01', 111.0, 54.7, 159.0, 78.7); painterTester.addLabel('01', 111.0, 42.7, 159.0, 90.7);
painterTester.addLabel('02', 129.3, 73.0, 177.3, 97.0); painterTester.addLabel('02', 129.3, 61.0, 177.3, 109.0);
painterTester.addLabel('03', 136.0, 98.0, 184.0, 122.0); painterTester.addLabel('03', 136.0, 86.0, 184.0, 134.0);
painterTester.addLabel('04', 129.3, 123.0, 177.3, 147.0); painterTester.addLabel('04', 129.3, 111.0, 177.3, 159.0);
painterTester.addLabel('05', 111.0, 141.3, 159.0, 165.3); painterTester.addLabel('05', 111.0, 129.3, 159.0, 177.3);
painterTester.addLabel('06', 86.0, 148.0, 134.0, 172.0); painterTester.addLabel('06', 86.0, 136.0, 134.0, 184.0);
painterTester.addLabel('07', 61.0, 141.3, 109.0, 165.3); painterTester.addLabel('07', 61.0, 129.3, 109.0, 177.3);
painterTester.addLabel('08', 42.7, 123.0, 90.7, 147.0); painterTester.addLabel('08', 42.7, 111.0, 90.7, 159.0);
painterTester.addLabel('09', 36.0, 98.0, 84.0, 122.0); painterTester.addLabel('09', 36.0, 86.0, 84.0, 134.0);
painterTester.addLabel('10', 42.7, 73.0, 90.7, 97.0); painterTester.addLabel('10', 42.7, 61.0, 90.7, 109.0);
painterTester.addLabel('11', 61.0, 54.7, 109.0, 78.7); painterTester.addLabel('11', 61.0, 42.7, 109.0, 90.7);
painterTester.assertExpectations(); painterTester.assertExpectations();
semantics.dispose(); semantics.dispose();
...@@ -365,18 +365,18 @@ void _tests() { ...@@ -365,18 +365,18 @@ void _tests() {
final CustomPainter dialPainter = dialPaint.painter; final CustomPainter dialPainter = dialPaint.painter;
final _CustomPainterSemanticsTester painterTester = new _CustomPainterSemanticsTester(tester, dialPainter, semantics); final _CustomPainterSemanticsTester painterTester = new _CustomPainterSemanticsTester(tester, dialPainter, semantics);
painterTester.addLabel('00', 86.0, 12.0, 134.0, 36.0); painterTester.addLabel('00', 86.0, 0.0, 134.0, 48.0);
painterTester.addLabel('05', 129.0, 23.5, 177.0, 47.5); painterTester.addLabel('05', 129.0, 11.5, 177.0, 59.5);
painterTester.addLabel('10', 160.5, 55.0, 208.5, 79.0); painterTester.addLabel('10', 160.5, 43.0, 208.5, 91.0);
painterTester.addLabel('15', 172.0, 98.0, 220.0, 122.0); painterTester.addLabel('15', 172.0, 86.0, 220.0, 134.0);
painterTester.addLabel('20', 160.5, 141.0, 208.5, 165.0); painterTester.addLabel('20', 160.5, 129.0, 208.5, 177.0);
painterTester.addLabel('25', 129.0, 172.5, 177.0, 196.5); painterTester.addLabel('25', 129.0, 160.5, 177.0, 208.5);
painterTester.addLabel('30', 86.0, 184.0, 134.0, 208.0); painterTester.addLabel('30', 86.0, 172.0, 134.0, 220.0);
painterTester.addLabel('35', 43.0, 172.5, 91.0, 196.5); painterTester.addLabel('35', 43.0, 160.5, 91.0, 208.5);
painterTester.addLabel('40', 11.5, 141.0, 59.5, 165.0); painterTester.addLabel('40', 11.5, 129.0, 59.5, 177.0);
painterTester.addLabel('45', 0.0, 98.0, 48.0, 122.0); painterTester.addLabel('45', 0.0, 86.0, 48.0, 134.0);
painterTester.addLabel('50', 11.5, 55.0, 59.5, 79.0); painterTester.addLabel('50', 11.5, 43.0, 59.5, 91.0);
painterTester.addLabel('55', 43.0, 23.5, 91.0, 47.5); painterTester.addLabel('55', 43.0, 11.5, 91.0, 59.5);
painterTester.assertExpectations(); painterTester.assertExpectations();
semantics.dispose(); semantics.dispose();
......
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