aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching
diff options
context:
space:
mode:
authorrsudev <rasch@munin-soft.de>2013-06-27 17:46:41 +0200
committerrsudev <rasch@munin-soft.de>2013-06-27 17:46:41 +0200
commitdc53fa7be33f3052e39952112679c7b0e0b3b324 (patch)
tree6fef9b63070a08177a13401e90de8916c4a72e91 /main/src/cgeo/geocaching
parentcb90fff0100a40bdefae6b57a6b12e9c113b641f (diff)
downloadcgeo-dc53fa7be33f3052e39952112679c7b0e0b3b324.zip
cgeo-dc53fa7be33f3052e39952112679c7b0e0b3b324.tar.gz
cgeo-dc53fa7be33f3052e39952112679c7b0e0b3b324.tar.bz2
Implements #2900, Support logging with password (oc)
Extends db, geocache and OKAPI to retrieve and store the property Extends logging UI and OKAPI to allow entering and sending it
Diffstat (limited to 'main/src/cgeo/geocaching')
-rw-r--r--main/src/cgeo/geocaching/Geocache.java9
-rw-r--r--main/src/cgeo/geocaching/LogCacheActivity.java22
-rw-r--r--main/src/cgeo/geocaching/cgData.java18
-rw-r--r--main/src/cgeo/geocaching/connector/ILoggingManager.java13
-rw-r--r--main/src/cgeo/geocaching/connector/NoLoggingManager.java2
-rw-r--r--main/src/cgeo/geocaching/connector/gc/GCLoggingManager.java4
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OkapiClient.java9
-rw-r--r--main/src/cgeo/geocaching/connector/oc/OkapiLoggingManager.java6
8 files changed, 70 insertions, 13 deletions
diff --git a/main/src/cgeo/geocaching/Geocache.java b/main/src/cgeo/geocaching/Geocache.java
index 68f716b..05423c3 100644
--- a/main/src/cgeo/geocaching/Geocache.java
+++ b/main/src/cgeo/geocaching/Geocache.java
@@ -135,6 +135,7 @@ public class Geocache implements ICache, IWaypoint {
private String nameForSorting;
private final EnumSet<StorageLocation> storageLocation = EnumSet.of(StorageLocation.HEAP);
private boolean finalDefined = false;
+ private boolean logPasswordRequired = false;
private int zoomlevel = Tile.ZOOMLEVEL_MAX + 1;
private static final Pattern NUMBER_PATTERN = Pattern.compile("\\d+");
@@ -1770,4 +1771,12 @@ public class Geocache implements ICache, IWaypoint {
public int getMapMarkerId() {
return getConnector().getCacheMapMarkerId(isDisabled() || isArchived());
}
+
+ public boolean isLogPasswordRequired() {
+ return logPasswordRequired;
+ }
+
+ public void setLogPasswordRequired(boolean required) {
+ logPasswordRequired = required;
+ }
}
diff --git a/main/src/cgeo/geocaching/LogCacheActivity.java b/main/src/cgeo/geocaching/LogCacheActivity.java
index 62c94ce..b3b6c09 100644
--- a/main/src/cgeo/geocaching/LogCacheActivity.java
+++ b/main/src/cgeo/geocaching/LogCacheActivity.java
@@ -71,6 +71,7 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia
private Button postButton = null;
private CheckBox tweetCheck = null;
private LinearLayout tweetBox = null;
+ private LinearLayout logPasswordBox = null;
private boolean tbChanged = false;
private SparseArray<TrackableLog> actionButtons;
@@ -252,6 +253,7 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia
postButton = (Button) findViewById(R.id.post);
tweetBox = (LinearLayout) findViewById(R.id.tweet_box);
tweetCheck = (CheckBox) findViewById(R.id.tweet);
+ logPasswordBox = (LinearLayout) findViewById(R.id.log_password_box);
// initialize with default values
setDefaultValues();
@@ -302,6 +304,7 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia
tweetCheck.setChecked(true);
updateTweetBox(typeSelected);
+ updateLogPasswordBox(typeSelected);
final Button imageButton = (Button) findViewById(R.id.image_btn);
imageButton.setOnClickListener(new View.OnClickListener() {
@@ -377,6 +380,8 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia
final EditText logView = (EditText) findViewById(R.id.log);
logView.setText(StringUtils.EMPTY);
+ final EditText logPasswordView = (EditText) findViewById(R.id.log_password);
+ logPasswordView.setText(StringUtils.EMPTY);
updateImageButton();
@@ -491,6 +496,14 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia
}
}
+ private void updateLogPasswordBox(LogType type) {
+ if (type == LogType.FOUND_IT && cache.isLogPasswordRequired()) {
+ logPasswordBox.setVisibility(View.VISIBLE);
+ } else {
+ logPasswordBox.setVisibility(View.GONE);
+ }
+ }
+
private class DateListener implements View.OnClickListener {
@Override
@@ -507,7 +520,7 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia
final String message = res.getString(StringUtils.isBlank(imageUri.getPath()) ?
R.string.log_saving :
R.string.log_saving_and_uploading);
- new Poster(LogCacheActivity.this, message).execute(currentLogText());
+ new Poster(LogCacheActivity.this, message).execute(currentLogText(), currentLogPassword());
}
}
@@ -520,8 +533,9 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia
@Override
protected StatusCode doInBackgroundInternal(final String[] logTexts) {
final String log = logTexts[0];
+ final String logPwd = logTexts.length > 1 ? logTexts[1] : null;
try {
- final LogResult logResult = loggingManager.postLog(cache, typeSelected, date, log, trackables);
+ final LogResult logResult = loggingManager.postLog(cache, typeSelected, date, log, logPwd, trackables);
if (logResult.getPostLogResult() == StatusCode.NO_ERROR) {
final LogEntry logNow = new LogEntry(date, typeSelected, log);
@@ -593,6 +607,10 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia
return ((EditText) findViewById(R.id.log)).getText().toString();
}
+ private String currentLogPassword() {
+ return ((EditText) findViewById(R.id.log_password)).getText().toString();
+ }
+
@Override
protected LogContext getLogContext() {
return new LogContext(cache);
diff --git a/main/src/cgeo/geocaching/cgData.java b/main/src/cgeo/geocaching/cgData.java
index 2ef5b27..6f535dc 100644
--- a/main/src/cgeo/geocaching/cgData.java
+++ b/main/src/cgeo/geocaching/cgData.java
@@ -67,8 +67,8 @@ public class cgData {
"difficulty", "direction", "distance", "terrain", "latlon", "location", "elevation", "personal_note", "shortdesc",
// 24 25 26 27 28 29 30 31 32
"favourite_cnt", "rating", "votes", "myvote", "disabled", "archived", "members", "found", "favourite",
- // 33 34 35 36 37 38 39 40 41 42
- "inventoryunknown", "onWatchlist", "reliable_latlon", "coordsChanged", "latitude", "longitude", "finalDefined", "_id", "inventorycoins", "inventorytags"
+ // 33 34 35 36 37 38 39 40 41 42 43
+ "inventoryunknown", "onWatchlist", "reliable_latlon", "coordsChanged", "latitude", "longitude", "finalDefined", "_id", "inventorycoins", "inventorytags", "logPasswordRequired"
// reason is replaced by listId in Geocache
};
@@ -86,7 +86,7 @@ public class cgData {
private static int[] cacheColumnIndex;
private static CacheCache cacheCache = new CacheCache();
private static SQLiteDatabase database = null;
- private static final int dbVersion = 67;
+ private static final int dbVersion = 68;
public static final int customListIdOffset = 10;
private static final String dbName = "data";
private static final String dbTableCaches = "cg_caches";
@@ -146,6 +146,7 @@ public class cgData {
+ "onWatchlist integer default 0, "
+ "coordsChanged integer default 0, "
+ "finalDefined integer default 0"
+ + "logPasswordRequired integer default 0"
+ "); ";
private static final String dbCreateLists = ""
+ "create table " + dbTableLists + " ("
@@ -685,6 +686,15 @@ public class cgData {
}
}
+ // Introduces logPasswordRequired on caches
+ if (oldVersion < 68) {
+ try {
+ db.execSQL("alter table " + dbTableCaches + " add column logPasswordRequired integer default 0");
+ } catch (Exception e) {
+ Log.e("Failed to upgrade to ver. 68", e);
+
+ }
+ }
}
db.setTransactionSuccessful();
@@ -1052,6 +1062,7 @@ public class cgData {
values.put("onWatchlist", cache.isOnWatchlist() ? 1 : 0);
values.put("coordsChanged", cache.hasUserModifiedCoords() ? 1 : 0);
values.put("finalDefined", cache.hasFinalDefined() ? 1 : 0);
+ values.put("logPasswordRequired", cache.isLogPasswordRequired() ? 1 : 0);
init();
@@ -1643,6 +1654,7 @@ public class cgData {
cache.setReliableLatLon(cursor.getInt(cacheColumnIndex[35]) > 0);
cache.setUserModifiedCoords(cursor.getInt(cacheColumnIndex[36]) > 0);
cache.setFinalDefined(cursor.getInt(cacheColumnIndex[39]) > 0);
+ cache.setLogPasswordRequired(cursor.getInt(cacheColumnIndex[43]) > 0);
Log.d("Loading " + cache.toString() + " (" + cache.getListId() + ") from DB");
diff --git a/main/src/cgeo/geocaching/connector/ILoggingManager.java b/main/src/cgeo/geocaching/connector/ILoggingManager.java
index f0029f9..c5586b3 100644
--- a/main/src/cgeo/geocaching/connector/ILoggingManager.java
+++ b/main/src/cgeo/geocaching/connector/ILoggingManager.java
@@ -11,10 +11,23 @@ import java.util.List;
public interface ILoggingManager {
+ /**
+ * Post a log for a cache online
+ *
+ * @param cache
+ * @param logType
+ * @param date
+ * @param log
+ * @param logPassword
+ * optional, maybe null
+ * @param trackableLogs
+ * @return
+ */
LogResult postLog(Geocache cache,
LogType logType,
Calendar date,
String log,
+ String logPassword,
List<TrackableLog> trackableLogs);
ImageResult postLogImage(String logId,
diff --git a/main/src/cgeo/geocaching/connector/NoLoggingManager.java b/main/src/cgeo/geocaching/connector/NoLoggingManager.java
index bfea4ca..04a73c1 100644
--- a/main/src/cgeo/geocaching/connector/NoLoggingManager.java
+++ b/main/src/cgeo/geocaching/connector/NoLoggingManager.java
@@ -19,7 +19,7 @@ public class NoLoggingManager implements ILoggingManager {
}
@Override
- public LogResult postLog(Geocache cache, LogType logType, Calendar date, String log, List<TrackableLog> trackableLogs) {
+ public LogResult postLog(Geocache cache, LogType logType, Calendar date, String log, String logPassword, List<TrackableLog> trackableLogs) {
return new LogResult(StatusCode.LOG_POST_ERROR, "");
}
diff --git a/main/src/cgeo/geocaching/connector/gc/GCLoggingManager.java b/main/src/cgeo/geocaching/connector/gc/GCLoggingManager.java
index 4f2f8c4..dd150de 100644
--- a/main/src/cgeo/geocaching/connector/gc/GCLoggingManager.java
+++ b/main/src/cgeo/geocaching/connector/gc/GCLoggingManager.java
@@ -1,10 +1,10 @@
package cgeo.geocaching.connector.gc;
import cgeo.geocaching.Geocache;
+import cgeo.geocaching.LogCacheActivity;
import cgeo.geocaching.R;
import cgeo.geocaching.Settings;
import cgeo.geocaching.TrackableLog;
-import cgeo.geocaching.LogCacheActivity;
import cgeo.geocaching.activity.ActivityMixin;
import cgeo.geocaching.connector.ILoggingManager;
import cgeo.geocaching.connector.ImageResult;
@@ -80,7 +80,7 @@ public class GCLoggingManager implements ILoggingManager, LoaderManager.LoaderCa
}
@Override
- public LogResult postLog(Geocache cache, LogType logType, Calendar date, String log, List<TrackableLog> trackableLogs) {
+ public LogResult postLog(Geocache cache, LogType logType, Calendar date, String log, String logPassword, List<TrackableLog> trackableLogs) {
try {
final ImmutablePair<StatusCode, String> postResult = GCParser.postLog(cache.getGeocode(), cache.getCacheId(), viewstates, logType,
diff --git a/main/src/cgeo/geocaching/connector/oc/OkapiClient.java b/main/src/cgeo/geocaching/connector/oc/OkapiClient.java
index e2cc7cd..b6f9711 100644
--- a/main/src/cgeo/geocaching/connector/oc/OkapiClient.java
+++ b/main/src/cgeo/geocaching/connector/oc/OkapiClient.java
@@ -94,6 +94,7 @@ final public class OkapiClient {
private static final String CACHE_LOCATION = "location";
private static final String CACHE_NAME = "name";
private static final String CACHE_CODE = "code";
+ private static final String CACHE_REQ_PASSWORD = "req_passwd";
private static final String LOG_TYPE = "type";
private static final String LOG_COMMENT = "comment";
@@ -109,7 +110,7 @@ final public class OkapiClient {
// Additional: additional fields for full cache (L3 - only for level 3 auth, current - only for connectors with current api)
private static final String SERVICE_CACHE_CORE_FIELDS = "code|name|location|type|status|difficulty|terrain|size";
private static final String SERVICE_CACHE_CORE_L3_FIELDS = "is_found";
- private static final String SERVICE_CACHE_ADDITIONAL_FIELDS = "owner|founds|notfounds|rating|rating_votes|recommendations|description|hint|images|latest_logs|date_hidden|alt_wpts|attrnames";
+ private static final String SERVICE_CACHE_ADDITIONAL_FIELDS = "owner|founds|notfounds|rating|rating_votes|recommendations|description|hint|images|latest_logs|date_hidden|alt_wpts|attrnames|req_passwd";
private static final String SERVICE_CACHE_ADDITIONAL_CURRENT_FIELDS = "gc_code|attribution_note";
private static final String SERVICE_CACHE_ADDITIONAL_L3_FIELDS = "is_watched";
@@ -195,7 +196,7 @@ final public class OkapiClient {
return true;
}
- public static LogResult postLog(final Geocache cache, LogType logType, Calendar date, String log, OCApiConnector connector) {
+ public static LogResult postLog(final Geocache cache, LogType logType, Calendar date, String log, String logPassword, OCApiConnector connector) {
final Parameters params = new Parameters("cache_code", cache.getGeocode());
params.add("logtype", logType.oc_type);
params.add("comment", log);
@@ -204,6 +205,9 @@ final public class OkapiClient {
if (logType.equals(LogType.NEEDS_MAINTENANCE)) {
params.add("needs_maintenance", "true");
}
+ if (logPassword != null) {
+ params.add("password", logPassword);
+ }
final JSONObject data = request(connector, OkapiService.SERVICE_SUBMIT_LOG, params);
@@ -328,6 +332,7 @@ final public class OkapiClient {
if (!response.isNull(CACHE_IS_WATCHED)) {
cache.setOnWatchlist(response.getBoolean(CACHE_IS_WATCHED));
}
+ cache.setLogPasswordRequired(response.getBoolean(CACHE_REQ_PASSWORD));
cache.setDetailedUpdatedNow();
// save full detailed caches
diff --git a/main/src/cgeo/geocaching/connector/oc/OkapiLoggingManager.java b/main/src/cgeo/geocaching/connector/oc/OkapiLoggingManager.java
index 8a94218..c4bf91f 100644
--- a/main/src/cgeo/geocaching/connector/oc/OkapiLoggingManager.java
+++ b/main/src/cgeo/geocaching/connector/oc/OkapiLoggingManager.java
@@ -1,8 +1,8 @@
package cgeo.geocaching.connector.oc;
import cgeo.geocaching.Geocache;
-import cgeo.geocaching.TrackableLog;
import cgeo.geocaching.LogCacheActivity;
+import cgeo.geocaching.TrackableLog;
import cgeo.geocaching.connector.ILoggingManager;
import cgeo.geocaching.connector.ImageResult;
import cgeo.geocaching.connector.LogResult;
@@ -38,8 +38,8 @@ public class OkapiLoggingManager implements ILoggingManager {
}
@Override
- public LogResult postLog(Geocache cache, LogType logType, Calendar date, String log, List<TrackableLog> trackableLogs) {
- return OkapiClient.postLog(cache, logType, date, log, connector);
+ public LogResult postLog(Geocache cache, LogType logType, Calendar date, String log, String logPassword, List<TrackableLog> trackableLogs) {
+ return OkapiClient.postLog(cache, logType, date, log, logPassword, connector);
}
@Override