+ @Override
+ public void updateLastAccess() {
+ this.lastAccess = System.currentTimeMillis();
+ }
+
+ public void setUiTimeout(long uiTimeout) {
+// clearTimeoutTask();
+ this.uiTimeout = uiTimeout;
+ if (this.uiTimeout <= 0)
+ return;
+ // TODO introduce mechanism to check whether the UI is "zombie"
+ // (that is the UI thread still exists, but cannot execute anything)
+// final long timeoutTaskPeriod = 60 * 60 * 1000;// 1h
+// timeoutTask = cmsView.schedule(() -> {
+// disposeIfTimedout();
+// }, timeoutTaskPeriod, timeoutTaskPeriod);
+// addDisposeListener((e) -> {
+// clearTimeoutTask();
+// });
+ }
+
+// /** Must be run in UI thread. */
+// public void disposeIfTimedout() {
+// System.out.println("Enter disposeIfTimedout");
+// if (isDisposed()) {
+// clearTimeoutTask();
+// return;
+// }
+// if (isTimedOut()) {
+// dispose();
+// clearTimeoutTask();
+// System.out.println("Disposed after timeout");
+// }
+// }
+
+// private void clearTimeoutTask() {
+// if (timeoutTask != null) {
+// timeoutTask.cancel();
+// timeoutTask = null;
+// }
+// }
+
+ @Override
+ public boolean isTimedOut() {
+ return uiTimeout > 0 && (System.currentTimeMillis() - lastAccess >= uiTimeout);
+ }
+
+// class DisposeIfTimedOutTask implements Runnable {
+// public void run() {
+// disposeIfTimedout();
+// getDisplay().timerExec(1000, new DisposeIfTimedOutTask());
+// }
+//
+// }
+