From 2c83a9f10cc8ac33e1caf411da571e2aa85c0909 Mon Sep 17 00:00:00 2001 From: Xavier Ducrohet Date: Wed, 13 May 2009 15:06:27 -0700 Subject: [PATCH] Update ADT to use the refactored sdklib from previous patch. --- .../adt/launch/AndroidLaunchController.java | 232 +++++++++--------- .../adt/launch/DeviceChooserDialog.java | 120 ++++----- .../eclipse/adt/launch/EmulatorConfigTab.java | 20 +- .../com/android/ide/eclipse/adt/sdk/Sdk.java | 92 +++---- .../avdmanager/AvdManagerListPage.java | 116 ++++----- .../newproject/NewProjectCreationPage.java | 4 +- 6 files changed, 292 insertions(+), 292 deletions(-) diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/launch/AndroidLaunchController.java b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/launch/AndroidLaunchController.java index e69c9f093..2a4c1dad8 100644 --- a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/launch/AndroidLaunchController.java +++ b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/launch/AndroidLaunchController.java @@ -41,8 +41,8 @@ import com.android.ide.eclipse.common.project.BaseProjectHelper; import com.android.prefs.AndroidLocation.AndroidLocationException; import com.android.sdklib.IAndroidTarget; import com.android.sdklib.SdkManager; -import com.android.sdklib.avd.AvdManager; -import com.android.sdklib.avd.AvdManager.AvdInfo; +import com.android.sdklib.internal.avd.AvdManager; +import com.android.sdklib.internal.avd.AvdManager.AvdInfo; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; @@ -85,7 +85,7 @@ import java.util.regex.Pattern; */ public final class AndroidLaunchController implements IDebugBridgeChangeListener, IDeviceChangeListener, IClientChangeListener, ILaunchController { - + private static final String FLAG_AVD = "-avd"; //$NON-NLS-1$ private static final String FLAG_NETDELAY = "-netdelay"; //$NON-NLS-1$ private static final String FLAG_NETSPEED = "-netspeed"; //$NON-NLS-1$ @@ -94,7 +94,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener /** * Map to store {@link ILaunchConfiguration} objects that must be launched as simple connection - * to running application. The integer is the port on which to connect. + * to running application. The integer is the port on which to connect. * ALL ACCESS MUST BE INSIDE A synchronized (sListLock) block! */ private static final HashMap sRunningAppMap = @@ -118,35 +118,35 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener * */ private final ArrayList mWaitingForReadyEmulatorList = new ArrayList(); - + /** * Application waiting to show up as waiting for debugger. * ALL ACCESS MUST BE INSIDE A synchronized (sListLock) block! */ private final ArrayList mWaitingForDebuggerApplications = new ArrayList(); - + /** * List of clients that have appeared as waiting for debugger before their name was available. * ALL ACCESS MUST BE INSIDE A synchronized (sListLock) block! */ private final ArrayList mUnknownClientsWaitingForDebugger = new ArrayList(); - + /** static instance for singleton */ private static AndroidLaunchController sThis = new AndroidLaunchController(); - + /** * Output receiver for "pm install package.apk" command line. */ private static final class InstallReceiver extends MultiLineReceiver { - + private static final String SUCCESS_OUTPUT = "Success"; //$NON-NLS-1$ private static final Pattern FAILURE_PATTERN = Pattern.compile("Failure\\s+\\[(.*)\\]"); //$NON-NLS-1$ - + private String mSuccess = null; - + public InstallReceiver() { } @@ -199,15 +199,15 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener public static void debugRunningApp(IProject project, int debugPort) { // get an existing or new launch configuration ILaunchConfiguration config = AndroidLaunchController.getLaunchConfig(project); - + if (config != null) { setPortLaunchConfigAssociation(config, debugPort); - + // and launch DebugUITools.launch(config, ILaunchManager.DEBUG_MODE); } } - + /** * Returns an {@link ILaunchConfiguration} for the specified {@link IProject}. * @param project the project @@ -259,20 +259,20 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener // and delay wc.setAttribute(LaunchConfigDelegate.ATTR_DELAY, LaunchConfigDelegate.DEFAULT_DELAY); - + // default wipe data mode wc.setAttribute(LaunchConfigDelegate.ATTR_WIPE_DATA, LaunchConfigDelegate.DEFAULT_WIPE_DATA); - + // default disable boot animation option wc.setAttribute(LaunchConfigDelegate.ATTR_NO_BOOT_ANIM, LaunchConfigDelegate.DEFAULT_NO_BOOT_ANIM); - + // set default emulator options IPreferenceStore store = AdtPlugin.getDefault().getPreferenceStore(); String emuOptions = store.getString(AdtPlugin.PREFS_EMU_OPTIONS); wc.setAttribute(LaunchConfigDelegate.ATTR_COMMANDLINE, emuOptions); - + // map the config and the project wc.setMappedResources(getResourcesToMap(project)); @@ -289,10 +289,10 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener return null; } } - + return config; } - + /** * Returns the list of resources to map to a Launch Configuration. * @param project the project associated to the launch configuration. @@ -300,12 +300,12 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener public static IResource[] getResourcesToMap(IProject project) { ArrayList array = new ArrayList(2); array.add(project); - + IFile manifest = AndroidManifestParser.getManifest(project); if (manifest != null) { array.add(manifest); } - + return array.toArray(new IResource[array.size()]); } @@ -327,10 +327,10 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener * @param launch the launch object */ public void launch(final IProject project, String mode, IFile apk, - String packageName, String debugPackageName, Boolean debuggable, int requiredApiVersionNumber, - final IAndroidLaunchAction launchAction, final AndroidLaunchConfiguration config, + String packageName, String debugPackageName, Boolean debuggable, int requiredApiVersionNumber, + final IAndroidLaunchAction launchAction, final AndroidLaunchConfiguration config, final AndroidLaunch launch, IProgressMonitor monitor) { - + String message = String.format("Performing %1$s", launchAction.getLaunchDescription()); AdtPlugin.printToConsole(project, message); @@ -345,7 +345,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener // get the SDK Sdk currentSdk = Sdk.getCurrent(); AvdManager avdManager = currentSdk.getAvdManager(); - + // reload the AVDs to make sure we are up to date try { avdManager.reloadAvds(); @@ -358,12 +358,12 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener // get the project target final IAndroidTarget projectTarget = currentSdk.getTarget(project); - + // FIXME: check errors on missing sdk, AVD manager, or project target. - + // device chooser response object. final DeviceChooserResponse response = new DeviceChooserResponse(); - + /* * Launch logic: * - Manually Mode @@ -379,11 +379,11 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener * If != 1, display a UI similar to manual mode. * If == 1, launch the application on this AVD/device. */ - + if (config.mTargetMode == TargetMode.AUTO) { // if we are in automatic target mode, we need to find the current devices IDevice[] devices = AndroidDebugBridge.getBridge().getDevices(); - + // first check if we have a preferred AVD name, and if it actually exists, and is valid // (ie able to run the project). // We need to check this in case the AVD was recreated with a different target that is @@ -399,7 +399,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener config.mAvdName, projectTarget.getName())); } } - + if (preferredAvd != null) { // look for a matching device for (IDevice d : devices) { @@ -415,7 +415,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener return; } } - + // at this point we have a valid preferred AVD that is not running. // We need to start it. response.setAvdToLaunch(preferredAvd); @@ -459,13 +459,13 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener hasDevice = true; } } - + // depending on the number of devices, we'll simulate an automatic choice // from the device chooser or simply show up the device chooser. if (hasDevice == false && compatibleRunningAvds.size() == 0) { // if zero emulators/devices, we launch an emulator. // We need to figure out which AVD first. - + // we are going to take the closest AVD. ie a compatible AVD that has the API level // closest to the project target. AvdInfo defaultAvd = findMatchingAvd(avdManager, projectTarget); @@ -501,7 +501,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener if (searchAgain[0]) { // attempt to reload the AVDs and find one compatible. defaultAvd = findMatchingAvd(avdManager, projectTarget); - + if (defaultAvd == null) { AdtPlugin.printErrorToConsole(project, String.format( "Still no compatible AVDs with target '%1$s': Aborting launch.", @@ -540,14 +540,14 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener // if more than one device, we'll bring up the DeviceChooser dialog below. if (compatibleRunningAvds.size() >= 2) { - message = "Automatic Target Mode: Several compatible targets. Please select a target device."; + message = "Automatic Target Mode: Several compatible targets. Please select a target device."; } else if (hasDevice) { - message = "Automatic Target Mode: Unable to detect device compatibility. Please select a target device."; + message = "Automatic Target Mode: Unable to detect device compatibility. Please select a target device."; } AdtPlugin.printToConsole(project, message); } - + // bring up the device chooser. AdtPlugin.getDisplay().asyncExec(new Runnable() { public void run() { @@ -599,7 +599,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener } return defaultAvd; } - + /** * Continues the launch based on the DeviceChooser response. * @param response the device chooser response @@ -626,19 +626,19 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener "Launching a new emulator with Virtual Device '%1$s'", info.getName())); boolean status = launchEmulator(config, info); - + if (status == false) { // launching the emulator failed! AdtPlugin.displayError("Emulator Launch", "Couldn't launch the emulator! Make sure the SDK directory is properly setup and the emulator is not missing."); - + // stop the launch and return mWaitingForEmulatorLaunches.remove(launchInfo); AdtPlugin.printErrorToConsole(project, "Launch canceled!"); stopLaunch(launchInfo); return; } - + return; } } else if (response.getDeviceToUse() != null) { @@ -648,7 +648,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener } }.start(); } - + /** * Queries for a debugger port for a specific {@link ILaunchConfiguration}. *

@@ -667,10 +667,10 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener return port; } } - + return LaunchConfigDelegate.INVALID_DEBUG_PORT; } - + /** * Set a {@link ILaunchConfiguration} and its associated debug port, in the list of * launch config to connect directly to a running app instead of doing full launch (sync, @@ -684,7 +684,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener sRunningAppMap.put(launchConfig, port); } } - + /** * Checks the build information, and returns whether the launch should continue. *

The value tested are: @@ -699,7 +699,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener private boolean checkBuildInfo(DelayedLaunchInfo launchInfo, IDevice device) { if (device != null) { // check the app required API level versus the target device API level - + String deviceApiVersionName = device.getProperty(IDevice.PROP_BUILD_VERSION); String value = device.getProperty(IDevice.PROP_BUILD_VERSION_NUMBER); int deviceApiVersionNumber = AndroidManifestParser.INVALID_MIN_SDK; @@ -708,7 +708,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener } catch (NumberFormatException e) { // pass, we'll keep the deviceVersionNumber value at 0. } - + if (launchInfo.getRequiredApiVersionNumber() == AndroidManifestParser.INVALID_MIN_SDK) { // warn the API level requirement is not set. AdtPlugin.printErrorToConsole(launchInfo.getProject(), @@ -735,7 +735,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener launchInfo.getRequiredApiVersionNumber(), deviceApiVersionNumber, deviceApiVersionName); AdtPlugin.printErrorToConsole(launchInfo.getProject(), msg); - + // abort the launch return false; } @@ -753,7 +753,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener String message2 = String.format("Application '%1$s' does not have the attribute 'debuggable' set to TRUE in its manifest and cannot be debugged.", launchInfo.getPackageName()); AdtPlugin.printErrorToConsole(launchInfo.getProject(), message1, message2); - + // because am -D does not check for ro.debuggable and the // 'debuggable' attribute, it is important we do not use the -D option // in this case or the app will wait for a debugger forever and never @@ -773,7 +773,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener } } } - + return true; } @@ -817,7 +817,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener private boolean syncApp(DelayedLaunchInfo launchInfo, IDevice device) { boolean alreadyInstalled = ApkInstallManager.getInstance().isApplicationInstalled( launchInfo.getProject(), device); - + if (alreadyInstalled) { AdtPlugin.printToConsole(launchInfo.getProject(), "Application already deployed. No need to reinstall."); @@ -836,7 +836,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener return false; } } - + return true; } @@ -873,7 +873,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener // This will check that there isn't another apk declaring the same package, or // that another install used a different key. boolean installResult = installPackage(launchInfo, remotePath, device); - + // now we delete the app we sync'ed try { device.executeShellCommand("rm " + remotePath, new MultiLineReceiver() { //$NON-NLS-1$ @@ -890,13 +890,13 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener "Failed to delete temporary package: %1$s", e.getMessage())); return false; } - + // if the installation succeeded, we register it. if (installResult) { ApkInstallManager.getInstance().registerInstallation( launchInfo.getProject(), device); } - + return installResult; } @@ -911,8 +911,8 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener /** * For the current launchInfo, create additional DelayedLaunchInfo that should be used to * sync APKs that we are dependent on to the device. - * - * @param launchInfo the original launch info that we want to find the + * + * @param launchInfo the original launch info that we want to find the * @return a list of DelayedLaunchInfo (may be empty if no dependencies were found or error) */ public List getDependenciesLaunchInfo(DelayedLaunchInfo launchInfo) { @@ -928,7 +928,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener AdtPlugin.printErrorToConsole(launchInfo.getProject(), e); return dependencies; } - + // Get all projects that this depends on List androidProjectList; try { @@ -938,7 +938,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener AdtPlugin.printErrorToConsole(launchInfo.getProject(), e); return dependencies; } - + // for each project, parse manifest and create launch information for (IJavaProject androidProject : androidProjectList) { // Parse the Manifest to get various required information @@ -950,35 +950,35 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener true /* gatherData */, false /* markErrors */); } catch (CoreException e) { AdtPlugin.printErrorToConsole( - launchInfo.getProject(), - String.format("Error parsing manifest of %s", + launchInfo.getProject(), + String.format("Error parsing manifest of %s", androidProject.getElementName())); continue; } - + // Get the APK location (can return null) IFile apk = ProjectHelper.getApplicationPackage(androidProject.getProject()); if (apk == null) { // getApplicationPackage will have logged an error message - continue; + continue; } - + // Create new launchInfo as an hybrid between parent and dependency information DelayedLaunchInfo delayedLaunchInfo = new DelayedLaunchInfo( - androidProject.getProject(), + androidProject.getProject(), manifestParser.getPackage(), manifestParser.getPackage(), - launchInfo.getLaunchAction(), - apk, - manifestParser.getDebuggable(), - manifestParser.getApiLevelRequirement(), - launchInfo.getLaunch(), + launchInfo.getLaunchAction(), + apk, + manifestParser.getDebuggable(), + manifestParser.getApiLevelRequirement(), + launchInfo.getLaunch(), launchInfo.getMonitor()); - + // Add to the list dependencies.add(delayedLaunchInfo); } - + return dependencies; } @@ -998,7 +998,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener try { String result = doInstall(launchInfo, remotePath, device, false /* reinstall */); - + /* For now we force to retry the install (after uninstalling) because there's no * other way around it: adb install does not want to update a package w/o uninstalling * the old one first! @@ -1008,7 +1008,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener } catch (IOException e) { // do nothing, we'll return false } - + return false; } @@ -1100,7 +1100,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener * @param device the device on which to install the application. * @param launchInfo the {@link DelayedLaunchInfo}. * @return a {@link String} with an error code, or null if success. - * @throws IOException + * @throws IOException */ @SuppressWarnings("unused") private String doUninstall(IDevice device, DelayedLaunchInfo launchInfo) throws IOException { @@ -1114,7 +1114,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener AdtPlugin.printErrorToConsole(launchInfo.getProject(), msg); throw e; } - + return receiver.getSuccess(); } @@ -1124,9 +1124,9 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener * @param launchInfo the {@link DelayedLaunchInfo}. * @param remotePath the path of the application package in the device tmp folder. * @param device the device on which to install the application. - * @param reinstall + * @param reinstall * @return a {@link String} with an error code, or null if success. - * @throws IOException + * @throws IOException */ private String doInstall(DelayedLaunchInfo launchInfo, final String remotePath, final IDevice device, boolean reinstall) throws IOException { @@ -1139,15 +1139,15 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener } catch (IOException e) { String msg = String.format( "Failed to install %1$s on device '%2$s': %3$s", - launchInfo.getPackageFile().getName(), device.getSerialNumber(), + launchInfo.getPackageFile().getName(), device.getSerialNumber(), e.getMessage()); AdtPlugin.printErrorToConsole(launchInfo.getProject(), msg); throw e; } - + return receiver.getSuccess(); } - + /** * launches an application on a device or emulator * @@ -1202,24 +1202,24 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener needsWipeData = false; } } - + // build the command line based on the available parameters. ArrayList list = new ArrayList(); list.add(AdtPlugin.getOsAbsoluteEmulator()); list.add(FLAG_AVD); list.add(avdToLaunch.getName()); - + if (config.mNetworkSpeed != null) { list.add(FLAG_NETSPEED); list.add(config.mNetworkSpeed); } - + if (config.mNetworkDelay != null) { list.add(FLAG_NETDELAY); list.add(config.mNetworkDelay); } - + if (needsWipeData) { list.add(FLAG_WIPE_DATA); } @@ -1229,7 +1229,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener } list.addAll(customArgs); - + // convert the list into an array for the call to exec. String[] command = list.toArray(new String[list.size()]); @@ -1243,7 +1243,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener return true; } - + /** * Looks for and returns an existing {@link ILaunchConfiguration} object for a * specified project. @@ -1344,7 +1344,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener *

