Added ui.min_show_seconds config.

This defines the minimum amount of time for which the UI will be shown before
automatically hiding itself. It defaults to 5 seconds (the old hard coded
value), which was chosen to ensure that users did not see a random window flash
up on the screen and then immediately disappear before they could see what it
was or meant, thereby confusing them.
This commit is contained in:
Michael Bayne
2018-08-09 11:26:35 -07:00
parent d1992a5b9d
commit 45dc04c5a7
2 changed files with 46 additions and 29 deletions
@@ -153,6 +153,11 @@ public class Application
/** Whether progress text should be hidden or not. */
public boolean hideProgressText;
/** The minimum number of seconds to display the GUI. This is to prevent the GUI from
* flashing up on the screen and immediately disappearing, which can be confusing to the
* user. */
public int minShowSeconds = 5;
/** The global percentages for each step. A step may have more than one, and
* the lowest reasonable one is used if a step is revisited. */
public Map<Step, List<Integer>> stepPercentages =
@@ -168,7 +173,7 @@ public class Application
", shadow=" + textShadow + ", err=" + installError + ", nrect=" + patchNotes +
", notes=" + patchNotesUrl + ", stepPercentages=" + stepPercentages +
", parect=" + playAgain + ", paimage=" + playAgainImage +
", hideProgressText" + hideProgressText + "]";
", hideProgressText" + hideProgressText + ", minShow=" + minShowSeconds + "]";
}
/** Initializer */
@@ -719,6 +724,7 @@ public class Application
ui.progress = parseRect(cdata, "ui.progress", ui.progress);
ui.progressText = parseColor(cdata, "ui.progress_text", ui.progressText);
ui.hideProgressText = Boolean.parseBoolean((String)cdata.get("ui.hide_progress_text"));
ui.minShowSeconds = parseInt(cdata, "ui.min_show_seconds", ui.minShowSeconds);
ui.progressBar = parseColor(cdata, "ui.progress_bar", ui.progressBar);
ui.status = parseRect(cdata, "ui.status", ui.status);
ui.statusText = parseColor(cdata, "ui.status_text", ui.statusText);
@@ -1679,6 +1685,27 @@ public class Application
return new Resource(path, getRemoteURL(path), getLocalPath(path), attrs);
}
/** Helper function to add all values in {@code values} (if non-null) to {@code target}. */
protected static void addAll (String[] values, List<String> target) {
if (values != null) {
for (String value : values) {
target.add(value);
}
}
}
/**
* Make an immutable List from the specified int array.
*/
public static List<Integer> intsToList (int[] values)
{
List<Integer> list = new ArrayList<>(values.length);
for (int val : values) {
list.add(val);
}
return Collections.unmodifiableList(list);
}
/** Used to parse resources with the specified name. */
protected void parseResources (Map<String,Object> cdata, String name,
EnumSet<Resource.Attr> attrs, List<Resource> list)
@@ -1704,27 +1731,6 @@ public class Application
return (rect == null) ? def : rect;
}
/** Helper function to add all values in {@code values} (if non-null) to {@code target}. */
protected static void addAll (String[] values, List<String> target) {
if (values != null) {
for (String value : values) {
target.add(value);
}
}
}
/**
* Make an immutable List from the specified int array.
*/
public static List<Integer> intsToList (int[] values)
{
List<Integer> list = new ArrayList<>(values.length);
for (int val : values) {
list.add(val);
}
return Collections.unmodifiableList(list);
}
/**
* Takes a comma-separated String of four integers and returns a rectangle using those ints as
* the its x, y, width, and height.
@@ -1736,11 +1742,22 @@ public class Application
if (v != null && v.length == 4) {
return new Rectangle(v[0], v[1], v[2], v[3]);
}
log.warning("Ignoring invalid '" + name + "' config '" + value + "'.");
log.warning("Ignoring invalid rect '" + name + "' config '" + value + "'.");
}
return null;
}
/** Used to parse int specifications from the config file. */
protected int parseInt (Map<String, Object> cdata, String name, int def) {
String value = (String)cdata.get(name);
try {
return value == null ? def : Integer.parseInt(value);
} catch (Exception e) {
log.warning("Ignoring invalid int '" + name + "' config '" + value + "',");
return def;
}
}
/** Used to parse color specifications from the config file. */
protected Color parseColor (Map<String, Object> cdata, String name, Color def)
{
@@ -850,13 +850,14 @@ public abstract class Getdown extends Thread
}
}
// if we have a UI open and we haven't been around for at least 5 seconds, don't stick
// a fork in ourselves straight away but give our lovely user a chance to see what
// we're doing
// if we have a UI open and we haven't been around for at least 5 seconds (the default
// for min_show_seconds), don't stick a fork in ourselves straight away but give our
// lovely user a chance to see what we're doing
long uptime = System.currentTimeMillis() - _startup;
if (_container != null && uptime < MIN_EXIST_TIME) {
long minshow = _ifc.minShowSeconds * 1000L;
if (_container != null && uptime < minshow) {
try {
Thread.sleep(MIN_EXIST_TIME - uptime);
Thread.sleep(minshow - uptime);
} catch (Exception e) {
}
}
@@ -1263,7 +1264,6 @@ public abstract class Getdown extends Thread
protected int _uiDisplayPercent;
protected static final int MAX_LOOPS = 5;
protected static final long MIN_EXIST_TIME = 5000L;
protected static final long FALLBACK_CHECK_TIME = 1000L;
protected static final long PLAY_AGAIN_TIME = 3000L;
protected static final String PROXY_REGISTRY =