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); } } }