/*
* 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.launch.ui;
import java.util.Collection;
import java.util.Properties;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.sequoyah.device.framework.model.IInstance;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.ElementListSelectionDialog;
import com.motorola.studio.android.adt.ISerialNumbered;
import com.motorola.studio.android.devices.DevicesManager;
import com.motorola.studio.android.emulator.core.model.IAndroidEmulatorInstance;
import com.motorola.studio.android.launch.LaunchPlugin;
import com.motorola.studio.android.launch.LaunchUtils;
import com.motorola.studio.android.launch.i18n.LaunchNLS;
/**
* DESCRIPTION:
* This class implements the device selection dialog
*
* RESPONSIBILITY:
* Provides a dialog populated with the available device instances
*
* COLABORATORS:
* None.
*
* USAGE:
* This class is intended to be used by Eclipse only
*/
public class DeviceSelectionDialog extends ElementListSelectionDialog
{
private static final String DEV_SELECTION_CONTEXT_HELP_ID = LaunchPlugin.PLUGIN_ID
+ ".deviceSelectionDialog";
/**
* Default constructor
*
* @param parent Parent shell
* @param description Dialog description
*/
public DeviceSelectionDialog(Shell parent, String description, final IProject project)
{
super(parent, new LabelProvider()
{
@Override
public String getText(Object element)
{
String result = "";
if (element instanceof ISerialNumbered)
{
ISerialNumbered serialNumbered = (ISerialNumbered) element;
result = serialNumbered.getDeviceName();
if (serialNumbered instanceof IAndroidEmulatorInstance)
{
IAndroidEmulatorInstance emulatorInstance =
(IAndroidEmulatorInstance) serialNumbered;
int emulatorApi = emulatorInstance.getAPILevel();
String emulatorTarget = emulatorInstance.getTarget();
result += " (" + emulatorTarget + ", Api version " + emulatorApi + ")";
}
else if (serialNumbered instanceof IInstance)
{
IInstance instance = (IInstance) serialNumbered;
Properties properties = instance.getProperties();
if (properties != null)
{
String target = properties.getProperty("ro.build.version.release"); //$NON-NLS-1$
if (target != null)
{
result += " (Android " + target + ")";
}
}
}
}
return result;
}
@Override
public Image getImage(Object element)
{
Image img = null;
ISerialNumbered serialNumbered = (ISerialNumbered) element;
IStatus compatible = LaunchUtils.isCompatible(project, serialNumbered);
// notify the warning state
if (compatible.getSeverity() == IStatus.WARNING)
{
img =
PlatformUI.getWorkbench().getSharedImages()
.getImage(ISharedImages.IMG_OBJS_WARN_TSK);
}
return img;
}
});
this.setTitle(LaunchNLS.UI_LaunchComposite_SelectDeviceScreenTitle);
this.setMessage(description);
Collection<ISerialNumbered> instances = DevicesManager.getInstance().getAllDevicesSorted();
if ((project != null) && (instances != null) && (instances.size() > 0))
{
Collection<ISerialNumbered> filteredInstances =
LaunchUtils.filterInstancesByProject(instances, project);
Object[] filteredInstancesArray = filteredInstances.toArray();
this.setElements(filteredInstancesArray);
}
this.setHelpAvailable(true);
PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, DEV_SELECTION_CONTEXT_HELP_ID);
}
}