From 830a3ee4ddc2f80638c93545e0723ea5e84fcd9a Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 5 Jun 2020 22:11:38 -0400 Subject: [PATCH] LightweightGUI --- .../ui/src/com/rusefi/StartupFrame.java | 2 +- .../ui/src/com/rusefi/tools/ConsoleTools.java | 8 +++ .../com/rusefi/ui/light/InternetStatus.java | 60 +++++++++++++++++++ .../com/rusefi/ui/light/LightweightGUI.java | 24 ++++++++ 4 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 java_console/ui/src/com/rusefi/ui/light/InternetStatus.java create mode 100644 java_console/ui/src/com/rusefi/ui/light/LightweightGUI.java diff --git a/java_console/ui/src/com/rusefi/StartupFrame.java b/java_console/ui/src/com/rusefi/StartupFrame.java index 99b7cf4540..13f368e704 100644 --- a/java_console/ui/src/com/rusefi/StartupFrame.java +++ b/java_console/ui/src/com/rusefi/StartupFrame.java @@ -38,7 +38,7 @@ public class StartupFrame { // todo: figure out a better way to work with absolute path private static final String APPICON = "appicon.png"; private static final String LOGO = "logo.gif"; - public static final String LINK_TEXT = "rusEfi (c) 2012-2020"; + public static final String LINK_TEXT = "rusEFI (c) 2012-2020"; private static final String URI = "http://rusefi.com/?java_console"; // private static final int RUSEFI_ORANGE = 0xff7d03; diff --git a/java_console/ui/src/com/rusefi/tools/ConsoleTools.java b/java_console/ui/src/com/rusefi/tools/ConsoleTools.java index befda3ffe9..c3f27c61d0 100644 --- a/java_console/ui/src/com/rusefi/tools/ConsoleTools.java +++ b/java_console/ui/src/com/rusefi/tools/ConsoleTools.java @@ -21,6 +21,7 @@ import com.rusefi.maintenance.ExecHelper; import com.rusefi.tools.online.Online; import com.rusefi.tune.xml.Msq; import com.rusefi.ui.AuthTokenPanel; +import com.rusefi.ui.light.LightweightGUI; import org.jetbrains.annotations.Nullable; import javax.xml.bind.JAXBException; @@ -57,11 +58,18 @@ public class ConsoleTools { registerTool("upload_tune", ConsoleTools::uploadTune, "Upload specified tune file using auth token from settings"); + registerTool("lightui", ConsoleTools::lightUI, "Start lightweight GUI for tiny screens"); + + registerTool("detect", ConsoleTools::detect, "Find attached rusEFI"); registerTool("reboot_ecu", args -> sendCommand(Fields.CMD_REBOOT), "Sends a command to reboot rusEFI controller."); registerTool(Fields.CMD_REBOOT_DFU, args -> sendCommand(Fields.CMD_REBOOT_DFU), "Sends a command to switch rusEFI controller into DFU mode."); } + private static void lightUI(String[] strings) { + LightweightGUI.start(); + } + private static void uploadTune(String[] args) throws IOException { String fileName = args[1]; String authToken = AuthTokenPanel.getAuthToken(); diff --git a/java_console/ui/src/com/rusefi/ui/light/InternetStatus.java b/java_console/ui/src/com/rusefi/ui/light/InternetStatus.java new file mode 100644 index 0000000000..c9df5c3ad8 --- /dev/null +++ b/java_console/ui/src/com/rusefi/ui/light/InternetStatus.java @@ -0,0 +1,60 @@ +package com.rusefi.ui.light; + +import com.rusefi.Timeouts; + +import javax.swing.*; +import java.awt.*; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.net.HttpURLConnection; +import java.net.URL; + +public class InternetStatus { + public static final String GOOGLE = "http://google.com"; + private final JLabel status = new JLabel(); + + public InternetStatus() { + new Thread(() -> { + while (true) { + boolean isConnected = isServerReachable(); + try { + SwingUtilities.invokeAndWait(new Runnable() { + @Override + public void run() { + if (isConnected) { + status.setText("online"); + status.setForeground(Color.green); + } else { + status.setText("offline"); + status.setForeground(Color.red); + } + } + }); + Thread.sleep(Timeouts.SECOND); + } catch (InterruptedException | InvocationTargetException e) { + // ignore + } + } + }).start(); + } + + private static boolean isServerReachable() { + try { + URL urlServer = new URL(GOOGLE); + HttpURLConnection urlConn = (HttpURLConnection) urlServer.openConnection(); + urlConn.setConnectTimeout(3000); //<- 3Seconds Timeout + urlConn.connect(); + if (urlConn.getResponseCode() == 200) { + return true; + } else { + return false; + } + } catch (IOException e1) { + return false; + } + } + + public Component getContent() { + return status; + } +} diff --git a/java_console/ui/src/com/rusefi/ui/light/LightweightGUI.java b/java_console/ui/src/com/rusefi/ui/light/LightweightGUI.java new file mode 100644 index 0000000000..e325f43c3d --- /dev/null +++ b/java_console/ui/src/com/rusefi/ui/light/LightweightGUI.java @@ -0,0 +1,24 @@ +package com.rusefi.ui.light; + +import com.rusefi.StartupFrame; +import com.rusefi.rusEFIVersion; +import com.rusefi.ui.util.FrameHelper; + +import javax.swing.*; +import java.awt.*; + +public class LightweightGUI { + public static void start() { + FrameHelper frameHelper = new FrameHelper(); + JPanel content = new JPanel(new BorderLayout()); + frameHelper.getFrame().setTitle("rusEFI Lightweight " + rusEFIVersion.CONSOLE_VERSION); + + JPanel topPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); + topPanel.add(new InternetStatus().getContent()); + + content.add(topPanel, BorderLayout.NORTH); + content.add(new JLabel(StartupFrame.LINK_TEXT), BorderLayout.CENTER); + + frameHelper.showFrame(content, true); + } +}