package com.sipai.jspatrol.utils.DoubleClickUtils;

import android.os.Message;

/**
 * Created by lvliming on 2018/6/12.
 */

public class DoubleRunnable implements Runnable {
    private DoubleHandler mHandler;//处理点击事件的handler
    private boolean isStarted = false;//表示线程是否正处于阻塞中
    private boolean isPrepared = false;//表示是否已准备好启动线程
    private boolean isDoubleClicked = false;//表示是否被双击
    private int doubleSpan;//用于判断双击的间隔时间

    /**
     * 双击事件线程执行体的构造函数
     * @param handler
     *          用于处理是否双击事件的handler
     */
    public DoubleRunnable(DoubleHandler handler) {
        handler.setDoubleRunnable(this);
        this.mHandler = handler;
    }

    @Override
    public void run() {

        while (true){
            //如果没有被点击，则继续下次循环
            if (!isPrepared) {
                continue;
            }
            isPrepared = false;
            //如果线程处于一次双击事件的阻塞中，则继续下次循环，直至事件结束
            if (isStarted){
                continue;
            }
            isStarted = true;
            try {
                Thread.sleep(doubleSpan);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            Message msg = mHandler.obtainMessage();
            msg.obj = isDoubleClicked;
            mHandler.sendMessage(msg);
        }

    }

    /**
     * 设置当前双击事件的执行状态
     * @param isPrepared
     *          是否已被点击（可以执行线程中代码）
     * @param isDoubleClicked
     *          是否已被双击
     */
    public void setPreparedState(boolean isPrepared, boolean isDoubleClicked) {
        this.isPrepared = isPrepared;
        this.isDoubleClicked = isDoubleClicked;
    }

    /**
     * 设置线程是否处于一次双击事件判断的阻塞之中
     * @param isStarted
     *          传入是否阻塞开启
     */
    public void setIsStarted(boolean isStarted){
        this.isStarted = isStarted;
    }

    /**
     * 设置用于判断双击的间隔时间
     * @param doubleSpan
     *          传入的时间间隔
     */
    public void setDoubleSpan(int doubleSpan){
        this.doubleSpan = doubleSpan;
    }
}
