~opensatnav-admins/opensatnav/nice-package-rename

« back to all changes in this revision

Viewing changes to src/org/opensatnav/contribute/services/PeriodicTaskExecuter.java

Merge store-tracks-to-database branch into main

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright 2009 Google Inc.
 
3
 * 
 
4
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 
5
 * use this file except in compliance with the License. You may obtain a copy of
 
6
 * the License at
 
7
 * 
 
8
 * http://www.apache.org/licenses/LICENSE-2.0
 
9
 * 
 
10
 * Unless required by applicable law or agreed to in writing, software
 
11
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 
12
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 
13
 * License for the specific language governing permissions and limitations under
 
14
 * the License.
 
15
 */
 
16
 
 
17
package org.opensatnav.contribute.services;
 
18
 
 
19
import org.opensatnav.OpenSatNavConstants;
 
20
 
 
21
import android.util.Log;
 
22
 
 
23
import java.util.Date;
 
24
import java.util.Timer;
 
25
import java.util.TimerTask;
 
26
 
 
27
/**
 
28
 * This class will periodically announce the user's trip statitics.
 
29
 *
 
30
 * @author Sandor Dornbush
 
31
 */
 
32
public class PeriodicTaskExecuter {
 
33
 
 
34
  private final TrackRecordingService service;
 
35
 
 
36
  /**
 
37
   * A timer to schedule the announcements.
 
38
   */
 
39
  private Timer timer = new Timer();
 
40
 
 
41
  private final PeriodicTask task;
 
42
 
 
43
  public PeriodicTaskExecuter(PeriodicTask task,
 
44
                              TrackRecordingService service) {
 
45
    this.task = task;
 
46
    this.service = service;
 
47
  }
 
48
 
 
49
  /**
 
50
   * Schedules the task at the given interval.
 
51
   *
 
52
   * @param interval The interval in milliseconds
 
53
   */
 
54
  public void scheduleTask(long interval) {
 
55
    timer.cancel();
 
56
    timer.purge();
 
57
    timer = new Timer();
 
58
    if (interval <= 0) {
 
59
      return;
 
60
    }
 
61
 
 
62
    long now = System.currentTimeMillis();
 
63
    long next = service.getTripStatistics().getStartTime();
 
64
    while (next < now) next += interval;
 
65
 
 
66
    Date start = new Date(next);
 
67
    Log.i(OpenSatNavConstants.LOG_TAG,
 
68
          "StatusAnnouncer scheduled to start at " + start + " every "
 
69
          + interval + " milliseconds.");
 
70
    timer.scheduleAtFixedRate(new PeriodicTimerTask(), start, interval);
 
71
  }
 
72
 
 
73
  /**
 
74
   * Cleans up this object.
 
75
   */
 
76
  public void shutdown() {
 
77
    timer.cancel();
 
78
    timer.purge();
 
79
    timer = null;
 
80
    task.shutdown();
 
81
  }
 
82
 
 
83
  /**
 
84
   * The timer task to announce the trip status.
 
85
   */
 
86
  private class PeriodicTimerTask extends TimerTask {
 
87
    @Override
 
88
    public void run() {
 
89
      task.run(service);
 
90
    }
 
91
  }
 
92
}