summaryrefslogtreecommitdiff
path: root/device-manager
diff options
context:
space:
mode:
authorHannah Chu <hanchu@google.com>2022-04-19 17:16:17 -0700
committerJuan C Nuno <juancnuno@google.com>2022-05-12 15:18:23 -0700
commit92e34514defbf160331127fa38800588e4d7af13 (patch)
tree1be7351fb8441b803baaa67e5f00bd0f5165b3a0 /device-manager
parentae3705a102175560c955c234037268db4e0a7986 (diff)
downloadidea-92e34514defbf160331127fa38800588e4d7af13.tar.gz
[DM] Add basic screen diagram in details panel
It only shows dp and is missing much of the other info the AVD creation dialog has access to: diagonal length, chin size, round screens, and folded/rolled lines. Bug: 196438095 Test: visual Change-Id: Ib05b307099188d270686653c4f3ea50af2acba19
Diffstat (limited to 'device-manager')
-rw-r--r--device-manager/src/com/android/tools/idea/devicemanager/DetailsPanel.java17
-rw-r--r--device-manager/src/com/android/tools/idea/devicemanager/ScreenDiagram.java5
-rw-r--r--device-manager/src/com/android/tools/idea/devicemanager/physicaltab/PhysicalDeviceDetailsPanel.java19
-rw-r--r--device-manager/src/com/android/tools/idea/devicemanager/virtualtab/VirtualDeviceDetailsPanel.java2
4 files changed, 37 insertions, 6 deletions
diff --git a/device-manager/src/com/android/tools/idea/devicemanager/DetailsPanel.java b/device-manager/src/com/android/tools/idea/devicemanager/DetailsPanel.java
index 176e0aca0b0..306d319e8d5 100644
--- a/device-manager/src/com/android/tools/idea/devicemanager/DetailsPanel.java
+++ b/device-manager/src/com/android/tools/idea/devicemanager/DetailsPanel.java
@@ -48,6 +48,7 @@ public class DetailsPanel extends JBPanel<DetailsPanel> implements Disposable {
private final @NotNull Component myHeadingLabel;
private final @NotNull AbstractButton myCloseButton;
protected final @NotNull Collection<@NotNull InfoSection> myInfoSections;
+ protected @Nullable Component myScreenDiagram;
protected final @NotNull Container myInfoSectionPanel;
private final @NotNull Component myScrollPane;
protected @Nullable Component myPairedDevicesPanel;
@@ -92,8 +93,20 @@ public class DetailsPanel extends JBPanel<DetailsPanel> implements Disposable {
Iterator<InfoSection> i = myInfoSections.iterator();
Component section = i.next();
- horizontalGroup.addComponent(section);
- verticalGroup.addComponent(section);
+ if (myScreenDiagram == null) {
+ horizontalGroup.addComponent(section);
+ verticalGroup.addComponent(section);
+ }
+ else {
+ horizontalGroup.addGroup(layout.createSequentialGroup()
+ .addComponent(section)
+ .addPreferredGap(ComponentPlacement.UNRELATED)
+ .addComponent(myScreenDiagram));
+
+ verticalGroup.addGroup(layout.createParallelGroup()
+ .addComponent(section)
+ .addComponent(myScreenDiagram));
+ }
while (i.hasNext()) {
section = i.next();
diff --git a/device-manager/src/com/android/tools/idea/devicemanager/ScreenDiagram.java b/device-manager/src/com/android/tools/idea/devicemanager/ScreenDiagram.java
index cc830033ec6..a0d547778c7 100644
--- a/device-manager/src/com/android/tools/idea/devicemanager/ScreenDiagram.java
+++ b/device-manager/src/com/android/tools/idea/devicemanager/ScreenDiagram.java
@@ -118,8 +118,7 @@ public final class ScreenDiagram extends JPanel {
graphics2d.setStroke(new BasicStroke(getDimensionLineWidth()));
FontMetrics metrics = graphics2d.getFontMetrics(AvdWizardUtils.FIGURE_FONT);
- int textHeight = metrics.getHeight() - metrics.getDescent();
- int lineY = textHeight / 2;
+ int lineY = metrics.getHeight() / 2;
graphics2d.drawLine(getLeftPadding(), lineY, round(getLeftPadding() + scaledDimension.width), lineY);
@@ -138,7 +137,7 @@ public final class ScreenDiagram extends JPanel {
// Paint the text
graphics2d.setColor(getForeground());
- graphics2d.drawString(text, textX, textHeight);
+ graphics2d.drawString(text, textX, metrics.getHeight() - metrics.getDescent());
}
private void paintScreen(@NotNull Graphics2D graphics2d, @NotNull Dimension scaledDimension) {
diff --git a/device-manager/src/com/android/tools/idea/devicemanager/physicaltab/PhysicalDeviceDetailsPanel.java b/device-manager/src/com/android/tools/idea/devicemanager/physicaltab/PhysicalDeviceDetailsPanel.java
index e46b0a244e3..c73c21a1a6e 100644
--- a/device-manager/src/com/android/tools/idea/devicemanager/physicaltab/PhysicalDeviceDetailsPanel.java
+++ b/device-manager/src/com/android/tools/idea/devicemanager/physicaltab/PhysicalDeviceDetailsPanel.java
@@ -20,15 +20,18 @@ import com.android.tools.idea.devicemanager.DeviceManagerFutureCallback;
import com.android.tools.idea.devicemanager.DeviceType;
import com.android.tools.idea.devicemanager.InfoSection;
import com.android.tools.idea.devicemanager.PairedDevicesPanel;
+import com.android.tools.idea.devicemanager.ScreenDiagram;
import com.android.tools.idea.flags.StudioFlags;
import com.android.tools.idea.wearpairing.WearPairingManager;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
import com.intellij.openapi.project.Project;
import com.intellij.ui.components.JBLabel;
import com.intellij.util.concurrency.EdtExecutorService;
import java.awt.Component;
+import java.util.concurrent.Executor;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Group;
import javax.swing.JLabel;
@@ -85,12 +88,17 @@ final class PhysicalDeviceDetailsPanel extends DetailsPanel {
myOnline = device.isOnline();
if (myOnline) {
+ ListenableFuture<PhysicalDevice> future = builder.buildAsync();
+ Executor executor = EdtExecutorService.getInstance();
+
mySummarySection = new SummarySection();
- Futures.addCallback(builder.buildAsync(), newSummarySectionCallback.apply(mySummarySection), EdtExecutorService.getInstance());
+ Futures.addCallback(future, newSummarySectionCallback.apply(mySummarySection), executor);
myInfoSections.add(mySummarySection);
InfoSection.newPairedDeviceSection(device, manager).ifPresent(myInfoSections::add);
+ Futures.addCallback(future, newScreenDiagramCallback(), executor);
+
if (StudioFlags.PAIRED_DEVICES_TAB_ENABLED.get() && device.getType().equals(DeviceType.PHONE)) {
myPairedDevicesPanel = new PairedDevicesPanel(device.getKey(), this, builder.getProject());
}
@@ -114,6 +122,15 @@ final class PhysicalDeviceDetailsPanel extends DetailsPanel {
});
}
+ private @NotNull FutureCallback<@NotNull PhysicalDevice> newScreenDiagramCallback() {
+ return new DeviceManagerFutureCallback<>(PhysicalDeviceDetailsPanel.class, device -> {
+ if (device.getDp() != null) {
+ myScreenDiagram = new ScreenDiagram(device);
+ setInfoSectionPanelLayout();
+ }
+ });
+ }
+
@Override
protected void setInfoSectionPanelLayout() {
if (myOnline) {
diff --git a/device-manager/src/com/android/tools/idea/devicemanager/virtualtab/VirtualDeviceDetailsPanel.java b/device-manager/src/com/android/tools/idea/devicemanager/virtualtab/VirtualDeviceDetailsPanel.java
index 39134851957..f83accc4704 100644
--- a/device-manager/src/com/android/tools/idea/devicemanager/virtualtab/VirtualDeviceDetailsPanel.java
+++ b/device-manager/src/com/android/tools/idea/devicemanager/virtualtab/VirtualDeviceDetailsPanel.java
@@ -21,6 +21,7 @@ import com.android.sdklib.internal.avd.AvdManager;
import com.android.tools.idea.devicemanager.DetailsPanel;
import com.android.tools.idea.devicemanager.InfoSection;
import com.android.tools.idea.devicemanager.PairedDevicesPanel;
+import com.android.tools.idea.devicemanager.ScreenDiagram;
import com.android.tools.idea.flags.StudioFlags;
import com.android.tools.idea.wearpairing.WearPairingManager;
import com.google.common.annotations.VisibleForTesting;
@@ -72,6 +73,7 @@ final class VirtualDeviceDetailsPanel extends DetailsPanel {
myInfoSections.add(myPropertiesSection);
}
+ myScreenDiagram = new ScreenDiagram(myDevice);
init();
}