package pl.edu.agh.logic; import java.util.List; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import pl.edu.agh.service.LocationDataSource; import android.location.Location; public class PeriodicSendingStrategy implements SendingStrategy, Runnable { private LocationDataSender sender; private LocationDataSource dataSource; private ScheduledExecutorService executor; private ScheduledFuture<?> taskFuture = null; private long interval; public PeriodicSendingStrategy(LocationDataSender sender, LocationDataSource dataSource, long interval) { this.sender = sender; this.dataSource = dataSource; this.interval = interval; executor = Executors.newSingleThreadScheduledExecutor(); } public void activate() { if(taskFuture == null) { taskFuture = executor.scheduleAtFixedRate(this, 0, interval, TimeUnit.MILLISECONDS); } } public void deactivate() { if(taskFuture != null) { taskFuture.cancel(false); taskFuture = null; } } public void run() { List<Location> locations = dataSource.getAndRemoveAllData(); if (!locations.isEmpty()) { sender.sendAllData(locations); } } }