diff options
author | Juan C Nuno <juancnuno@google.com> | 2022-06-29 14:34:59 -0700 |
---|---|---|
committer | Juan Nuno <juancnuno@google.com> | 2022-07-06 21:11:29 +0000 |
commit | 7f024cb5eecc317aafed8794cf35b16c40e1a7a2 (patch) | |
tree | 0a884498b5f6e8c8afee1819938847cefa25f926 /device-manager | |
parent | 303ae83913d5b3b5fae3aa36fe532c6c645b8813 (diff) | |
download | idea-7f024cb5eecc317aafed8794cf35b16c40e1a7a2.tar.gz |
Override setValueAt
Bug: 237442318
Test: VirtualDeviceTableModelTest
Change-Id: I9f994884341afb61a03818bca79e6ef545314b11
Diffstat (limited to 'device-manager')
3 files changed, 77 insertions, 24 deletions
diff --git a/device-manager/src/com/android/tools/idea/devicemanager/virtualtab/VirtualDevice.java b/device-manager/src/com/android/tools/idea/devicemanager/virtualtab/VirtualDevice.java index b432d63067f..c92434a6d62 100644 --- a/device-manager/src/com/android/tools/idea/devicemanager/virtualtab/VirtualDevice.java +++ b/device-manager/src/com/android/tools/idea/devicemanager/virtualtab/VirtualDevice.java @@ -152,6 +152,24 @@ public final class VirtualDevice extends Device { myAvdInfo = builder.myAvdInfo; } + @NotNull VirtualDevice withState(@NotNull State state) { + return new VirtualDevice.Builder() + .setKey(myKey) + .setType(myType) + .setName(myName) + .setTarget(myTarget) + .setCpuArchitecture(myCpuArchitecture) + .setAndroidVersion(myAndroidVersion) + .setSizeOnDisk(mySizeOnDisk) + .setState(state) + .setResolution(myResolution) + .setDensity(myDensity) + .addAllAbis(myAbis) + .setStorageDevice(myStorageDevice) + .setAvdInfo(myAvdInfo) + .build(); + } + @Override protected @NotNull Icon getIcon() { return myType.getVirtualIcon(); diff --git a/device-manager/src/com/android/tools/idea/devicemanager/virtualtab/VirtualDeviceTableModel.java b/device-manager/src/com/android/tools/idea/devicemanager/virtualtab/VirtualDeviceTableModel.java index 1d68da26c79..57ae0cd2715 100644 --- a/device-manager/src/com/android/tools/idea/devicemanager/virtualtab/VirtualDeviceTableModel.java +++ b/device-manager/src/com/android/tools/idea/devicemanager/virtualtab/VirtualDeviceTableModel.java @@ -100,21 +100,7 @@ final class VirtualDeviceTableModel extends AbstractTableModel { return; } - VirtualDevice oldDevice = model.myDevices.get(modelRowIndex); - - VirtualDevice newDevice = new VirtualDevice.Builder() - .setKey(oldDevice.getKey()) - .setType(oldDevice.getType()) - .setName(oldDevice.getName()) - .setTarget(oldDevice.getTarget()) - .setCpuArchitecture(oldDevice.getCpuArchitecture()) - .setAndroidVersion(oldDevice.getAndroidVersion()) - .setSizeOnDisk(oldDevice.getSizeOnDisk()) - .setState(VirtualDevice.State.valueOf(online)) - .setAvdInfo(oldDevice.getAvdInfo()) - .build(); - - model.myDevices.set(modelRowIndex, newDevice); + model.myDevices.set(modelRowIndex, model.myDevices.get(modelRowIndex).withState(VirtualDevice.State.valueOf(online))); model.fireTableCellUpdated(modelRowIndex, DEVICE_MODEL_COLUMN_INDEX); }); } @@ -280,4 +266,25 @@ final class VirtualDeviceTableModel extends AbstractTableModel { throw new AssertionError(modelColumnIndex); } } + + @Override + public void setValueAt(@NotNull Object value, int modelRowIndex, int modelColumnIndex) { + switch (modelColumnIndex) { + case DEVICE_MODEL_COLUMN_INDEX: + case API_MODEL_COLUMN_INDEX: + case SIZE_ON_DISK_MODEL_COLUMN_INDEX: + throw new AssertionError(modelColumnIndex); + case LAUNCH_OR_STOP_MODEL_COLUMN_INDEX: + myDevices.set(modelRowIndex, myDevices.get(modelRowIndex).withState((VirtualDevice.State)value)); + fireTableCellUpdated(modelRowIndex, LAUNCH_OR_STOP_MODEL_COLUMN_INDEX); + + break; + case ACTIVATE_DEVICE_FILE_EXPLORER_WINDOW_MODEL_COLUMN_INDEX: + case EDIT_MODEL_COLUMN_INDEX: + case POP_UP_MENU_MODEL_COLUMN_INDEX: + break; + default: + throw new AssertionError(modelColumnIndex); + } + } } diff --git a/device-manager/testSrc/com/android/tools/idea/devicemanager/virtualtab/VirtualDeviceTableModelTest.java b/device-manager/testSrc/com/android/tools/idea/devicemanager/virtualtab/VirtualDeviceTableModelTest.java index 63c730c1f36..900d5646266 100644 --- a/device-manager/testSrc/com/android/tools/idea/devicemanager/virtualtab/VirtualDeviceTableModelTest.java +++ b/device-manager/testSrc/com/android/tools/idea/devicemanager/virtualtab/VirtualDeviceTableModelTest.java @@ -17,6 +17,7 @@ package com.android.tools.idea.devicemanager.virtualtab; import static org.junit.Assert.assertEquals; +import com.android.sdklib.AndroidVersion; import com.android.sdklib.internal.avd.AvdInfo; import com.android.tools.idea.avdmanager.AvdManagerConnection; import com.android.tools.idea.devicemanager.CountDownLatchAssert; @@ -29,6 +30,7 @@ import java.util.List; import java.util.concurrent.CountDownLatch; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; +import javax.swing.table.TableModel; import org.jetbrains.annotations.NotNull; import org.junit.Test; import org.junit.runner.RunWith; @@ -38,30 +40,30 @@ import org.mockito.Mockito; @RunWith(JUnit4.class) public final class VirtualDeviceTableModelTest { + private final @NotNull AvdInfo myAvd = Mockito.mock(AvdInfo.class); + private final @NotNull Collection<@NotNull VirtualDevice> myDevices = List.of(TestVirtualDevices.pixel5Api31(myAvd)); + private final @NotNull TableModelListener myListener = Mockito.mock(TableModelListener.class); + @Test public void setAllOnline() throws InterruptedException { // Arrange - AvdInfo avd = Mockito.mock(AvdInfo.class); - Collection<VirtualDevice> devices = List.of(TestVirtualDevices.pixel5Api31(avd)); - AvdManagerConnection connection = Mockito.mock(AvdManagerConnection.class); - Mockito.when(connection.isAvdRunning(avd)).thenReturn(true); + Mockito.when(connection.isAvdRunning(myAvd)).thenReturn(true); CountDownLatch latch = new CountDownLatch(1); - TableModelListener listener = Mockito.mock(TableModelListener.class); - VirtualDeviceTableModel model = new VirtualDeviceTableModel(devices, () -> connection, (m, key) -> newSetOnline(m, key, latch)); - model.addTableModelListener(listener); + VirtualDeviceTableModel model = new VirtualDeviceTableModel(myDevices, () -> connection, (m, key) -> newSetOnline(m, key, latch)); + model.addTableModelListener(myListener); // Act model.setAllOnline(); // Assert CountDownLatchAssert.await(latch); - assertEquals(List.of(TestVirtualDevices.onlinePixel5Api31(avd)), model.getDevices()); + assertEquals(List.of(TestVirtualDevices.onlinePixel5Api31(myAvd)), model.getDevices()); TableModelEvent event = new TableModelEvent(model, 0, 0, VirtualDeviceTableModel.DEVICE_MODEL_COLUMN_INDEX); - Mockito.verify(listener).tableChanged(ArgumentMatchers.argThat(new TableModelEventArgumentMatcher(event))); + Mockito.verify(myListener).tableChanged(ArgumentMatchers.argThat(new TableModelEventArgumentMatcher(event))); } private static @NotNull FutureCallback<@NotNull Boolean> newSetOnline(@NotNull VirtualDeviceTableModel model, @@ -69,4 +71,30 @@ public final class VirtualDeviceTableModelTest { @NotNull CountDownLatch latch) { return new CountDownLatchFutureCallback<>(VirtualDeviceTableModel.newSetOnline(model, key), latch); } + + @Test + public void setValueAt() { + // Arrange + TableModel model = new VirtualDeviceTableModel(myDevices); + model.addTableModelListener(myListener); + + // Act + model.setValueAt(VirtualDevice.State.LAUNCHING, 0, VirtualDeviceTableModel.LAUNCH_OR_STOP_MODEL_COLUMN_INDEX); + + // Assert + Object device = new VirtualDevice.Builder() + .setKey(TestVirtualDevices.newKey("Pixel_5_API_31")) + .setName("Pixel 5 API 31") + .setTarget("Android 12.0 Google APIs") + .setCpuArchitecture("x86_64") + .setAndroidVersion(new AndroidVersion(31)) + .setState(VirtualDevice.State.LAUNCHING) + .setAvdInfo(myAvd) + .build(); + + assertEquals(device, model.getValueAt(0, VirtualDeviceTableModel.DEVICE_MODEL_COLUMN_INDEX)); + + TableModelEvent event = new TableModelEvent(model, 0, 0, VirtualDeviceTableModel.LAUNCH_OR_STOP_MODEL_COLUMN_INDEX); + Mockito.verify(myListener).tableChanged(ArgumentMatchers.argThat(new TableModelEventArgumentMatcher(event))); + } } |