package org.deviceconnect.android.deviceplugin.hitoe.util;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
/**
* Created by hoshit on 2016/06/30.
*/
public class HitoeScheduler {
/**
* Instance of ScheduledExecutorService.
*/
private ScheduledExecutorService mExecutor = Executors.newSingleThreadScheduledExecutor();
/**
* ScheduledFuture of scan timer.
*/
private ScheduledFuture<?> mScanTimerFuture;
/**
* Defines a delay 1 second at first execution.
*/
private static final long SCAN_FIRST_WAIT_PERIOD = 1000;
/**
* Defines a period 10 seconds between successive executions.
*/
private static final long SCAN_WAIT_PERIOD = 10 * 1000;
/**
* Scanning flag.
*/
private boolean mScanning;
/** Notify listener. */
private OnRegularNotify mNotify;
/** Default wait period. */
private long mWaitPeriod = SCAN_WAIT_PERIOD;
/** Default first wait period. */
private long mFirstWaitPeriod = SCAN_FIRST_WAIT_PERIOD;
/**
* Constructor.
* @param notify listener
* @param first first wait period
* @param period wait period
*/
public HitoeScheduler(final OnRegularNotify notify, final long first, final long period) {
mNotify = notify;
if (first > 0) {
mFirstWaitPeriod = first;
}
if (period > 0) {
mWaitPeriod = period;
}
}
/**
* Scan Hitoe device.
* @param enable scan flag
*/
public synchronized void scanHitoeDevice(final boolean enable) {
if (enable) {
if (mScanning || mScanTimerFuture != null) {
// scan have already started.
return;
}
mScanning = true;
mScanTimerFuture = mExecutor.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
if (mNotify != null) {
mNotify.onRegularNotify();
}
}
}, mFirstWaitPeriod, mWaitPeriod, TimeUnit.MILLISECONDS);
} else {
mScanning = false;
cancelScanTimer();
}
}
/**
* Stopped the scan timer.
*/
private synchronized void cancelScanTimer() {
if (mScanTimerFuture != null) {
mScanTimerFuture.cancel(true);
mScanTimerFuture = null;
}
}
public interface OnRegularNotify {
void onRegularNotify();
}
}