package com.ianhanniballake.contractiontimer.ui; import android.content.Context; import android.database.Cursor; import android.os.Bundle; import android.provider.BaseColumns; import android.support.v4.app.Fragment; import android.support.v4.app.LoaderManager; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; import android.support.v4.widget.CursorAdapter; import android.util.Log; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import com.google.firebase.analytics.FirebaseAnalytics; import com.ianhanniballake.contractiontimer.BuildConfig; import com.ianhanniballake.contractiontimer.R; import com.ianhanniballake.contractiontimer.provider.ContractionContract; /** * Headless fragment which controls the Reset action in the MainActivity ActionBar, enabling/disabling it based on * whether there are contractions to reset */ public class ResetMenuControllerFragment extends Fragment implements LoaderManager.LoaderCallbacks<Cursor> { private final static String TAG = ResetMenuControllerFragment.class.getSimpleName(); /** * Cursor Adapter which holds the current contractions */ private CursorAdapter adapter; @Override public void onActivityCreated(final Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); adapter = new CursorAdapter(getActivity(), null, 0) { @Override public void bindView(final View view, final Context context, final Cursor cursor) { // Nothing to do } @Override public View newView(final Context context, final Cursor cursor, final ViewGroup parent) { return null; } }; getLoaderManager().initLoader(0, null, this); } @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); } @Override public Loader<Cursor> onCreateLoader(final int id, final Bundle args) { final String[] projection = {BaseColumns._ID}; return new CursorLoader(getActivity(), ContractionContract.Contractions.CONTENT_URI, projection, null, null, null); } @Override public void onLoaderReset(final Loader<Cursor> loader) { adapter.swapCursor(null); getActivity().supportInvalidateOptionsMenu(); } @Override public void onLoadFinished(final Loader<Cursor> loader, final Cursor data) { adapter.swapCursor(data); getActivity().supportInvalidateOptionsMenu(); } @Override public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); inflater.inflate(R.menu.fragment_reset_menu_controller, menu); } @Override public void onPrepareOptionsMenu(final Menu menu) { super.onPrepareOptionsMenu(menu); final int contractionCount = adapter == null ? 0 : adapter.getCount(); final boolean hasContractions = contractionCount > 0; final MenuItem reset = menu.findItem(R.id.menu_reset); reset.setEnabled(hasContractions); } @Override public boolean onOptionsItemSelected(final MenuItem item) { switch (item.getItemId()) { case R.id.menu_reset: if (BuildConfig.DEBUG) Log.d(TAG, "Menu selected Reset"); final ResetDialogFragment resetDialogFragment = new ResetDialogFragment(); if (BuildConfig.DEBUG) Log.d(TAG, "Showing Dialog"); FirebaseAnalytics.getInstance(getContext()).logEvent("reset_open", null); resetDialogFragment.show(getFragmentManager(), "reset"); return true; default: return super.onOptionsItemSelected(item); } } }