package org.gdg.frisbee.android.common; import android.annotation.TargetApi; import android.os.Build; import android.support.annotation.LayoutRes; import android.support.annotation.StringRes; import android.support.design.widget.Snackbar; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Toast; import com.squareup.leakcanary.RefWatcher; import org.gdg.frisbee.android.BuildConfig; import org.gdg.frisbee.android.app.App; import org.gdg.frisbee.android.view.ColoredSnackBar; import butterknife.ButterKnife; import butterknife.Unbinder; import timber.log.Timber; public abstract class BaseFragment extends Fragment { Unbinder unbinder; @Override public void onDestroy() { super.onDestroy(); if (BuildConfig.DEBUG) { RefWatcher refWatcher = App.from(getContext()).getRefWatcher(); refWatcher.watch(this); } } protected View inflateView(LayoutInflater inflater, @LayoutRes int layoutRes, ViewGroup container) { View v = inflater.inflate(layoutRes, container, false); bindView(this, v); return v; } private void bindView(Object target, View source) { unbinder = ButterKnife.bind(target, source); } @Override public void onDestroyView() { super.onDestroyView(); if (unbinder != null) { unbinder.unbind(); } } @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) protected boolean isContextValid() { boolean isContextValid = getActivity() != null && !getActivity().isFinishing() && (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1 || !getActivity().isDestroyed()); if (!isContextValid) { Timber.d("Context is not valid"); } return isContextValid; } protected void showError(@StringRes int errorStringRes) { if (isContextValid()) { if (getView() != null) { Snackbar snackbar = Snackbar.make(getView(), errorStringRes, Snackbar.LENGTH_SHORT); ColoredSnackBar.alert(snackbar).show(); } else { Toast.makeText(getActivity(), errorStringRes, Toast.LENGTH_SHORT).show(); } } } }