package com.aincc.lib.ui.control;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Handler;
import android.widget.Toast;
import com.aincc.lib.R;
/**
*
* <h3><b>ExitBackChecker</b></h3></br>
*
* @author aincc@barusoft.com
* @version 1.0.0
* @since 1.0.0
*/
public class ExitBackChecker
{
private static final String EXIT_BACK_CHECKER = "EXIT_BACK_CHECKER";
private Uri URI_BACK_TIMER = Uri.parse("aincc://com.aincc.lib.exit_back_checker");
private Timer exitBackTimer = new Timer(EXIT_BACK_CHECKER);
private TimerTask exitBackTimerTask = null;
private ContentObserver observer;
private ContentResolver resolver;
private Activity context;
private Handler handler;
private int backDelay = 1000;
/**
*
* @since 1.0.0
* @param context
* @param handler
* @param delay
*/
public ExitBackChecker(Activity context, Handler handler, int delay)
{
this.context = context;
this.handler = handler;
this.backDelay = delay;
}
/**
* @since 1.0.0
*/
public void backPressed()
{
resolver.notifyChange(URI_BACK_TIMER, null);
}
/**
* 옵저버 등록
*
* @since 1.0.0
*/
public void registerObserver()
{
resolver = context.getContentResolver();
observer = new ContentObserver(handler)
{
@Override
public void onChange(boolean selfChange)
{
if (null != exitBackTimerTask)
{
// 종료처리.
exitBackTimerTask.cancel();
context.finish();
return;
}
exitBackTimer.purge();
// 신규 타이머 태스크 생성
TimerTask newTask = new TimerTask()
{
@Override
public void run()
{
cancel();
exitBackTimerTask = null;
}
@Override
public boolean cancel()
{
return super.cancel();
}
};
exitBackTimerTask = newTask;
exitBackTimer.schedule(newTask, backDelay);
handler.post(new Runnable()
{
@Override
public void run()
{
Toast.makeText(context, context.getResources().getString(R.string.exit_by_backkey), Toast.LENGTH_SHORT).show();
}
});
}
};
// 옵저버 등록
resolver.registerContentObserver(URI_BACK_TIMER, true, observer);
}
/**
* 옵저버 해제
*
* @since 1.0.0
*/
public void unregisterObserver()
{
if (null != resolver && null != observer)
{
resolver.unregisterContentObserver(observer);
}
}
}