package com.devsmart.android.ui.lifecycle;
import java.util.LinkedList;
import java.util.Queue;
import android.app.Activity;
import android.os.Bundle;
public class FragmentStateManager extends LifecycleHook {
public static enum FragmentState {
PREATTACHED,
ATTACHED,
CREATED,
ACTIVE,
PAUSED,
DETACHED,
DESTROYED
}
private FragmentState mState = FragmentState.PREATTACHED;
private Queue<Runnable> mRunWhenActiveQueue = new LinkedList<Runnable>();
public FragmentState getFragmentState() {
return mState;
}
@Override
public void onAttach(Activity activity) {
mState = FragmentState.ATTACHED;
}
@Override
public void onCreate(Bundle savedInstanceState) {
mState = FragmentState.CREATED;
}
@Override
public void onResume() {
mState = FragmentState.ACTIVE;
while(!mRunWhenActiveQueue.isEmpty()){
mRunWhenActiveQueue.poll().run();
}
}
@Override
public void onPause() {
mState = FragmentState.PAUSED;
}
@Override
public void onDetach() {
mState = FragmentState.DETACHED;
}
@Override
public void onDestroy() {
mState = FragmentState.DESTROYED;
}
public void runWhenActive(Runnable r) {
mRunWhenActiveQueue.offer(r);
if(mState == FragmentState.ACTIVE){
while(!mRunWhenActiveQueue.isEmpty()){
mRunWhenActiveQueue.poll().run();
}
}
}
}