package com.github.masahirosuzuka.PhoneGapIntelliJPlugin.commandLine; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.Function; import org.jetbrains.annotations.NotNull; import java.util.List; import static com.github.masahirosuzuka.PhoneGapIntelliJPlugin.runner.ui.PhoneGapRunConfigurationEditor.PLATFORM_ANDROID; public class PhoneGapAndroidTargets extends PhoneGapTargets { public static final Function<String, String> PARSER_VIRTUAL_DEVICES = s -> { if (StringUtil.isEmpty(s)) return null; if (isAndroidExcludedStrings(s)) return null; return s.trim(); }; public static final Function<String, String> PARSER_DEVICES = s -> { if (StringUtil.isEmpty(s)) return null; if (isAndroidExcludedStrings(s)) return null; return s.split("\t")[0].trim(); }; public PhoneGapAndroidTargets(@NotNull Project project) { super(project); } @NotNull public static String getAndroidName() { return SystemInfo.isWindows ? "android" + ".bat" : "android"; } private static String getAdbName() { return SystemInfo.isWindows ? "adb" + ".exe" : "adb"; } private static boolean isAndroidExcludedStrings(String device) { //possible output: //* daemon not running. starting it now on port 5037 * //* daemon started successfully * //List of devices attached return device.startsWith("List of devices attached") || (device.startsWith("* ") && device.endsWith(" *")); } @NotNull @Override protected List<String> listDevicesNonCached() { return list(getAdbName(), PARSER_DEVICES, false, "devices"); } @NotNull @Override protected List<String> listVirtualDevicesNonCached() { return list(getAndroidName(), PARSER_VIRTUAL_DEVICES, false, "-v", "list", "avd", "-c"); } @NotNull @Override public String platform() { return PLATFORM_ANDROID; } }