package com.code44.finance.ui.common;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.content.Loader;
import android.util.Pair;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import com.code44.finance.R;
import com.code44.finance.data.model.Model;
public abstract class ModelEditActivity<M extends Model> extends ModelActivity<M> {
private static final String STATE_MODEL = "STATE_MODEL";
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Restore state
if (savedInstanceState != null) {
model = savedInstanceState.getParcelable(STATE_MODEL);
}
}
@Override public void setContentView(int layoutResID) {
super.setContentView(layoutResID);
// Get views
final Button cancelView = (Button) findViewById(R.id.cancelButton);
final Button saveView = (Button) findViewById(R.id.saveButton);
// Setup
cancelView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cancel();
}
});
saveView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
save();
}
});
}
@Override protected void onStart() {
super.onStart();
if (model != null) {
onModelLoaded(model);
}
}
@Override public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (model != null) {
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(String modelId) {
// Ignore
}
@Override public boolean onCreateOptionsMenu(Menu menu) {
return false;
}
protected abstract boolean onSave(M model);
protected abstract void ensureModelUpdated(M model);
protected boolean isNewModel() {
return modelId.equals("0");
}
private void save() {
ensureModelUpdated(model);
if (onSave(model)) {
finish();
}
}
private void cancel() {
finish();
}
}