diff options
Diffstat (limited to 'src/cgeo/geocaching/cgeowaypoint.java')
| -rw-r--r-- | src/cgeo/geocaching/cgeowaypoint.java | 647 |
1 files changed, 324 insertions, 323 deletions
diff --git a/src/cgeo/geocaching/cgeowaypoint.java b/src/cgeo/geocaching/cgeowaypoint.java index ffb6adc..e6dcb4f 100644 --- a/src/cgeo/geocaching/cgeowaypoint.java +++ b/src/cgeo/geocaching/cgeowaypoint.java @@ -1,5 +1,8 @@ package cgeo.geocaching; +import cgeo.geocaching.activity.AbstractActivity; +import cgeo.geocaching.apps.cache.navi.NavigationAppFactory; + import org.apache.commons.lang3.StringUtils; import android.app.ProgressDialog; @@ -18,330 +21,328 @@ import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; -import cgeo.geocaching.activity.AbstractActivity; -import cgeo.geocaching.apps.cache.navi.NavigationAppFactory; public class cgeowaypoint extends AbstractActivity { - private static final int MENU_ID_NAVIGATION = 0; - private static final int MENU_ID_CACHES_AROUND = 5; - private static final int MENU_ID_COMPASS = 2; - private cgWaypoint waypoint = null; - private String geocode = null; - private int id = -1; - private ProgressDialog waitDialog = null; - private cgGeo geo = null; - private cgUpdateLoc geoUpdate = new update(); - private Handler loadWaypointHandler = new Handler() { - - @Override - public void handleMessage(Message msg) { - try { - if (waypoint == null) { - if (waitDialog != null) { - waitDialog.dismiss(); - waitDialog = null; - } - - showToast(res.getString(R.string.err_waypoint_load_failed)); - - finish(); - return; - } else { - final TextView identification = (TextView) findViewById(R.id.identification); - final TextView coords = (TextView) findViewById(R.id.coordinates); - final ImageView compass = (ImageView) findViewById(R.id.compass); - final View separator = (View) findViewById(R.id.separator); - - final View headline = (View) findViewById(R.id.headline); - registerNavigationMenu(headline); - - if (StringUtils.isNotBlank(waypoint.name)) { - setTitle(Html.fromHtml(waypoint.name.trim()).toString()); - } else { - setTitle(res.getString(R.string.waypoint_title)); - } - - if (waypoint.prefix.equalsIgnoreCase("OWN") == false) { - identification.setText(waypoint.prefix.trim() + "/" + waypoint.lookup.trim()); - } else { - identification.setText(res.getString(R.string.waypoint_custom)); - } - registerNavigationMenu(identification); - waypoint.setIcon(res, base, identification); - - if (waypoint.coords != null) { - coords.setText(Html.fromHtml(cgBase.formatCoords(waypoint.coords, true)), TextView.BufferType.SPANNABLE); - compass.setVisibility(View.VISIBLE); - separator.setVisibility(View.VISIBLE); - } else { - coords.setText(res.getString(R.string.waypoint_unknown_coordinates)); - compass.setVisibility(View.GONE); - separator.setVisibility(View.GONE); - } - registerNavigationMenu(coords); - - if (StringUtils.isNotBlank(waypoint.note)) { - final TextView note = (TextView) findViewById(R.id.note); - note.setText(Html.fromHtml(waypoint.note.trim()), TextView.BufferType.SPANNABLE); - registerNavigationMenu(note); - } - - Button buttonEdit = (Button) findViewById(R.id.edit); - buttonEdit.setOnClickListener(new editWaypointListener()); - - Button buttonDelete = (Button) findViewById(R.id.delete); - if (waypoint.isUserDefined()) { - buttonDelete.setOnClickListener(new deleteWaypointListener()); - buttonDelete.setVisibility(View.VISIBLE); - } - - if (waitDialog != null) { - waitDialog.dismiss(); - waitDialog = null; - } - } - } catch (Exception e) { - if (waitDialog != null) { - waitDialog.dismiss(); - waitDialog = null; - } - Log.e(cgSettings.tag, "cgeowaypoint.loadWaypointHandler: " + e.toString()); - } - } - - private void registerNavigationMenu(View view) { - view.setOnClickListener(new View.OnClickListener() { - - @Override - public void onClick(View v) { - registerForContextMenu(v); - if (navigationPossible()) { - openContextMenu(v); - } - } - }); - } - }; - - public cgeowaypoint() { - super("c:geo-waypoint-details"); - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - setTheme(); - setContentView(R.layout.waypoint); - setTitle("waypoint"); - - // get parameters - Bundle extras = getIntent().getExtras(); - - // try to get data from extras - if (extras != null) { - id = extras.getInt("waypoint"); - geocode = extras.getString("geocode"); - } - - if (id <= 0) { - showToast(res.getString(R.string.err_waypoint_unknown)); - finish(); - return; - } - - if (geo == null) { - geo = app.startGeo(this, geoUpdate, base, settings, 0, 0); - } - - waitDialog = ProgressDialog.show(this, null, res.getString(R.string.waypoint_loading), true); - waitDialog.setCancelable(true); - - (new loadWaypoint()).start(); - } - - @Override - public void onResume() { - super.onResume(); - - settings.load(); - - if (geo == null) { - geo = app.startGeo(this, geoUpdate, base, settings, 0, 0); - } - - if (waitDialog == null) { - waitDialog = ProgressDialog.show(this, null, res.getString(R.string.waypoint_loading), true); - waitDialog.setCancelable(true); - - (new loadWaypoint()).start(); - } - } - - @Override - public void onDestroy() { - if (geo != null) { - geo = app.removeGeo(); - } - - super.onDestroy(); - } - - @Override - public void onStop() { - if (geo != null) { - geo = app.removeGeo(); - } - - super.onStop(); - } - - @Override - public void onPause() { - if (geo != null) { - geo = app.removeGeo(); - } - - super.onPause(); - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - menu.add(0, MENU_ID_COMPASS, 0, res.getString(R.string.cache_menu_compass)).setIcon(android.R.drawable.ic_menu_compass); // compass - - SubMenu subMenu = menu.addSubMenu(1, MENU_ID_NAVIGATION, 0, res.getString(R.string.cache_menu_navigate)).setIcon(android.R.drawable.ic_menu_more); - addNavigationMenuItems(subMenu); - - menu.add(0, MENU_ID_CACHES_AROUND, 0, res.getString(R.string.cache_menu_around)).setIcon(android.R.drawable.ic_menu_rotate); // caches around - - return true; - } - - private void addNavigationMenuItems(Menu menu) { - NavigationAppFactory.addMenuItems(menu, this, res); - } - - @Override - public boolean onPrepareOptionsMenu(Menu menu) { - super.onPrepareOptionsMenu(menu); - - try { - boolean visible = waypoint != null && waypoint.coords != null; - menu.findItem(MENU_ID_NAVIGATION).setVisible(visible); - menu.findItem(MENU_ID_COMPASS).setVisible(visible); - menu.findItem(MENU_ID_CACHES_AROUND).setVisible(visible); - } catch (Exception e) { - // nothing - } - - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - final int menuItem = item.getItemId(); - if (menuItem == MENU_ID_COMPASS) { - goCompass(null); - return true; - } else if (menuItem == MENU_ID_CACHES_AROUND) { - cachesAround(); - return true; - } - - return NavigationAppFactory.onMenuItemSelected(item, geo, this, res, null, null, waypoint, null); - } - - private void cachesAround() { - if (waypoint == null || waypoint.coords == null) { - showToast(res.getString(R.string.err_location_unknown)); - } - - cgeocaches.startActivityCachesAround(this, waypoint.coords); - - finish(); - } - - private class loadWaypoint extends Thread { - - @Override - public void run() { - try { - waypoint = app.loadWaypoint(id); - - loadWaypointHandler.sendMessage(new Message()); - } catch (Exception e) { - Log.e(cgSettings.tag, "cgeowaypoint.loadWaypoint.run: " + e.toString()); - } - } - } - - private static class update extends cgUpdateLoc { - - @Override - public void updateLoc(cgGeo geo) { - // nothing - } - } - - private class editWaypointListener implements View.OnClickListener { - - public void onClick(View arg0) { - Intent editIntent = new Intent(cgeowaypoint.this, cgeowaypointadd.class); - editIntent.putExtra("waypoint", id); - startActivity(editIntent); - } - } - - private class deleteWaypointListener implements View.OnClickListener { - - public void onClick(View arg0) { - if (app.deleteWaypoint(id) == false) { - showToast(res.getString(R.string.err_waypoint_delete_failed)); - } else { - app.removeCacheFromCache(geocode); - - finish(); - return; - } - } - } - - public void goCompass(View view) { - if (!navigationPossible()) { - return; - } - - Intent navigateIntent = new Intent(this, cgeonavigate.class); - navigateIntent.putExtra("latitude", waypoint.coords.getLatitude()); - navigateIntent.putExtra("longitude", waypoint.coords.getLongitude()); - navigateIntent.putExtra("geocode", waypoint.prefix.trim() + "/" + waypoint.lookup.trim()); - navigateIntent.putExtra("name", waypoint.name); - - cgeonavigate.coordinates.clear(); - cgeonavigate.coordinates.add(new cgCoord(waypoint)); - startActivity(navigateIntent); - } - - private boolean navigationPossible() { - if (waypoint == null || waypoint.coords == null) { - showToast(res.getString(R.string.err_location_unknown)); - return false; - } - return true; - } - - @Override - public void onCreateContextMenu(ContextMenu menu, View v, - ContextMenuInfo menuInfo) { - if (navigationPossible()) { - menu.setHeaderTitle(res.getString(R.string.cache_menu_navigate)); - addNavigationMenuItems(menu); - } - } - - @Override - public boolean onContextItemSelected(MenuItem item) { - return onOptionsItemSelected(item); - } + private static final int MENU_ID_NAVIGATION = 0; + private static final int MENU_ID_CACHES_AROUND = 5; + private static final int MENU_ID_COMPASS = 2; + private cgWaypoint waypoint = null; + private String geocode = null; + private int id = -1; + private ProgressDialog waitDialog = null; + private cgGeo geo = null; + private cgUpdateLoc geoUpdate = new update(); + private Handler loadWaypointHandler = new Handler() { + + @Override + public void handleMessage(Message msg) { + try { + if (waypoint == null) { + if (waitDialog != null) { + waitDialog.dismiss(); + waitDialog = null; + } + + showToast(res.getString(R.string.err_waypoint_load_failed)); + + finish(); + return; + } else { + final TextView identification = (TextView) findViewById(R.id.identification); + final TextView coords = (TextView) findViewById(R.id.coordinates); + final ImageView compass = (ImageView) findViewById(R.id.compass); + final View separator = (View) findViewById(R.id.separator); + + final View headline = (View) findViewById(R.id.headline); + registerNavigationMenu(headline); + + if (StringUtils.isNotBlank(waypoint.name)) { + setTitle(Html.fromHtml(waypoint.name.trim()).toString()); + } else { + setTitle(res.getString(R.string.waypoint_title)); + } + + if (waypoint.prefix.equalsIgnoreCase("OWN") == false) { + identification.setText(waypoint.prefix.trim() + "/" + waypoint.lookup.trim()); + } else { + identification.setText(res.getString(R.string.waypoint_custom)); + } + registerNavigationMenu(identification); + waypoint.setIcon(res, base, identification); + + if (waypoint.coords != null) { + coords.setText(Html.fromHtml(cgBase.formatCoords(waypoint.coords, true)), TextView.BufferType.SPANNABLE); + compass.setVisibility(View.VISIBLE); + separator.setVisibility(View.VISIBLE); + } else { + coords.setText(res.getString(R.string.waypoint_unknown_coordinates)); + compass.setVisibility(View.GONE); + separator.setVisibility(View.GONE); + } + registerNavigationMenu(coords); + + if (StringUtils.isNotBlank(waypoint.note)) { + final TextView note = (TextView) findViewById(R.id.note); + note.setText(Html.fromHtml(waypoint.note.trim()), TextView.BufferType.SPANNABLE); + registerNavigationMenu(note); + } + + Button buttonEdit = (Button) findViewById(R.id.edit); + buttonEdit.setOnClickListener(new editWaypointListener()); + + Button buttonDelete = (Button) findViewById(R.id.delete); + if (waypoint.isUserDefined()) { + buttonDelete.setOnClickListener(new deleteWaypointListener()); + buttonDelete.setVisibility(View.VISIBLE); + } + + if (waitDialog != null) { + waitDialog.dismiss(); + waitDialog = null; + } + } + } catch (Exception e) { + if (waitDialog != null) { + waitDialog.dismiss(); + waitDialog = null; + } + Log.e(cgSettings.tag, "cgeowaypoint.loadWaypointHandler: " + e.toString()); + } + } + + private void registerNavigationMenu(View view) { + view.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + registerForContextMenu(v); + if (navigationPossible()) { + openContextMenu(v); + } + } + }); + } + }; + + public cgeowaypoint() { + super("c:geo-waypoint-details"); + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setTheme(); + setContentView(R.layout.waypoint); + setTitle("waypoint"); + + // get parameters + Bundle extras = getIntent().getExtras(); + + // try to get data from extras + if (extras != null) { + id = extras.getInt("waypoint"); + geocode = extras.getString("geocode"); + } + + if (id <= 0) { + showToast(res.getString(R.string.err_waypoint_unknown)); + finish(); + return; + } + + if (geo == null) { + geo = app.startGeo(this, geoUpdate, base, settings, 0, 0); + } + + waitDialog = ProgressDialog.show(this, null, res.getString(R.string.waypoint_loading), true); + waitDialog.setCancelable(true); + + (new loadWaypoint()).start(); + } + + @Override + public void onResume() { + super.onResume(); + + settings.load(); + + if (geo == null) { + geo = app.startGeo(this, geoUpdate, base, settings, 0, 0); + } + + if (waitDialog == null) { + waitDialog = ProgressDialog.show(this, null, res.getString(R.string.waypoint_loading), true); + waitDialog.setCancelable(true); + + (new loadWaypoint()).start(); + } + } + + @Override + public void onDestroy() { + if (geo != null) { + geo = app.removeGeo(); + } + + super.onDestroy(); + } + + @Override + public void onStop() { + if (geo != null) { + geo = app.removeGeo(); + } + + super.onStop(); + } + + @Override + public void onPause() { + if (geo != null) { + geo = app.removeGeo(); + } + + super.onPause(); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + menu.add(0, MENU_ID_COMPASS, 0, res.getString(R.string.cache_menu_compass)).setIcon(android.R.drawable.ic_menu_compass); // compass + + SubMenu subMenu = menu.addSubMenu(1, MENU_ID_NAVIGATION, 0, res.getString(R.string.cache_menu_navigate)).setIcon(android.R.drawable.ic_menu_more); + addNavigationMenuItems(subMenu); + + menu.add(0, MENU_ID_CACHES_AROUND, 0, res.getString(R.string.cache_menu_around)).setIcon(android.R.drawable.ic_menu_rotate); // caches around + + return true; + } + + private void addNavigationMenuItems(Menu menu) { + NavigationAppFactory.addMenuItems(menu, this, res); + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + super.onPrepareOptionsMenu(menu); + + try { + boolean visible = waypoint != null && waypoint.coords != null; + menu.findItem(MENU_ID_NAVIGATION).setVisible(visible); + menu.findItem(MENU_ID_COMPASS).setVisible(visible); + menu.findItem(MENU_ID_CACHES_AROUND).setVisible(visible); + } catch (Exception e) { + // nothing + } + + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + final int menuItem = item.getItemId(); + if (menuItem == MENU_ID_COMPASS) { + goCompass(null); + return true; + } else if (menuItem == MENU_ID_CACHES_AROUND) { + cachesAround(); + return true; + } + + return NavigationAppFactory.onMenuItemSelected(item, geo, this, res, null, null, waypoint, null); + } + + private void cachesAround() { + if (waypoint == null || waypoint.coords == null) { + showToast(res.getString(R.string.err_location_unknown)); + } + + cgeocaches.startActivityCachesAround(this, waypoint.coords); + + finish(); + } + + private class loadWaypoint extends Thread { + + @Override + public void run() { + try { + waypoint = app.loadWaypoint(id); + + loadWaypointHandler.sendMessage(new Message()); + } catch (Exception e) { + Log.e(cgSettings.tag, "cgeowaypoint.loadWaypoint.run: " + e.toString()); + } + } + } + + private static class update extends cgUpdateLoc { + + @Override + public void updateLoc(cgGeo geo) { + // nothing + } + } + + private class editWaypointListener implements View.OnClickListener { + + public void onClick(View arg0) { + Intent editIntent = new Intent(cgeowaypoint.this, cgeowaypointadd.class); + editIntent.putExtra("waypoint", id); + startActivity(editIntent); + } + } + + private class deleteWaypointListener implements View.OnClickListener { + + public void onClick(View arg0) { + if (app.deleteWaypoint(id) == false) { + showToast(res.getString(R.string.err_waypoint_delete_failed)); + } else { + app.removeCacheFromCache(geocode); + + finish(); + return; + } + } + } + + public void goCompass(View view) { + if (!navigationPossible()) { + return; + } + + Intent navigateIntent = new Intent(this, cgeonavigate.class); + navigateIntent.putExtra("latitude", waypoint.coords.getLatitude()); + navigateIntent.putExtra("longitude", waypoint.coords.getLongitude()); + navigateIntent.putExtra("geocode", waypoint.prefix.trim() + "/" + waypoint.lookup.trim()); + navigateIntent.putExtra("name", waypoint.name); + + cgeonavigate.coordinates.clear(); + cgeonavigate.coordinates.add(new cgCoord(waypoint)); + startActivity(navigateIntent); + } + + private boolean navigationPossible() { + if (waypoint == null || waypoint.coords == null) { + showToast(res.getString(R.string.err_location_unknown)); + return false; + } + return true; + } + + @Override + public void onCreateContextMenu(ContextMenu menu, View v, + ContextMenuInfo menuInfo) { + if (navigationPossible()) { + menu.setHeaderTitle(res.getString(R.string.cache_menu_navigate)); + addNavigationMenuItems(menu); + } + } + + @Override + public boolean onContextItemSelected(MenuItem item) { + return onOptionsItemSelected(item); + } } |
