diff options
| author | Bananeweizen <bananeweizen@gmx.de> | 2012-05-07 08:49:17 +0200 |
|---|---|---|
| committer | Bananeweizen <bananeweizen@gmx.de> | 2012-05-07 08:49:17 +0200 |
| commit | 5f93d6085db6de0d88d7ba5a6e4a7cbba25c7e1b (patch) | |
| tree | 07122025040cc41edd33169a8e4a5716dba2960e | |
| parent | 6d999226b74315e9d8cc72ec6c4b4e96869f8aae (diff) | |
| download | cgeo-5f93d6085db6de0d88d7ba5a6e4a7cbba25c7e1b.zip cgeo-5f93d6085db6de0d88d7ba5a6e4a7cbba25c7e1b.tar.gz cgeo-5f93d6085db6de0d88d7ba5a6e4a7cbba25c7e1b.tar.bz2 | |
new: show days since last spotted for trackables
| -rw-r--r-- | main/res/values-de/strings.xml | 4 | ||||
| -rw-r--r-- | main/res/values/strings.xml | 8 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/CacheDetailActivity.java | 13 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/LogEntry.java | 27 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/cgeotouch.java | 10 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/cgeotrackable.java | 141 |
6 files changed, 104 insertions, 99 deletions
diff --git a/main/res/values-de/strings.xml b/main/res/values-de/strings.xml index 52980df..ba759e2 100644 --- a/main/res/values-de/strings.xml +++ b/main/res/values-de/strings.xml @@ -930,4 +930,8 @@ </plurals> <string name="clipboard_copy_ok">In Zwischenablage kopiert</string> + <plurals name="days_ago"> + <item quantity="one">gestern</item> + <item quantity="other">vor %d Tagen</item> + </plurals> </resources> diff --git a/main/res/values/strings.xml b/main/res/values/strings.xml index 4db1fb4..13e2f59 100644 --- a/main/res/values/strings.xml +++ b/main/res/values/strings.xml @@ -963,11 +963,15 @@ <string name="go4cache_tweeting">Tweeting</string> <string name="go4cache_heading_to">Heading to</string> <plurals name="go4cache_time_minutes"> - <item quantity="one">one Minute ago</item> - <item quantity="other">%d Minutes ago</item> + <item quantity="one">one minute ago</item> + <item quantity="other">%d minutes ago</item> </plurals> <string name="clipboard_copy_ok">Copied to clipboard</string> + <plurals name="days_ago"> + <item quantity="one">yesterday</item> + <item quantity="other">%d days ago</item> + </plurals> <!-- ====== please, do not translate (and include in translation) things below this line ====== --> diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java index 15c4909..2daca03 100644 --- a/main/src/cgeo/geocaching/CacheDetailActivity.java +++ b/main/src/cgeo/geocaching/CacheDetailActivity.java @@ -2127,18 +2127,7 @@ public class CacheDetailActivity extends AbstractActivity { // images if (log.hasLogImages()) { - - List<String> titles = new ArrayList<String>(5); - for (cgImage image : log.getLogImages()) { - if (StringUtils.isNotBlank(image.getTitle())) { - titles.add(image.getTitle()); - } - } - if (titles.isEmpty()) { - titles.add(res.getString(R.string.cache_log_image_default_title)); - } - - holder.images.setText(StringUtils.join(titles, ", ")); + holder.images.setText(log.getImageTitles()); holder.images.setVisibility(View.VISIBLE); holder.images.setOnClickListener(new View.OnClickListener() { @Override diff --git a/main/src/cgeo/geocaching/LogEntry.java b/main/src/cgeo/geocaching/LogEntry.java index 3130822..e0e2e13 100644 --- a/main/src/cgeo/geocaching/LogEntry.java +++ b/main/src/cgeo/geocaching/LogEntry.java @@ -3,6 +3,7 @@ package cgeo.geocaching; import cgeo.geocaching.enumerations.LogType; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; import java.util.Calendar; @@ -83,4 +84,30 @@ public final class LogEntry { public boolean hasLogImages() { return CollectionUtils.isNotEmpty(logImages); } + + public CharSequence getImageTitles() { + final List<String> titles = new ArrayList<String>(5); + for (cgImage image : getLogImages()) { + if (StringUtils.isNotBlank(image.getTitle())) { + titles.add(image.getTitle()); + } + } + if (titles.isEmpty()) { + titles.add(cgeoapplication.getInstance().getString(R.string.cache_log_image_default_title)); + } + return StringUtils.join(titles, ", "); + } + + public int daysSinceLog() { + final Calendar logDate = Calendar.getInstance(); + logDate.setTimeInMillis(date); + logDate.set(Calendar.SECOND, 0); + logDate.set(Calendar.MINUTE, 0); + logDate.set(Calendar.HOUR, 0); + final Calendar today = Calendar.getInstance(); + today.set(Calendar.SECOND, 0); + today.set(Calendar.MINUTE, 0); + today.set(Calendar.HOUR, 0); + return (int) Math.round((today.getTimeInMillis() - logDate.getTimeInMillis()) / 86400000d); + } } diff --git a/main/src/cgeo/geocaching/cgeotouch.java b/main/src/cgeo/geocaching/cgeotouch.java index acb7b09..c9faac6 100644 --- a/main/src/cgeo/geocaching/cgeotouch.java +++ b/main/src/cgeo/geocaching/cgeotouch.java @@ -16,6 +16,8 @@ import org.apache.commons.lang3.StringUtils; import android.app.Dialog; import android.app.ProgressDialog; +import android.content.Context; +import android.content.Intent; import android.content.res.Configuration; import android.os.Bundle; import android.os.Handler; @@ -452,4 +454,12 @@ public class cgeotouch extends AbstractActivity implements DateDialog.DateDialog return StatusCode.LOG_POST_ERROR; } + + public static void startActivity(final Context context, final cgTrackable trackable) { + final Intent logTouchIntent = new Intent(context, cgeotouch.class); + logTouchIntent.putExtra("geocode", trackable.getGeocode().toUpperCase()); + logTouchIntent.putExtra("guid", trackable.getGuid()); + logTouchIntent.putExtra("trackingcode", trackable.getTrackingcode()); + context.startActivity(logTouchIntent); + } } diff --git a/main/src/cgeo/geocaching/cgeotrackable.java b/main/src/cgeo/geocaching/cgeotrackable.java index 039fb44..4d982a2 100644 --- a/main/src/cgeo/geocaching/cgeotrackable.java +++ b/main/src/cgeo/geocaching/cgeotrackable.java @@ -2,8 +2,10 @@ package cgeo.geocaching; import cgeo.geocaching.activity.AbstractActivity; import cgeo.geocaching.connector.gc.GCParser; +import cgeo.geocaching.enumerations.LogType; import cgeo.geocaching.geopoint.HumanDistance; import cgeo.geocaching.network.HtmlImage; +import cgeo.geocaching.ui.CacheDetailsCreator; import cgeo.geocaching.ui.Formatter; import cgeo.geocaching.utils.Log; @@ -36,15 +38,14 @@ import java.util.Arrays; public class cgeotrackable extends AbstractActivity { private static final int MENU_LOG_TOUCH = 1; private static final int MENU_BROWSER_TRACKABLE = 2; - public cgTrackable trackable = null; - public String geocode = null; - public String name = null; - public String guid = null; - public String id = null; + private cgTrackable trackable = null; + private String geocode = null; + private String name = null; + private String guid = null; + private String id = null; private String contextMenuUser = null; private LayoutInflater inflater = null; private ProgressDialog waitDialog = null; - protected LinearLayout detailsList; private Handler loadTrackableHandler = new Handler() { @Override @@ -75,17 +76,17 @@ public class cgeotrackable extends AbstractActivity { } ((ScrollView) findViewById(R.id.details_list_box)).setVisibility(View.VISIBLE); - detailsList = (LinearLayout) findViewById(R.id.details_list); + final CacheDetailsCreator details = new CacheDetailsCreator(cgeotrackable.this, (LinearLayout) findViewById(R.id.details_list)); // actiobar icon if (StringUtils.isNotBlank(trackable.getIconUrl())) { - final tbIconHandler iconHandler = new tbIconHandler(((TextView) findViewById(R.id.actionbar_title))); - final tbIconThread iconThread = new tbIconThread(trackable.getIconUrl(), iconHandler); + final TrackableIconHandler iconHandler = new TrackableIconHandler(((TextView) findViewById(R.id.actionbar_title))); + final TrackableIconThread iconThread = new TrackableIconThread(trackable.getIconUrl(), iconHandler); iconThread.start(); } // trackable name - addDetail(R.string.trackable_name, StringUtils.isNotBlank(trackable.getName()) ? Html.fromHtml(trackable.getName()).toString() : res.getString(R.string.trackable_unknown)); + 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; @@ -94,16 +95,16 @@ public class cgeotrackable extends AbstractActivity { } else { tbType = res.getString(R.string.trackable_unknown); } - addDetail(R.string.trackable_type, tbType); + details.add(R.string.trackable_type, tbType); // trackable geocode - addDetail(R.string.trackable_code, trackable.getGeocode().toUpperCase()); + details.add(R.string.trackable_code, trackable.getGeocode().toUpperCase()); // trackable owner - TextView owner = addDetail(R.string.trackable_owner, res.getString(R.string.trackable_unknown)); + TextView owner = details.add(R.string.trackable_owner, res.getString(R.string.trackable_unknown)); if (StringUtils.isNotBlank(trackable.getOwner())) { owner.setText(Html.fromHtml(trackable.getOwner()), TextView.BufferType.SPANNABLE); - owner.setOnClickListener(new userActions()); + owner.setOnClickListener(new UserActionsListener()); } // trackable spotted @@ -114,9 +115,9 @@ public class cgeotrackable extends AbstractActivity { String text; if (trackable.getSpottedType() == cgTrackable.SPOTTED_CACHE) { - text = res.getString(R.string.trackable_spotted_in_cache) + " " + Html.fromHtml(trackable.getSpottedName()).toString(); + text = res.getString(R.string.trackable_spotted_in_cache) + ' ' + Html.fromHtml(trackable.getSpottedName()).toString(); } else if (trackable.getSpottedType() == cgTrackable.SPOTTED_USER) { - text = res.getString(R.string.trackable_spotted_at_user) + " " + Html.fromHtml(trackable.getSpottedName()).toString(); + text = res.getString(R.string.trackable_spotted_at_user) + ' ' + Html.fromHtml(trackable.getSpottedName()).toString(); } else if (trackable.getSpottedType() == cgTrackable.SPOTTED_UNKNOWN) { text = res.getString(R.string.trackable_spotted_unknown_location); } else if (trackable.getSpottedType() == cgTrackable.SPOTTED_OWNER) { @@ -125,36 +126,44 @@ public class cgeotrackable extends AbstractActivity { text = "N/A"; } - TextView spotted = addDetail(R.string.trackable_spotted, text); + // days since last spotting + if (!"N/A".equals(text) && trackable.getLogs() != null) { + for (LogEntry log : trackable.getLogs()) { + if (log.type == LogType.RETRIEVED_IT || log.type == LogType.GRABBED_IT || log.type == LogType.DISCOVERED_IT || log.type == LogType.PLACED_IT) { + final int days = log.daysSinceLog(); + text += (" (" + res.getQuantityString(R.plurals.days_ago, days, days) + ")"); + break; + } + } + } + + final TextView spotted = details.add(R.string.trackable_spotted, text); spotted.setClickable(true); if (cgTrackable.SPOTTED_CACHE == trackable.getSpottedType()) { spotted.setOnClickListener(new View.OnClickListener() { public void onClick(View arg0) { - Intent cacheIntent = new Intent(cgeotrackable.this, CacheDetailActivity.class); - cacheIntent.putExtra("guid", trackable.getSpottedGuid()); - cacheIntent.putExtra("name", trackable.getSpottedName()); - startActivity(cacheIntent); + CacheDetailActivity.startActivityGuid(cgeotrackable.this, trackable.getSpottedGuid(), trackable.getSpottedName()); } }); } else if (cgTrackable.SPOTTED_USER == trackable.getSpottedType()) { - spotted.setOnClickListener(new userActions()); + spotted.setOnClickListener(new UserActionsListener()); } } // trackable origin if (StringUtils.isNotBlank(trackable.getOrigin())) { - TextView origin = addDetail(R.string.trackable_origin, ""); + TextView origin = details.add(R.string.trackable_origin, ""); origin.setText(Html.fromHtml(trackable.getOrigin()), TextView.BufferType.SPANNABLE); } // trackable released if (trackable.getReleased() != null) { - addDetail(R.string.trackable_released, Formatter.formatDate(trackable.getReleased().getTime())); + details.add(R.string.trackable_released, Formatter.formatDate(trackable.getReleased().getTime())); } // trackable distance if (trackable.getDistance() >= 0) { - addDetail(R.string.trackable_distance, HumanDistance.getHumanDistance(trackable.getDistance())); + details.add(R.string.trackable_distance, HumanDistance.getHumanDistance(trackable.getDistance())); } // trackable goal @@ -314,17 +323,11 @@ public class cgeotrackable extends AbstractActivity { } waitDialog = ProgressDialog.show(this, message, res.getString(R.string.trackable_details_loading), true, true); - loadTrackable thread = new loadTrackable(loadTrackableHandler, geocode, guid, id); + LoadTrackableThread thread = new LoadTrackableThread(loadTrackableHandler, geocode, guid, id); thread.start(); } @Override - public void onResume() { - super.onResume(); - - } - - @Override public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo info) { super.onCreateContextMenu(menu, view, info); final int viewId = view.getId(); @@ -377,7 +380,7 @@ public class cgeotrackable extends AbstractActivity { public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case MENU_LOG_TOUCH: - logTouch(); + cgeotouch.startActivity(this, trackable); return true; case MENU_BROWSER_TRACKABLE: startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(trackable.getUrl()))); @@ -393,14 +396,13 @@ public class cgeotrackable extends AbstractActivity { return super.onPrepareOptionsMenu(menu); } - private class loadTrackable extends Thread { + private class LoadTrackableThread extends Thread { + final private Handler handler; + final private String geocode; + final private String guid; + final private String id; - private Handler handler = null; - private String geocode = null; - private String guid = null; - private String id = null; - - public loadTrackable(Handler handlerIn, String geocodeIn, String guidIn, String idIn) { + public LoadTrackableThread(Handler handlerIn, String geocodeIn, String guidIn, String idIn) { handler = handlerIn; geocode = geocodeIn; guid = guidIn; @@ -475,25 +477,14 @@ public class cgeotrackable extends AbstractActivity { } }; - ArrayList<String> titles = new ArrayList<String>(); - for (cgImage image : log.getLogImages()) { - String img_title = image.getTitle(); - if (!StringUtils.isBlank(img_title)) { - titles.add(img_title); - } - } - if (titles.isEmpty()) { - titles.add(res.getString(R.string.cache_log_image_default_title)); - } - LinearLayout log_imgView = (LinearLayout) getLayoutInflater().inflate(R.layout.trackable_logs_img, null); TextView log_img_title = (TextView) log_imgView.findViewById(R.id.title); - log_img_title.setText(StringUtils.join(titles.toArray(new String[titles.size()]), ", ")); + log_img_title.setText(log.getImageTitles()); log_img_title.setOnClickListener(listener); logLayout.addView(log_imgView); } - ((TextView) rowView.findViewById(R.id.author)).setOnClickListener(new userActions()); + ((TextView) rowView.findViewById(R.id.author)).setOnClickListener(new UserActionsListener()); listView.addView(rowView); } @@ -503,7 +494,7 @@ public class cgeotrackable extends AbstractActivity { } } - private class userActions implements View.OnClickListener { + private class UserActionsListener implements View.OnClickListener { public void onClick(View view) { if (view == null) { @@ -514,36 +505,16 @@ public class cgeotrackable extends AbstractActivity { registerForContextMenu(view); openContextMenu(view); } catch (Exception e) { - Log.e("cgeotrackable.userActions.onClick ", e); + Log.e("cgeotrackable.UserActionsListener.onClick ", e); } } } - private void logTouch() { - Intent logTouchIntent = new Intent(this, cgeotouch.class); - logTouchIntent.putExtra("geocode", trackable.getGeocode().toUpperCase()); - logTouchIntent.putExtra("guid", trackable.getGuid()); - logTouchIntent.putExtra("trackingcode", trackable.getTrackingcode()); - startActivity(logTouchIntent); - } - - private TextView addDetail(int labelResourceId, String value) { - RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.cache_item, null); - TextView labelView = (TextView) layout.findViewById(R.id.name); - TextView valueView = (TextView) layout.findViewById(R.id.value); - - labelView.setText(res.getString(labelResourceId)); - valueView.setText(value); - detailsList.addView(layout); - - return valueView; - } - - private class tbIconThread extends Thread { - String url = null; - Handler handler = null; + private class TrackableIconThread extends Thread { + final private String url; + final private Handler handler; - public tbIconThread(String urlIn, Handler handlerIn) { + public TrackableIconThread(String urlIn, Handler handlerIn) { url = urlIn; handler = handlerIn; } @@ -562,21 +533,21 @@ public class cgeotrackable extends AbstractActivity { Message message = handler.obtainMessage(0, image); handler.sendMessage(message); } catch (Exception e) { - Log.e("cgeotrackable.tbIconThread.run: " + e.toString()); + Log.e("cgeotrackable.TrackableIconThread.run: " + e.toString()); } } } - private static class tbIconHandler extends Handler { - TextView view = null; + private static class TrackableIconHandler extends Handler { + final private TextView view; - public tbIconHandler(TextView viewIn) { + public TrackableIconHandler(TextView viewIn) { view = viewIn; } @Override public void handleMessage(Message message) { - BitmapDrawable image = (BitmapDrawable) message.obj; + final BitmapDrawable image = (BitmapDrawable) message.obj; if (image != null && view != null) { image.setBounds(0, 0, view.getHeight(), view.getHeight()); view.setCompoundDrawables(image, null, null, null); @@ -586,7 +557,7 @@ public class cgeotrackable extends AbstractActivity { public static void startActivity(final AbstractActivity fromContext, final String guid, final String geocode, final String name) { - Intent trackableIntent = new Intent(fromContext, cgeotrackable.class); + final Intent trackableIntent = new Intent(fromContext, cgeotrackable.class); trackableIntent.putExtra("guid", guid); trackableIntent.putExtra("geocode", geocode); trackableIntent.putExtra("name", name); |