* This is sent from a non UI thread. * @param bridge the new {@link AndroidDebugBridge} object. - * + * * @see IDebugBridgeChangeListener#bridgeChanged(AndroidDebugBridge) */ public void bridgeChanged(AndroidDebugBridge bridge) { @@ -1358,7 +1358,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener } for (DelayedLaunchInfo launchInfo : mWaitingForDebuggerApplications) { AdtPlugin.printErrorToConsole(launchInfo.getProject(), - String.format(message, + String.format(message, launchInfo.getLaunchAction().getLaunchDescription())); stopLaunch(launchInfo); } @@ -1373,7 +1373,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener *

* This is sent from a non UI thread. * @param device the new device. - * + * * @see IDeviceChangeListener#deviceConnected(Device) */ public void deviceConnected(Device device) { @@ -1390,7 +1390,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener // and move it to the other list mWaitingForReadyEmulatorList.add(launchInfo); - + // and tell the user about it AdtPlugin.printToConsole(launchInfo.getProject(), String.format("New emulator found: %1$s", device.getSerialNumber())); @@ -1407,7 +1407,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener *

* This is sent from a non UI thread. * @param device the new device. - * + * * @see IDeviceChangeListener#deviceDisconnected(Device) */ @SuppressWarnings("unchecked") @@ -1420,7 +1420,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener for (DelayedLaunchInfo launchInfo : copyList) { if (launchInfo.getDevice() == device) { AdtPlugin.printErrorToConsole(launchInfo.getProject(), - String.format(message, device.getSerialNumber(), + String.format(message, device.getSerialNumber(), launchInfo.getLaunchAction().getLaunchDescription())); stopLaunch(launchInfo); } @@ -1429,7 +1429,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener for (DelayedLaunchInfo launchInfo : copyList) { if (launchInfo.getDevice() == device) { AdtPlugin.printErrorToConsole(launchInfo.getProject(), - String.format(message, device.getSerialNumber(), + String.format(message, device.getSerialNumber(), launchInfo.getLaunchAction().getLaunchDescription())); stopLaunch(launchInfo); } @@ -1443,7 +1443,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener * This is sent from a non UI thread. * @param device the device that was updated. * @param changeMask the mask indicating what changed. - * + * * @see IDeviceChangeListener#deviceChanged(Device, int) */ public void deviceChanged(Device device, int changeMask) { @@ -1460,8 +1460,8 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener * any of the following values: {@link Client#CHANGE_INFO}, {@link Client#CHANGE_NAME} * {@link Client#CHANGE_DEBUGGER_INTEREST}, {@link Client#CHANGE_THREAD_MODE}, * {@link Client#CHANGE_THREAD_DATA}, {@link Client#CHANGE_HEAP_MODE}, - * {@link Client#CHANGE_HEAP_DATA}, {@link Client#CHANGE_NATIVE_HEAP_DATA} - * + * {@link Client#CHANGE_HEAP_DATA}, {@link Client#CHANGE_NATIVE_HEAP_DATA} + * * @see IClientChangeListener#clientChanged(Client, int) */ public void clientChanged(final Client client, int changeMask) { @@ -1471,12 +1471,12 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener if (applicationName != null) { IPreferenceStore store = AdtPlugin.getDefault().getPreferenceStore(); String home = store.getString(AdtPlugin.PREFS_HOME_PACKAGE); - + if (home.equals(applicationName)) { - + // looks like home is up, get its device IDevice device = client.getDevice(); - + // look for application waiting for home synchronized (sListLock) { for (int i = 0; i < mWaitingForReadyEmulatorList.size(); ) { @@ -1484,7 +1484,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener if (launchInfo.getDevice() == device) { // it's match, remove from the list mWaitingForReadyEmulatorList.remove(i); - + // We couldn't check earlier the API level of the device // (it's asynchronous when the device boot, and usually // deviceConnected is called before it's queried for its build info) @@ -1496,11 +1496,11 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener stopLaunch(launchInfo); return; } - + AdtPlugin.printToConsole(launchInfo.getProject(), String.format("HOME is up on device '%1$s'", device.getSerialNumber())); - + // attempt to sync the new package onto the device. if (syncApp(launchInfo, device)) { // application package is sync'ed, lets attempt to launch it. @@ -1511,7 +1511,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener "Launch canceled!"); stopLaunch(launchInfo); } - + break; } else { i++; @@ -1519,7 +1519,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener } } } - + // check if it's already waiting for a debugger, and if so we connect to it. if (client.getClientData().getDebuggerConnectionStatus() == ClientData.DEBUGGER_WAITING) { // search for this client in the list; @@ -1533,7 +1533,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener } } } - + // if it's not home, it could be an app that is now in debugger mode that we're waiting for // lets check it @@ -1567,20 +1567,20 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener applicationName.equals(launchInfo.getDebugPackageName())) { // this is a match. We remove the launch info from the list mWaitingForDebuggerApplications.remove(i); - + // and connect the debugger. String msg = String.format( "Attempting to connect debugger to '%1$s' on port %2$d", launchInfo.getDebugPackageName(), client.getDebuggerListenPort()); AdtPlugin.printToConsole(launchInfo.getProject(), msg); - + new Thread("Debugger Connection") { //$NON-NLS-1$ @Override public void run() { try { if (connectRemoteDebugger( client.getDebuggerListenPort(), - launchInfo.getLaunch(), + launchInfo.getLaunch(), launchInfo.getMonitor()) == false) { return; } @@ -1595,7 +1595,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener launchInfo.getMonitor().done(); } }.start(); - + // we're done processing this client. return; @@ -1604,18 +1604,18 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener } } } - + // if we get here, we haven't found an app that we were launching, so we look // for opened android projects that contains the app asking for a debugger. // If we find one, we automatically connect to it. IProject project = ProjectHelper.findAndroidProjectByAppName(applicationName); - + if (project != null) { debugRunningApp(project, client.getDebuggerListenPort()); } } } - + /** * Get the stderr/stdout outputs of a process and return when the process is done. * Both must be read or the process will block on windows. @@ -1676,7 +1676,7 @@ public final class AndroidLaunchController implements IDebugBridgeChangeListener synchronized (sListLock) { mWaitingForReadyEmulatorList.remove(launchInfo); mWaitingForDebuggerApplications.remove(launchInfo); - } + } } } diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/launch/DeviceChooserDialog.java b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/launch/DeviceChooserDialog.java index 52ba42f9e..23154ba75 100644 --- a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/launch/DeviceChooserDialog.java +++ b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/launch/DeviceChooserDialog.java @@ -30,8 +30,8 @@ import com.android.ide.eclipse.adt.sdk.Sdk; import com.android.ide.eclipse.adt.wizards.actions.AvdManagerAction; import com.android.ide.eclipse.ddms.DdmsPlugin; import com.android.sdklib.IAndroidTarget; -import com.android.sdklib.avd.AvdManager; -import com.android.sdklib.avd.AvdManager.AvdInfo; +import com.android.sdklib.internal.avd.AvdManager; +import com.android.sdklib.internal.avd.AvdManager.AvdInfo; import com.android.sdkuilib.AvdSelector; import com.android.sdkuilib.AvdSelector.SelectionMode; @@ -80,7 +80,7 @@ public class DeviceChooserDialog extends Dialog implements IDeviceChangeListener private Table mDeviceTable; private TableViewer mViewer; private AvdSelector mPreferredAvdSelector; - + private Image mDeviceImage; private Image mEmulatorImage; private Image mMatchImage; @@ -97,7 +97,7 @@ public class DeviceChooserDialog extends Dialog implements IDeviceChangeListener private Button mDeviceRadioButton; private boolean mDisableAvdSelectionChange = false; - + /** * Basic Content Provider for a table full of {@link Device} objects. The input is * a {@link AndroidDebugBridge}. @@ -119,7 +119,7 @@ public class DeviceChooserDialog extends Dialog implements IDeviceChangeListener // pass } } - + /** * A Label Provider for the {@link TableViewer} in {@link DeviceChooserDialog}. @@ -133,7 +133,7 @@ public class DeviceChooserDialog extends Dialog implements IDeviceChangeListener switch (columnIndex) { case 0: return device.isEmulator() ? mEmulatorImage : mDeviceImage; - + case 2: // check for compatibility. if (device.isEmulator() == false) { // physical device @@ -233,30 +233,30 @@ public class DeviceChooserDialog extends Dialog implements IDeviceChangeListener // pass } } - + public static class DeviceChooserResponse { private AvdInfo mAvdToLaunch; private IDevice mDeviceToUse; - + public void setDeviceToUse(IDevice d) { mDeviceToUse = d; mAvdToLaunch = null; } - + public void setAvdToLaunch(AvdInfo avd) { mAvdToLaunch = avd; mDeviceToUse = null; } - + public IDevice getDeviceToUse() { return mDeviceToUse; } - + public AvdInfo getAvdToLaunch() { return mAvdToLaunch; } } - + public DeviceChooserDialog(Shell parent, DeviceChooserResponse response, String packageName, IAndroidTarget projectTarget) { super(parent); @@ -264,7 +264,7 @@ public class DeviceChooserDialog extends Dialog implements IDeviceChangeListener mPackageName = packageName; mProjectTarget = projectTarget; mSdk = Sdk.getCurrent(); - + loadImages(); } @@ -278,23 +278,23 @@ public class DeviceChooserDialog extends Dialog implements IDeviceChangeListener mNoMatchImage.dispose(); mWarningImage.dispose(); } - + @Override protected void okPressed() { cleanup(); super.okPressed(); } - + @Override protected void cancelPressed() { cleanup(); super.cancelPressed(); } - + @Override protected Control createContents(Composite parent) { Control content = super.createContents(parent); - + // this must be called after createContents() has happened so that the // ok button has been created (it's created after the call to createDialogArea) updateDefaultSelection(); @@ -302,19 +302,19 @@ public class DeviceChooserDialog extends Dialog implements IDeviceChangeListener return content; } - + @Override protected Control createDialogArea(Composite parent) { // set dialog title getShell().setText("Android Device Chooser"); - + Composite top = new Composite(parent, SWT.NONE); top.setLayout(new GridLayout(1, true)); Label label = new Label(top, SWT.NONE); label.setText(String.format("Select a device compatible with target %s.", mProjectTarget.getFullName())); - + mDeviceRadioButton = new Button(top, SWT.RADIO); mDeviceRadioButton.setText("Choose a running Android device"); mDeviceRadioButton.addSelectionListener(new SelectionAdapter() { @@ -330,12 +330,12 @@ public class DeviceChooserDialog extends Dialog implements IDeviceChangeListener } else { mResponse.setAvdToLaunch(mPreferredAvdSelector.getSelected()); } - + enableOkButton(); } }); mDeviceRadioButton.setSelection(true); - + // offset the selector from the radio button Composite offsetComp = new Composite(top, SWT.NONE); @@ -345,7 +345,7 @@ public class DeviceChooserDialog extends Dialog implements IDeviceChangeListener layout.marginLeft = 30; offsetComp.setLayout(layout); - IPreferenceStore store = AdtPlugin.getDefault().getPreferenceStore(); + IPreferenceStore store = AdtPlugin.getDefault().getPreferenceStore(); mDeviceTable = new Table(offsetComp, SWT.SINGLE | SWT.FULL_SELECTION | SWT.BORDER); GridData gd; mDeviceTable.setLayoutData(gd = new GridData(GridData.FILL_BOTH)); @@ -403,7 +403,7 @@ public class DeviceChooserDialog extends Dialog implements IDeviceChangeListener } } }); - + Button radio2 = new Button(top, SWT.RADIO); radio2.setText("Launch a new Android Virtual Device"); @@ -414,7 +414,7 @@ public class DeviceChooserDialog extends Dialog implements IDeviceChangeListener layout.marginRight = layout.marginHeight = 0; layout.marginLeft = 30; offsetComp.setLayout(layout); - + mPreferredAvdSelector = new AvdSelector(offsetComp, getNonRunningAvds(false /*reloadAvds*/), mProjectTarget, @@ -448,13 +448,13 @@ public class DeviceChooserDialog extends Dialog implements IDeviceChangeListener enableOkButton(); } } - + /** * Handles double-click selection on the AVD selector. - * + * * Note that the single-click handler will probably already have been called * but the selected item can have changed in between. - * + * * {@inheritDoc} */ @Override @@ -465,11 +465,11 @@ public class DeviceChooserDialog extends Dialog implements IDeviceChangeListener } } }); - + return top; } - + private void loadImages() { IImageLoader ddmsLoader = DdmsPlugin.getImageLoader(); Display display = DdmsPlugin.getDisplay(); @@ -486,7 +486,7 @@ public class DeviceChooserDialog extends Dialog implements IDeviceChangeListener "emulator.png", ICON_WIDTH, ICON_WIDTH, //$NON-NLS-1$ display.getSystemColor(SWT.COLOR_BLUE)); } - + if (mMatchImage == null) { mMatchImage = ImageHelper.loadImage(adtLoader, display, "match.png", //$NON-NLS-1$ @@ -509,7 +509,7 @@ public class DeviceChooserDialog extends Dialog implements IDeviceChangeListener } } - + /** * Returns a display string representing the state of the device. * @param d the device @@ -532,7 +532,7 @@ public class DeviceChooserDialog extends Dialog implements IDeviceChangeListener *

