blob: dc25e2e1c21b9cfb0622c23b137ead0c9b4afb4c [file] [log] [blame]
/*
* Copyright (C) 2014 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.avdmanager;
import com.android.sdklib.AndroidVersion;
import com.android.sdklib.IAndroidTarget;
import com.android.sdklib.internal.avd.AvdInfo;
import com.android.sdklib.internal.avd.AvdManager;
import com.android.utils.HtmlBuilder;
import com.intellij.icons.AllIcons;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.ide.CopyPasteManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.util.text.StringUtil;
import java.awt.datatransfer.StringSelection;
import java.awt.event.ActionEvent;
import java.util.HashMap;
import java.util.Map;
/**
* Display a summary of the AVD
*/
public class AvdSummaryAction extends AvdUiAction {
private static final Logger LOG = Logger.getInstance(AvdSummaryAction.class);
public AvdSummaryAction(AvdInfoProvider avdInfoProvider) {
super(avdInfoProvider, "View Details", "View details for debugging", AllIcons.General.BalloonInformation);
}
@Override
public void actionPerformed(ActionEvent e) {
AvdInfo info = getAvdInfo();
if (info == null) {
return;
}
HtmlBuilder htmlBuilder = new HtmlBuilder();
htmlBuilder.openHtmlBody();
htmlBuilder.addHtml("<br>Name: ").add(info.getName());
htmlBuilder.addHtml("<br>CPU/ABI: ").add(AvdInfo.getPrettyAbiType(info));
htmlBuilder.addHtml("<br>Path: ").add(info.getDataFolderPath());
if (info.getStatus() != AvdInfo.AvdStatus.OK) {
htmlBuilder.addHtml("<br>Error: ").add(info.getErrorMessage());
} else {
IAndroidTarget target = info.getTarget();
AndroidVersion version = target.getVersion();
htmlBuilder.addHtml("<br>Target: ").add(String.format("%1$s (API level %2$s)", target.getName(), version.getApiString()));
// display some extra values.
Map<String, String> properties = info.getProperties();
String skin = properties.get(AvdManager.AVD_INI_SKIN_NAME);
if (skin != null) {
htmlBuilder.addHtml("<br>Skin: ").add(skin);
}
String sdcard = properties.get(AvdManager.AVD_INI_SDCARD_SIZE);
if (sdcard == null) {
sdcard = properties.get(AvdManager.AVD_INI_SDCARD_PATH);
}
if (sdcard != null) {
htmlBuilder.addHtml("<br>SD Card: ").add(sdcard);
}
String snapshot = properties.get(AvdManager.AVD_INI_SNAPSHOT_PRESENT);
if (snapshot != null) {
htmlBuilder.addHtml("<br>Snapshot: ").add(snapshot);
}
// display other hardware
HashMap<String, String> copy = new HashMap<String, String>(properties);
// remove stuff we already displayed (or that we don't want to display)
copy.remove(AvdManager.AVD_INI_ABI_TYPE);
copy.remove(AvdManager.AVD_INI_CPU_ARCH);
copy.remove(AvdManager.AVD_INI_SKIN_NAME);
copy.remove(AvdManager.AVD_INI_SKIN_PATH);
copy.remove(AvdManager.AVD_INI_SDCARD_SIZE);
copy.remove(AvdManager.AVD_INI_SDCARD_PATH);
copy.remove(AvdManager.AVD_INI_IMAGES_1);
copy.remove(AvdManager.AVD_INI_IMAGES_2);
if (copy.size() > 0) {
for (Map.Entry<String, String> entry : copy.entrySet()) {
htmlBuilder.addHtml("<br>").add(entry.getKey()).add(": ").add(entry.getValue());
}
}
}
htmlBuilder.closeHtmlBody();
String[] options = {"Copy to Clipboard and Close", "Close"};
int i = Messages.showDialog((Project)null, htmlBuilder.getHtml(), "Details for " + info.getName(),
options, 0, AllIcons.General.InformationDialog);
if (i == 0) {
CopyPasteManager.getInstance().setContents(new StringSelection(StringUtil.stripHtml(htmlBuilder.getHtml(), true)));
}
}
@Override
public boolean isEnabled() {
return getAvdInfo() != null;
}
}