diff options
Diffstat (limited to 'main/src')
| -rw-r--r-- | main/src/cgeo/geocaching/CacheDetailActivity.java | 34 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/PersonalNote.java | 6 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/connector/gc/GCConstants.java | 2 |
3 files changed, 39 insertions, 3 deletions
diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java index 4eddba4..ba8f470 100644 --- a/main/src/cgeo/geocaching/CacheDetailActivity.java +++ b/main/src/cgeo/geocaching/CacheDetailActivity.java @@ -11,6 +11,7 @@ import cgeo.geocaching.compatibility.Compatibility; import cgeo.geocaching.connector.ConnectorFactory; import cgeo.geocaching.connector.IConnector; import cgeo.geocaching.connector.gc.GCConnector; +import cgeo.geocaching.connector.gc.GCConstants; import cgeo.geocaching.enumerations.CacheAttribute; import cgeo.geocaching.enumerations.LoadFlags; import cgeo.geocaching.enumerations.LoadFlags.SaveFlag; @@ -1521,7 +1522,11 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc personalNoteUpload.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - uploadPersonalNote(); + if (StringUtils.length(cache.getPersonalNote()) > GCConstants.PERSONAL_NOTE_MAX_CHARS) { + warnPersonalNoteExceedsLimit(); + } else { + uploadPersonalNote(); + } } }); } else { @@ -1633,6 +1638,33 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc dialog.show(); } + private void warnPersonalNoteExceedsLimit() { + final AlertDialog.Builder builder = new AlertDialog.Builder(CacheDetailActivity.this); + builder.setTitle(R.string.cache_personal_note_limit); + String lang = getString(R.string.cache_personal_note_truncation, GCConstants.PERSONAL_NOTE_MAX_CHARS); + builder.setMessage(lang); + builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + // do nothing + } + }); + + builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + uploadPersonalNote(); + } + + }); + final AlertDialog dialog = builder.create(); + dialog.setOwnerActivity(CacheDetailActivity.this); + dialog.show(); + } + } /** diff --git a/main/src/cgeo/geocaching/PersonalNote.java b/main/src/cgeo/geocaching/PersonalNote.java index 82e88f7..129b765 100644 --- a/main/src/cgeo/geocaching/PersonalNote.java +++ b/main/src/cgeo/geocaching/PersonalNote.java @@ -70,8 +70,10 @@ public class PersonalNote { private PersonalNote mergeOnlyProviderNotes(final PersonalNote other) { final PersonalNote result = new PersonalNote(); if (StringUtils.isNotEmpty(other.providerNote) && StringUtils.isNotEmpty(providerNote)) { - if (providerNote.equals(other.providerNote)) { - result.providerNote = providerNote; + // Don't overwrite a stored personal note if provider note is different. + // Prevents the local personal note from being overwritten by a truncated note from GC.com. + if (StringUtils.startsWith(other.providerNote, providerNote)) { + result.providerNote = other.providerNote; return result; } if (other.isOffline) { diff --git a/main/src/cgeo/geocaching/connector/gc/GCConstants.java b/main/src/cgeo/geocaching/connector/gc/GCConstants.java index c74abae..d424ec7 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCConstants.java +++ b/main/src/cgeo/geocaching/connector/gc/GCConstants.java @@ -177,6 +177,8 @@ public final class GCConstants { /** Number of logs to retrieve from GC.com */ public final static int NUMBER_OF_LOGS = 35; + /** Maximum number of chars for personal note. **/ + public final static int PERSONAL_NOTE_MAX_CHARS = 500; private final static String SEQUENCE_GCID = "0123456789ABCDEFGHJKMNPQRTVWXYZ"; private final static long GC_BASE31 = 31; |
