diff --git a/dashboard/lib/logic/task_grid_filter.dart b/dashboard/lib/logic/task_grid_filter.dart index 254bb4e4ea..f082e6291b 100644 --- a/dashboard/lib/logic/task_grid_filter.dart +++ b/dashboard/lib/logic/task_grid_filter.dart @@ -172,9 +172,12 @@ class TaskGridFilter extends FilterPropertySource { return false; } + final bool showAndroid = _allProperties['showAndroid']?.value ?? false; final LinkedHashMap orderedOSFilter = LinkedHashMap.of({ 'ios': _allProperties['showiOS']?.value ?? false, - 'android': _allProperties['showAndroid']?.value ?? false, + 'android': showAndroid, + 'mokey': showAndroid, + 'pixel_7pro': showAndroid, 'mac': _allProperties['showMac']?.value ?? false, 'windows': _allProperties['showWindows']?.value ?? false, 'linux': _allProperties['showLinux']?.value ?? false, diff --git a/dashboard/lib/main.dart b/dashboard/lib/main.dart index dbe466f963..0833f4e729 100644 --- a/dashboard/lib/main.dart +++ b/dashboard/lib/main.dart @@ -8,7 +8,6 @@ import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_crashlytics/firebase_crashlytics.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; import 'build_dashboard_page.dart'; diff --git a/dashboard/lib/widgets/task_icon.dart b/dashboard/lib/widgets/task_icon.dart index ecf64dda58..d8c9c313a0 100644 --- a/dashboard/lib/widgets/task_icon.dart +++ b/dashboard/lib/widgets/task_icon.dart @@ -51,6 +51,8 @@ class TaskIcon extends StatelessWidget { final String matchedName = qualifiedTask.task!.toLowerCase(); final bool isWebTest = matchedName.contains('_web') || matchedName.contains('web_'); final bool isToolTest = matchedName.contains('_tool') || matchedName.contains('tool_'); + final bool isAndroidTest = + matchedName.contains('_android') || matchedName.contains('_mokey') || matchedName.contains('_pixel_7pro'); if (matchedName.contains('_fuchsia')) { return Padding( @@ -68,7 +70,7 @@ class TaskIcon extends StatelessWidget { color: blendFilter, ), ); - } else if (matchedName.contains('_android')) { + } else if (isAndroidTest) { return Icon( Icons.android, color: blendFilter, diff --git a/dashboard/test/logic/task_grid_filter_test.dart b/dashboard/test/logic/task_grid_filter_test.dart index 36e52d549e..399fcd93de 100644 --- a/dashboard/test/logic/task_grid_filter_test.dart +++ b/dashboard/test/logic/task_grid_filter_test.dart @@ -232,12 +232,21 @@ void main() { expect(macIosBothTrueFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Mac_ios')), true); expect(macIosBothTrueFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Mac')), true); expect(androidLinuxFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Linux_android')), true); + expect(androidLinuxFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Linux_mokey')), true); + expect(androidLinuxFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Linux_pixel_7pro')), true); + expect(androidLinuxFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Linux pixel_test')), false); expect(androidLinuxFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Linux')), false); expect(linuxAndroidFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Linux_android')), false); + expect(linuxAndroidFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Linux_mokey')), false); + expect(linuxAndroidFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Linux_pixel_7pro')), false); expect(linuxAndroidFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Linux')), true); expect(linuxAndroidBothTrueFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Linux_android')), true); - expect(linuxAndroidBothTrueFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Linux_android')), true); + expect(linuxAndroidBothTrueFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Linux_mokey')), true); + expect( + linuxAndroidBothTrueFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Linux_pixel_7pro')), true); expect(androidLinuxFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Windows_android')), true); + expect(androidLinuxFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Windows_mokey')), true); + expect(androidLinuxFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Windows_pixel_7pro')), true); expect(androidFalseFilter.matchesTask(QualifiedTask.fromTask(Task()..builderName = 'Anything_android')), false); }); diff --git a/dashboard/test/widgets/task_grid_test.dart b/dashboard/test/widgets/task_grid_test.dart index 44ce0ce3de..5ab16491ef 100644 --- a/dashboard/test/widgets/task_grid_test.dart +++ b/dashboard/test/widgets/task_grid_test.dart @@ -878,5 +878,6 @@ Future expectTaskBoxColorWithMessage(WidgetTester tester, String message, expect(pixels!.lengthInBytes, (cellPixelArea * 4).round()); const double padding = 4.0; final int rgba = pixels.getUint32((((cellPixelSize * (cellSize + padding)) + cellSize + padding).ceil()) * 4); - expect((rgba >> 8) | (rgba << 24) & 0xFFFFFFFF, expectedColor.value); + final Color actualColor = Color((rgba >> 8) | (rgba << 24) & 0xFFFFFFFF); + expect(actualColor, isSameColorAs(expectedColor)); } diff --git a/dashboard/test/widgets/task_icon_test.dart b/dashboard/test/widgets/task_icon_test.dart index 019a634ecc..a04300c2fd 100644 --- a/dashboard/test/widgets/task_icon_test.dart +++ b/dashboard/test/widgets/task_icon_test.dart @@ -141,15 +141,23 @@ void main() { await tester.pumpWidget( const MaterialApp( home: Material( - child: TaskIcon( - qualifiedTask: QualifiedTask(stage: 'chromebot', task: 'Windows_android test', pool: 'luci.flutter.prod'), + child: Column( + children: [ + TaskIcon( + qualifiedTask: QualifiedTask(stage: 'chromebot', task: 'Windows_android test'), + ), + TaskIcon( + qualifiedTask: QualifiedTask(stage: 'chromebot', task: 'Windows_pixel_7pro test'), + ), + TaskIcon( + qualifiedTask: QualifiedTask(stage: 'chromebot', task: 'Windows_mokey test'), + ), + ], ), ), ), ); - - expect(tester.widget(find.byType(Icon)) as Icon, isInstanceOf()); - expect((tester.widget(find.byType(Icon)) as Icon).icon!.codePoint, const Icon(Icons.android).icon!.codePoint); + expect(find.byIcon(Icons.android), findsExactly(3)); }); testWidgets('TaskIcon shows the right icon for LUCI mac', (WidgetTester tester) async {