Add category/platformType to emulators (#34721)

diff --git a/packages/flutter_tools/doc/daemon.md b/packages/flutter_tools/doc/daemon.md
index ac9d9c4..4658a6e 100644
--- a/packages/flutter_tools/doc/daemon.md
+++ b/packages/flutter_tools/doc/daemon.md
@@ -199,7 +199,7 @@
 
 #### emulator.getEmulators
 
-Return a list of all available emulators. The `params` field will be a List; each item is a map with the fields `id` and `name`.
+Return a list of all available emulators. The `params` field will be a List; each item is a map with the fields `id`, `name`, `category` and `platformType`. `category` and `platformType` values match the values described in `device.getDevices`.
 
 #### emulator.launch
 
@@ -258,7 +258,8 @@
 
 ## Changelog
 
-- 0.5.1: Added `platformType`, `ephemeral`, and `category` field to device.
+- 0.5.2: Added `platformType` and `category` fields to emulator.
+- 0.5.1: Added `platformType`, `ephemeral`, and `category` fields to device.
 - 0.5.0: Added `daemon.getSupportedPlatforms` command
 - 0.4.2: Added `app.detach` command
 - 0.4.1: Added `flutter attach --machine`
diff --git a/packages/flutter_tools/lib/src/android/android_emulator.dart b/packages/flutter_tools/lib/src/android/android_emulator.dart
index ea54133..4dc6723 100644
--- a/packages/flutter_tools/lib/src/android/android_emulator.dart
+++ b/packages/flutter_tools/lib/src/android/android_emulator.dart
@@ -11,6 +11,7 @@
 import '../base/file_system.dart';
 import '../base/io.dart';
 import '../base/process_manager.dart';
+import '../device.dart';
 import '../emulator.dart';
 import 'android_sdk.dart';
 
@@ -40,6 +41,12 @@
   @override
   String get label => _prop('avd.ini.displayname');
 
+  @override
+  Category get category => Category.mobile;
+
+  @override
+  PlatformType get platformType => PlatformType.android;
+
   String _prop(String name) => _properties != null ? _properties[name] : null;
 
   @override
diff --git a/packages/flutter_tools/lib/src/commands/daemon.dart b/packages/flutter_tools/lib/src/commands/daemon.dart
index 708bddf..9fc2d83 100644
--- a/packages/flutter_tools/lib/src/commands/daemon.dart
+++ b/packages/flutter_tools/lib/src/commands/daemon.dart
@@ -26,7 +26,7 @@
 import '../runner/flutter_command.dart';
 import '../vmservice.dart';
 
-const String protocolVersion = '0.5.1';
+const String protocolVersion = '0.5.2';
 
 /// A server process command. This command will start up a long-lived server.
 /// It reads JSON-RPC based commands from stdin, executes them, and returns
@@ -783,6 +783,8 @@
   return <String, dynamic>{
     'id': emulator.id,
     'name': emulator.name,
+    'category': emulator.category?.toString(),
+    'platformType': emulator.platformType?.toString(),
   };
 }
 
diff --git a/packages/flutter_tools/lib/src/emulator.dart b/packages/flutter_tools/lib/src/emulator.dart
index 96f20f8..a9b53a0 100644
--- a/packages/flutter_tools/lib/src/emulator.dart
+++ b/packages/flutter_tools/lib/src/emulator.dart
@@ -10,6 +10,7 @@
 import 'base/context.dart';
 import 'base/io.dart' show ProcessResult;
 import 'base/process_manager.dart';
+import 'device.dart';
 import 'globals.dart';
 import 'ios/ios_emulators.dart';
 
@@ -218,6 +219,8 @@
   String get name;
   String get manufacturer;
   String get label;
+  Category get category;
+  PlatformType get platformType;
 
   @override
   int get hashCode => id.hashCode;
diff --git a/packages/flutter_tools/lib/src/ios/ios_emulators.dart b/packages/flutter_tools/lib/src/ios/ios_emulators.dart
index df34c23..422034b 100644
--- a/packages/flutter_tools/lib/src/ios/ios_emulators.dart
+++ b/packages/flutter_tools/lib/src/ios/ios_emulators.dart
@@ -6,6 +6,7 @@
 
 import '../base/platform.dart';
 import '../base/process.dart';
+import '../device.dart';
 import '../emulator.dart';
 import '../globals.dart';
 import '../macos/xcode.dart';
@@ -35,6 +36,12 @@
   String get label => null;
 
   @override
+  Category get category => Category.mobile;
+
+  @override
+  PlatformType get platformType => PlatformType.ios;
+
+  @override
   Future<void> launch() async {
     Future<bool> launchSimulator(List<String> additionalArgs) async {
       final List<String> args = <String>['open']
diff --git a/packages/flutter_tools/test/android/android_emulator_test.dart b/packages/flutter_tools/test/android/android_emulator_test.dart
index 0e2a3a0..7afdb1c 100644
--- a/packages/flutter_tools/test/android/android_emulator_test.dart
+++ b/packages/flutter_tools/test/android/android_emulator_test.dart
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 import 'package:flutter_tools/src/android/android_emulator.dart';
+import 'package:flutter_tools/src/device.dart';
 
 import '../src/common.dart';
 import '../src/context.dart';
@@ -38,6 +39,8 @@
       expect(emulator.name, name);
       expect(emulator.manufacturer, manufacturer);
       expect(emulator.label, label);
+      expect(emulator.category, Category.mobile);
+      expect(emulator.platformType, PlatformType.android);
     });
     testUsingContext('parses ini files', () {
       const String iniFile = '''
diff --git a/packages/flutter_tools/test/emulator_test.dart b/packages/flutter_tools/test/emulator_test.dart
index b0292bc..25c24f3 100644
--- a/packages/flutter_tools/test/emulator_test.dart
+++ b/packages/flutter_tools/test/emulator_test.dart
@@ -9,6 +9,7 @@
 import 'package:flutter_tools/src/android/android_sdk.dart';
 import 'package:flutter_tools/src/base/config.dart';
 import 'package:flutter_tools/src/base/io.dart';
+import 'package:flutter_tools/src/device.dart';
 import 'package:flutter_tools/src/emulator.dart';
 import 'package:flutter_tools/src/ios/ios_emulators.dart';
 import 'package:flutter_tools/src/macos/xcode.dart';
@@ -172,6 +173,12 @@
   final String label;
 
   @override
+  Category get category => Category.mobile;
+
+  @override
+  PlatformType get platformType => PlatformType.android;
+
+  @override
   Future<void> launch() {
     throw UnimplementedError('Not implemented in Mock');
   }