* This is sent from a non UI thread. * @param device the new device. - * + * * @see IDeviceChangeListener#deviceConnected(Device) */ public void deviceConnected(Device device) { @@ -542,10 +542,10 @@ public class DeviceChooserDialog extends Dialog implements IDeviceChangeListener if (mDeviceTable.isDisposed() == false) { // refresh all mViewer.refresh(); - + // update the selection updateDefaultSelection(); - + // update the display of AvdInfo (since it's filtered to only display // non running AVD.) refillAvdList(false /*reloadAvds*/); @@ -564,7 +564,7 @@ public class DeviceChooserDialog extends Dialog implements IDeviceChangeListener *

* This is sent from a non UI thread. * @param device the new device. - * + * * @see IDeviceChangeListener#deviceDisconnected(Device) */ public void deviceDisconnected(Device device) { @@ -577,7 +577,7 @@ public class DeviceChooserDialog extends Dialog implements IDeviceChangeListener * This is sent from a non UI thread. * @param device the device that was updated. * @param changeMask the mask indicating what changed. - * + * * @see IDeviceChangeListener#deviceChanged(Device, int) */ public void deviceChanged(final Device device, int changeMask) { @@ -588,10 +588,10 @@ public class DeviceChooserDialog extends Dialog implements IDeviceChangeListener if (mDeviceTable.isDisposed() == false) { // refresh the device mViewer.refresh(device); - + // update the defaultSelection. updateDefaultSelection(); - + // update the display of AvdInfo (since it's filtered to only display // non running AVD). This is done on deviceChanged because the avd name // of a (emulator) device may be updated as the emulator boots. @@ -612,20 +612,20 @@ public class DeviceChooserDialog extends Dialog implements IDeviceChangeListener }); } } - + /** * Returns whether the dialog is in "device" mode (true), or in "avd" mode (false). */ private boolean isDeviceMode() { return mDeviceRadioButton.getSelection(); } - + /** * Enables or disables the OK button of the dialog based on various selections in the dialog. */ private void enableOkButton() { Button okButton = getButton(IDialogConstants.OK_ID); - + if (isDeviceMode()) { okButton.setEnabled(mResponse.getDeviceToUse() != null && mResponse.getDeviceToUse().isOnline()); @@ -641,7 +641,7 @@ public class DeviceChooserDialog extends Dialog implements IDeviceChangeListener Button okButton = getButton(IDialogConstants.OK_ID); return okButton.isEnabled(); } - + /** * Executes the {@link Runnable} in the UI thread. * @param runnable the runnable to execute. @@ -655,7 +655,7 @@ public class DeviceChooserDialog extends Dialog implements IDeviceChangeListener AndroidDebugBridge.removeDeviceChangeListener(this); } } - + private void handleDeviceSelection() { int count = mDeviceTable.getSelectionCount(); if (count != 1) { @@ -675,7 +675,7 @@ public class DeviceChooserDialog extends Dialog implements IDeviceChangeListener mResponse.setDeviceToUse(device); enableOkButton(); } - + /** * Look for a default device to select. This is done by looking for the running * clients on each device and finding one similar to the one being launched. @@ -685,19 +685,19 @@ public class DeviceChooserDialog extends Dialog implements IDeviceChangeListener private void updateDefaultSelection() { if (mDeviceTable.getSelectionCount() == 0) { AndroidDebugBridge bridge = AndroidDebugBridge.getBridge(); - + Device[] devices = bridge.getDevices(); - + for (Device device : devices) { Client[] clients = device.getClients(); - + for (Client client : clients) { - + if (mPackageName.equals(client.getClientData().getClientDescription())) { // found a match! Select it. mViewer.setSelection(new StructuredSelection(device)); handleSelection(device); - + // and we're done. return; } @@ -707,13 +707,13 @@ public class DeviceChooserDialog extends Dialog implements IDeviceChangeListener handleDeviceSelection(); } - + /** * Returns the list of {@link AvdInfo} that are not already running in an emulator. */ private AvdInfo[] getNonRunningAvds(boolean reloadAvds) { ArrayList list = new ArrayList(); - + // get the full list of Android Virtual Devices if (reloadAvds || mFullAvdList == null) { AvdManager avdManager = mSdk.getAvdManager(); @@ -734,25 +734,25 @@ public class DeviceChooserDialog extends Dialog implements IDeviceChangeListener list.add(info); } } - + return list.toArray(new AvdInfo[list.size()]); - } - + } + /** * Refills the AVD list keeping the current selection. */ private void refillAvdList(boolean reloadAvds) { AvdInfo[] array = getNonRunningAvds(reloadAvds); - + // save the current selection AvdInfo selected = mPreferredAvdSelector.getSelected(); - + // disable selection change. mDisableAvdSelectionChange = true; - + // set the new list in the selector mPreferredAvdSelector.setAvds(array, mProjectTarget); - + // attempt to reselect the proper avd if needed if (selected != null) { if (mPreferredAvdSelector.setSelection(selected) == false) { @@ -762,7 +762,7 @@ public class DeviceChooserDialog extends Dialog implements IDeviceChangeListener enableOkButton(); } } - + // enable the selection change mDisableAvdSelectionChange = false; } diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/launch/EmulatorConfigTab.java b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/launch/EmulatorConfigTab.java index fd9a1c282..eadbb2bf1 100644 --- a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/launch/EmulatorConfigTab.java +++ b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/launch/EmulatorConfigTab.java @@ -24,8 +24,8 @@ import com.android.ide.eclipse.common.project.BaseProjectHelper; import com.android.ide.eclipse.ddms.DdmsPlugin; import com.android.prefs.AndroidLocation.AndroidLocationException; import com.android.sdklib.IAndroidTarget; -import com.android.sdklib.avd.AvdManager; -import com.android.sdklib.avd.AvdManager.AvdInfo; +import com.android.sdklib.internal.avd.AvdManager; +import com.android.sdklib.internal.avd.AvdManager.AvdInfo; import com.android.sdkuilib.AvdSelector; import com.android.sdkuilib.AvdSelector.SelectionMode; @@ -131,7 +131,7 @@ public class EmulatorConfigTab extends AbstractLaunchConfigurationTab { */ public void createControl(Composite parent) { Font font = parent.getFont(); - + // reload the AVDs to make sure we are up to date try { Sdk.getCurrent().getAvdManager().reloadAvds(); @@ -150,7 +150,7 @@ public class EmulatorConfigTab extends AbstractLaunchConfigurationTab { GridData gd; GridLayout layout; - + // radio button for the target mode Group targetModeGroup = new Group(topComp, SWT.NONE); targetModeGroup.setText("Deployment Target Selection Mode"); @@ -175,7 +175,7 @@ public class EmulatorConfigTab extends AbstractLaunchConfigurationTab { @Override public void widgetSelected(SelectionEvent e) { updateLaunchConfigurationDialog(); - + boolean auto = mAutoTargetButton.getSelection(); mPreferredAvdSelector.setEnabled(auto); mPreferredAvdLabel.setEnabled(auto); @@ -285,7 +285,7 @@ public class EmulatorConfigTab extends AbstractLaunchConfigurationTab { updateLaunchConfigurationDialog(); } }); - + // custom command line option for emulator Label l = new Label(mEmulatorOptionsGroup, SWT.NONE); l.setText("Additional Emulator Command Line Options"); @@ -316,12 +316,12 @@ public class EmulatorConfigTab extends AbstractLaunchConfigurationTab { return DdmsPlugin.getImageLoader().loadImage("emulator.png", null); //$NON-NLS-1$ } - + private void updateAvdList(AvdManager avdManager) { if (avdManager == null) { avdManager = Sdk.getCurrent().getAvdManager(); } - + AvdInfo[] avds = null; // no project? we don't want to display any "compatible" AVDs. if (avdManager != null && mProjectTarget != null) { @@ -346,7 +346,7 @@ public class EmulatorConfigTab extends AbstractLaunchConfigurationTab { } mAutoTargetButton.setSelection(mode.getValue()); mManualTargetButton.setSelection(!mode.getValue()); - + // look for the project name to get its target. String stringValue = ""; try { @@ -487,7 +487,7 @@ public class EmulatorConfigTab extends AbstractLaunchConfigurationTab { LaunchConfigDelegate.DEFAULT_WIPE_DATA); configuration.setAttribute(LaunchConfigDelegate.ATTR_NO_BOOT_ANIM, LaunchConfigDelegate.DEFAULT_NO_BOOT_ANIM); - + IPreferenceStore store = AdtPlugin.getDefault().getPreferenceStore(); String emuOptions = store.getString(AdtPlugin.PREFS_EMU_OPTIONS); configuration.setAttribute(LaunchConfigDelegate.ATTR_COMMANDLINE, emuOptions); diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/sdk/Sdk.java b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/sdk/Sdk.java index 40b3f76ec..03ebf3eeb 100644 --- a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/sdk/Sdk.java +++ b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/sdk/Sdk.java @@ -26,10 +26,10 @@ import com.android.sdklib.IAndroidTarget; import com.android.sdklib.ISdkLog; import com.android.sdklib.SdkConstants; import com.android.sdklib.SdkManager; -import com.android.sdklib.avd.AvdManager; -import com.android.sdklib.project.ApkConfigurationHelper; -import com.android.sdklib.project.ProjectProperties; -import com.android.sdklib.project.ProjectProperties.PropertyType; +import com.android.sdklib.internal.avd.AvdManager; +import com.android.sdklib.internal.project.ApkConfigurationHelper; +import com.android.sdklib.internal.project.ProjectProperties; +import com.android.sdklib.internal.project.ProjectProperties.PropertyType; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IncrementalProjectBuilder; @@ -50,10 +50,10 @@ import java.util.Map; /** * Central point to load, manipulate and deal with the Android SDK. Only one SDK can be used * at the same time. - * + * * To start using an SDK, call {@link #loadSdk(String)} which returns the instance of * the Sdk object. - * + * * To get the list of platforms or add-ons present in the SDK, call {@link #getTargets()}. */ public class Sdk implements IProjectListener { @@ -64,12 +64,12 @@ public class Sdk implements IProjectListener { private final HashMap mProjectTargetMap = new HashMap(); - private final HashMap mTargetDataMap = + private final HashMap mTargetDataMap = new HashMap(); private final HashMap> mProjectApkConfigMap = - new HashMap>(); + new HashMap>(); private final String mDocBaseUrl; - + /** * Classes implementing this interface will receive notification when targets are changed. */ @@ -78,14 +78,14 @@ public class Sdk implements IProjectListener { * Sent when project has its target changed. */ void onProjectTargetChange(IProject changedProject); - + /** * Called when the targets are loaded (either the SDK finished loading when Eclipse starts, * or the SDK is changed). */ void onTargetsLoaded(); } - + /** * Loads an SDK and returns an {@link Sdk} object if success. * @param sdkLocation the OS path to the SDK. @@ -102,7 +102,7 @@ public class Sdk implements IProjectListener { if (errorFormat != null) { logMessages.add(String.format("Error: " + errorFormat, arg)); } - + if (throwable != null) { logMessages.add(throwable.getMessage()); } @@ -111,7 +111,7 @@ public class Sdk implements IProjectListener { public void warning(String warningFormat, Object... arg) { logMessages.add(String.format("Warning: " + warningFormat, arg)); } - + public void printf(String msgFormat, Object... arg) { logMessages.add(String.format(msgFormat, arg)); } @@ -145,18 +145,18 @@ public class Sdk implements IProjectListener { public static Sdk getCurrent() { return sCurrentSdk; } - + /** * Returns the location (OS path) of the current SDK. */ public String getSdkLocation() { return mManager.getLocation(); } - + /** * Returns the URL to the local documentation. * Can return null if no documentation is found in the current SDK. - * + * * @return A file:// URL on the local documentation folder if it exists or null. */ public String getDocumentationBaseUrl() { @@ -169,20 +169,20 @@ public class Sdk implements IProjectListener { public IAndroidTarget[] getTargets() { return mManager.getTargets(); } - + /** * Returns a target from a hash that was generated by {@link IAndroidTarget#hashString()}. - * + * * @param hash the {@link IAndroidTarget} hash string. * @return The matching {@link IAndroidTarget} or null. */ public IAndroidTarget getTargetFromHashString(String hash) { return mManager.getTargetFromHashString(hash); } - + /** * Sets a new target and a new list of Apk configuration for a given project. - * + * * @param project the project to receive the new apk configurations * @param target The new target to set, or null to not change the current target. * @param apkConfigMap a map of apk configurations. The map contains (name, filter) where name @@ -212,21 +212,21 @@ public class Sdk implements IProjectListener { if (target != previousTarget) { // save the target hash string in the project persistent property properties.setAndroidTarget(target); - + // put it in a local map for easy access. mProjectTargetMap.put(project, target); - + resolveProject = true; } } - + if (apkConfigMap != null) { // save the apk configs in the project persistent property cleanProject = ApkConfigurationHelper.setConfigs(properties, apkConfigMap); // put it in a local map for easy access. mProjectApkConfigMap.put(project, apkConfigMap); - + compileProject = true; } @@ -237,7 +237,7 @@ public class Sdk implements IProjectListener { AdtPlugin.log(e, "Failed to save default.properties for project '%s'", project.getName()); } - + if (resolveProject) { // force a resolve of the project by updating the classpath container. IJavaProject javaProject = JavaCore.create(project); @@ -258,14 +258,14 @@ public class Sdk implements IProjectListener { new IJavaProject[] { javaProject }); } } - + // finally, update the opened editors. if (resolveProject) { AdtPlugin.getDefault().updateTargetListener(project); } } } - + /** * Returns the {@link IAndroidTarget} object associated with the given {@link IProject}. */ @@ -284,7 +284,7 @@ public class Sdk implements IProjectListener { return target; } } - + /** * Parses the project properties and returns the hash string uniquely identifying the @@ -294,7 +294,7 @@ public class Sdk implements IProjectListener { * the root folder of the project. *

