package com.tevinjeffrey.rutgersct.ui.base; import android.app.Fragment; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.ActionBar; import android.support.v7.widget.Toolbar; import android.view.MenuItem; import com.tevinjeffrey.rutgersct.R; import com.tevinjeffrey.rutgersct.ui.MainActivity; import com.tevinjeffrey.rutgersct.ui.settings.SettingsActivity; import com.tevinjeffrey.rutgersct.ui.trackedsections.TrackedSectionsFragment; import butterknife.ButterKnife; import icepick.Icepick; import timber.log.Timber; public abstract class MVPFragment extends Fragment implements View { public boolean mIsInitialLoad = true; public BasePresenter mBasePresenter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); Icepick.restoreInstanceState(this, savedInstanceState); Timber.d("%s started with savedIntanceState %s and arguments %s", this.toString(), savedInstanceState == null ? "null" : savedInstanceState.toString() , this.getArguments() == null ? "null" : this.getArguments().toString()); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); if (mBasePresenter != null) { mBasePresenter.onActivityCreated(savedInstanceState); } } @Override public void onResume() { super.onResume(); if (mBasePresenter != null) { mBasePresenter.onResume(); } mIsInitialLoad = false; } @Override public void onPause() { super.onPause(); if (mBasePresenter != null) { mBasePresenter.onPause(); } } @Override public void onDestroyView() { super.onDestroyView(); ButterKnife.unbind(this); if (mBasePresenter != null) { mBasePresenter.detachView(); } //RefWatcher refWatcher = RutgersCTApp.getRefWatcher(getActivity()); //refWatcher.watch(this); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_track: //noinspection ClassReferencesSubclass getParentActivity().mBackstackCount = 0; getFragmentManager().popBackStackImmediate(TrackedSectionsFragment.TAG, FragmentManager.POP_BACK_STACK_INCLUSIVE); return true; case R.id.action_settings: getParentActivity().startActivity(new Intent(getParentActivity(), SettingsActivity.class)); return true; default: return super.onOptionsItemSelected(item); } } @Override public void onSaveInstanceState(Bundle outState) { Timber.d("%s paused with outState %s and arguments %s", this.toString(), outState == null ? "null" : outState.toString() , this.getArguments() == null ? "null" : this.getArguments().toString()); super.onSaveInstanceState(outState); if (mBasePresenter != null) { mBasePresenter.onSaveInstanceState(outState); } Icepick.saveInstanceState(this, outState); } public Context getContext() { return getParentActivity().getApplicationContext(); } public void setToolbar(Toolbar toolbar) { toolbar.setTitleTextAppearance(getParentActivity(), R.style.ToolbarTitleStyle); toolbar.setSubtitleTextAppearance(getParentActivity(), R.style.ToolbarSubtitleStyle_TextApperance); getParentActivity().setSupportActionBar(toolbar); toolbar.setNavigationOnClickListener(new android.view.View.OnClickListener() { @Override public void onClick(android.view.View v) { getParentActivity().onBackPressed(); } }); ActionBar actionBar = getParentActivity().getSupportActionBar(); if (actionBar != null && getParentActivity().getBackstackCount() > 0) { actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setDisplayShowHomeEnabled(true); } } public void setToolbarTitle(Toolbar toolbar, CharSequence title) { toolbar.setTitle(title); } public void setToolbarSubtitle(Toolbar toolbar, CharSequence subtitle) { toolbar.setSubtitle(subtitle); } public void startFragment(Fragment outgoingFragment, Fragment incomingFragment, FragmentTransaction ft) { mIsInitialLoad = true; ft.addToBackStack(outgoingFragment.toString()).replace(R.id.container, incomingFragment) .commitAllowingStateLoss(); getParentActivity().incrementBackstackCount(); getFragmentManager().executePendingTransactions(); } public MainActivity getParentActivity() { return (MainActivity) getActivity(); } @Override public String toString() { return this.getClass().getSimpleName(); } }