aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/EditWaypointActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/cgeo/geocaching/EditWaypointActivity.java')
-rw-r--r--main/src/cgeo/geocaching/EditWaypointActivity.java301
1 files changed, 109 insertions, 192 deletions
diff --git a/main/src/cgeo/geocaching/EditWaypointActivity.java b/main/src/cgeo/geocaching/EditWaypointActivity.java
index 7f011fc..483920a 100644
--- a/main/src/cgeo/geocaching/EditWaypointActivity.java
+++ b/main/src/cgeo/geocaching/EditWaypointActivity.java
@@ -1,7 +1,6 @@
package cgeo.geocaching;
import cgeo.geocaching.activity.AbstractActivity;
-import cgeo.geocaching.activity.ActivityMixin;
import cgeo.geocaching.connector.ConnectorFactory;
import cgeo.geocaching.connector.IConnector;
import cgeo.geocaching.enumerations.CacheType;
@@ -12,15 +11,19 @@ import cgeo.geocaching.geopoint.DistanceParser;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.geopoint.GeopointFormatter;
import cgeo.geocaching.ui.dialog.CoordinatesInputDialog;
-import cgeo.geocaching.utils.BaseUtils;
import cgeo.geocaching.utils.GeoDirHandler;
import cgeo.geocaching.utils.Log;
+import cgeo.geocaching.utils.TextUtils;
+
+import com.googlecode.androidannotations.annotations.EActivity;
+import com.googlecode.androidannotations.annotations.Extra;
+import com.googlecode.androidannotations.annotations.InstanceState;
+import com.googlecode.androidannotations.annotations.ViewById;
import org.apache.commons.lang3.StringUtils;
import android.app.ProgressDialog;
import android.content.Context;
-import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
@@ -28,76 +31,88 @@ import android.os.Message;
import android.text.Html;
import android.view.View;
import android.widget.AdapterView;
-import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.CheckBox;
-import android.widget.CompoundButton;
-import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.EditText;
import android.widget.RadioButton;
+import android.widget.RadioGroup;
import android.widget.Spinner;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.EnumSet;
import java.util.List;
+@EActivity
public class EditWaypointActivity extends AbstractActivity {
+ @ViewById(R.id.buttonLatitude) protected Button buttonLat;
+ @ViewById(R.id.buttonLongitude) protected Button buttonLon;
+ @ViewById(R.id.add_waypoint) protected Button addWaypoint;
+ @ViewById(R.id.note) protected EditText note;
+ @ViewById(R.id.wpt_visited_checkbox) protected CheckBox visitedCheckBox;
+ @ViewById(R.id.name) protected AutoCompleteTextView waypointName;
+ @ViewById(R.id.type) protected Spinner waypointTypeSelector;
+ @ViewById(R.id.distance) protected EditText distanceView;
+ @ViewById(R.id.modify_cache_coordinates_group) protected RadioGroup coordinatesGroup;
+ @ViewById(R.id.modify_cache_coordinates_local_and_remote) protected RadioButton modifyBoth;
+ @ViewById(R.id.distanceUnit) protected Spinner distanceUnitSelector;
+ @ViewById(R.id.bearing) protected EditText bearing;
+ @ViewById(R.id.modify_cache_coordinates_local) protected RadioButton modifyLocal;
+
+ @Extra(Intents.EXTRA_GEOCODE) protected String geocode = null;
+ @Extra(Intents.EXTRA_WAYPOINT_ID) protected int id = -1;
+ /**
+ * number of waypoints that the corresponding cache has until now
+ */
+ @Extra(Intents.EXTRA_COUNT) protected int wpCount = 0;
- private String geocode = null;
- private int id = -1;
+ @InstanceState protected int waypointTypeSelectorPosition = -1;
private ProgressDialog waitDialog = null;
private Waypoint waypoint = null;
- private Geopoint gpTemp = null;
- private WaypointType type = WaypointType.OWN;
private String prefix = "OWN";
private String lookup = "---";
private boolean own = true;
- private boolean visited = false;
ArrayList<WaypointType> wpTypes = null;
- String distanceUnit = "";
+ ArrayList<String> distanceUnits = null;
+ private boolean initViews = true;
- /**
- * number of waypoints that the corresponding cache has until now
- */
- private int wpCount = 0;
private Handler loadWaypointHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
try {
if (waypoint == null) {
+ Log.d("No waypoint loaded to edit. id= " + id);
id = -1;
} else {
geocode = waypoint.getGeocode();
- type = waypoint.getWaypointType();
prefix = waypoint.getPrefix();
lookup = waypoint.getLookup();
own = waypoint.isUserDefined();
- visited = waypoint.isVisited();
- if (waypoint.getCoords() != null) {
- ((Button) findViewById(R.id.buttonLatitude)).setText(waypoint.getCoords().format(GeopointFormatter.Format.LAT_DECMINUTE));
- ((Button) findViewById(R.id.buttonLongitude)).setText(waypoint.getCoords().format(GeopointFormatter.Format.LON_DECMINUTE));
- }
- ((EditText) findViewById(R.id.name)).setText(Html.fromHtml(StringUtils.trimToEmpty(waypoint.getName())).toString());
- if (BaseUtils.containsHtml(waypoint.getNote())) {
- ((EditText) findViewById(R.id.note)).setText(Html.fromHtml(StringUtils.trimToEmpty(waypoint.getNote())).toString());
- }
- else {
- ((EditText) findViewById(R.id.note)).setText(StringUtils.trimToEmpty(waypoint.getNote()));
+ if (initViews) {
+ visitedCheckBox.setChecked(waypoint.isVisited());
+ if (waypoint.getCoords() != null) {
+ buttonLat.setText(waypoint.getCoords().format(GeopointFormatter.Format.LAT_DECMINUTE));
+ buttonLon.setText(waypoint.getCoords().format(GeopointFormatter.Format.LON_DECMINUTE));
+ }
+ waypointName.setText(Html.fromHtml(StringUtils.trimToEmpty(waypoint.getName())).toString());
+ if (TextUtils.containsHtml(waypoint.getNote())) {
+ note.setText(Html.fromHtml(StringUtils.trimToEmpty(waypoint.getNote())).toString());
+ }
+ else {
+ note.setText(StringUtils.trimToEmpty(waypoint.getNote()));
+ }
}
- Geocache cache = cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_ONLY);
+ final Geocache cache = cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_ONLY);
setCoordsModificationVisibility(ConnectorFactory.getConnector(geocode), cache);
}
if (own) {
initializeWaypointTypeSelector();
}
- ((CheckBox) findViewById(R.id.wpt_visited_checkbox)).setChecked(visited);
-
- initializeDistanceUnitSelector();
} catch (Exception e) {
Log.e("EditWaypointActivity.loadWaypointHandler", e);
} finally {
@@ -111,19 +126,7 @@ public class EditWaypointActivity extends AbstractActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- setTheme();
- setContentView(R.layout.edit_waypoint_activity);
- setTitle("waypoint");
-
- // get parameters
- Bundle extras = getIntent().getExtras();
- if (extras != null) {
- geocode = extras.getString(Intents.EXTRA_GEOCODE);
- wpCount = extras.getInt(Intents.EXTRA_COUNT, 0);
- id = extras.getInt(Intents.EXTRA_WAYPOINT_ID);
- }
+ super.onCreate(savedInstanceState, R.layout.editwaypoint_activity);
if (StringUtils.isBlank(geocode) && id <= 0) {
showToast(res.getString(R.string.err_waypoint_cache_unknown));
@@ -138,59 +141,49 @@ public class EditWaypointActivity extends AbstractActivity {
setTitle(res.getString(R.string.waypoint_edit_title));
}
- Button buttonLat = (Button) findViewById(R.id.buttonLatitude);
buttonLat.setOnClickListener(new CoordDialogListener());
- Button buttonLon = (Button) findViewById(R.id.buttonLongitude);
buttonLon.setOnClickListener(new CoordDialogListener());
- Button addWaypoint = (Button) findViewById(R.id.add_waypoint);
- addWaypoint.setOnClickListener(new CoordsListener());
+ addWaypoint.setOnClickListener(new SaveWaypointListener());
List<String> wayPointNames = new ArrayList<String>();
for (WaypointType wpt : WaypointType.ALL_TYPES_EXCEPT_OWN_AND_ORIGINAL) {
wayPointNames.add(wpt.getL10n());
}
- AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.name);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, wayPointNames);
- textView.setAdapter(adapter);
+ waypointName.setAdapter(adapter);
- if (id > 0) {
- Spinner waypointTypeSelector = (Spinner) findViewById(R.id.type);
- waypointTypeSelector.setVisibility(View.GONE);
+ if (savedInstanceState != null) {
+ initViews = false;
+ }
+ if (id > 0) { // existing waypoint
waitDialog = ProgressDialog.show(this, null, res.getString(R.string.waypoint_loading), true);
waitDialog.setCancelable(true);
(new LoadWaypointThread()).start();
- } else {
+
+ } else { // new waypoint
initializeWaypointTypeSelector();
- }
- if (geocode != null) {
- Geocache cache = cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB);
- IConnector con = ConnectorFactory.getConnector(geocode);
- setCoordsModificationVisibility(con, cache);
- }
- CheckBox visitedCheckBox = ((CheckBox) findViewById(R.id.wpt_visited_checkbox));
- visitedCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
- @Override
- public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
- visited = isChecked;
+ if (geocode != null) {
+ final Geocache cache = cgData.loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB);
+ setCoordsModificationVisibility(ConnectorFactory.getConnector(geocode), cache);
}
- });
+ }
initializeDistanceUnitSelector();
- disableSuggestions((EditText) findViewById(R.id.distance));
+ disableSuggestions(distanceView);
}
private void setCoordsModificationVisibility(IConnector con, Geocache cache) {
if (cache != null && (cache.getType() == CacheType.MYSTERY || cache.getType() == CacheType.MULTI)) {
- findViewById(R.id.modify_cache_coordinates_group).setVisibility(View.VISIBLE);
- findViewById(R.id.modify_cache_coordinates_local_and_remote).setVisibility(con.supportsOwnCoordinates() ? View.VISIBLE : View.GONE);
+ coordinatesGroup.setVisibility(View.VISIBLE);
+ modifyBoth.setVisibility(con.supportsOwnCoordinates() ? View.VISIBLE : View.GONE);
} else {
- findViewById(R.id.modify_cache_coordinates_group).setVisibility(View.GONE);
- findViewById(R.id.modify_cache_coordinates_local_and_remote).setVisibility(View.GONE);
+ coordinatesGroup.setVisibility(View.GONE);
+ modifyBoth.setVisibility(View.GONE);
}
}
@@ -199,25 +192,6 @@ public class EditWaypointActivity extends AbstractActivity {
super.onResume();
geoDirHandler.startGeo();
-
- if (id > 0) {
- if (waitDialog == null) {
- waitDialog = ProgressDialog.show(this, null, res.getString(R.string.waypoint_loading), true);
- waitDialog.setCancelable(true);
-
- (new LoadWaypointThread()).start();
- }
- }
- }
-
- @Override
- public void onDestroy() {
- super.onDestroy();
- }
-
- @Override
- public void onStop() {
- super.onStop();
}
@Override
@@ -227,40 +201,40 @@ public class EditWaypointActivity extends AbstractActivity {
}
private void initializeWaypointTypeSelector() {
-
- Spinner waypointTypeSelector = (Spinner) findViewById(R.id.type);
-
wpTypes = new ArrayList<WaypointType>(WaypointType.ALL_TYPES_EXCEPT_OWN_AND_ORIGINAL);
ArrayAdapter<WaypointType> wpAdapter = new ArrayAdapter<WaypointType>(this, android.R.layout.simple_spinner_item, wpTypes.toArray(new WaypointType[wpTypes.size()]));
wpAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
waypointTypeSelector.setAdapter(wpAdapter);
- int typeIndex = wpTypes.indexOf(type);
- if (typeIndex < 0) {
- typeIndex = wpTypes.indexOf(WaypointType.WAYPOINT);
- }
+ waypointTypeSelector.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+ @Override
+ public void onItemSelected(AdapterView<?> parent, View v, int pos, long id) {
+ waypointTypeSelectorPosition = pos;
+ }
- waypointTypeSelector.setSelection(typeIndex);
- waypointTypeSelector.setOnItemSelectedListener(new ChangeWaypointType(this));
+ @Override
+ public void onNothingSelected(AdapterView<?> parent) {
+ }
+ });
+
+ if (initViews) {
+ int typeIndex = -1;
+ if (waypoint != null) {
+ typeIndex = wpTypes.indexOf(waypoint.getWaypointType());
+ }
+ waypointTypeSelector.setSelection(typeIndex >= 0 ? typeIndex : wpTypes.indexOf(WaypointType.WAYPOINT));
+ } else {
+ waypointTypeSelector.setSelection(waypointTypeSelectorPosition);
+ }
waypointTypeSelector.setVisibility(View.VISIBLE);
}
private void initializeDistanceUnitSelector() {
-
- Spinner distanceUnitSelector = (Spinner) findViewById(R.id.distanceUnit);
-
- if (StringUtils.isBlank(distanceUnit)) {
- if (Settings.isUseMetricUnits()) {
- distanceUnitSelector.setSelection(0); // m
- distanceUnit = res.getStringArray(R.array.distance_units)[0];
- } else {
- distanceUnitSelector.setSelection(2); // ft
- distanceUnit = res.getStringArray(R.array.distance_units)[2];
- }
+ distanceUnits = new ArrayList<String>(Arrays.asList(res.getStringArray(R.array.distance_units)));
+ if (initViews) {
+ distanceUnitSelector.setSelection(Settings.isUseMetricUnits() ? 0 : 2); //0:m, 2:ft
}
-
- distanceUnitSelector.setOnItemSelectedListener(new ChangeDistanceUnit(this));
}
final private GeoDirHandler geoDirHandler = new GeoDirHandler() {
@@ -271,10 +245,8 @@ public class EditWaypointActivity extends AbstractActivity {
}
try {
- Button bLat = (Button) findViewById(R.id.buttonLatitude);
- Button bLon = (Button) findViewById(R.id.buttonLongitude);
- bLat.setHint(geo.getCoords().format(GeopointFormatter.Format.LAT_DECMINUTE_RAW));
- bLon.setHint(geo.getCoords().format(GeopointFormatter.Format.LON_DECMINUTE_RAW));
+ buttonLat.setHint(geo.getCoords().format(GeopointFormatter.Format.LAT_DECMINUTE_RAW));
+ buttonLon.setHint(geo.getCoords().format(GeopointFormatter.Format.LON_DECMINUTE_RAW));
} catch (final Exception e) {
Log.e("failed to update location", e);
}
@@ -290,7 +262,7 @@ public class EditWaypointActivity extends AbstractActivity {
loadWaypointHandler.sendMessage(Message.obtain());
} catch (Exception e) {
- Log.e("cgeowaypoint.loadWaypoint.run", e);
+ Log.e("EditWaypointActivity.loadWaypoint.run", e);
}
}
}
@@ -300,10 +272,10 @@ public class EditWaypointActivity extends AbstractActivity {
@Override
public void onClick(View arg0) {
Geopoint gp = null;
- if (waypoint != null && waypoint.getCoords() != null) {
- gp = waypoint.getCoords();
- } else if (gpTemp != null) {
- gp = gpTemp;
+ try {
+ gp = new Geopoint(buttonLat.getText().toString(), buttonLon.getText().toString());
+ } catch (Geopoint.ParseException e) {
+ // button text is blank when creating new waypoint
}
Geocache cache = cgData.loadCache(geocode, LoadFlags.LOAD_WAYPOINTS);
CoordinatesInputDialog coordsDialog = new CoordinatesInputDialog(EditWaypointActivity.this, cache, gp, app.currentGeo());
@@ -311,62 +283,14 @@ public class EditWaypointActivity extends AbstractActivity {
coordsDialog.setOnCoordinateUpdate(new CoordinatesInputDialog.CoordinateUpdate() {
@Override
public void update(final Geopoint gp) {
- ((Button) findViewById(R.id.buttonLatitude)).setText(gp.format(GeopointFormatter.Format.LAT_DECMINUTE));
- ((Button) findViewById(R.id.buttonLongitude)).setText(gp.format(GeopointFormatter.Format.LON_DECMINUTE));
- if (waypoint != null) {
- waypoint.setCoords(gp);
- } else {
- gpTemp = gp;
- }
+ buttonLat.setText(gp.format(GeopointFormatter.Format.LAT_DECMINUTE));
+ buttonLon.setText(gp.format(GeopointFormatter.Format.LON_DECMINUTE));
}
});
coordsDialog.show();
}
}
- private static class ChangeWaypointType implements OnItemSelectedListener {
-
- private ChangeWaypointType(EditWaypointActivity wpView) {
- this.wpView = wpView;
- }
-
- private EditWaypointActivity wpView;
-
- @Override
- public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
- long arg3) {
- if (null != wpView.wpTypes) {
- wpView.type = wpView.wpTypes.get(arg2);
- }
- }
-
- @Override
- public void onNothingSelected(AdapterView<?> arg0) {
- if (null != wpView.wpTypes) {
- arg0.setSelection(wpView.wpTypes.indexOf(wpView.type));
- }
- }
- }
-
- private static class ChangeDistanceUnit implements OnItemSelectedListener {
-
- private ChangeDistanceUnit(EditWaypointActivity unitView) {
- this.unitView = unitView;
- }
-
- private EditWaypointActivity unitView;
-
- @Override
- public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
- long arg3) {
- unitView.distanceUnit = (String) arg0.getItemAtPosition(arg2);
- }
-
- @Override
- public void onNothingSelected(AdapterView<?> arg0) {
- }
- }
-
public static final int SUCCESS = 0;
public static final int UPLOAD_START = 1;
public static final int UPLOAD_ERROR = 2;
@@ -374,15 +298,15 @@ public class EditWaypointActivity extends AbstractActivity {
public static final int UPLOAD_SUCCESS = 4;
public static final int SAVE_ERROR = 5;
- private class CoordsListener implements View.OnClickListener {
+ private class SaveWaypointListener implements View.OnClickListener {
@Override
public void onClick(View arg0) {
- final String bearingText = ((EditText) findViewById(R.id.bearing)).getText().toString();
+ final String bearingText = bearing.getText().toString();
// combine distance from EditText and distanceUnit saved from Spinner
- final String distanceText = ((EditText) findViewById(R.id.distance)).getText().toString() + distanceUnit;
- final String latText = ((Button) findViewById(R.id.buttonLatitude)).getText().toString();
- final String lonText = ((Button) findViewById(R.id.buttonLongitude)).getText().toString();
+ final String distanceText = distanceView.getText().toString() + distanceUnits.get(distanceUnitSelector.getSelectedItemPosition());
+ final String latText = buttonLat.getText().toString();
+ final String lonText = buttonLon.getText().toString();
if (StringUtils.isBlank(bearingText) && StringUtils.isBlank(distanceText)
&& StringUtils.isBlank(latText) && StringUtils.isBlank(lonText)) {
@@ -430,10 +354,13 @@ public class EditWaypointActivity extends AbstractActivity {
}
// if no name is given, just give the waypoint its number as name
- final String givenName = ((EditText) findViewById(R.id.name)).getText().toString().trim();
+ final String givenName = waypointName.getText().toString().trim();
final String name = StringUtils.isNotEmpty(givenName) ? givenName : res.getString(R.string.waypoint) + " " + (wpCount + 1);
- final String note = ((EditText) findViewById(R.id.note)).getText().toString().trim();
+ final String noteText = note.getText().toString().trim();
final Geopoint coordsToSave = coords;
+ final int selectedTypeIndex = waypointTypeSelector.getSelectedItemPosition();
+ final WaypointType type = selectedTypeIndex >= 0 ? wpTypes.get(selectedTypeIndex) : waypoint.getWaypointType();
+ final boolean visited = visitedCheckBox.isChecked();
final ProgressDialog progress = ProgressDialog.show(EditWaypointActivity.this, getString(R.string.cache), getString(R.string.waypoint_being_saved), true);
final Handler finishHandler = new Handler() {
@@ -483,7 +410,7 @@ public class EditWaypointActivity extends AbstractActivity {
waypoint.setPrefix(prefix);
waypoint.setLookup(lookup);
waypoint.setCoords(coordsToSave);
- waypoint.setNote(note);
+ waypoint.setNote(noteText);
waypoint.setVisited(visited);
waypoint.setId(id);
@@ -501,8 +428,6 @@ public class EditWaypointActivity extends AbstractActivity {
StaticMapsProvider.storeWaypointStaticMap(cache, waypoint, false);
}
}
- final RadioButton modifyLocal = (RadioButton) findViewById(R.id.modify_cache_coordinates_local);
- final RadioButton modifyBoth = (RadioButton) findViewById(R.id.modify_cache_coordinates_local_and_remote);
if (modifyLocal.isChecked() || modifyBoth.isChecked()) {
if (!cache.hasUserModifiedCoords()) {
final Waypoint origWaypoint = new Waypoint(cgeoapplication.getInstance().getString(R.string.cache_coordinates_original), WaypointType.ORIGINAL, false);
@@ -541,19 +466,11 @@ public class EditWaypointActivity extends AbstractActivity {
return con.supportsOwnCoordinates() && con.uploadModifiedCoordinates(cache, waypointUploaded);
}
- @Override
- public void goManual(final View view) {
- ActivityMixin.goManual(this, id >= 0 ? "c:geo-waypoint-edit" : "c:geo-waypoint-new");
- }
-
public static void startActivityEditWaypoint(final Context context, final int waypointId) {
- context.startActivity(new Intent(context, EditWaypointActivity.class)
- .putExtra(Intents.EXTRA_WAYPOINT_ID, waypointId));
+ EditWaypointActivity_.intent(context).id(waypointId).start();
}
public static void startActivityAddWaypoint(final Context context, final Geocache cache) {
- context.startActivity(new Intent(context, EditWaypointActivity.class)
- .putExtra(Intents.EXTRA_GEOCODE, cache.getGeocode())
- .putExtra(Intents.EXTRA_COUNT, cache.getWaypoints().size()));
+ EditWaypointActivity_.intent(context).geocode(cache.getGeocode()).wpCount(cache.getWaypoints().size()).start();
}
}