package com.code44.finance.ui; import android.app.Activity; import android.content.Context; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.content.Loader; import android.util.Pair; import android.view.View; import android.widget.Button; import com.code44.finance.R; import com.code44.finance.data.model.Model; public abstract class ModelEditFragment<T extends Model> extends ModelFragment<T> { private static final String STATE_MODEL = "STATE_MODEL"; private ModelEditListener listener; @Override public void onAttach(Activity activity) { super.onAttach(activity); if (activity instanceof ModelEditListener) { listener = (ModelEditListener) activity; } else { throw new IllegalStateException(activity.getClass().getName() + " must implement " + ModelEditListener.class.getName()); } } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(false); // Restore state if (savedInstanceState != null) { model = savedInstanceState.getParcelable(STATE_MODEL); } } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); // Get views final Button cancel_B = (Button) view.findViewById(R.id.cancelButton); final Button save_B = (Button) view.findViewById(R.id.saveButton); // Setup cancel_B.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { cancel(); } }); save_B.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { save(); } }); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); if (model != null) { onModelLoaded(model); } } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); ensureModelUpdated(model); outState.putParcelable(STATE_MODEL, model); } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor data) { if (loader.getId() == LOADER_MODEL && model == null) { super.onLoadFinished(loader, data); } } @Override protected Uri getDeleteUri() { // Ignore return null; } @Override protected Pair<String, String[]> getDeleteSelection() { // Ignore return null; } @Override protected void startModelEdit(Context context, String modelServerId) { // Ignore } protected abstract boolean onSave(Context context, T model); protected abstract void ensureModelUpdated(T model); protected boolean isNewModel() { return modelId.equals("0"); } private void save() { ensureModelUpdated(model); if (onSave(getActivity(), model)) { listener.onModelSaved(); } } private void cancel() { listener.onModelCanceled(); } public static interface ModelEditListener { public void onModelSaved(); public void onModelCanceled(); } }