/* * Copyright (C) 2015 Pedro Vicente Gómez Sánchez. * * 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.github.pedrovgs.androidwifiadb.window; import com.github.pedrovgs.androidwifiadb.AndroidWiFiADB; import com.github.pedrovgs.androidwifiadb.Device; import com.github.pedrovgs.androidwifiadb.adb.ADB; import com.github.pedrovgs.androidwifiadb.adb.ADBParser; import com.github.pedrovgs.androidwifiadb.adb.CommandLine; import com.github.pedrovgs.androidwifiadb.view.NotificationView; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.wm.ToolWindow; import com.intellij.openapi.wm.ToolWindowFactory; import com.intellij.ui.content.Content; import com.intellij.ui.content.ContentFactory; import java.util.Timer; import java.util.TimerTask; import javax.swing.JPanel; public class AndroidWiFiADBWindow implements ToolWindowFactory, DeviceAction { private static final int INTERVAL_REFRESH_DEVICES = 1000; private final AndroidWiFiADB androidWifiADB; private final CardLayoutDevices cardLayoutDevices; private JPanel toolWindowContent; public AndroidWiFiADBWindow() { CommandLine commandLine = new CommandLine(); ADBParser adbParser = new ADBParser(); ADB adb = new ADB(commandLine, adbParser); this.androidWifiADB = new AndroidWiFiADB(adb, new NotificationView()); cardLayoutDevices = new CardLayoutDevices(toolWindowContent, this); } @Override public void createToolWindowContent(Project project, ToolWindow toolWindow) { androidWifiADB.updateProject(project); createToolWindowContent(toolWindow); setupUI(); monitorDevices(); } @Override public void connectDevice(final Device device) { ApplicationManager.getApplication().executeOnPooledThread(new Runnable() { public void run() { androidWifiADB.connectDevice(device); updateUi(); } }); } @Override public void disconnectDevice(final Device device) { ApplicationManager.getApplication().executeOnPooledThread(new Runnable() { public void run() { androidWifiADB.disconnectDevice(device); updateUi(); } }); } private void createToolWindowContent(ToolWindow toolWindow) { ContentFactory contentFactory = ContentFactory.SERVICE.getInstance(); Content content = contentFactory.createContent(toolWindowContent, "", false); toolWindow.getContentManager().addContent(content); } private void setupUI() { ApplicationManager.getApplication().invokeLater(new Runnable() { @Override public void run() { cardLayoutDevices.createAndShowGUI(); } }); } private void monitorDevices() { ApplicationManager.getApplication().executeOnPooledThread(new Runnable() { public void run() { new Timer().schedule(new TimerTask() { @Override public void run() { boolean refreshRequired = androidWifiADB.refreshDevicesList(); if (refreshRequired) { updateUi(); } } }, 0, INTERVAL_REFRESH_DEVICES); } }); } private void updateUi() { ApplicationManager.getApplication().invokeLater(new Runnable() { @Override public void run() { cardLayoutDevices.setDevices(androidWifiADB.getDevices()); cardLayoutDevices.updateUi(); } }); } }