package me.guillaumin.android.osmtracker.activity; import me.guillaumin.android.osmtracker.R; import me.guillaumin.android.osmtracker.db.TrackContentProvider; import me.guillaumin.android.osmtracker.db.TrackContentProvider.Schema; import me.guillaumin.android.osmtracker.db.model.Track; import me.guillaumin.android.osmtracker.db.model.Track.OSMVisibility; import android.app.Activity; import android.content.ContentUris; import android.content.ContentValues; import android.net.Uri; import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.Spinner; /** * Base class for activities that edit track details. * */ public abstract class TrackDetailEditor extends Activity { /** Current track ID */ protected long trackId; /** Edit text for the track name */ protected EditText etName; /** Edit text for track description */ protected EditText etDescription; /** Edit text for track tags */ protected EditText etTags; /** Spinner for track visibility */ protected Spinner spVisibility; /** Whereas to verify if mandatory fields are filled or not */ protected boolean fieldsMandatory = false; protected void onCreate(Bundle savedInstanceState, int viewResId, long trackId) { super.onCreate(savedInstanceState); this.trackId = trackId; setContentView(viewResId); setTitle(getTitle() + ": #" + trackId); etName = (EditText) findViewById(R.id.trackdetail_item_name); etDescription = (EditText) findViewById(R.id.trackdetail_item_description); etTags = (EditText) findViewById(R.id.trackdetail_item_tags); spVisibility = (Spinner) findViewById(R.id.trackdetail_item_osm_visibility); ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_spinner_item); for (OSMVisibility v: OSMVisibility.values()) { adapter.add(getResources().getString(v.resId)); } adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spVisibility.setAdapter(adapter); } protected void bindTrack(Track t) { if (etName.length() == 0) { etName.setText(t.getName()); } etDescription.setText(t.getDescription()); etTags.setText(t.getCommaSeparatedTags()); spVisibility.setSelection(t.getVisibility().position); } /** * Saves the new information in database * @return false if the save didn't take place, true otherwise. */ protected boolean save() { // Save changes to db (if any), then finish. etDescription.setError(null); if (fieldsMandatory) { if (etDescription.getText().length() < 1) { etDescription.setError(getResources().getString(R.string.trackdetail_description_mandatory)); return false; } } Uri trackUri = ContentUris.withAppendedId(TrackContentProvider.CONTENT_URI_TRACK, trackId); ContentValues values = new ContentValues(); // Save name field, if changed, to db. // String class required for equals to work, and for trim(). String enteredName = etName.getText().toString().trim(); if ((enteredName.length() > 0)) { values.put(Schema.COL_NAME, enteredName); } // All other values updated even if empty values.put(Schema.COL_DESCRIPTION, etDescription.getText().toString().trim()); values.put(Schema.COL_TAGS, etTags.getText().toString().trim()); values.put(Schema.COL_OSM_VISIBILITY, OSMVisibility.fromPosition(spVisibility.getSelectedItemPosition()).toString()); getContentResolver().update(trackUri, values, null, null); // All done return true; } }