summaryrefslogtreecommitdiff
path: root/src/plugins/android/src/com/motorola/studio/android/adt/SdkUtils.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/android/src/com/motorola/studio/android/adt/SdkUtils.java')
-rw-r--r--src/plugins/android/src/com/motorola/studio/android/adt/SdkUtils.java1006
1 files changed, 1006 insertions, 0 deletions
diff --git a/src/plugins/android/src/com/motorola/studio/android/adt/SdkUtils.java b/src/plugins/android/src/com/motorola/studio/android/adt/SdkUtils.java
new file mode 100644
index 0000000..14836f3
--- /dev/null
+++ b/src/plugins/android/src/com/motorola/studio/android/adt/SdkUtils.java
@@ -0,0 +1,1006 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.motorola.studio.android.adt;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.PlatformUI;
+
+import com.android.ide.eclipse.adt.AdtPlugin;
+import com.android.ide.eclipse.adt.internal.sdk.AndroidTargetData;
+import com.android.ide.eclipse.adt.internal.sdk.Sdk;
+import com.android.sdklib.AndroidVersion;
+import com.android.sdklib.IAndroidTarget;
+import com.android.sdklib.ISdkLog;
+import com.android.sdklib.NullSdkLog;
+import com.android.sdklib.SdkConstants;
+import com.android.sdklib.internal.avd.AvdInfo;
+import com.android.sdklib.internal.avd.AvdManager;
+import com.android.sdkuilib.internal.widgets.MessageBoxLog;
+import com.motorola.studio.android.AndroidPlugin;
+import com.motorola.studio.android.common.IAndroidConstants;
+import com.motorola.studio.android.common.exception.AndroidException;
+import com.motorola.studio.android.common.log.StudioLogger;
+import com.motorola.studio.android.common.utilities.FileUtil;
+import com.motorola.studio.android.i18n.AndroidNLS;
+import com.motorola.studio.android.manifest.AndroidProjectManifestFile;
+import com.motorola.studio.android.model.manifest.AndroidManifestFile;
+import com.motorola.studio.android.model.manifest.dom.AndroidManifestNode;
+import com.motorola.studio.android.model.manifest.dom.UsesSDKNode;
+
+/**
+ * DESCRIPTION: This class provides utility methods related to
+ * the Android SDK.
+ * <br>
+ * USAGE: See public methods
+ */
+
+public class SdkUtils
+{
+ public static final int API_LEVEL_FOR_PLATFORM_VERSION_3_0_0 = 11;
+
+ public static final String VM_CONFIG_FILENAME = "config.ini"; //$NON-NLS-1$
+
+ public static final String USERIMAGE_FILENAME = "userdata-qemu.img"; //$NON-NLS-1$
+
+ public static final String[] STATEDATA_FILENAMES =
+ {
+ "cache.img", "userdata.img", "emulator-user.ini" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ };
+
+ public static final String EMU_CONFIG_SKIN_NAME_PROPERTY = "skin.name"; //$NON-NLS-1$
+
+ /**
+ * Gets the current SDK object
+ */
+ public static Sdk getCurrentSdk()
+ {
+ return Sdk.getCurrent();
+ }
+
+ /**
+ * Gets the directory where the configured SDK is located
+ */
+ public static String getSdkPath()
+ {
+ String sdkDir = null;
+ Sdk sdk = getCurrentSdk();
+ if (sdk != null)
+ {
+ sdkDir = sdk.getSdkLocation();
+ }
+ return sdkDir;
+ }
+
+ /**
+ * Gets the path to the "tools" folder of the SDK
+ * @return
+ */
+ public static String getSdkToolsPath()
+ {
+ return AdtPlugin.getOsSdkToolsFolder();
+ }
+
+ public static IAndroidTarget getTargetByAPILevel(Integer apiLevel)
+ {
+ IAndroidTarget returnTarget = null;
+
+ for (IAndroidTarget target : getAllTargets())
+ {
+ if (target.getVersion().getApiLevel() == apiLevel)
+ {
+ returnTarget = target;
+ }
+ }
+ return returnTarget;
+ }
+
+ /**
+ * Get the AAPT application path from an android target
+ * if null is passed, try to get some aapt
+ * @param target
+ * @return
+ */
+ public static String getTargetAAPTPath(IAndroidTarget target)
+ {
+ IAndroidTarget realTarget = null;
+ if (target == null)
+ {
+ StudioLogger.warn(SdkUtils.class, "Trying to find a suitable aapt application to use"); //$NON-NLS-1$
+ IAndroidTarget[] allTargets = Sdk.getCurrent().getTargets();
+ if (allTargets.length > 0)
+ {
+ realTarget = allTargets[0];
+ }
+ }
+ else
+ {
+ realTarget = target;
+ }
+
+ while ((realTarget != null) && !realTarget.isPlatform())
+ {
+ realTarget = realTarget.getParent();
+ }
+
+ if (realTarget == null)
+ {
+ StudioLogger.warn(SdkUtils.class,
+ "No aapt executable found: do you have an Android platform installed?"); //$NON-NLS-1$
+ }
+
+ return realTarget != null ? realTarget.getPath(IAndroidTarget.AAPT) : null;
+ }
+
+ /**
+ * Gets the path to the "adb" executable of the SDK
+ * @return
+ */
+ public static String getAdbPath()
+ {
+ return AdtPlugin.getOsAbsoluteAdb();
+ }
+
+ /**
+ * Reloads the recognized AVD list
+ */
+ public static void reloadAvds()
+ {
+
+ try
+ {
+ getVmManager().reloadAvds(NullSdkLog.getLogger());
+ }
+ catch (Exception e)
+ {
+ StudioLogger.error(SdkUtils.class, "Error while reloading AVDs"); //$NON-NLS-1$
+ }
+
+ }
+
+ /**
+ * Gets the VmManager object
+ */
+ public static AvdManager getVmManager()
+ {
+ AvdManager vmManager = null;
+ Sdk sdk = getCurrentSdk();
+ if (sdk != null)
+ {
+ vmManager = sdk.getAvdManager();
+ }
+
+ return vmManager;
+ }
+
+ /**
+ * Gets all available Targets
+ */
+ public static IAndroidTarget[] getAllTargets()
+ {
+ IAndroidTarget[] allTargets = null;
+ Sdk sdk = getCurrentSdk();
+ if (sdk != null)
+ {
+ allTargets = sdk.getTargets();
+ }
+ return allTargets;
+ }
+
+ /**
+ * Gets a Target by name
+ *
+ * @param name the target name
+ */
+ public static IAndroidTarget getTargetByName(String name)
+ {
+ IAndroidTarget ret = null;
+
+ if ((name != null) && (name.length() > 0))
+ {
+ IAndroidTarget[] allTargets = getAllTargets();
+
+ for (int i = 0; i < allTargets.length; i++)
+ {
+ if (name.equals(allTargets[i].getName()))
+ {
+ ret = allTargets[i];
+ break;
+ }
+ }
+ }
+
+ return ret;
+ }
+
+ /**
+ * Gets all VMs
+ */
+ public static AvdInfo[] getAllVms()
+ {
+ AvdInfo[] allVmInfo = null;
+ AvdManager vmManager = getVmManager();
+ if (vmManager != null)
+ {
+ allVmInfo = vmManager.getAllAvds();
+ }
+ return allVmInfo;
+ }
+
+ /**
+ * Gets all valid VMs
+ */
+ public static AvdInfo[] getAllValidVms()
+ {
+ AvdInfo[] validVmInfo = null;
+ AvdManager vmManager = getVmManager();
+ if (vmManager != null)
+ {
+ validVmInfo = vmManager.getValidAvds();
+ }
+ return validVmInfo;
+ }
+
+ /**
+ * Gets the name of all VMs that are recognized by the configured SDK.
+ */
+ public static Collection<String> getAllVmNames()
+ {
+ Collection<String> vmNames = new LinkedList<String>();
+ for (AvdInfo vm : getAllVms())
+ {
+ vmNames.add(vm.getName());
+ }
+ return vmNames;
+ }
+
+ /**
+ * Gets the name of all VMs that are recognized by the configured SDK.
+ */
+ public static Collection<String> getAllValidVmNames()
+ {
+ Collection<String> vmNames = new LinkedList<String>();
+ AvdInfo[] allAvds = getAllValidVms();
+ if (allAvds != null)
+ {
+ for (AvdInfo vm : allAvds)
+ {
+ vmNames.add(vm.getName());
+ }
+ }
+
+ return vmNames;
+ }
+
+ /**
+ * Gets a skin name
+ *
+ * @param vmInfo the VM to get the skin
+ */
+ public static String getSkin(AvdInfo vmInfo)
+ {
+ String skin = ""; //$NON-NLS-1$
+ File configFile = vmInfo.getConfigFile();
+ Properties p = new Properties();
+ InputStream configFileStream = null;
+ try
+ {
+ configFileStream = new FileInputStream(configFile);
+ p.load(configFileStream);
+ skin = p.getProperty(EMU_CONFIG_SKIN_NAME_PROPERTY);
+ }
+ catch (FileNotFoundException e)
+ {
+ StudioLogger
+ .error(SdkUtils.class,
+ "Error getting VM skin definition. Could not find file " + configFile.getAbsolutePath(), e); //$NON-NLS-1$
+ }
+ catch (IOException e)
+ {
+ StudioLogger
+ .error(SdkUtils.class,
+ "Error getting VM skin definition. Could not access file " + configFile.getAbsolutePath(), e); //$NON-NLS-1$
+ }
+ finally
+ {
+ if (configFileStream != null)
+ {
+ try
+ {
+ configFileStream.close();
+ }
+ catch (IOException e)
+ {
+ //nothing to do
+ }
+ }
+ }
+
+ return skin;
+ }
+
+ /**
+ * Gets a VM by name.
+ *
+ * @param vmName The VM name
+ */
+ public static AvdInfo getValidVm(String vmName)
+ {
+ AvdInfo vmInfo = null;
+ AvdManager vmManager = getVmManager();
+ if (vmManager != null)
+ {
+ vmInfo = vmManager.getAvd(vmName, true);
+ }
+ return vmInfo;
+ }
+
+ /**
+ * Gets a VM by name.
+ *
+ * @param vmName The VM name
+ */
+ public static AvdInfo getVm(String vmName)
+ {
+ AvdInfo vmInfo = null;
+ AvdManager vmManager = getVmManager();
+ if (vmManager != null)
+ {
+ vmInfo = vmManager.getAvd(vmName, false);
+ }
+ return vmInfo;
+ }
+
+ /**
+ * Creates a new VM instance.
+ *
+ * @param folder Folder where the VM files will be stored
+ * @param name VM Name
+ * @param target VM Target represented by the IAndroidTarget object
+ * @param skinName VM Skin name from the VM Target
+ *
+ * @throws CoreException
+ */
+ public static AvdInfo createVm(String folder, String name, IAndroidTarget target,
+ String abiType, String skinName, String useSnapshot, String sdCard)
+ throws CoreException
+
+ {
+ AvdInfo vmInfo;
+ AvdManager vmManager = SdkUtils.getVmManager();
+
+ // get the abi type
+ if (abiType == null)
+ {
+ abiType = SdkConstants.ABI_ARMEABI;
+ }
+
+ /*
+ * public VmInfo createVm(String parentFolder, String name, IAndroidTarget target,
+ * String skinName, String sdcard, Map hardwareConfig)
+ */
+ vmInfo =
+ vmManager.createAvd(new File(folder), name, target, abiType, skinName, sdCard,
+ null, Boolean.parseBoolean(useSnapshot), true, false,
+ NullSdkLog.getLogger());
+
+ if (vmInfo == null)
+ {
+ String errMsg = NLS.bind(AndroidNLS.EXC_SdkUtils_CannotCreateTheVMInstance, name);
+
+ IStatus status = new Status(IStatus.ERROR, AdtPlugin.PLUGIN_ID, errMsg);
+ throw new CoreException(status);
+ }
+
+ return vmInfo;
+ }
+
+ /**
+ * Deletes a VM instance.
+ *
+ * @param name VM Name
+ */
+ public static void deleteVm(String name)
+ {
+
+ AvdManager vmManager = SdkUtils.getVmManager();
+ AvdInfo avdToDelete = vmManager != null ? vmManager.getAvd(name, false) : null;
+ if (avdToDelete != null)
+ {
+ try
+ {
+ if ((avdToDelete.getIniFile() != null) && avdToDelete.getIniFile().exists())
+ {
+ avdToDelete.getIniFile().delete();
+ }
+ String path = avdToDelete.getDataFolderPath();
+ if (path != null)
+ {
+ File avdDir = new File(path);
+ if (avdDir.exists())
+ {
+ FileUtil.deleteDirRecursively(avdDir);
+ }
+ }
+ vmManager.removeAvd(avdToDelete);
+
+ }
+ catch (Exception e)
+ {
+ StudioLogger.error("Could not delete AVD: " + e.getMessage()); //$NON-NLS-1$
+ }
+ }
+
+ }
+
+ /**
+ * Get the reference to the File that points to the filesystem location of the directory
+ * where the user data files of the VM with the given name are stored.
+ * @param vmName name of the VM whose userdata directory is to be retrieved.
+ * @return the File object that references the filesystem location of the directory where
+ * the userdata files of the given VM will be stored. Returns a null reference if SDK is not configured
+ * or if there is no VM with the given name.
+ */
+ public static File getUserdataDir(String vmName)
+ {
+ AvdInfo vminfo = SdkUtils.getValidVm(vmName);
+ File userdataDir = null;
+
+ if (vminfo != null)
+ {
+ String vmpath = vminfo.getDataFolderPath();
+ userdataDir = new File(vmpath);
+ }
+
+ return userdataDir;
+ }
+
+ /**
+ * Get the reference to the File that points to the filesystem location where the
+ * user data file of the VM with the given name is.
+ *
+ * @param vmName name of the VM whose userdata file is to be retrieved.
+ * @return the File object that references the filesystem location where the userdata
+ * of the given VM should be. Returns a null reference if SDK is not configured
+ * or if there is no VM with the given name.
+ */
+ public static File getUserdataFile(String vmName)
+ {
+ File userdataDir = getUserdataDir(vmName);
+ File userdataFile = null;
+
+ if (userdataDir != null)
+ {
+ userdataFile = new File(userdataDir, USERIMAGE_FILENAME);
+ }
+
+ return userdataFile;
+ }
+
+ /**
+ * Get the reference to the Files that point to the filesystem location where the
+ * state data files of the VM with the given name are.
+ *
+ * @param vmName name of the VM whose state data files is to be retrieved.
+ * @return the File objects that reference the filesystem location where the state data
+ * files of the given VM should be. Returns a null reference if SDK is not configured
+ * or if there is no VM with the given name.
+ */
+ public static List<File> getStateDataFiles(String vmName)
+ {
+ File userdataDir = getUserdataDir(vmName);
+ List<File> stateDataFiles = null;
+
+ if (userdataDir != null)
+ {
+ stateDataFiles = new ArrayList<File>();
+
+ for (int i = 0; i < STATEDATA_FILENAMES.length; i++)
+ {
+ stateDataFiles.add(new File(userdataDir, STATEDATA_FILENAMES[i]));
+ }
+ }
+
+ return stateDataFiles;
+ }
+
+ /**
+ * Retrieves all sample applications from a target
+ *
+ * @param target The target
+ * @return all sample applications from a target
+ */
+ public static Object[] getSamples(IAndroidTarget target)
+ {
+ List<Sample> samples = new ArrayList<Sample>();
+ File samplesFolder = new File(target.getPath(IAndroidTarget.SAMPLES));
+ samples = findSamples(samplesFolder, target);
+ return samples.toArray();
+ }
+
+ /**
+ * Find the samples inside an specific directory (recursively)
+ *
+ * @param folder the folder that can contain samples
+ * @param target the target of the samples in the folder
+ * @return a list of samples
+ */
+ private static List<Sample> findSamples(File folder, IAndroidTarget target)
+ {
+
+ List<Sample> samples = new ArrayList<Sample>();
+
+ if (folder.exists() && folder.isDirectory())
+ {
+ for (File sampleFolder : folder.listFiles())
+ {
+ if (sampleFolder.isDirectory())
+ {
+ if (Sample.isSample(sampleFolder))
+ {
+ samples.add(new Sample(sampleFolder, target));
+ }
+ else
+ {
+ samples.addAll(findSamples(sampleFolder, target));
+ }
+ }
+ }
+ }
+
+ return samples;
+ }
+
+ /**
+ * Retrieves all targets for a given SDK
+ *
+ * @param sdk The sdk
+ *
+ * @return all targets for the given SDK
+ */
+ public static Object[] getTargets(Sdk sdk)
+ {
+ Object[] targets = null;
+ if (sdk != null)
+ {
+ targets = sdk.getTargets();
+ }
+ return targets;
+ }
+
+ /**
+ * Associates a project to a target
+ *
+ * @param project The project
+ * @param target The target
+ */
+ public static void associate(IProject project, IAndroidTarget target)
+ {
+ try
+ {
+ Sdk.getCurrent().initProject(project, target);
+ }
+ catch (Exception e)
+ {
+ StudioLogger.error(SdkUtils.class, "Error associating project " + project.getName() //$NON-NLS-1$
+ + " with target " + target.getName()); //$NON-NLS-1$
+ }
+ }
+
+ /**
+ * Retrieves the target for a project
+ *
+ * @param project the project
+ *
+ * @return the target for the project
+ */
+ public static IAndroidTarget getTarget(IProject project)
+ {
+ IAndroidTarget target = null;
+ if (project != null)
+ {
+ target = Sdk.getCurrent().getTarget(project);
+ }
+ return target;
+ }
+
+ /**
+ * Retrieves the target for a project
+ *
+ * @param project the project
+ *
+ * @return the target for the project
+ */
+ public static String getMinSdkVersion(IProject project)
+ {
+ String minSdkVersion = "";
+ try
+ {
+ AndroidManifestFile androidManifestFile =
+ AndroidProjectManifestFile.getFromProject(project);
+ UsesSDKNode usesSdkNode =
+ (UsesSDKNode) androidManifestFile.getNode(AndroidManifestNode.NodeType.UsesSdk);
+ if (usesSdkNode != null)
+ {
+ minSdkVersion = usesSdkNode.getMinSdkVersion();
+ }
+
+ }
+ catch (AndroidException e)
+ {
+ StudioLogger.error("Error getting min sdk version. " + e.getMessage());
+ }
+ catch (CoreException e)
+ {
+ StudioLogger.error("Error getting min sdk version. " + e.getMessage());
+ }
+ return minSdkVersion;
+ }
+
+ /**
+ * Retrieves all Activity Actions for a project.
+ *
+ * @param project The project
+ *
+ * @return all Activity Actions for the project.
+ */
+ public static String[] getActivityActions(IProject project)
+ {
+ String[] attributeValues = new String[0];
+
+ if ((project != null) && project.isOpen())
+ {
+ IAndroidTarget target = SdkUtils.getTarget(project);
+ AndroidTargetData targetData = Sdk.getCurrent().getTargetData(target);
+
+ if (targetData != null)
+ {
+ attributeValues =
+ targetData.getAttributeValues("action", "android:name", "activity"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ }
+ }
+
+ return attributeValues;
+ }
+
+ /**
+ * Retrieves all Service Actions for a project.
+ *
+ * @param project The project
+ *
+ * @return all Service Actions for the project.
+ */
+ public static String[] getServiceActions(IProject project)
+ {
+ String[] attributeValues = new String[0];
+
+ if ((project != null) && project.isOpen())
+ {
+ IAndroidTarget target = SdkUtils.getTarget(project);
+ AndroidTargetData targetData = Sdk.getCurrent().getTargetData(target);
+
+ if (targetData != null)
+ {
+ attributeValues =
+ targetData.getAttributeValues("action", "android:name", "service"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ }
+ }
+
+ return attributeValues;
+ }
+
+ /**
+ * Retrieves all Broadcast Receiver Actions for a project.
+ *
+ * @param project The project
+ *
+ * @return all Broadcast Receiver Actions for the project.
+ */
+ public static String[] getReceiverActions(IProject project)
+ {
+ String[] attributeValues = new String[0];
+
+ if ((project != null) && project.isOpen())
+ {
+ IAndroidTarget target = SdkUtils.getTarget(project);
+ AndroidTargetData targetData = Sdk.getCurrent().getTargetData(target);
+
+ if (targetData != null)
+ {
+ attributeValues =
+ targetData.getAttributeValues("action", "android:name", "receiver"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ }
+ }
+
+ return attributeValues;
+ }
+
+ /**
+ * Retrieves all Intent Filter Actions for a project.
+ *
+ * @param project The project
+ *
+ * @return all Intent Filter Actions for the project.
+ */
+ public static String[] getIntentFilterCategories(IProject project)
+ {
+ String[] attributeValues = new String[0];
+
+ if ((project != null) && project.isOpen())
+ {
+ IAndroidTarget target = SdkUtils.getTarget(project);
+ AndroidTargetData targetData = Sdk.getCurrent().getTargetData(target);
+
+ if (targetData != null)
+ {
+ attributeValues = targetData.getAttributeValues("category", "android:name"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ }
+
+ return attributeValues;
+ }
+
+ /**
+ * Get the api version number for a given project
+ * @param project: the project
+ * @return the api version number or 0 if some error occurs
+ */
+ public static int getApiVersionNumberForProject(IProject project)
+ {
+ int api = 0;
+ IAndroidTarget target = SdkUtils.getTarget(project);
+ if (target != null)
+ {
+ AndroidVersion version = target.getVersion();
+ if (version != null)
+ {
+ api = version.getApiLevel();
+ }
+ }
+ return api;
+ }
+
+ public static String getTargetNameForProject(IProject project)
+ {
+ IAndroidTarget target = getTarget(project);
+ return target != null ? target.getName() : ""; //$NON-NLS-1$
+ }
+
+ public static boolean isPlatformTarget(String avdName)
+ {
+ IAndroidTarget target = getValidVm(avdName).getTarget();
+ return target != null ? target.isPlatform() : false;
+ }
+
+ public static boolean isProjectTargetAPlatform(IProject project)
+ {
+ IAndroidTarget target = getTarget(project);
+ return target != null ? target.isPlatform() : false;
+ }
+
+ public static boolean isPlatformTarget(IAndroidTarget target)
+ {
+ return target != null ? target.isPlatform() : false;
+ }
+
+ /**
+ * Retrieves the APK configurations of a project
+ *
+ * @param project the project
+ * @return the APK configurations
+ */
+ public static Map<String, String> getAPKConfigurationsForProject(IProject project)
+ {
+
+ Map<String, String> apkConfigurations = null;
+
+ if ((project != null) && project.isOpen())
+ {
+ Sdk.getCurrent();
+ //This is not supported on ADT 14 preview so let's comment it for now.
+ // apkConfigurations = Sdk.getProjectState(project).getApkSettings().getLocaleFilters();
+ apkConfigurations = new HashMap<String, String>(0);
+ }
+
+ return apkConfigurations;
+
+ }
+
+ public static String getBaseTarget(String name)
+ {
+ IAndroidTarget target = getValidVm(name).getTarget();
+ while (!target.isPlatform())
+ {
+ target = target.getParent();
+ }
+ return target.getName();
+ }
+
+ /**
+ * Check if an SDK is an OPhone Sdk
+ * @return
+ */
+ public static boolean isOphoneSDK()
+ {
+ boolean result = false;
+
+ // check if the folder contains the oms jar
+ FilenameFilter omsFilenameFilter = new FilenameFilter()
+ {
+ public boolean accept(File arg0, String arg1)
+ {
+ return arg1.equals(IAndroidConstants.OPHONE_JAR);
+ }
+ };
+
+ Sdk sdk = getCurrentSdk();
+ IAndroidTarget[] targets = sdk.getTargets();
+ for (IAndroidTarget target : targets)
+ {
+ File folder = new File(target.getLocation());
+ if (folder.list(omsFilenameFilter).length > 0)
+ {
+ result = true;
+ break;
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * Check if an SDK is an JIL sdk
+ * @return
+ */
+ public static boolean isJILSdk()
+ {
+ boolean result = false;
+
+ // check if the folder contains the oms jar
+ FilenameFilter jilFilenameFilter = new FilenameFilter()
+ {
+
+ public boolean accept(File arg0, String arg1)
+ {
+ return arg1.equals(IAndroidConstants.JIL_JAR);
+ }
+ };
+
+ Sdk sdk = getCurrentSdk();
+ if (sdk != null)
+ {
+ IAndroidTarget[] targets = sdk.getTargets();
+ for (IAndroidTarget target : targets)
+ {
+ File folder = new File(target.getLocation());
+ if (folder.list(jilFilenameFilter).length > 0)
+ {
+ result = true;
+ break;
+ }
+ }
+ }
+
+ return result;
+ }
+
+ public static String getEmulatorWindowName(String avdName, int port)
+ {
+ String windowName = ""; //$NON-NLS-1$
+ if (isJILSdk())
+ {
+ windowName = "JIL Emulator (" + avdName + ":" + port + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ }
+ else if (isOphoneSDK())
+ {
+ windowName = "OPhone Emulator (" + avdName + ":" + port + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ }
+ else
+ {
+ windowName = port + ":" + avdName; //$NON-NLS-1$
+ }
+ return windowName;
+ }
+
+ public static boolean isLibraryProject(IProject project)
+ {
+ return Sdk.getProjectState(project) != null ? Sdk.getProjectState(project).isLibrary()
+ : false;
+ }
+
+ /**
+ * Returns all available permissions
+ *
+ * @return String array containing the available permissions
+ */
+ public static String[] getIntentFilterPermissions(IProject project)
+ {
+ String[] attributeValues = new String[0];
+
+ if ((project != null) && project.isOpen())
+ {
+ IAndroidTarget target = SdkUtils.getTarget(project);
+ AndroidTargetData targetData = Sdk.getCurrent().getTargetData(target);
+
+ if (targetData != null)
+ {
+ attributeValues = targetData.getAttributeValues("uses-permission", "android:name"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ }
+
+ return attributeValues;
+ }
+
+ /**
+ * Try to repair an AVD. Currently only avds with wrong image path are repariable.
+ * Display a message with the changes to the config.ini
+ * @param avdInfo
+ * @return Status ERROR if an IO exception occured.
+ */
+ public static IStatus repairAvd(AvdInfo avdInfo)
+ {
+ IStatus status = Status.OK_STATUS;
+
+ AvdManager avdManager = Sdk.getCurrent().getAvdManager();
+ Display display = PlatformUI.getWorkbench().getDisplay();
+ ISdkLog log =
+ new MessageBoxLog(String.format("Result of updating AVD '%s':", avdInfo.getName()), //$NON-NLS-1$
+ display, false);
+ try
+ {
+ avdManager.updateAvd(avdInfo, log);
+ // display the result
+ if (log instanceof MessageBoxLog)
+ {
+ ((MessageBoxLog) log).displayResult(true);
+ }
+ SdkUtils.reloadAvds();
+
+ }
+ catch (IOException e)
+ {
+ status =
+ new Status(Status.ERROR, AndroidPlugin.PLUGIN_ID,
+ AndroidNLS.SdkUtils_COULD_NOT_REPAIR_AVD, e);
+ }
+
+ return status;
+ }
+
+ public static String getDefaultSkin(String targetName)
+ {
+ IAndroidTarget target = getTargetByName(targetName);
+ return target != null ? target.getDefaultSkin() : "HVGA";
+ }
+}