package com.hazens.kaolafm;
import java.util.ArrayList;
import java.util.List;
/**
* 防止短時間內頻繁點擊。默認500毫秒,使用{@link #check(long, Object)}可以自定義時間。
*/
public class AntiShake {
private static List<OneClick> mOneClickList = new ArrayList<>();
private static long mDelayTime = 0;
/**
* 檢查是否在短時間內連續點擊
* @param obj
* @return true 是
*/
public static boolean check(Object obj){
String flag;
if (obj == null){
flag = Thread.currentThread().getStackTrace()[0].getMethodName();
}else {
flag = obj.toString();
}
for (OneClick oneClick : mOneClickList){
if (oneClick.getMethodName().equals(flag)){
return oneClick.check();
}
}
OneClick oneClick = new OneClick(flag);
if (mDelayTime > 0){
oneClick.setClickDelayTime(mDelayTime);
}
mOneClickList.add(oneClick);
return oneClick.check();
}
/**
* 檢查是否在設定時間內連續點擊
* @param delayTime 不在再次點擊的時間間隔
* @param obj
* @return
*/
public static boolean check(long delayTime, Object obj){
setClickDelayTime(delayTime);
return check(obj);
}
public static void setClickDelayTime(long delayTime){
mDelayTime = delayTime;
}
static class OneClick{
private long clickDelayTime = 500L;
private long lastTime;
private final String methodName;
public OneClick(final String methodName) {
this.methodName = methodName;
}
/**
* 當前時間與上一次時間間隔大於延遲返回false
* @return
*/
boolean check() {
long currentTime = System.currentTimeMillis();
if (currentTime - lastTime > clickDelayTime){
lastTime = currentTime;
return false;
}
return true;
}
String getMethodName() {
return methodName;
}
void setClickDelayTime(long delayTime){
clickDelayTime = delayTime;
}
}
}