Supporting preventing system sleep for desktop

This commit is contained in:
drdev
2016-04-17 21:33:12 +00:00
parent f1e952feac
commit a6fd4887a0
3 changed files with 44 additions and 2 deletions

View File

@@ -49,6 +49,7 @@ import forge.toolbox.FSkin.SkinImage;
import forge.util.BuildInfo;
import forge.util.Callback;
import forge.util.FileUtil;
import forge.util.OperatingSystem;
public class GuiDesktop implements IGuiBase {
@Override
@@ -286,6 +287,6 @@ public class GuiDesktop implements IGuiBase {
@Override
public void preventSystemSleep(boolean preventSleep) {
OperatingSystem.preventSystemSleep(preventSleep);
}
}

View File

@@ -12,6 +12,7 @@ import forge.Forge;
import forge.assets.AssetsDownloader;
import forge.interfaces.IDeviceAdapter;
import forge.util.FileUtil;
import forge.util.OperatingSystem;
import forge.util.RestartUtil;
import forge.util.Utils;
@@ -96,7 +97,7 @@ public class Main {
@Override
public void preventSystemSleep(boolean preventSleep) {
OperatingSystem.preventSystemSleep(preventSleep);
}
}
}

View File

@@ -1,5 +1,7 @@
package forge.util;
import forge.FThreads;
public class OperatingSystem {
private static String os = System.getProperty("os.name").toLowerCase();
@@ -18,4 +20,42 @@ public class OperatingSystem {
public static boolean isSolaris() {
return os.contains("sunos");
}
//utility for preventing system from sleeping
private static boolean preventSleep;
private static java.util.concurrent.ScheduledFuture<?> delayedKeepAwakeTask;
public static void preventSystemSleep(boolean preventSleep0) {
if (preventSleep == preventSleep0) { return; }
preventSleep = preventSleep0;
if (delayedKeepAwakeTask != null) { //ensure current delayed task canceled if needed
delayedKeepAwakeTask.cancel(false);
delayedKeepAwakeTask = null;
}
if (preventSleep) { //ensure task scheduled from EDT thread
FThreads.invokeInEdtNowOrLater(keepSystemAwake);
}
}
private static Runnable keepSystemAwake = new Runnable() {
@Override
public void run() {
if (!preventSleep) { return; } //ensure this flag is still set
try {
//use robot to simulate user action so system standby timer resets
java.awt.Robot robot = new java.awt.Robot();
robot.keyPress(0xF002); //simulate F15 key press since that won't do anything noticable
delayedKeepAwakeTask = ThreadUtil.delay(30000, keepSystemAwake); //repeat every 30 seconds until flag cleared
}
catch (Exception e) {
preventSleep = false;
delayedKeepAwakeTask = null;
e.printStackTrace();
}
}
};
}