package com.fastaccess.ui.base;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.fastaccess.ui.base.mvp.presenter.BasePresenter;
import butterknife.ButterKnife;
import butterknife.Unbinder;
import icepick.Icepick;
/**
* Created by Kosh on 27 May 2016, 7:54 PM
*/
public abstract class BaseFragment<V, P extends BasePresenter<V>> extends Fragment {
@Nullable private Unbinder unbinder;
@LayoutRes protected abstract int fragmentLayout();
@NonNull protected abstract P getPresenter();
protected abstract void onFragmentCreated(View view, @Nullable Bundle savedInstanceState);
@Override public void onAttach(Context context) {
super.onAttach(context);
}
@Override public void onDetach() {
super.onDetach();
}
@Override public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Icepick.saveInstanceState(this, outState);
}
@Override public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null && !savedInstanceState.isEmpty()) {
Icepick.restoreInstanceState(this, savedInstanceState);
}
}
@Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (fragmentLayout() != 0) {
View view = inflater.inflate(fragmentLayout(), container, false);
unbinder = ButterKnife.bind(this, view);
return view;
}
return super.onCreateView(inflater, container, savedInstanceState);
}
@Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
onFragmentCreated(view, savedInstanceState);
}
@Override public void onDestroyView() {
getPresenter().onDestroy();
super.onDestroyView();
if (unbinder != null) unbinder.unbind();
}
protected boolean isSafe() {
return getView() != null && getActivity() != null && !getActivity().isFinishing();
}
}