The returned string is equivalent to the return of {@link IAndroidTarget#hashString()}. * @param project The project for which to return the target hash string. - * @param sdkStorage The sdk in which to store the Apk Configs. Can be null. + * @param sdkStorage The sdk in which to store the Apk Configs. Can be null. * @return the hash string or null if the project does not have a target set. */ private static String loadProjectProperties(IProject project, Sdk sdkStorage) { @@ -311,18 +311,18 @@ public class Sdk implements IProjectListener { project.getName()); return null; } - + if (sdkStorage != null) { Map configMap = ApkConfigurationHelper.getConfigs(properties); - + if (configMap != null) { sdkStorage.mProjectApkConfigMap.put(project, configMap); } } - + return properties.getProperty(ProjectProperties.PROPERTY_TARGET); } - + /** * Returns the hash string uniquely identifying the target of a project. *

@@ -352,10 +352,10 @@ public class Sdk implements IProjectListener { properties = ProjectProperties.create(project.getLocation().toOSString(), PropertyType.DEFAULT); } - + // add/change the target hash string. properties.setProperty(ProjectProperties.PROPERTY_TARGET, targetHashString); - + // and rewrite the file. try { properties.save(); @@ -372,7 +372,7 @@ public class Sdk implements IProjectListener { return mTargetDataMap.get(target); } } - + /** * Returns the configuration map for a given project. *

The Map key are name to be used in the apk filename, while the values are comma separated @@ -381,7 +381,7 @@ public class Sdk implements IProjectListener { public Map getProjectApkConfigs(IProject project) { return mProjectApkConfigMap.get(project); } - + /** * Returns the {@link AvdManager}. If the AvdManager failed to parse the AVD folder, this could * be null. @@ -389,15 +389,15 @@ public class Sdk implements IProjectListener { public AvdManager getAvdManager() { return mAvdManager; } - + private Sdk(SdkManager manager, AvdManager avdManager) { mManager = manager; mAvdManager = avdManager; - + // listen to projects closing ResourceMonitor monitor = ResourceMonitor.getMonitor(); monitor.addProjectListener(this); - + // pre-compute some paths mDocBaseUrl = getDocumentationBaseUrl(mManager.getLocation() + SdkConstants.OS_SDK_DOCS_FOLDER); @@ -409,17 +409,17 @@ public class Sdk implements IProjectListener { private void dispose() { ResourceMonitor.getMonitor().removeProjectListener(this); } - + void setTargetData(IAndroidTarget target, AndroidTargetData data) { synchronized (mTargetDataMap) { mTargetDataMap.put(target, data); } } - + /** * Returns the URL to the local documentation. * Can return null if no documentation is found in the current SDK. - * + * * @param osDocsPath Path to the documentation folder in the current SDK. * The folder may not actually exist. * @return A file:// URL on the local documentation folder if it exists or null. @@ -434,12 +434,12 @@ public class Sdk implements IProjectListener { // Windows, namely "C:\\foo" is converted to "file:/C:/foo" instead of // "file:///C:/foo" (i.e. there should be 3 / after "file:"). So we'll // do the correct thing manually. - + String path = f.getAbsolutePath(); if (File.separatorChar != '/') { path = path.replace(File.separatorChar, '/'); } - + // For some reason the URL class doesn't add the mandatory "//" after // the "file:" protocol name, so it has to be hacked into the path. URL url = new URL("file", null, "//" + path); //$NON-NLS-1$ //$NON-NLS-2$ @@ -467,7 +467,7 @@ public class Sdk implements IProjectListener { } } } - + // now remove the project for the maps. mProjectTargetMap.remove(project); mProjectApkConfigMap.remove(project); diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/wizards/avdmanager/AvdManagerListPage.java b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/wizards/avdmanager/AvdManagerListPage.java index ba5d0a24b..62288d62e 100755 --- a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/wizards/avdmanager/AvdManagerListPage.java +++ b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/wizards/avdmanager/AvdManagerListPage.java @@ -24,8 +24,8 @@ import com.android.prefs.AndroidLocation; import com.android.prefs.AndroidLocation.AndroidLocationException; import com.android.sdklib.IAndroidTarget; import com.android.sdklib.ISdkLog; -import com.android.sdklib.avd.AvdManager; -import com.android.sdklib.avd.AvdManager.AvdInfo; +import com.android.sdklib.internal.avd.AvdManager; +import com.android.sdklib.internal.avd.AvdManager.AvdInfo; import com.android.sdkuilib.AvdSelector; import com.android.sdkuilib.AvdSelector.SelectionMode; @@ -67,7 +67,7 @@ class AvdManagerListPage extends WizardPage { private HashSet mKnownAvdNames = new HashSet(); private TreeMap mCurrentTargets = new TreeMap(); private ITargetChangeListener mSdkTargetChangeListener; - + /** * Constructs a new {@link AvdManagerListPage}. *

@@ -80,9 +80,9 @@ class AvdManagerListPage extends WizardPage { /** * Called by the parent Wizard to create the UI for this Wizard Page. - * + * * {@inheritDoc} - * + * * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite) */ public void createControl(Composite parent) { @@ -108,7 +108,7 @@ class AvdManagerListPage extends WizardPage { reloadTargetCombo(); validatePage(); } - + private void registerSdkChangeListener() { mSdkTargetChangeListener = new ITargetChangeListener() { @@ -123,9 +123,9 @@ class AvdManagerListPage extends WizardPage { reloadTargetCombo(); validatePage(); } - }; + }; AdtPlugin.getDefault().addTargetListener(mSdkTargetChangeListener); - + } @Override @@ -134,7 +134,7 @@ class AvdManagerListPage extends WizardPage { AdtPlugin.getDefault().removeTargetListener(mSdkTargetChangeListener); mSdkTargetChangeListener = null; } - + super.dispose(); } @@ -147,7 +147,7 @@ class AvdManagerListPage extends WizardPage { final Composite grid2 = new Composite(parent, SWT.NONE); grid2.setLayout(new GridLayout(2, false /*makeColumnsEqualWidth*/)); grid2.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - + Label label = new Label(grid2, SWT.NONE); label.setText("List of existing Android Virtual Devices:"); label.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, true, false)); @@ -178,12 +178,12 @@ class AvdManagerListPage extends WizardPage { } }); } - + /** * Creates the "Create" group */ private void createCreateGroup(Composite parent) { - + Group grid = new Group(parent, SWT.SHADOW_ETCHED_IN); grid.setLayout(new GridLayout(4, false /*makeColumnsEqualWidth*/)); grid.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); @@ -194,14 +194,14 @@ class AvdManagerListPage extends WizardPage { Label label = new Label(grid, SWT.NONE); label.setText("Name"); - + mCreateName = new Text(grid, SWT.BORDER); mCreateName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); mCreateName.addModifyListener(new CreateNameModifyListener()); label = new Label(grid, SWT.NONE); label.setText("Target"); - + mCreateTargetCombo = new Combo(grid, SWT.READ_ONLY | SWT.DROP_DOWN); mCreateTargetCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); mCreateTargetCombo.addSelectionListener(new SelectionAdapter() { @@ -210,30 +210,30 @@ class AvdManagerListPage extends WizardPage { super.widgetSelected(e); reloadSkinCombo(); validatePage(); - } + } }); // second line - + label = new Label(grid, SWT.NONE); label.setText("SDCard"); - + ValidateListener validateListener = new ValidateListener(); - + mCreateSdCard = new Text(grid, SWT.BORDER); mCreateSdCard.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); mCreateSdCard.addModifyListener(validateListener); label = new Label(grid, SWT.NONE); label.setText("Skin"); - + mCreateSkinCombo = new Combo(grid, SWT.READ_ONLY | SWT.DROP_DOWN); mCreateSkinCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - + // dummies for alignment label = new Label(grid, SWT.NONE); - label = new Label(grid, SWT.NONE); - + label = new Label(grid, SWT.NONE); + mCreateForce = new Button(grid, SWT.CHECK); mCreateForce.setText("Force"); mCreateForce.setEnabled(false); @@ -250,7 +250,7 @@ class AvdManagerListPage extends WizardPage { } }); } - + /** * Callback when the AVD name is changed. * Enables the force checkbox if the name is a duplicate. @@ -268,34 +268,34 @@ class AvdManagerListPage extends WizardPage { validatePage(); } } - + private class ValidateListener extends SelectionAdapter implements ModifyListener { public void modifyText(ModifyEvent e) { validatePage(); } - + @Override public void widgetSelected(SelectionEvent e) { super.widgetSelected(e); validatePage(); } } - + private void reloadTargetCombo() { - + String selected = null; int index = mCreateTargetCombo.getSelectionIndex(); if (index >= 0) { selected = mCreateTargetCombo.getItem(index); } - + mCurrentTargets.clear(); mCreateTargetCombo.removeAll(); boolean found = false; index = -1; - + Sdk sdk = Sdk.getCurrent(); if (sdk != null) { for (IAndroidTarget target : sdk.getTargets()) { @@ -312,11 +312,11 @@ class AvdManagerListPage extends WizardPage { } mCreateTargetCombo.setEnabled(mCurrentTargets.size() > 0); - + if (found) { mCreateTargetCombo.select(index); } - + reloadSkinCombo(); } @@ -326,13 +326,13 @@ class AvdManagerListPage extends WizardPage { if (index >= 0) { selected = mCreateSkinCombo.getItem(index); } - + mCreateSkinCombo.removeAll(); mCreateSkinCombo.setEnabled(false); - + index = mCreateTargetCombo.getSelectionIndex(); if (index >= 0) { - + String targetName = mCreateTargetCombo.getItem(index); boolean found = false; @@ -371,7 +371,7 @@ class AvdManagerListPage extends WizardPage { String warning = null; - // Validate AVD name + // Validate AVD name String avdName = mCreateName.getText().trim(); boolean hasAvdName = avdName.length() > 0; if (hasAvdName && !AvdManager.RE_AVD_NAME.matcher(avdName).matches()) { @@ -379,7 +379,7 @@ class AvdManagerListPage extends WizardPage { "AVD name '%1$s' contains invalid characters. Allowed characters are: %2$s", avdName, AvdManager.CHARS_AVD_NAME); } - + // Validate target if (hasAvdName && error == null && mCreateTargetCombo.getSelectionIndex() < 0) { error = "A target must be selected in order to create an AVD."; @@ -388,14 +388,14 @@ class AvdManagerListPage extends WizardPage { // Validate SDCard path or value if (error == null) { String sdName = mCreateSdCard.getText().trim(); - + if (sdName.length() > 0 && !new File(sdName).isFile() && !AvdManager.SDCARD_SIZE_PATTERN.matcher(sdName).matches()) { - error = "SD Card must be either a file path or a size such as 128K or 64M."; + error = "SD Card must be either a file path or a size such as 128K or 64M."; } } - + // Check for duplicate AVD name if (hasAvdName && error == null) { if (mKnownAvdNames.contains(avdName) && !mCreateForce.getSelection()) { @@ -405,7 +405,7 @@ class AvdManagerListPage extends WizardPage { avdName); } } - + // Validate the create button boolean can_create = hasAvdName && error == null; if (can_create) { @@ -434,7 +434,7 @@ class AvdManagerListPage extends WizardPage { AvdManager avdm = getAvdManager(); AvdInfo[] avds = null; - + // For the AVD manager to reload the list, in case AVDs where created using the // command line tool. // The AVD manager may not exist yet, typically when loading the SDK. @@ -447,7 +447,7 @@ class AvdManagerListPage extends WizardPage { avds = avdm.getValidAvds(); } - + mAvdSelector.setAvds(avds, null /*filter*/); // Keep the list of known AVD names to check if they exist quickly. however @@ -462,7 +462,7 @@ class AvdManagerListPage extends WizardPage { } } } - + mAvdSelector.setSelection(selected); } @@ -476,7 +476,7 @@ class AvdManagerListPage extends WizardPage { if (avdInfo == null || avdm == null) { return; } - + // Confirm you want to delete this AVD if (!AdtPlugin.displayPrompt("Delete Android Virtual Device", String.format("Please confirm that you want to delete the Android Virtual Device named '%s'. This operation cannot be reverted.", @@ -485,9 +485,9 @@ class AvdManagerListPage extends WizardPage { } SdkLog log = new SdkLog(String.format("Result of deleting AVD '%s':", avdInfo.getName())); - + boolean success = avdm.deleteAvd(avdInfo, log); - + log.display(success); reloadAvdList(); } @@ -514,13 +514,13 @@ class AvdManagerListPage extends WizardPage { if (target == null) { return; } - + String skinName = null; if (skinIndex > 0) { // index 0 is the default, we don't use it skinName = mCreateSkinCombo.getItem(skinIndex); } - + SdkLog log = new SdkLog(String.format("Result of creating AVD '%s':", avdName)); File avdFolder; @@ -541,9 +541,9 @@ class AvdManagerListPage extends WizardPage { // takes a logger argument. // TODO revisit this later. See comments in AvdManager#mSdkLog. oldLog = avdm.setSdkLog(log); - + AvdInfo avdInfo = avdm.createAvd( - avdFolder, + avdFolder, avdName, target, skinName, @@ -552,13 +552,13 @@ class AvdManagerListPage extends WizardPage { force); success = avdInfo != null; - + } finally { avdm.setSdkLog(oldLog); } - + log.display(success); - + if (success) { // clear the name field on success mCreateName.setText(""); //$NON-NLS-1$ @@ -571,19 +571,19 @@ class AvdManagerListPage extends WizardPage { * Collects all log from the AVD action and displays it in a dialog. */ private class SdkLog implements ISdkLog { - + final ArrayList logMessages = new ArrayList(); private final String mMessage; public SdkLog(String message) { mMessage = message; } - + public void error(Throwable throwable, String errorFormat, Object... arg) { if (errorFormat != null) { logMessages.add(String.format("Error: " + errorFormat, arg)); } - + if (throwable != null) { logMessages.add(throwable.getMessage()); } @@ -592,7 +592,7 @@ class AvdManagerListPage extends WizardPage { public void warning(String warningFormat, Object... arg) { logMessages.add(String.format("Warning: " + warningFormat, arg)); } - + public void printf(String msgFormat, Object... arg) { logMessages.add(String.format(msgFormat, arg)); } @@ -613,7 +613,7 @@ class AvdManagerListPage extends WizardPage { AdtPlugin.displayError("Android Virtual Devices Manager", sb.toString()); } } - } + } } /** diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/wizards/newproject/NewProjectCreationPage.java b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/wizards/newproject/NewProjectCreationPage.java index e66639063..8190a3c19 100644 --- a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/wizards/newproject/NewProjectCreationPage.java +++ b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/wizards/newproject/NewProjectCreationPage.java @@ -31,8 +31,8 @@ import com.android.ide.eclipse.common.project.AndroidManifestParser; import com.android.ide.eclipse.common.project.AndroidManifestParser.Activity; import com.android.sdklib.IAndroidTarget; import com.android.sdklib.SdkConstants; -import com.android.sdklib.project.ProjectProperties; -import com.android.sdklib.project.ProjectProperties.PropertyType; +import com.android.sdklib.internal.project.ProjectProperties; +import com.android.sdklib.internal.project.ProjectProperties.PropertyType; import com.android.sdkuilib.SdkTargetSelector; import org.eclipse.core.filesystem.URIUtil;