public TaskHandlerImpl(UIAccessor uiAccessor, TaskExecutor<T, V> taskExecutor, WatchDog watchDog) {
this.uiAccessor = uiAccessor;
this.taskExecutor = taskExecutor;
this.watchDog = watchDog;
this.events = AppBeans.get(Events.NAME);
UserSessionSource sessionSource = AppBeans.get(UserSessionSource.NAME);
this.userSession = sessionSource.getUserSession();
BackgroundTask<T, V> task = taskExecutor.getTask();
if (task.getOwnerScreen() != null) {
Screen ownerFrame = task.getOwnerScreen();
afterDetachSubscription = addAfterDetachListener(ownerFrame, e -> ownerWindowRemoved(e.getSource()));
taskExecutor.setFinalizer(() -> {
log.trace("Start task finalizer. Task: {}", taskExecutor.getTask());
removeAfterDetachListener();
log.trace("Finish task finalizer. Task: {}", taskExecutor.getTask());
});
}
}