diff options
author | Hannah Chu <hanchu@google.com> | 2022-04-19 17:16:17 -0700 |
---|---|---|
committer | Juan C Nuno <juancnuno@google.com> | 2022-05-12 15:18:23 -0700 |
commit | 92e34514defbf160331127fa38800588e4d7af13 (patch) | |
tree | 1be7351fb8441b803baaa67e5f00bd0f5165b3a0 /device-manager | |
parent | ae3705a102175560c955c234037268db4e0a7986 (diff) | |
download | idea-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')
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(); } |