summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHannah Chu <hanchu@google.com>2022-07-01 16:48:35 -0700
committerTreeHugger Robot <treehugger-gerrit@google.com>2022-07-18 19:28:20 +0000
commit570f780e4a7c14a8616d5f372556f83ff7c7d925 (patch)
tree93bac8edfc43fa663b4da8f78b2b2d6953a4803c
parent0d0a6a4bce6a18dc6c7d8fce2e7463271ee5eabf (diff)
downloadidea-570f780e4a7c14a8616d5f372556f83ff7c7d925.tar.gz
[DM] Show error when AVD is not OK
Bug: 195485594 Test: VirtualDeviceTableCellRenderer Change-Id: If2c2ce2fc00dc48703195d438dea4ace2bbe3568
-rw-r--r--device-manager/src/com/android/tools/idea/devicemanager/DeviceTableCellRenderer.java22
-rw-r--r--device-manager/src/com/android/tools/idea/devicemanager/virtualtab/VirtualDeviceTableCellRenderer.java23
-rw-r--r--device-manager/testSrc/com/android/tools/idea/devicemanager/DeviceTableCellRendererTest.java4
-rw-r--r--device-manager/testSrc/com/android/tools/idea/devicemanager/virtualtab/VirtualDeviceTableCellRendererTest.java65
4 files changed, 103 insertions, 11 deletions
diff --git a/device-manager/src/com/android/tools/idea/devicemanager/DeviceTableCellRenderer.java b/device-manager/src/com/android/tools/idea/devicemanager/DeviceTableCellRenderer.java
index 43078d159a3..ed4c8d4d8c7 100644
--- a/device-manager/src/com/android/tools/idea/devicemanager/DeviceTableCellRenderer.java
+++ b/device-manager/src/com/android/tools/idea/devicemanager/DeviceTableCellRenderer.java
@@ -52,7 +52,7 @@ public class DeviceTableCellRenderer<D extends Device> implements TableCellRende
private final @NotNull JLabel myIconLabel;
private final @NotNull JLabel myNameLabel;
- private final @NotNull JLabel myOnlineLabel;
+ private final @NotNull JLabel myStateLabel;
private final @NotNull JLabel myLine2Label;
private final @NotNull JLabel myPairedLabel;
private final @NotNull JComponent myPanel;
@@ -68,7 +68,7 @@ public class DeviceTableCellRenderer<D extends Device> implements TableCellRende
myIconLabel = new JBLabel();
myNameLabel = new JBLabel();
- myOnlineLabel = new JBLabel();
+ myStateLabel = new JBLabel();
myLine2Label = new JBLabel();
myPairedLabel = new JBLabel();
@@ -82,7 +82,7 @@ public class DeviceTableCellRenderer<D extends Device> implements TableCellRende
.addGroup(layout.createSequentialGroup()
.addComponent(myNameLabel, 0, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(ComponentPlacement.RELATED)
- .addComponent(myOnlineLabel))
+ .addComponent(myStateLabel))
.addComponent(myLine2Label, 0, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addPreferredGap(ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(myPairedLabel)
@@ -94,7 +94,7 @@ public class DeviceTableCellRenderer<D extends Device> implements TableCellRende
.addGroup(layout.createParallelGroup(Alignment.CENTER)
.addComponent(myIconLabel)
.addComponent(myNameLabel)
- .addComponent(myOnlineLabel))
+ .addComponent(myStateLabel))
.addComponent(myLine2Label)
.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addComponent(myPairedLabel);
@@ -121,8 +121,8 @@ public class DeviceTableCellRenderer<D extends Device> implements TableCellRende
myNameLabel.setForeground(foreground);
myNameLabel.setText(getName(device));
- myOnlineLabel.setForeground(foreground);
- setIcon(myOnlineLabel, device.isOnline() ? StudioIcons.Avd.STATUS_DECORATOR_ONLINE : null, selected);
+ myStateLabel.setForeground(foreground);
+ setIcon(myStateLabel, getStateIcon(device), selected);
myLine2Label.setFont(UIUtil.getLabelFont(FontSize.SMALL));
myLine2Label.setForeground(brighten(foreground));
@@ -181,6 +181,10 @@ public class DeviceTableCellRenderer<D extends Device> implements TableCellRende
return device.getName();
}
+ protected @Nullable Icon getStateIcon(@NotNull D device) {
+ return device.isOnline() ? StudioIcons.Avd.STATUS_DECORATOR_ONLINE : null;
+ }
+
protected @NotNull String getLine2(@NotNull D device) {
return device.getTarget();
}
@@ -220,12 +224,12 @@ public class DeviceTableCellRenderer<D extends Device> implements TableCellRende
}
@VisibleForTesting
- final @NotNull JLabel getOnlineLabel() {
- return myOnlineLabel;
+ public final @NotNull JLabel getStateLabel() {
+ return myStateLabel;
}
@VisibleForTesting
- final @NotNull JLabel getLine2Label() {
+ public final @NotNull JLabel getLine2Label() {
return myLine2Label;
}
diff --git a/device-manager/src/com/android/tools/idea/devicemanager/virtualtab/VirtualDeviceTableCellRenderer.java b/device-manager/src/com/android/tools/idea/devicemanager/virtualtab/VirtualDeviceTableCellRenderer.java
index 3b3c9790ee2..a611933325e 100644
--- a/device-manager/src/com/android/tools/idea/devicemanager/virtualtab/VirtualDeviceTableCellRenderer.java
+++ b/device-manager/src/com/android/tools/idea/devicemanager/virtualtab/VirtualDeviceTableCellRenderer.java
@@ -15,8 +15,13 @@
*/
package com.android.tools.idea.devicemanager.virtualtab;
+import com.android.sdklib.internal.avd.AvdInfo;
+import com.android.sdklib.internal.avd.AvdInfo.AvdStatus;
import com.android.tools.idea.devicemanager.DeviceTableCellRenderer;
+import icons.StudioIcons;
+import javax.swing.Icon;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
final class VirtualDeviceTableCellRenderer extends DeviceTableCellRenderer<VirtualDevice> {
VirtualDeviceTableCellRenderer() {
@@ -24,7 +29,25 @@ final class VirtualDeviceTableCellRenderer extends DeviceTableCellRenderer<Virtu
}
@Override
+ protected @Nullable Icon getStateIcon(@NotNull VirtualDevice device) {
+ if (!device.getAvdInfo().getStatus().equals(AvdStatus.OK)) {
+ return StudioIcons.Common.WARNING_INLINE;
+ }
+
+ return super.getStateIcon(device);
+ }
+
+ @Override
protected @NotNull String getLine2(@NotNull VirtualDevice device) {
+ AvdInfo avd = device.getAvdInfo();
+
+ if (!avd.getStatus().equals(AvdStatus.OK)) {
+ String message = avd.getErrorMessage();
+
+ assert message != null;
+ return message;
+ }
+
return device.getTarget() + " | " + device.getCpuArchitecture();
}
}
diff --git a/device-manager/testSrc/com/android/tools/idea/devicemanager/DeviceTableCellRendererTest.java b/device-manager/testSrc/com/android/tools/idea/devicemanager/DeviceTableCellRendererTest.java
index 7394577f240..29b5d0b3ade 100644
--- a/device-manager/testSrc/com/android/tools/idea/devicemanager/DeviceTableCellRendererTest.java
+++ b/device-manager/testSrc/com/android/tools/idea/devicemanager/DeviceTableCellRendererTest.java
@@ -54,7 +54,7 @@ public final class DeviceTableCellRendererTest {
// Assert
assertEquals(TestPhysicalDevices.ONLINE_GOOGLE_PIXEL_3.getIcon(), renderer.getIconLabel().getIcon());
assertEquals(TestPhysicalDevices.ONLINE_GOOGLE_PIXEL_3.getName(), renderer.getNameLabel().getText());
- assertEquals(StudioIcons.Avd.STATUS_DECORATOR_ONLINE, renderer.getOnlineLabel().getIcon());
+ assertEquals(StudioIcons.Avd.STATUS_DECORATOR_ONLINE, renderer.getStateLabel().getIcon());
assertEquals(TestPhysicalDevices.ONLINE_GOOGLE_PIXEL_3.getTarget(), renderer.getLine2Label().getText());
}
@@ -121,7 +121,7 @@ public final class DeviceTableCellRendererTest {
// Assert
assertEquals(TestPhysicalDevices.GOOGLE_PIXEL_3.getIcon(), renderer.getIconLabel().getIcon());
assertEquals(TestPhysicalDevices.GOOGLE_PIXEL_3.getName(), renderer.getNameLabel().getText());
- assertNull(renderer.getOnlineLabel().getIcon());
+ assertNull(renderer.getStateLabel().getIcon());
assertEquals(TestPhysicalDevices.GOOGLE_PIXEL_3.getTarget(), renderer.getLine2Label().getText());
}
diff --git a/device-manager/testSrc/com/android/tools/idea/devicemanager/virtualtab/VirtualDeviceTableCellRendererTest.java b/device-manager/testSrc/com/android/tools/idea/devicemanager/virtualtab/VirtualDeviceTableCellRendererTest.java
new file mode 100644
index 00000000000..b23fb832b72
--- /dev/null
+++ b/device-manager/testSrc/com/android/tools/idea/devicemanager/virtualtab/VirtualDeviceTableCellRendererTest.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2022 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.devicemanager.virtualtab;
+
+import static org.junit.Assert.assertEquals;
+
+import com.android.sdklib.internal.avd.AvdInfo;
+import com.android.sdklib.internal.avd.AvdInfo.AvdStatus;
+import com.android.tools.idea.devicemanager.DeviceTableCellRenderer;
+import com.intellij.ui.table.JBTable;
+import icons.StudioIcons;
+import javax.swing.JTable;
+import org.jetbrains.annotations.NotNull;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+import org.mockito.Mockito;
+
+@RunWith(JUnit4.class)
+public final class VirtualDeviceTableCellRendererTest {
+ private final @NotNull AvdInfo myAvd = Mockito.mock(AvdInfo.class);
+ private final @NotNull DeviceTableCellRenderer<@NotNull VirtualDevice> myRenderer = new VirtualDeviceTableCellRenderer();
+ private final @NotNull JTable myTable = new JBTable();
+ private final @NotNull Object myDevice = TestVirtualDevices.onlinePixel5Api31(myAvd);
+
+ @Test
+ public void getTableCellRendererComponentStatusDoesntEqualOk() {
+ // Arrange
+ Mockito.when(myAvd.getStatus()).thenReturn(AvdStatus.ERROR_IMAGE_MISSING);
+ Mockito.when(myAvd.getErrorMessage()).thenReturn("Missing system image for x86_64 Pixel 5.");
+
+ // Act
+ myRenderer.getTableCellRendererComponent(myTable, myDevice, false, false, 0, 0);
+
+ // Assert
+ assertEquals(StudioIcons.Common.WARNING_INLINE, myRenderer.getStateLabel().getIcon());
+ assertEquals("Missing system image for x86_64 Pixel 5.", myRenderer.getLine2Label().getText());
+ }
+
+ @Test
+ public void getTableCellRendererComponent() {
+ // Arrange
+ Mockito.when(myAvd.getStatus()).thenReturn(AvdStatus.OK);
+
+ // Act
+ myRenderer.getTableCellRendererComponent(myTable, myDevice, false, false, 0, 0);
+
+ // Assert
+ assertEquals(StudioIcons.Avd.STATUS_DECORATOR_ONLINE, myRenderer.getStateLabel().getIcon());
+ assertEquals("Android 12.0 Google APIs | x86_64", myRenderer.getLine2Label().getText());
+ }
+}