diff options
Diffstat (limited to 'main/src/cgeo/geocaching/TrackableActivity.java')
| -rw-r--r-- | main/src/cgeo/geocaching/TrackableActivity.java | 46 |
1 files changed, 42 insertions, 4 deletions
diff --git a/main/src/cgeo/geocaching/TrackableActivity.java b/main/src/cgeo/geocaching/TrackableActivity.java index dcfd80a..948e668 100644 --- a/main/src/cgeo/geocaching/TrackableActivity.java +++ b/main/src/cgeo/geocaching/TrackableActivity.java @@ -34,6 +34,7 @@ import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.text.Html; +import android.view.ContextMenu; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; @@ -109,6 +110,8 @@ public class TrackableActivity extends AbstractViewPagerActivity<TrackableActivi } }; + private CharSequence clickedItemText = null; + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState, R.layout.viewpager_activity); @@ -130,6 +133,8 @@ public class TrackableActivity extends AbstractViewPagerActivity<TrackableActivi // try to get data from URI if (geocode == null && guid == null && id == null && uri != null) { + geocode = ConnectorFactory.getTrackableFromURL(uri.toString()); + final String uriHost = uri.getHost().toLowerCase(Locale.US); if (uriHost.contains("geocaching.com")) { geocode = uri.getQueryParameter("tracker"); @@ -190,6 +195,36 @@ public class TrackableActivity extends AbstractViewPagerActivity<TrackableActivi } @Override + public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo info) { + super.onCreateContextMenu(menu, view, info); + final int viewId = view.getId(); + assert view instanceof TextView; + clickedItemText = ((TextView) view).getText(); + switch (viewId) { + case R.id.value: // name, TB-code, origin, released, distance + final String itemTitle = (String) ((TextView) ((View) view.getParent()).findViewById(R.id.name)).getText(); + buildDetailsContextMenu(menu, clickedItemText, itemTitle, true); + break; + case R.id.goal: + buildDetailsContextMenu(menu, clickedItemText, res.getString(R.string.trackable_goal), false); + break; + case R.id.details: + buildDetailsContextMenu(menu, clickedItemText, res.getString(R.string.trackable_details), false); + break; + case R.id.log: + buildDetailsContextMenu(menu, clickedItemText, res.getString(R.string.cache_logs), false); + break; + default: + break; + } + } + + @Override + public boolean onContextItemSelected(MenuItem item) { + return onClipboardItemSelected(item, clickedItemText) || onOptionsItemSelected(item); + } + + @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.trackable_activity, menu); return true; @@ -360,7 +395,7 @@ public class TrackableActivity extends AbstractViewPagerActivity<TrackableActivi } // trackable name - details.add(R.string.trackable_name, StringUtils.isNotBlank(trackable.getName()) ? Html.fromHtml(trackable.getName()).toString() : res.getString(R.string.trackable_unknown)); + registerForContextMenu(details.add(R.string.trackable_name, StringUtils.isNotBlank(trackable.getName()) ? Html.fromHtml(trackable.getName()).toString() : res.getString(R.string.trackable_unknown))); // trackable type String tbType; @@ -372,7 +407,7 @@ public class TrackableActivity extends AbstractViewPagerActivity<TrackableActivi details.add(R.string.trackable_type, tbType); // trackable geocode - details.add(R.string.trackable_code, trackable.getGeocode()); + registerForContextMenu(details.add(R.string.trackable_code, trackable.getGeocode())); // trackable owner final TextView owner = details.add(R.string.trackable_owner, res.getString(R.string.trackable_unknown)); @@ -441,16 +476,17 @@ public class TrackableActivity extends AbstractViewPagerActivity<TrackableActivi if (StringUtils.isNotBlank(trackable.getOrigin())) { final TextView origin = details.add(R.string.trackable_origin, ""); origin.setText(Html.fromHtml(trackable.getOrigin()), TextView.BufferType.SPANNABLE); + registerForContextMenu(origin); } // trackable released if (trackable.getReleased() != null) { - details.add(R.string.trackable_released, Formatter.formatDate(trackable.getReleased().getTime())); + registerForContextMenu(details.add(R.string.trackable_released, Formatter.formatDate(trackable.getReleased().getTime()))); } // trackable distance if (trackable.getDistance() >= 0) { - details.add(R.string.trackable_distance, Units.getDistanceFromKilometers(trackable.getDistance())); + registerForContextMenu(details.add(R.string.trackable_distance, Units.getDistanceFromKilometers(trackable.getDistance()))); } // trackable goal @@ -459,6 +495,7 @@ public class TrackableActivity extends AbstractViewPagerActivity<TrackableActivi goalTextView.setVisibility(View.VISIBLE); goalTextView.setText(Html.fromHtml(trackable.getGoal(), new HtmlImage(geocode, true, 0, false), null), TextView.BufferType.SPANNABLE); goalTextView.setMovementMethod(AnchorAwareLinkMovementMethod.getInstance()); + registerForContextMenu(goalTextView); } // trackable details @@ -467,6 +504,7 @@ public class TrackableActivity extends AbstractViewPagerActivity<TrackableActivi detailsTextView.setVisibility(View.VISIBLE); detailsTextView.setText(Html.fromHtml(trackable.getDetails(), new HtmlImage(geocode, true, 0, false), new UnknownTagsHandler()), TextView.BufferType.SPANNABLE); detailsTextView.setMovementMethod(AnchorAwareLinkMovementMethod.getInstance()); + registerForContextMenu(detailsTextView); } // trackable image |
