Author: echatellier Date: 2012-03-27 17:59:10 +0200 (Tue, 27 Mar 2012) New Revision: 2845 Url: http://chorem.org/repositories/revision/jtimer/2845 Log: Add new algorithm based on atomic long Modified: branches/1.4.0-ttalgo/src/main/java/org/chorem/jtimer/ui/tasks/RunTaskJob.java Modified: branches/1.4.0-ttalgo/src/main/java/org/chorem/jtimer/ui/tasks/RunTaskJob.java =================================================================== --- branches/1.4.0-ttalgo/src/main/java/org/chorem/jtimer/ui/tasks/RunTaskJob.java 2012-03-27 10:59:05 UTC (rev 2844) +++ branches/1.4.0-ttalgo/src/main/java/org/chorem/jtimer/ui/tasks/RunTaskJob.java 2012-03-27 15:59:10 UTC (rev 2845) @@ -198,15 +198,23 @@ // check for idleness with last user activity (real idle and hibernate) long delta = lastUserActivity.get() - oldUserActivity; - if (delta + idleTime >= configIdleTime) { + // time have to be published, even if idle is detected + // because time adjustment will remove more time than published + // one if done after + addTaskDelta(lastUserActivity.get(), delta); + + if (delta >= configIdleTime || idleTime >= configIdleTime) { + + long userIdleTime = Math.max(delta, idleTime); + // remove delta from now - addTaskDelta(lastUserActivity.get(), -(delta + idleTime)); + addTaskDelta(lastUserActivity.get(), -userIdleTime); // display idle detected (blocking call) JTimer parentApplication = (JTimer) getApplication(); parentApplication.preIdleDetect(); - int option = IdleDialog.showIdleDialog(delta); + int option = IdleDialog.showIdleDialog(lastUserActivity.get() - userIdleTime); parentApplication.postIdleDetect(); switch (option) { @@ -217,14 +225,13 @@ case IdleDialog.CONTINUE: // readd delta since oldUserActivity - addTaskDelta(oldUserActivity, delta + idleTime); + addTaskDelta(lastUserActivity.get() - userIdleTime, userIdleTime); break; } - } else { - // update new time - addTaskDelta(oldUserActivity, delta); + // need to fix last user activity + lastUserActivity.set(System.currentTimeMillis()); } Thread.sleep(1000); // 1s @@ -248,6 +255,10 @@ long localDelta = delta; + if (log.isDebugEnabled()) { + log.debug("Adding delta to task : " + delta); + } + // remove time if (localDelta < 0) { Date currentDate = new Date(from); @@ -256,6 +267,9 @@ long msToMidnight = currentDate.getTime() - todayMidnight.getTime(); long toRemove = Math.min(-localDelta, msToMidnight); dataManager.changeTaskTime(managedTask, currentDate, managedTask.getTime(currentDate) - toRemove); + if (log.isDebugEnabled()) { + log.debug(" remove delta to task on " + currentDate + " : " + toRemove); + } localDelta += toRemove; currentDate = DateUtils.addMilliseconds(todayMidnight, -1); } @@ -269,6 +283,9 @@ long msToMidnight = today235959.getTime() - currentDate.getTime(); long toAdd = Math.min(localDelta, msToMidnight); dataManager.changeTaskTime(managedTask, currentDate, managedTask.getTime(currentDate) + toAdd); + if (log.isDebugEnabled()) { + log.debug(" adding delta to task on " + currentDate + " : " + toAdd); + } localDelta -= toAdd; currentDate = DateUtils.addMilliseconds(today235959, 1); }