aboutsummaryrefslogtreecommitdiffstats
path: root/main/src
diff options
context:
space:
mode:
authorMarco Jacob <mjacob@union06.de>2013-11-02 07:55:56 +0100
committerMarco Jacob <mjacob@union06.de>2013-11-04 18:24:15 +0100
commita23957d148929a2ac0c463c88ddd09104fd5f9bb (patch)
tree182c5d52c47f8ad50688e25745ce9bcb575a5fcc /main/src
parentbd9535698bd9239bc6e60580c20e6c275449ff61 (diff)
downloadcgeo-a23957d148929a2ac0c463c88ddd09104fd5f9bb.zip
cgeo-a23957d148929a2ac0c463c88ddd09104fd5f9bb.tar.gz
cgeo-a23957d148929a2ac0c463c88ddd09104fd5f9bb.tar.bz2
fixes #3325 - warning on upload if personal note exceeds 4000
Diffstat (limited to 'main/src')
-rw-r--r--main/src/cgeo/geocaching/CacheDetailActivity.java34
-rw-r--r--main/src/cgeo/geocaching/PersonalNote.java6
-rw-r--r--main/src/cgeo/geocaching/connector/gc/GCConstants.java2
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;