diff --git a/app/src/main/java/ua/samosfator/moduleok/notification/ScoreCheckerService.java b/app/src/main/java/ua/samosfator/moduleok/notification/ScoreCheckerService.java index 335f55e..fd0cad9 100644 --- a/app/src/main/java/ua/samosfator/moduleok/notification/ScoreCheckerService.java +++ b/app/src/main/java/ua/samosfator/moduleok/notification/ScoreCheckerService.java @@ -4,7 +4,6 @@ import android.content.Intent; import android.os.IBinder; import android.util.Log; -import android.widget.Toast; import java.util.Timer; import java.util.TimerTask; @@ -23,7 +22,7 @@ public class ScoreCheckerService extends Service { public static int pendingModulesCount = NearbyModules.getCount(); private Timer timer = new Timer("timer"); - private TimerTask updateTimeTask = new UpdateTimeTask(); + private TimerTask scoresChangedTask = new ScoresChangedTask(); private TimerTask moduleDatesUpdateTask = new ModuleDatesUpdateTask(); public ScoreCheckerService() { @@ -70,15 +69,21 @@ public void onEvent(InternetConnectionAbsent event) { } private void startServiceTimer() { + scheduleModuleDatesUpdateTask(); + scheduleScoresChangedTask(); + } + + private void scheduleModuleDatesUpdateTask() { moduleDatesUpdateTask = new ModuleDatesUpdateTask(); timer.schedule(moduleDatesUpdateTask, 200, TimeUnit.HOURS.toMillis(12)); + } - updateTimeTask = new UpdateTimeTask(); + private void scheduleScoresChangedTask() { + scoresChangedTask = new ScoresChangedTask(); ModuleDatesUpdateTask.updatePendingModulesCount(); if (pendingModulesCount > 0) { - timer.schedule(updateTimeTask, 0, TimeUnit.HOURS.toMillis(2)); - Log.d(TAG, "" + pendingModulesCount + " modules in the near 2 days"); + timer.schedule(scoresChangedTask, 0, TimeUnit.HOURS.toMillis(2)); } else { Log.d(TAG, "No modules dates in the near 2 days"); } @@ -86,6 +91,6 @@ private void startServiceTimer() { private void stopServiceTimer() { moduleDatesUpdateTask.cancel(); - updateTimeTask.cancel(); + scoresChangedTask.cancel(); } } diff --git a/app/src/main/java/ua/samosfator/moduleok/notification/ScoresChangedTask.java b/app/src/main/java/ua/samosfator/moduleok/notification/ScoresChangedTask.java new file mode 100644 index 0000000..172d9fd --- /dev/null +++ b/app/src/main/java/ua/samosfator/moduleok/notification/ScoresChangedTask.java @@ -0,0 +1,44 @@ +package ua.samosfator.moduleok.notification; + +import java.util.List; +import java.util.TimerTask; + +import java8.util.stream.StreamSupport; +import ua.samosfator.moduleok.SessionIdExpiredException; +import ua.samosfator.moduleok.StudentKeeper; +import ua.samosfator.moduleok.parser.Subject; + +public class ScoresChangedTask extends TimerTask { + @Override + public void run() { + if (areScoresChanged()) { + ScoreCheckerNotification.sendNotification(); + } + } + + private boolean areScoresChanged() { + List oldSubjects = getSubjects(); + try { + StudentKeeper.refreshStudent(); + } catch (SessionIdExpiredException ignored) { + } + List newSubjects = getSubjects(); + + return getTotalSumAllScores(oldSubjects) != getTotalSumAllScores(newSubjects); + } + + private int getTotalSumAllScores(List subjects) { + final int[] oldTotalScore = {0}; + StreamSupport.parallelStream(subjects) + .map(subject -> StreamSupport.parallelStream(subject.getModules())) + .map(modulesStream -> modulesStream.map(module -> oldTotalScore[0] += module.getScore())); + return oldTotalScore[0]; + } + + private List getSubjects() { + return StudentKeeper.getCurrentStudent() + .getSemesters() + .get(StudentKeeper.getCurrentSemesterIndex()) + .getSubjects(); + } +} diff --git a/app/src/main/java/ua/samosfator/moduleok/notification/UpdateTimeTask.java b/app/src/main/java/ua/samosfator/moduleok/notification/UpdateTimeTask.java deleted file mode 100644 index c2605fd..0000000 --- a/app/src/main/java/ua/samosfator/moduleok/notification/UpdateTimeTask.java +++ /dev/null @@ -1,30 +0,0 @@ -package ua.samosfator.moduleok.notification; - -import java.util.TimerTask; - -import ua.samosfator.moduleok.App; -import ua.samosfator.moduleok.SessionIdExpiredException; -import ua.samosfator.moduleok.StudentKeeper; - -public class UpdateTimeTask extends TimerTask { - @Override - public void run() { - if (isUpdateTimeChanged()) { - ScoreCheckerNotification.sendNotification(); - } - } - - private boolean isUpdateTimeChanged() { - String oldTime = App.getFormattedUpdateTime(); - String newTime = oldTime; - - try { - StudentKeeper.refreshStudent(); - } catch (SessionIdExpiredException ignored) { - } - - newTime = App.getFormattedUpdateTime(); - - return !oldTime.equals(newTime); - } -}