Tweak the display name of emulators (#34785)

diff --git a/packages/flutter_tools/lib/src/android/android_emulator.dart b/packages/flutter_tools/lib/src/android/android_emulator.dart
index 4dc6723..b0f8ad4 100644
--- a/packages/flutter_tools/lib/src/android/android_emulator.dart
+++ b/packages/flutter_tools/lib/src/android/android_emulator.dart
@@ -32,16 +32,15 @@
 
   Map<String, String> _properties;
 
+  // Android Studio uses the ID with underscores replaced with spaces
+  // for the name if displayname is not set so we do the same.
   @override
-  String get name => _prop('hw.device.name');
+  String get name => _prop('avd.ini.displayname') ?? id.replaceAll('_', ' ').trim();
 
   @override
   String get manufacturer => _prop('hw.device.manufacturer');
 
   @override
-  String get label => _prop('avd.ini.displayname');
-
-  @override
   Category get category => Category.mobile;
 
   @override
diff --git a/packages/flutter_tools/lib/src/emulator.dart b/packages/flutter_tools/lib/src/emulator.dart
index a9b53a0..a80c86d 100644
--- a/packages/flutter_tools/lib/src/emulator.dart
+++ b/packages/flutter_tools/lib/src/emulator.dart
@@ -218,7 +218,6 @@
   final bool hasConfig;
   String get name;
   String get manufacturer;
-  String get label;
   Category get category;
   PlatformType get platformType;
 
@@ -250,7 +249,7 @@
         emulator.id ?? '',
         emulator.name ?? '',
         emulator.manufacturer ?? '',
-        emulator.label ?? '',
+        emulator.platformType?.toString() ?? '',
       ]);
     }
 
diff --git a/packages/flutter_tools/lib/src/ios/ios_emulators.dart b/packages/flutter_tools/lib/src/ios/ios_emulators.dart
index 422034b..785e58f 100644
--- a/packages/flutter_tools/lib/src/ios/ios_emulators.dart
+++ b/packages/flutter_tools/lib/src/ios/ios_emulators.dart
@@ -33,9 +33,6 @@
   String get manufacturer => 'Apple';
 
   @override
-  String get label => null;
-
-  @override
   Category get category => Category.mobile;
 
   @override
diff --git a/packages/flutter_tools/test/android/android_emulator_test.dart b/packages/flutter_tools/test/android/android_emulator_test.dart
index 7afdb1c..c82e9eb 100644
--- a/packages/flutter_tools/test/android/android_emulator_test.dart
+++ b/packages/flutter_tools/test/android/android_emulator_test.dart
@@ -23,25 +23,43 @@
       expect(emulator.id, emulatorID);
       expect(emulator.hasConfig, true);
     });
-    testUsingContext('stores expected metadata', () {
+    testUsingContext('reads expected metadata', () {
       const String emulatorID = '1234';
-      const String name = 'My Test Name';
       const String manufacturer = 'Me';
-      const String label = 'The best one';
+      const String displayName = 'The best one';
       final Map<String, String> properties = <String, String>{
-        'hw.device.name': name,
         'hw.device.manufacturer': manufacturer,
-        'avd.ini.displayname': label,
+        'avd.ini.displayname': displayName,
       };
       final AndroidEmulator emulator =
           AndroidEmulator(emulatorID, properties);
       expect(emulator.id, emulatorID);
-      expect(emulator.name, name);
+      expect(emulator.name, displayName);
       expect(emulator.manufacturer, manufacturer);
-      expect(emulator.label, label);
       expect(emulator.category, Category.mobile);
       expect(emulator.platformType, PlatformType.android);
     });
+    testUsingContext('prefers displayname for name', () {
+      const String emulatorID = '1234';
+      const String displayName = 'The best one';
+      final Map<String, String> properties = <String, String>{
+        'avd.ini.displayname': displayName,
+      };
+      final AndroidEmulator emulator =
+          AndroidEmulator(emulatorID, properties);
+      expect(emulator.name, displayName);
+    });
+    testUsingContext('uses cleaned up ID if no displayname is set', () {
+      // Android Studio uses the ID with underscores replaced with spaces
+      // for the name if displayname is not set so we do the same.
+      const String emulatorID = 'This_is_my_ID';
+      final Map<String, String> properties = <String, String>{
+        'avd.ini.notadisplayname': 'this is not a display name',
+      };
+      final AndroidEmulator emulator =
+          AndroidEmulator(emulatorID, properties);
+      expect(emulator.name, 'This is my ID');
+    });
     testUsingContext('parses ini files', () {
       const String iniFile = '''
         hw.device.name=My Test Name
diff --git a/packages/flutter_tools/test/emulator_test.dart b/packages/flutter_tools/test/emulator_test.dart
index 25c24f3..59f6390 100644
--- a/packages/flutter_tools/test/emulator_test.dart
+++ b/packages/flutter_tools/test/emulator_test.dart
@@ -46,11 +46,11 @@
 
     testUsingContext('getEmulatorsById', () async {
       final _MockEmulator emulator1 =
-          _MockEmulator('Nexus_5', 'Nexus 5', 'Google', '');
+          _MockEmulator('Nexus_5', 'Nexus 5', 'Google');
       final _MockEmulator emulator2 =
-          _MockEmulator('Nexus_5X_API_27_x86', 'Nexus 5X', 'Google', '');
+          _MockEmulator('Nexus_5X_API_27_x86', 'Nexus 5X', 'Google');
       final _MockEmulator emulator3 =
-          _MockEmulator('iOS Simulator', 'iOS Simulator', 'Apple', '');
+          _MockEmulator('iOS Simulator', 'iOS Simulator', 'Apple');
       final List<Emulator> emulators = <Emulator>[
         emulator1,
         emulator2,
@@ -160,7 +160,7 @@
 }
 
 class _MockEmulator extends Emulator {
-  _MockEmulator(String id, this.name, this.manufacturer, this.label)
+  _MockEmulator(String id, this.name, this.manufacturer)
     : super(id, true);
 
   @override
@@ -170,9 +170,6 @@
   final String manufacturer;
 
   @override
-  final String label;
-
-  @override
   Category get category => Category.mobile;
 
   @override