From e3be0aa5d89a9dee34ddd03b157a44807e1dfb36 Mon Sep 17 00:00:00 2001 From: Alessandro Ranellucci Date: Mon, 2 Mar 2020 18:21:34 +0100 Subject: [PATCH 1/2] Show a dynamic splash image based on the URL returned by the version server --- .../cc/arduino/view/SplashScreenHelper.java | 6 ++++ app/src/processing/app/Base.java | 5 +++ app/src/processing/app/UpdateCheck.java | 31 ++++++++++++++++++- 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/app/src/cc/arduino/view/SplashScreenHelper.java b/app/src/cc/arduino/view/SplashScreenHelper.java index 108c1c8b2f6..85a87d5f0be 100644 --- a/app/src/cc/arduino/view/SplashScreenHelper.java +++ b/app/src/cc/arduino/view/SplashScreenHelper.java @@ -33,6 +33,8 @@ import java.awt.*; import java.awt.geom.Rectangle2D; +import java.io.IOException; +import java.net.URL; import java.util.Map; import processing.app.Theme; @@ -80,6 +82,10 @@ public void splashText(String text) { ensureTextIsDiplayed(); } + public void setImageURL(URL imageURL) throws NullPointerException, IOException, IllegalStateException { + splash.setImageURL(imageURL); + } + private void ensureTextIsDiplayed() { synchronized (SplashScreen.class) { if (splash.isVisible()) { diff --git a/app/src/processing/app/Base.java b/app/src/processing/app/Base.java index 815f264da36..ad724fe8da3 100644 --- a/app/src/processing/app/Base.java +++ b/app/src/processing/app/Base.java @@ -66,6 +66,7 @@ import java.awt.*; import java.awt.event.*; import java.io.*; +import java.net.URL; import java.util.List; import java.util.Timer; import java.util.*; @@ -237,6 +238,10 @@ public Base(String[] args) throws Exception { SplashScreenHelper splash; if (parser.isGuiMode()) { + splash = new SplashScreenHelper(SplashScreen.getSplashScreen()); + if (PreferencesData.has("update.splashImage")) + splash.setImageURL(new URL(PreferencesData.get("update.splashImage"))); + // Setup all notification widgets splash = new SplashScreenHelper(SplashScreen.getSplashScreen()); BaseNoGui.notifier = new GUIUserNotifier(this); diff --git a/app/src/processing/app/UpdateCheck.java b/app/src/processing/app/UpdateCheck.java index cdca1b71783..1f7b8832fb9 100644 --- a/app/src/processing/app/UpdateCheck.java +++ b/app/src/processing/app/UpdateCheck.java @@ -31,6 +31,7 @@ import java.io.InputStreamReader; import java.net.URL; import java.net.URLEncoder; +import java.util.HashMap; import java.util.Random; import static processing.app.I18n.tr; @@ -87,7 +88,35 @@ public void run() { System.getProperty("os.version") + "\t" + System.getProperty("os.arch"), "UTF-8"); - int latest = readInt(downloadURL + "?" + info); + // read data from server + BufferedReader reader = null; + int latest = -1; + HashMap serverInfo = new HashMap(); + try { + URL url = new URL(downloadURL + "?" + info); + reader = new BufferedReader(new InputStreamReader(url.openStream())); + + // parse the latest version number + latest = Integer.parseInt(reader.readLine()); + + // parse the key=value pairs + while (true) { + String line = reader.readLine(); + if (line == null) + break; + String[] parts = line.split("=", 2); + if (parts.length == 2) + serverInfo.put(parts[0], parts[1]); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + IOUtils.closeQuietly(reader); + } + + if (serverInfo.containsKey("splashImage")) + PreferencesData.set("update.splashImage", + serverInfo.get("splashImage")); String lastString = PreferencesData.get("update.last"); long now = System.currentTimeMillis(); From 6da06218a661e2164820362332f01a67f9de5d98 Mon Sep 17 00:00:00 2001 From: Alessandro Ranellucci Date: Mon, 2 Mar 2020 18:51:00 +0100 Subject: [PATCH 2/2] Handle errors gracefully when loading remote splash image --- app/src/cc/arduino/view/SplashScreenHelper.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/src/cc/arduino/view/SplashScreenHelper.java b/app/src/cc/arduino/view/SplashScreenHelper.java index 85a87d5f0be..5f43b7cd460 100644 --- a/app/src/cc/arduino/view/SplashScreenHelper.java +++ b/app/src/cc/arduino/view/SplashScreenHelper.java @@ -33,7 +33,6 @@ import java.awt.*; import java.awt.geom.Rectangle2D; -import java.io.IOException; import java.net.URL; import java.util.Map; @@ -82,8 +81,10 @@ public void splashText(String text) { ensureTextIsDiplayed(); } - public void setImageURL(URL imageURL) throws NullPointerException, IOException, IllegalStateException { - splash.setImageURL(imageURL); + public void setImageURL(URL imageURL) { + try { + splash.setImageURL(imageURL); + } catch(Exception e) {} } private void ensureTextIsDiplayed() {