blob: 6a5fa647a211d69f751eb18834b5cf4af2c78814 [file] [log] [blame]
/*
* Copyright (C) 2015 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.android.tools.idea.run;
import com.android.sdklib.repository.descriptors.IdDisplay;
import com.intellij.facet.Facet;
import com.intellij.ide.util.PropertiesComponent;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.util.Disposer;
import com.intellij.ui.ColoredListCellRenderer;
import com.intellij.ui.SimpleTextAttributes;
import org.jetbrains.android.run.AvdComboBox;
import org.jetbrains.android.util.AndroidBundle;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class LaunchEmulatorDialog extends DialogWrapper {
@NonNls private static final String SELECTED_AVD_PROPERTY = "ANDROID_EXTENDED_DEVICE_CHOOSER_AVD";
private final Facet myFacet;
private JPanel myPanel;
private JLabel myAvdLabel;
private JPanel myComboBoxWrapper;
private final AvdComboBox myAvdCombo;
public LaunchEmulatorDialog(@NotNull Facet facet) {
super(facet.getModule().getProject(), true, IdeModalityType.PROJECT);
myFacet = facet;
Project project = myFacet.getModule().getProject();
setTitle("Launch Emulator");
myAvdCombo = new AvdComboBox(project, false, true) {
@Override
public Module getModule() {
return myFacet.getModule();
}
};
Disposer.register(myDisposable, myAvdCombo);
myAvdCombo.getComboBox().setRenderer(new ColoredListCellRenderer() {
@Override
protected void customizeCellRenderer(JList list, Object value, int index, boolean selected, boolean hasFocus) {
if (value == null) {
append(AndroidBundle.message("android.ddms.nodevices"),
myAvdCombo.getComboBox().isEnabled()
? SimpleTextAttributes.ERROR_ATTRIBUTES
: SimpleTextAttributes.REGULAR_ATTRIBUTES);
}
else {
append(((IdDisplay)value).getDisplay());
}
}
});
myComboBoxWrapper.add(myAvdCombo);
myAvdLabel.setLabelFor(myAvdCombo);
init();
myAvdCombo.startUpdatingAvds(ModalityState.stateForComponent(myPanel));
final String savedAvd = PropertiesComponent.getInstance(project).getValue(SELECTED_AVD_PROPERTY);
String avdToSelect = null;
if (savedAvd != null) {
final ComboBoxModel model = myAvdCombo.getComboBox().getModel();
for (int i = 0, n = model.getSize(); i < n; i++) {
final IdDisplay item = (IdDisplay)model.getElementAt(i);
final String id = item == null? null : item.getId();
if (savedAvd.equals(id)) {
avdToSelect = id;
break;
}
}
}
if (avdToSelect != null) {
myAvdCombo.getComboBox().setSelectedItem(new IdDisplay(avdToSelect, ""));
}
else if (myAvdCombo.getComboBox().getModel().getSize() > 0) {
myAvdCombo.getComboBox().setSelectedIndex(0);
}
myAvdCombo.getComboBox().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
getOKAction().setEnabled(getSelectedAvd() != null);
}
});
}
@Nullable
public String getSelectedAvd() {
IdDisplay value = (IdDisplay)myAvdCombo.getComboBox().getSelectedItem();
return value == null ? null : value.getId();
}
@Override
protected void doOKAction() {
final PropertiesComponent properties = PropertiesComponent.getInstance(myFacet.getModule().getProject());
final IdDisplay selectedAvd = (IdDisplay)myAvdCombo.getComboBox().getSelectedItem();
if (selectedAvd != null) {
properties.setValue(SELECTED_AVD_PROPERTY, selectedAvd.getId());
}
else {
properties.unsetValue(SELECTED_AVD_PROPERTY);
}
super.doOKAction();
}
@Nullable
@Override
protected JComponent createCenterPanel() {
return myPanel;
}
}