package com.markjmind.uni.thread; import android.os.AsyncTask; import com.markjmind.uni.common.StoreObservable; /** * <br>捲土重來<br> * @author 오재웅(JaeWoong-Oh) * @email markjmind@gmail.com * @since 2016-01-28 */ public class CancelObservable extends StoreObservable<UniMainThread> implements CancelObserver { private boolean taskAutoCanceled = true; private boolean isAttached; public CancelObservable(){ isAttached = false; } @Override public synchronized void add(UniMainThread observer) { String className = observer.getId(); super.add(observer); // Log.e("DetachedObservable", className+" add:"+size()); } @Override public synchronized void remove(String id) { UniMainThread observer = get(id); if(observer != null) { String className = observer.getId(); super.remove(id); // Log.e("DetachedObservable", className + " remove:" + size()); } } @Override public synchronized void cancel(String id){ UniMainThread observer = get(id); if(observer != null) { String className = observer.getId(); get(id).cancel(); // Log.e("DetachedObservable", className + " cancel:" + size()); remove(id); } } public synchronized void cancelRecent() { this.cancel(getLastKey()); } @Override public synchronized void cancelAll(){ synchronized (this) { String[] keys = getStore().getKeys(); for (String key: keys) { cancel(key); } } } public AsyncTask.Status getStatus(String id){ if(id==null){ return null; } UniMainThread observer = get(id); if(observer==null){ return null; } return observer.getStatus(); } public boolean isAttached() { return isAttached; } public void setAttached(boolean isAttached) { this.isAttached = isAttached; } public CancelAdapter getCancelAdapter(String taskId){ return new CancelAdapter(taskId, this); } public boolean isTaskAutoCanceled() { return taskAutoCanceled; } public void setTaskAutoCanceled(boolean taskAutoCanceled) { this.taskAutoCanceled = taskAutoCanceled; } }