package com.gettingmobile.goodnews.locale; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import com.gettingmobile.goodnews.R; import com.twofortyfouram.locale.BreadCrumber; public abstract class LocaleEditActivity extends Activity { private final int titleId; public LocaleEditActivity(int titleId) { this.titleId = titleId; } /* * lifecycle */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setTitle(BreadCrumber.generateBreadcrumb(this, getIntent(), getString(titleId))); /* * if savedInstanceState == null, then we are entering the Activity directly from Locale and we need to check whether the * Intent has forwarded a Bundle extra (e.g. whether we editing an old setting or creating a new one) */ if (savedInstanceState == null) { final Bundle settings = getIntent().getBundleExtra(com.twofortyfouram.locale.Intent.EXTRA_BUNDLE); /* * the forwardedBundle would be null if this was a new setting */ if (settings != null) { loadSettings(settings); } } } /* * logic */ protected abstract void loadSettings(Bundle settings); protected abstract String saveSettings(Bundle settings); public void finish(boolean save) { if (save) { final Bundle settings = new Bundle(); final String blurb = saveSettings(settings); if (blurb == null) return; /* * Build the return Intent, into which we'll put all the required extras */ final Intent returnIntent = new Intent(); returnIntent.putExtra(com.twofortyfouram.locale.Intent.EXTRA_BUNDLE, settings); returnIntent.putExtra(com.twofortyfouram.locale.Intent.EXTRA_STRING_BLURB, blurb); setResult(RESULT_OK, returnIntent); } else { setResult(RESULT_CANCELED); } super.finish(); } @Override public void finish() { finish(true); } /* * menu handling */ @Override public boolean onCreateOptionsMenu(final Menu menu) { super.onCreateOptionsMenu(menu); getMenuInflater().inflate(R.menu.locale_options, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.menu_cancel) { finish(false); } else if (item.getItemId() == R.id.menu_ok) { finish(true); } else { return super.onOptionsItemSelected(item); } return true; } }