forked from lxm_plugin_idea/ADB-Wi-Fi
add PinDeviceService
This commit is contained in:
@@ -13,4 +13,5 @@ style:
|
||||
MagicNumber:
|
||||
active: false
|
||||
WildcardImport:
|
||||
active: false
|
||||
excludeImports: ['java.util.*', 'kotlinx.coroutines.*', 'dev.polek.adbwifi.utils.*']
|
||||
|
||||
9
src/main/kotlin/dev/polek/adbwifi/model/PinnedDevice.kt
Normal file
9
src/main/kotlin/dev/polek/adbwifi/model/PinnedDevice.kt
Normal file
@@ -0,0 +1,9 @@
|
||||
package dev.polek.adbwifi.model
|
||||
|
||||
data class PinnedDevice(
|
||||
val androidId: String = "",
|
||||
val name: String = "",
|
||||
val address: String? = null,
|
||||
val androidVersion: String = "",
|
||||
val apiLevel: String = ""
|
||||
)
|
||||
@@ -0,0 +1,21 @@
|
||||
package dev.polek.adbwifi.model
|
||||
|
||||
import com.google.gson.Gson
|
||||
import com.google.gson.reflect.TypeToken
|
||||
import java.util.ArrayList
|
||||
|
||||
class PinnedDeviceListConverter : com.intellij.util.xmlb.Converter<List<PinnedDevice>>() {
|
||||
|
||||
override fun toString(value: List<PinnedDevice>): String? {
|
||||
return gson.toJson(value)
|
||||
}
|
||||
|
||||
override fun fromString(value: String): List<PinnedDevice>? {
|
||||
return gson.fromJson(value, listType)
|
||||
}
|
||||
|
||||
private companion object {
|
||||
private val gson = Gson()
|
||||
private val listType = object : TypeToken<ArrayList<PinnedDevice>>() {}.type
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
package dev.polek.adbwifi.services
|
||||
|
||||
import com.intellij.openapi.components.PersistentStateComponent
|
||||
import com.intellij.openapi.components.State
|
||||
import com.intellij.openapi.components.Storage
|
||||
import com.intellij.util.xmlb.XmlSerializerUtil
|
||||
import com.intellij.util.xmlb.annotations.OptionTag
|
||||
import dev.polek.adbwifi.model.Device
|
||||
import dev.polek.adbwifi.model.PinnedDevice
|
||||
import dev.polek.adbwifi.model.PinnedDeviceListConverter
|
||||
|
||||
@State(
|
||||
name = "PinDeviceService",
|
||||
storages = [Storage("adbWifiPinnedDevices.xml")]
|
||||
)
|
||||
class PinDeviceService : PersistentStateComponent<PinDeviceService> {
|
||||
|
||||
@OptionTag(converter = PinnedDeviceListConverter::class)
|
||||
var pinnedDevices: List<PinnedDevice> = listOf()
|
||||
|
||||
fun pinDevice(device: Device) {
|
||||
if (pinnedDevices.contains(device)) return
|
||||
|
||||
pinnedDevices = pinnedDevices.add(device)
|
||||
}
|
||||
|
||||
fun unpinDevice(device: Device) {
|
||||
pinnedDevices = pinnedDevices.remove(device)
|
||||
}
|
||||
|
||||
override fun getState() = this
|
||||
|
||||
override fun loadState(state: PinDeviceService) {
|
||||
XmlSerializerUtil.copyBean(state, this)
|
||||
}
|
||||
|
||||
private companion object {
|
||||
private fun List<PinnedDevice>.contains(device: Device): Boolean {
|
||||
return this.find { it.androidId == device.androidId } != null
|
||||
}
|
||||
|
||||
private fun List<PinnedDevice>.add(device: Device): List<PinnedDevice> {
|
||||
return this + PinnedDevice(
|
||||
androidId = device.id,
|
||||
name = device.name,
|
||||
address = device.address,
|
||||
androidVersion = device.androidVersion,
|
||||
apiLevel = device.apiLevel
|
||||
)
|
||||
}
|
||||
|
||||
private fun List<PinnedDevice>.remove(device: Device): List<PinnedDevice> {
|
||||
return this.filter { it.androidId != device.androidId }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -12,7 +12,6 @@ import com.intellij.openapi.wm.ex.ToolWindowManagerListener
|
||||
import com.intellij.ui.JBSplitter
|
||||
import com.intellij.ui.components.JBScrollPane
|
||||
import com.intellij.util.ui.components.BorderLayoutPanel
|
||||
import dev.polek.adbwifi.LOG
|
||||
import dev.polek.adbwifi.model.CommandHistory
|
||||
import dev.polek.adbwifi.model.LogEntry
|
||||
import dev.polek.adbwifi.services.AdbService
|
||||
@@ -64,7 +63,6 @@ class AdbWiFiToolWindow(project: Project, private val toolWindow: ToolWindow) :
|
||||
ToolWindowManagerListener.TOPIC,
|
||||
object : ToolWindowManagerListener {
|
||||
override fun stateChanged(toolWindowManager: ToolWindowManager) {
|
||||
LOG.warn("ToolWindow. isActive: ${toolWindow.isActive}, isVisible: ${toolWindow.isVisible}")
|
||||
if (toolWindow.isVisible) {
|
||||
subscribeToDeviceList()
|
||||
} else {
|
||||
|
||||
@@ -2,7 +2,7 @@ package dev.polek.adbwifi.ui
|
||||
|
||||
import com.intellij.icons.AllIcons
|
||||
import com.intellij.ide.plugins.newui.InstallButton
|
||||
import com.intellij.openapi.components.ServiceManager
|
||||
import com.intellij.openapi.components.service
|
||||
import com.intellij.openapi.ui.JBMenuItem
|
||||
import com.intellij.openapi.ui.JBPopupMenu
|
||||
import com.intellij.openapi.util.IconLoader
|
||||
@@ -13,6 +13,7 @@ import com.intellij.util.ui.UIUtil
|
||||
import dev.polek.adbwifi.MyBundle
|
||||
import dev.polek.adbwifi.model.Device
|
||||
import dev.polek.adbwifi.services.AdbService
|
||||
import dev.polek.adbwifi.services.PinDeviceService
|
||||
import dev.polek.adbwifi.utils.*
|
||||
import java.awt.Dimension
|
||||
import java.awt.GridBagConstraints
|
||||
@@ -24,7 +25,8 @@ import javax.swing.JProgressBar
|
||||
|
||||
class DevicePanel(device: Device) : JBPanel<DevicePanel>(GridBagLayout()) {
|
||||
|
||||
private val adbService = ServiceManager.getService(AdbService::class.java)
|
||||
private val adbService = service<AdbService>()
|
||||
private val pinDeviceService = service<PinDeviceService>()
|
||||
|
||||
private val button: JButton
|
||||
|
||||
@@ -123,6 +125,9 @@ class DevicePanel(device: Device) : JBPanel<DevicePanel>(GridBagLayout()) {
|
||||
)
|
||||
|
||||
val pinButton = IconButton(ICON_PIN, MyBundle.message("pinDeviceTooltip"))
|
||||
pinButton.onClickedListener = {
|
||||
pinDeviceService.pinDevice(device)
|
||||
}
|
||||
|
||||
val menuButton = IconButton(ICON_MENU)
|
||||
menuButton.onClickedListener = { event ->
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
<extensions defaultExtensionNs="com.intellij">
|
||||
<applicationService serviceImplementation="dev.polek.adbwifi.services.AdbService"/>
|
||||
<applicationService serviceImplementation="dev.polek.adbwifi.services.LogService"/>
|
||||
<applicationService serviceImplementation="dev.polek.adbwifi.services.PinDeviceService"/>
|
||||
<toolWindow
|
||||
id="ADB Wi-Fi"
|
||||
anchor="right"
|
||||
|
||||
Reference in New Issue
Block a user