diff options
author | Juan C Nuno <juancnuno@google.com> | 2022-02-17 12:30:54 -0800 |
---|---|---|
committer | Juan Nuno <juancnuno@google.com> | 2022-02-24 00:00:36 +0000 |
commit | ef1d75f107df486e633daf2ad804081d6c2d68c1 (patch) | |
tree | 44dfd71995a6de83d1382e18c949f0ab9ed19697 /device-manager | |
parent | 3739c362b27ab9a6ae31e51f1e36c33e864bcc35 (diff) | |
download | idea-ef1d75f107df486e633daf2ad804081d6c2d68c1.tar.gz |
Extract PairingTable out of PairedDevicesPanel
Bug: 217412719
Test: PairedDevicesPanelTest
Change-Id: Icd70992d35db7aa277c281eab18c1bc094dadc85
Diffstat (limited to 'device-manager')
4 files changed, 92 insertions, 28 deletions
diff --git a/device-manager/src/com/android/tools/idea/devicemanager/PairedDevicesPanel.java b/device-manager/src/com/android/tools/idea/devicemanager/PairedDevicesPanel.java index cc6a8e03e85..2644bd0c9e8 100644 --- a/device-manager/src/com/android/tools/idea/devicemanager/PairedDevicesPanel.java +++ b/device-manager/src/com/android/tools/idea/devicemanager/PairedDevicesPanel.java @@ -36,14 +36,11 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Disposer; import com.intellij.ui.ToolbarDecorator; import com.intellij.ui.components.JBPanel; -import com.intellij.ui.table.JBTable; import com.intellij.util.ui.JBUI.CurrentTheme.Table; import java.awt.BorderLayout; import java.util.List; import java.util.stream.Collectors; import javax.swing.JComponent; -import javax.swing.JTable; -import javax.swing.table.TableColumnModel; import kotlin.Unit; import kotlin.coroutines.CoroutineContext; import kotlinx.coroutines.BuildersKt; @@ -105,23 +102,14 @@ public final class PairedDevicesPanel extends JBPanel<PairedDevicesPanel> implem } else { List<Pairing> pairings = phoneWearPairList.stream() - .map(pair -> new Pairing(pair.getPeerDevice(myDeviceId.toString()), pair.getPairingStatus())) + .map(pair -> new Pairing(pair, myDeviceId)) .collect(Collectors.toList()); - JTable table = new JBTable(new PairingTableModel(pairings)); - table.setDefaultRenderer(Device.class, new DeviceManagerPairingDeviceTableCellRenderer()); - table.setShowGrid(false); + PairingTable table = new PairingTable(); + table.getModel().setPairings(pairings); - TableColumnModel columnModel = table.getColumnModel(); - columnModel.getColumn(0).setPreferredWidth(80_000); // Some large number, 80% of total width - columnModel.getColumn(1).setPreferredWidth(20_000); - - toolbar = ToolbarDecorator.createDecorator(table).setRemoveAction(button -> { - int selectedIndex = table.getSelectedRow(); - if (selectedIndex >= 0 && selectedIndex < phoneWearPairList.size()) { - unpair(phoneWearPairList.get(selectedIndex)); - } - }); + toolbar = ToolbarDecorator.createDecorator(table) + .setRemoveAction(button -> unpair(table.getSelectedPairing().orElseThrow(AssertionError::new).getPair())); } toolbar diff --git a/device-manager/src/com/android/tools/idea/devicemanager/Pairing.java b/device-manager/src/com/android/tools/idea/devicemanager/Pairing.java index 2a28e03ecc0..1f7f0f70294 100644 --- a/device-manager/src/com/android/tools/idea/devicemanager/Pairing.java +++ b/device-manager/src/com/android/tools/idea/devicemanager/Pairing.java @@ -18,16 +18,16 @@ package com.android.tools.idea.devicemanager; import com.android.sdklib.AndroidVersion; import com.android.tools.idea.devicemanager.virtualtab.VirtualDeviceName; import com.android.tools.idea.wearpairing.PairingDevice; -import com.android.tools.idea.wearpairing.WearPairingManager.PairingState; +import com.android.tools.idea.wearpairing.WearPairingManager.PhoneWearPair; import org.jetbrains.annotations.NotNull; final class Pairing { + private final @NotNull PhoneWearPair myPair; private final @NotNull Device myOtherDevice; - private final @NotNull PairingState myStatus; - Pairing(@NotNull PairingDevice otherDevice, @NotNull PairingState status) { - myOtherDevice = toDevice(otherDevice); - myStatus = status; + Pairing(@NotNull PhoneWearPair pair, @NotNull Key key) { + myPair = pair; + myOtherDevice = toDevice(pair.getPeerDevice(key.toString())); } private static @NotNull Device toDevice(@NotNull PairingDevice device) { @@ -46,12 +46,16 @@ final class Pairing { .build(); } + @NotNull PhoneWearPair getPair() { + return myPair; + } + @NotNull Device getOtherDevice() { return myOtherDevice; } @NotNull String getStatus() { - switch (myStatus) { + switch (myPair.getPairingStatus()) { case OFFLINE: return "Offline"; case CONNECTING: @@ -61,7 +65,7 @@ final class Pairing { case PAIRING_FAILED: return "Error pairing"; default: - throw new AssertionError(myStatus); + throw new AssertionError(myPair.getPairingStatus()); } } } diff --git a/device-manager/src/com/android/tools/idea/devicemanager/PairingTable.java b/device-manager/src/com/android/tools/idea/devicemanager/PairingTable.java new file mode 100644 index 00000000000..16f3e779b8d --- /dev/null +++ b/device-manager/src/com/android/tools/idea/devicemanager/PairingTable.java @@ -0,0 +1,66 @@ +/* + * 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; + +import com.intellij.ui.scale.JBUIScale; +import com.intellij.ui.table.JBTable; +import java.util.Optional; +import javax.swing.ListSelectionModel; +import org.jetbrains.annotations.NotNull; + +final class PairingTable extends JBTable { + PairingTable() { + super(new PairingTableModel()); + + setDefaultRenderer(Device.class, new DeviceManagerPairingDeviceTableCellRenderer()); + setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + setShowGrid(false); + + tableHeader.setReorderingAllowed(false); + tableHeader.setResizingAllowed(false); + + dataModel.addTableModelListener(event -> { + columnModel.getColumn(deviceViewColumnIndex()).setMinWidth(JBUIScale.scale(65)); + + Tables.setWidths(columnModel.getColumn(statusViewColumnIndex()), + Tables.getPreferredColumnWidth(PairingTable.this, statusViewColumnIndex(), JBUIScale.scale(65)), + JBUIScale.scale(20)); + }); + } + + private int deviceViewColumnIndex() { + return convertColumnIndexToView(PairingTableModel.DEVICE_MODEL_COLUMN_INDEX); + } + + private int statusViewColumnIndex() { + return convertColumnIndexToView(PairingTableModel.STATUS_MODEL_COLUMN_INDEX); + } + + @NotNull Optional<@NotNull Pairing> getSelectedPairing() { + int viewRowIndex = getSelectedRow(); + + if (viewRowIndex == -1) { + return Optional.empty(); + } + + return Optional.of(getModel().getPairings().get(convertRowIndexToModel(viewRowIndex))); + } + + @Override + public @NotNull PairingTableModel getModel() { + return (PairingTableModel)dataModel; + } +} diff --git a/device-manager/src/com/android/tools/idea/devicemanager/PairingTableModel.java b/device-manager/src/com/android/tools/idea/devicemanager/PairingTableModel.java index eccb372e7f6..39f8c640eee 100644 --- a/device-manager/src/com/android/tools/idea/devicemanager/PairingTableModel.java +++ b/device-manager/src/com/android/tools/idea/devicemanager/PairingTableModel.java @@ -15,18 +15,24 @@ */ package com.android.tools.idea.devicemanager; +import java.util.Collections; import java.util.List; import javax.swing.table.AbstractTableModel; import org.jetbrains.annotations.NotNull; final class PairingTableModel extends AbstractTableModel { - private static final int DEVICE_MODEL_COLUMN_INDEX = 0; - private static final int STATUS_MODEL_COLUMN_INDEX = 1; + static final int DEVICE_MODEL_COLUMN_INDEX = 0; + static final int STATUS_MODEL_COLUMN_INDEX = 1; - private final @NotNull List<@NotNull Pairing> myPairings; + private @NotNull List<@NotNull Pairing> myPairings = Collections.emptyList(); - PairingTableModel(@NotNull List<@NotNull Pairing> pairings) { + @NotNull List<@NotNull Pairing> getPairings() { + return myPairings; + } + + void setPairings(@NotNull List<@NotNull Pairing> pairings) { myPairings = pairings; + fireTableDataChanged(); } @Override |