/** Last time the UI was accessed. */
private long lastAccess = System.currentTimeMillis();
private TimerTask timeoutTask;
+ private long uiTimeout = 0;
private CmsView cmsView;
public CmsSwtUi(Composite parent, int style) {
super(parent, style);
cmsView = CmsSwtUtils.getCmsView(parent);
- // TODO make timeout configurable
- setUiTimeout(12 * 60 * 60 * 1000);// 12 hours
setLayout(new GridLayout());
}
}
public void setUiTimeout(long uiTimeout) {
- if (timeoutTask != null)
- timeoutTask.cancel();
+ clearTimeoutTask();
+ this.uiTimeout = uiTimeout;
+ if (this.uiTimeout <= 0)
+ return;
+ final long timeoutTaskPeriod = 60 * 60 * 1000;// 1h
timeoutTask = cmsView.schedule(() -> {
- if (System.currentTimeMillis() - getLastAccess() >= uiTimeout)
- dispose();
- }, 0, 1000);
+ disposeIfTimedout();
+ }, timeoutTaskPeriod, timeoutTaskPeriod);
+ }
+
+ /** Must be run in UI thread. */
+ public void disposeIfTimedout() {
+ if (isDisposed()) {
+ clearTimeoutTask();
+ return;
+ }
+ if (System.currentTimeMillis() - getLastAccess() >= uiTimeout) {
+ dispose();
+ clearTimeoutTask();
+ }
+ }
+
+ private void clearTimeoutTask() {
+ if (timeoutTask != null) {
+ timeoutTask.cancel();
+ timeoutTask = null;
+ }
}
}
\ No newline at end of file