/*
* Copyright (C) 2013 Peng fei Pan <sky@xiaopan.me>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.xjf.repository.utils;
import android.content.Context;
import android.widget.Toast;
import java.util.Locale;
/**
* 双击退出识别器
*/
public class DoubleClickExitDetector {
public static String DEFAULT_HINT_MESSAGE_CHINA = "再按一次退出程序";
public static String DEFAULT_HINT_MESSAGE_OTHER = "Press again to exit the program";
private int effectiveIntervalTime; // 有效的间隔时间,单位毫秒
private long lastClickTime; // 上次点击时间
private String hintMessage; // 提示消息
private Context context;
/**
* 创建一个双击退出识别器
* @param context Androdi上下文
* @param hintMessage 提示消息
* @param effectiveIntervalTime 有效间隔时间
*/
public DoubleClickExitDetector(Context context, String hintMessage, int effectiveIntervalTime) {
this.context = context;
this.hintMessage = hintMessage;
this.effectiveIntervalTime = effectiveIntervalTime;
}
/**
* 创建一个双击退出识别器,有效间隔时间默认为2000毫秒
* @param context Androdi上下文
* @param hintContent 提示消息
*/
public DoubleClickExitDetector(Context context, String hintContent) {
this(context, hintContent, 2000);
}
/**
* 创建一个双击退出识别器,中国环境下默认提示消息为“再按一次退出程序”,其它环境下默认提示消息为“Press again to exit the program”;有效间隔时间默认为2000毫秒
* @param context Androdi上下文
*/
public DoubleClickExitDetector(Context context) {
this(context, Locale.CHINA.equals(Locale.getDefault()) ? DEFAULT_HINT_MESSAGE_CHINA : DEFAULT_HINT_MESSAGE_OTHER, 2000);
}
/**
* 点击,你需要重写Activity的onBackPressed()方法,先调用此方法,如果返回true就执行父类的onBackPressed()方法来关闭Activity否则不执行
* @return 当两次点击时间间隔小于有效间隔时间时就会返回true,否则返回false
*/
public boolean click(){
long currentTime = System.currentTimeMillis();
boolean result = (currentTime-lastClickTime) < effectiveIntervalTime;
lastClickTime = currentTime;
if(!result){
Toast.makeText(context, hintMessage, Toast.LENGTH_SHORT).show();
}
return result;
}
/**
* 设置有效间隔时间,单位毫秒
* @param effectiveIntervalTime 效间隔时间,单位毫秒。当两次点击时间间隔小于有效间隔时间click()方法就会返回true
*/
public void setEffectiveIntervalTime(int effectiveIntervalTime) {
this.effectiveIntervalTime = effectiveIntervalTime;
}
/**
* 设置提示消息
* @param hintMessage 当前点击同上次点击时间间隔大于有效间隔时间click()方法就会返回false,并且显示提示消息
*/
public void setHintMessage(String hintMessage) {
this.hintMessage = hintMessage;
}
}