From 0b49d81cb223f7917536e04fcca88449eb7f0685 Mon Sep 17 00:00:00 2001 From: Dan Rubel Date: Thu, 27 Oct 2016 09:07:21 +0100 Subject: [PATCH] flutter devices/doctor report Android (and iOS) version (#6545) * refactor device descriptions method - easier to add columns * show device SDK version --- .../lib/src/android/android_device.dart | 7 ++++ packages/flutter_tools/lib/src/device.dart | 36 +++++++++++++------ .../flutter_tools/lib/src/ios/devices.dart | 13 +++++-- .../flutter_tools/lib/src/ios/simulators.dart | 9 +++-- 4 files changed, 49 insertions(+), 16 deletions(-) diff --git a/packages/flutter_tools/lib/src/android/android_device.dart b/packages/flutter_tools/lib/src/android/android_device.dart index 2cff7b3ae45..02ed8b14010 100644 --- a/packages/flutter_tools/lib/src/android/android_device.dart +++ b/packages/flutter_tools/lib/src/android/android_device.dart @@ -115,6 +115,13 @@ class AndroidDevice extends Device { return _platform; } + @override + String get sdkNameAndVersion => 'Android $_sdkVersion (API $_apiVersion)'; + + String get _sdkVersion => _getProperty('ro.build.version.release'); + + String get _apiVersion => _getProperty('ro.build.version.sdk'); + _AdbLogReader _logReader; _AndroidDevicePortForwarder _portForwarder; diff --git a/packages/flutter_tools/lib/src/device.dart b/packages/flutter_tools/lib/src/device.dart index 6ca400a1f52..df9bcc3d365 100644 --- a/packages/flutter_tools/lib/src/device.dart +++ b/packages/flutter_tools/lib/src/device.dart @@ -163,6 +163,8 @@ abstract class Device { TargetPlatform get platform; + String get sdkNameAndVersion; + /// Get the log reader for this device. DeviceLogReader get logReader; @@ -239,24 +241,36 @@ abstract class Device { String toString() => name; static Iterable descriptions(List devices) { - int nameWidth = 0; - int idWidth = 0; + if (devices.isEmpty) + return []; + // Extract device information + List> table = >[]; for (Device device in devices) { - nameWidth = math.max(nameWidth, device.name.length); - idWidth = math.max(idWidth, device.id.length); - } - - return devices.map((Device device) { String supportIndicator = device.isSupported() ? '' : ' (unsupported)'; if (device.isLocalEmulator) { String type = device.platform == TargetPlatform.ios ? 'simulator' : 'emulator'; supportIndicator += ' ($type)'; } - return '${device.name.padRight(nameWidth)} • ' - '${device.id.padRight(idWidth)} • ' - '${getNameForTargetPlatform(device.platform)}$supportIndicator'; - }); + table.add([ + device.name, + device.id, + '${getNameForTargetPlatform(device.platform)}', + '${device.sdkNameAndVersion}$supportIndicator', + ]); + } + + // Calculate column widths + List indices = new List.generate(table[0].length - 1, (int i) => i); + List widths = indices.map((int i) => 0).toList(); + for (List row in table) { + widths = indices.map((int i) => math.max(widths[i], row[i].length)).toList(); + } + + // Join columns into lines of text + return table.map((List row) => + indices.map((int i) => row[i].padRight(widths[i])).join(' • ') + + ' • ${row.last}'); } static void printDevices(List devices) { diff --git a/packages/flutter_tools/lib/src/ios/devices.dart b/packages/flutter_tools/lib/src/ios/devices.dart index 003a65cef99..2fcdb312408 100644 --- a/packages/flutter_tools/lib/src/ios/devices.dart +++ b/packages/flutter_tools/lib/src/ios/devices.dart @@ -89,7 +89,7 @@ class IOSDevice extends Device { List devices = []; for (String id in _getAttachedDeviceIDs(mockIOS)) { - String name = _getDeviceName(id, mockIOS); + String name = IOSDevice._getDeviceInfo(id, 'DeviceName', mockIOS); devices.add(new IOSDevice(id, name: name)); } return devices; @@ -105,11 +105,11 @@ class IOSDevice extends Device { } } - static String _getDeviceName(String deviceID, [IOSDevice mockIOS]) { + static String _getDeviceInfo(String deviceID, String infoKey, [IOSDevice mockIOS]) { String informerPath = (mockIOS != null) ? mockIOS.informerPath : _checkForCommand('ideviceinfo'); - return runSync([informerPath, '-k', 'DeviceName', '-u', deviceID]).trim(); + return runSync([informerPath, '-k', infoKey, '-u', deviceID]).trim(); } static final Map _commandMap = {}; @@ -369,6 +369,13 @@ class IOSDevice extends Device { @override TargetPlatform get platform => TargetPlatform.ios; + @override + String get sdkNameAndVersion => 'iOS $_sdkVersion ($_buildVersion)'; + + String get _sdkVersion => _getDeviceInfo(id, 'ProductVersion'); + + String get _buildVersion => _getDeviceInfo(id, 'BuildVersion'); + @override DeviceLogReader get logReader { if (_logReader == null) diff --git a/packages/flutter_tools/lib/src/ios/simulators.dart b/packages/flutter_tools/lib/src/ios/simulators.dart index f6cfcaa18dd..4a863453125 100644 --- a/packages/flutter_tools/lib/src/ios/simulators.dart +++ b/packages/flutter_tools/lib/src/ios/simulators.dart @@ -46,7 +46,7 @@ class IOSSimulatorUtils { return []; return SimControl.instance.getConnectedDevices().map((SimDevice device) { - return new IOSSimulator(device.udid, name: device.name); + return new IOSSimulator(device.udid, name: device.name, category: device.category); }).toList(); } } @@ -302,11 +302,13 @@ class SimDevice { } class IOSSimulator extends Device { - IOSSimulator(String id, { this.name }) : super(id); + IOSSimulator(String id, { this.name, this.category }) : super(id); @override final String name; + final String category; + @override bool get isLocalEmulator => true; @@ -557,6 +559,9 @@ class IOSSimulator extends Device { @override TargetPlatform get platform => TargetPlatform.ios; + @override + String get sdkNameAndVersion => category; + @override DeviceLogReader get logReader { if (_logReader == null)