import android.app.Activity;
import android.app.FragmentTransaction;
import android.os.Bundle;

import java.util.LinkedList;

public class BaseFragmentActivity extends Activity {

	private LinkedList<FragmentTransaction> mFragmentTransactions;
	private boolean mIsTransactionAllowed;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		mFragmentTransactions = new LinkedList<>();
	}

	@Override
	protected void onStop() {
		disableFragmentTransaction();
		super.onStop();
	}

	@Override
	protected void onSaveInstanceState(Bundle outState) {
		disableFragmentTransaction();
		super.onSaveInstanceState(outState);
	}

	@Override
	protected void onDestroy() {
		clearFragmentTransaction();
		super.onDestroy();
	}

	@Override
	protected void onPostResume() {
		super.onPostResume();
		allowFragmentTransaction();
		commitPendingFragmentTransactions();
	}

	private void disableFragmentTransaction() {
		mIsTransactionAllowed = false;
	}

	private void clearFragmentTransaction() {
		mFragmentTransactions.clear();
	}

	private void allowFragmentTransaction() {
		mIsTransactionAllowed = true;
	}

	private void commitPendingFragmentTransactions() {
		while (!mFragmentTransactions.isEmpty()) {
			FragmentTransaction fragmentTransaction = mFragmentTransactions.removeFirst();
			fragmentTransaction.commit();
		}
	}

	protected boolean commit(FragmentTransaction fragmentTransaction) {
		if (mIsTransactionAllowed) {
			fragmentTransaction.commit();
		} else {
			mFragmentTransactions.addLast(fragmentTransaction);
		}
		return true;
	}
}