package com.jdroid.android.fragment;
import android.os.Bundle;
import com.jdroid.android.exception.DialogErrorDisplayer;
import com.jdroid.android.exception.ErrorDisplayer;
import com.jdroid.android.fragment.FragmentHelper.UseCaseTrigger;
import com.jdroid.android.usecase.AbstractUseCase;
import com.jdroid.java.exception.AbstractException;
import com.jdroid.java.utils.ReflectionUtils;
/**
*
* @param <T>
*/
public abstract class UseCaseFragment<T extends AbstractUseCase> extends AbstractFragment {
private T useCase;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
useCase = ReflectionUtils.newInstance(getUseCaseClass());
initializeUseCase(useCase);
}
protected void initializeUseCase(T useCase) {
// Do Nothing
}
public T getUseCase() {
return useCase;
}
protected abstract Class<T> getUseCaseClass();
@Override
public void onStart() {
super.onStart();
registerUseCase(useCase, this, getUseCaseTrigger());
}
@Override
public void onStop() {
super.onStop();
unregisterUseCase(useCase, this);
}
protected UseCaseTrigger getUseCaseTrigger() {
return UseCaseTrigger.ONCE;
}
public void executeUseCase() {
executeUseCase(useCase);
}
@Override
public ErrorDisplayer createErrorDisplayer(AbstractException abstractException) {
DialogErrorDisplayer.markAsNotGoBackOnError(abstractException);
return super.createErrorDisplayer(abstractException);
}
}