client

Clone or download

Added screen saver

Modified Files

M pom.xml
+1 −1
--- 'a/pom.xml'
+++ b/pom.xml
@@ -146,7 +146,7 @@
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.5</version>
<configuration>
- <commandlineArgs>-DStream-Pi.defaultFullScreenMode=false</commandlineArgs>
+ <commandlineArgs>-DStream-Pi.defaultFullScreenMode=false -DStream-Pi.enableScreenSaverFeature=false</commandlineArgs>
<options>
<option>-Dglass.gtk.uiScale=1.0</option>
<option>-Dprism.verbose=true</option>
--- 'a/src/main/java/com/stream_pi/client/Main.java'
+++ b/src/main/java/com/stream_pi/client/Main.java
@@ -48,6 +48,9 @@ public class Main extends Application {
case "-DStream-Pi.defaultFullScreenMode":
ClientInfo.getInstance().setDefaultFullscreenMode(val.equals("true"));
break;
+ case "-DStream-Pi.enableScreenSaverFeature":
+ ClientInfo.getInstance().setEnableScreenSaverFeature(val.equals("true"));
+ break;
}
}
--- 'a/src/main/java/com/stream_pi/client/controller/Controller.java'
+++ b/src/main/java/com/stream_pi/client/controller/Controller.java
@@ -32,6 +32,7 @@ import javafx.beans.value.ChangeListener
import javafx.geometry.Orientation;
import javafx.scene.Node;
import javafx.scene.input.KeyCombination;
+import javafx.scene.layout.StackPane;
import javafx.stage.Screen;
import javafx.util.Duration;
@@ -50,6 +51,7 @@ public class Controller extends Base
private boolean firstRun = true;
+ private ScreenSaver screenSaver = null;
@Override
public void init()
@@ -59,6 +61,18 @@ public class Controller extends Base
if(firstRun)
initBase();
+ if (screenSaver != null)
+ {
+ screenSaver.stop();
+ getChildren().remove(screenSaver);
+ }
+
+ screenSaver = new ScreenSaver(getConfig().isScreenSaverEnabled(), this, getConfig().getScreenSaverTimeout());
+
+ getChildren().add(screenSaver);
+ screenSaver.toBack();
+
+
if(getClientInfo().getPlatform() != com.stream_pi.util.platform.Platform.ANDROID)
{
@@ -215,13 +229,13 @@ public class Controller extends Base
if(isConnected())
client.exit();
+ screenSaver.stop();
if(!getClientInfo().isPhone() && !getConfig().getIsFullScreenMode())
{
getConfig().setStartupWindowSize(getStageWidth(), getStageHeight());
getConfig().save();
}
-
}
catch (SevereException e)
{
@@ -331,8 +345,6 @@ public class Controller extends Base
-
-
@Override
public void handleMinorException(MinorException e)
{
--- /dev/null
+++ b/src/main/java/com/stream_pi/client/controller/ScreenSaver.java
@@ -0,0 +1,121 @@
+package com.stream_pi.client.controller;
+
+import com.stream_pi.client.window.Base;
+import com.stream_pi.util.exception.SevereException;
+import javafx.animation.*;
+import javafx.application.Platform;
+import javafx.concurrent.Task;
+import javafx.scene.Node;
+import javafx.scene.layout.StackPane;
+import javafx.util.Duration;
+
+import java.util.Timer;
+import java.util.TimerTask;
+
+public class ScreenSaver extends StackPane
+{
+ private boolean isEnabled = false;
+ private Timer timer;
+
+ private Timeline showScreenSaverTimeline;
+ private long timeout;
+
+ public ScreenSaver(boolean isEnabled, Base base, int timeout)
+ {
+ this.isEnabled = isEnabled;
+ this.timeout = timeout* 1000L;
+
+
+ setOpacity(0);
+ getStyleClass().add("screensaver");
+
+ if(isEnabled)
+ {
+
+ showScreenSaverTimeline = new Timeline();
+ showScreenSaverTimeline.setCycleCount(1);
+
+
+ showScreenSaverTimeline.getKeyFrames().addAll(
+ new KeyFrame(Duration.millis(0.0D),
+ new KeyValue(opacityProperty(),
+ 0.0D, Interpolator.EASE_IN)),
+ new KeyFrame(Duration.seconds(15D),
+ new KeyValue(opacityProperty(),
+ 1.0D, Interpolator.LINEAR))
+ );
+
+ startTimer();
+
+ base.setOnMouseClicked(mouseEvent -> {
+ close();
+ restartTimer();
+ });
+
+
+ }
+ }
+
+ public void stop()
+ {
+ stopTimer();
+ setOpacity(0);
+ toBack();
+ }
+
+ public boolean isEnabled() {
+ return isEnabled;
+ }
+
+
+ private void show()
+ {
+ Platform.runLater(()->{
+ setOpacity(0);
+ toFront();
+ showScreenSaverTimeline.play();
+ });
+ }
+
+ private void close()
+ {
+ Platform.runLater(()->{
+ if(showScreenSaverTimeline.getStatus() == Animation.Status.RUNNING)
+ {
+ showScreenSaverTimeline.stop();
+ }
+
+
+ setOpacity(0.0);
+ toBack();
+ });
+
+ restartTimer();
+ }
+
+ private void restartTimer()
+ {
+ stopTimer();
+ startTimer();
+ }
+
+ private void stopTimer()
+ {
+ if(timer != null)
+ {
+ timer.cancel();
+ timer.purge();
+ }
+ }
+
+ private void startTimer()
+ {
+ timer = new Timer();
+ timer.schedule(new TimerTask() {
+ @Override
+ public void run() {
+ show();
+ }
+ },timeout);
+ }
+}
--- 'a/src/main/java/com/stream_pi/client/info/ClientInfo.java'
+++ b/src/main/java/com/stream_pi/client/info/ClientInfo.java
@@ -184,4 +184,16 @@ public class ClientInfo {
{
return defaultFullscreenMode;
}
+
+ private boolean enableScreenSaverFeature = false;
+
+ public void setEnableScreenSaverFeature(boolean enableScreenSaverFeature)
+ {
+ this.enableScreenSaverFeature = enableScreenSaverFeature;
+ }
+
+ public boolean isEnableScreenSaverFeature()
+ {
+ return enableScreenSaverFeature;
+ }
}
--- 'a/src/main/java/com/stream_pi/client/io/Config.java'
+++ b/src/main/java/com/stream_pi/client/io/Config.java
@@ -433,4 +433,35 @@ public class Config
{
getOthersElement().getElementsByTagName("try-connecting-when-action-clicked").item(0).setTextContent(value+"");
}
+
+
+ public boolean getDefaultScreenSaverEnabled()
+ {
+ return false;
+ }
+
+ public boolean isScreenSaverEnabled()
+ {
+ return XMLConfigHelper.getBooleanProperty(getOthersElement(), "screen-saver", getDefaultScreenSaverEnabled(), false, true, document, configFile);
+ }
+
+ public void setScreenSaverEnabled(boolean value)
+ {
+ getOthersElement().getElementsByTagName("screen-saver").item(0).setTextContent(value+"");
+ }
+
+ public int getDefaultScreenSaverTimeout()
+ {
+ return 60;
+ }
+
+ public int getScreenSaverTimeout()
+ {
+ return XMLConfigHelper.getIntProperty(getOthersElement(), "screen-saver-timeout-seconds", getDefaultScreenSaverTimeout(), false, true, document, configFile);
+ }
+
+ public void setScreenSaverTimeout(String value)
+ {
+ getOthersElement().getElementsByTagName("screen-saver-timeout-seconds").item(0).setTextContent(value);
+ }
}
--- 'a/src/main/java/com/stream_pi/client/window/Base.java'
+++ b/src/main/java/com/stream_pi/client/window/Base.java
@@ -1,6 +1,7 @@
package com.stream_pi.client.window;
import com.stream_pi.client.controller.ClientListener;
+import com.stream_pi.client.controller.ScreenSaver;
import com.stream_pi.client.io.Config;
import com.stream_pi.client.info.ClientInfo;
@@ -159,6 +160,8 @@ public abstract class Base extends Stack
firstTimeUse = new FirstTimeUse(this, this);
getChildren().clear();
+
+
getChildren().addAll(alertStackPane);
if(getClientInfo().isPhone())
@@ -178,7 +181,6 @@ public abstract class Base extends Stack
config = Config.getInstance();
-
if(config.isFirstTimeUse())
{
clearStylesheets();
--- 'a/src/main/java/com/stream_pi/client/window/settings/GeneralTab.java'
+++ b/src/main/java/com/stream_pi/client/window/settings/GeneralTab.java
@@ -31,6 +31,7 @@ import javafx.scene.control.*;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.VBox;
+import org.w3c.dom.Text;
import java.io.File;
@@ -43,6 +44,8 @@ public class GeneralTab extends VBox
private TextField serverPortTextField;
private TextField serverHostNameOrIPTextField;
+ private TextField screenTimeoutTextField;
+
private StreamPiComboBox<ClientProfile> clientProfileComboBox;
private StreamPiComboBox<Theme> themeComboBox;
@@ -54,6 +57,8 @@ public class GeneralTab extends VBox
private ToggleButton startOnBootToggleButton;
+ private ToggleButton screenSaverToggleButton;
+
private ToggleButton tryConnectingToServerIfActionClickedToggleButton;
private ToggleButton connectOnStartupToggleButton;
@@ -70,6 +75,8 @@ public class GeneralTab extends VBox
private final Button checkForUpdatesButton;
+ private HBoxInputBox screenTimeoutSecondsHBoxInputBox;
+
public GeneralTab(ExceptionAndAlertHandler exceptionAndAlertHandler,
ClientListener clientListener, HostServices hostServices)
{
@@ -78,6 +85,9 @@ public class GeneralTab extends VBox
this.hostServices = hostServices;
serverPortTextField = new TextField();
+ screenTimeoutTextField = new TextField();
+
+
serverHostNameOrIPTextField = new TextField();
nickNameTextField = new TextField();
@@ -118,6 +128,9 @@ public class GeneralTab extends VBox
startOnBootToggleButton = new ToggleButton("Start On Boot");
startOnBootToggleButton.managedProperty().bind(startOnBootToggleButton.visibleProperty());
+ screenSaverToggleButton = new ToggleButton("Screen Saver");
+ screenSaverToggleButton.managedProperty().bind(screenSaverToggleButton.visibleProperty());
+
tryConnectingToServerIfActionClickedToggleButton = new ToggleButton("Try Connecting to Server If not connected on Action click");
tryConnectingToServerIfActionClickedToggleButton.setWrapText(true);
tryConnectingToServerIfActionClickedToggleButton.managedProperty().bind(tryConnectingToServerIfActionClickedToggleButton.visibleProperty());
@@ -150,6 +163,10 @@ public class GeneralTab extends VBox
checkForUpdatesButton = new Button("Check for updates");
checkForUpdatesButton.setOnAction(event->checkForUpdates());
+
+ screenTimeoutSecondsHBoxInputBox = new HBoxInputBox("Screen Timeout (seconds)", screenTimeoutTextField, prefWidth);
+ screenTimeoutSecondsHBoxInputBox.managedProperty().bind(screenTimeoutSecondsHBoxInputBox.visibleProperty());
+
VBox vBox = new VBox(
new HBoxInputBox("Device Name", nickNameTextField, prefWidth),
new HBoxInputBox("Host Name/IP", serverHostNameOrIPTextField, prefWidth),
@@ -166,7 +183,8 @@ public class GeneralTab extends VBox
),
themesPathInputBox,
iconsPathInputBox,
- profilesPathInputBox
+ profilesPathInputBox,
+ screenTimeoutSecondsHBoxInputBox
);
@@ -214,6 +232,7 @@ public class GeneralTab extends VBox
connectOnStartupToggleButton,
vibrateOnActionPressToggleButton,
checkForUpdatesButton,
+ screenSaverToggleButton,
startOnBootToggleButton,
showCursorToggleButton
);
@@ -243,7 +262,6 @@ public class GeneralTab extends VBox
Platform platform = ClientInfo.getInstance().getPlatform();
- System.out.println("PLATFORRRM : "+platform.getUIName()+"232323232323");
if(platform == Platform.ANDROID ||
platform == Platform.IOS)
{
@@ -264,14 +282,14 @@ public class GeneralTab extends VBox
}
vibrateOnActionPressToggleButton.setVisible(false);
- buttonBar.getChildren().add(exitButton);
- }
- if(!ClientInfo.getInstance().isShowFullScreenToggleButton())
- {
- fullScreenModeToggleButton.setVisible(false);
+ fullScreenModeToggleButton.setVisible(ClientInfo.getInstance().isShowFullScreenToggleButton());
+ screenTimeoutSecondsHBoxInputBox.setVisible(ClientInfo.getInstance().isShowFullScreenToggleButton());
+
+ buttonBar.getChildren().add(exitButton);
}
+ screenSaverToggleButton.setVisible(ClientInfo.getInstance().isEnableScreenSaverFeature());
}
private void checkForUpdates()
@@ -360,6 +378,11 @@ public class GeneralTab extends VBox
serverHostNameOrIPTextField.setText(config.getSavedServerHostNameOrIP());
serverPortTextField.setText(config.getSavedServerPort()+"");
+ screenTimeoutTextField.setText(config.getScreenSaverTimeout()+"");
+ screenSaverToggleButton.setSelected(config.isScreenSaverEnabled());
+
+ screenTimeoutSecondsHBoxInputBox.setVisible(config.isScreenSaverEnabled());
+
clientProfileComboBox.setOptions(clientListener.getClientProfiles().getClientProfiles());
int ind = 0;
@@ -422,6 +445,20 @@ public class GeneralTab extends VBox
}
+ int screenSaverTimeout = -1;
+ try
+ {
+ screenSaverTimeout = Integer.parseInt(serverPortTextField.getText());
+
+ if(screenSaverTimeout < 15)
+ errors.append("* Screen Timeout cannot be below 15 seconds.\n");
+ }
+ catch (NumberFormatException exception)
+ {
+ errors.append("* Screen Timeout should be a number.\n");
+ }
+
+
if(serverHostNameOrIPTextField.getText().isBlank())
{
errors.append("* Server IP cannot be empty.\n");
@@ -539,6 +576,16 @@ public class GeneralTab extends VBox
config.setProfilesPath(profilesPathTextField.getText());
+ if(config.isScreenSaverEnabled() != screenSaverToggleButton.isSelected())
+ toBeReloaded = true;
+
+ config.setScreenSaverEnabled(screenSaverToggleButton.isSelected());
+
+ if(!(screenSaverTimeout+"").equals(screenTimeoutTextField.getText()))
+ toBeReloaded = true;
+
+ config.setScreenSaverTimeout(screenTimeoutTextField.getText());
+
config.setConnectOnStartup(connectOnStartupToggleButton.isSelected());
boolean isVibrateOnActionClicked = vibrateOnActionPressToggleButton.isSelected();
Binary files 'a/src/main/resources/com/stream_pi/client/Default.zip' and b/src/main/resources/com/stream_pi/client/Default.zip differ
--- 'a/src/main/resources/com/stream_pi/client/style.css'
+++ b/src/main/resources/com/stream_pi/client/style.css
@@ -205,4 +205,9 @@
{
-fx-padding : 10 0 0 0;
-fx-font-size : 25;
+}
+
+.screensaver
+{
+ -fx-background-color: black;
}
\ No newline at end of file