listAvds function
✅ Main Listing Function
Implementation
Future<void> listAvds(Map<String, String> cmd) async {
// Get AVD home directory
final avdHome = Platform.environment['ANDROID_AVD_HOME'] ??
p.join(Platform.environment['HOME']!, '.android', 'avd');
final avdDir = Directory(avdHome);
if (!await avdDir.exists()) {
print('❌ AVD directory not found at $avdHome');
return;
}
// List all AVD directories
final avdDirectories = avdDir.listSync().whereType<Directory>();
final avdData = <Avd>[];
// Fetch size for each AVD asynchronously and build Avd objects
for (final avd in avdDirectories) {
final name = p.basenameWithoutExtension(avd.path);
final size = await _getDirectorySize(avd);
final sizeStr = _formatSize(size);
avdData.add(Avd(name, size, sizeStr));
}
// Minimum AVDs check
if (avdData.isEmpty) {
print('No AVDs found.');
return;
}
// Extract command-line arguments
final sortBy = cmd['sort'] ?? 'name';
final minSizeStr = cmd['min-size'] ?? '0';
final nameStr = cmd['name'] ?? 'list';
// Skip size filtering if 'min-size' is '0'
if (minSizeStr != '0' && minSizeStr.isNotEmpty) {
try {
final minBytes = parseSize(minSizeStr);
avdData.removeWhere((avd) => avd.size <= minBytes);
final remainingCount = avdData.length;
if (remainingCount == 0) {
print(
'No AVDs found with size greater than ${minSizeStr.toUpperCase()}');
return;
} else {
print(
'Found $remainingCount AVD(s) with size greater than ${minSizeStr.toUpperCase()}:');
}
//sort list avds by name
if (nameStr == 'list') {
avdData.sort(
(a, b) => a.name.toLowerCase().compareTo(b.name.toLowerCase()));
} else if (nameStr == 'size') {
avdData.sort((a, b) => a.size.compareTo(b.size));
} else {
print('Invalid sort option: $nameStr. Defaulting to sorting by name.');
avdData.sort(
(a, b) => a.name.toLowerCase().compareTo(b.name.toLowerCase()));
}
} catch (e) {
print(
'❌ Invalid size format: $minSizeStr. Use formats like 500MB or 1GB.');
return;
}
}
// Sort AVDs if 'sort' argument is provided
if (sortBy == 'size') {
avdData.sort((a, b) => a.size.compareTo(b.size));
} else if (sortBy == 'name') {
avdData
.sort((a, b) => a.name.toLowerCase().compareTo(b.name.toLowerCase()));
}
// Loop and print the sorted AVD data
for (final avd in avdData) {
print('• ${avd.name} (AVD directory size: ${avd.sizeStr})');
}
}