aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/VisitCacheActivity.java
diff options
context:
space:
mode:
authorcampbeb <bpcampbell@gmail.com>2013-01-16 21:04:35 -1000
committercampbeb <bpcampbell@gmail.com>2013-01-16 21:04:35 -1000
commitcf0ed3e3a1449115705bd4443990df7e4aa152d4 (patch)
tree80ca3f723c5bcd3adb0e1982c8e3b6d877f7dfad /main/src/cgeo/geocaching/VisitCacheActivity.java
parent884a60814d1a72ca30e9e9b0e31d59e895b2aca0 (diff)
downloadcgeo-cf0ed3e3a1449115705bd4443990df7e4aa152d4.zip
cgeo-cf0ed3e3a1449115705bd4443990df7e4aa152d4.tar.gz
cgeo-cf0ed3e3a1449115705bd4443990df7e4aa152d4.tar.bz2
Fix #6 - Support uploading images with cache logs
Diffstat (limited to 'main/src/cgeo/geocaching/VisitCacheActivity.java')
-rw-r--r--main/src/cgeo/geocaching/VisitCacheActivity.java85
1 files changed, 78 insertions, 7 deletions
diff --git a/main/src/cgeo/geocaching/VisitCacheActivity.java b/main/src/cgeo/geocaching/VisitCacheActivity.java
index a29256c..760d992 100644
--- a/main/src/cgeo/geocaching/VisitCacheActivity.java
+++ b/main/src/cgeo/geocaching/VisitCacheActivity.java
@@ -18,6 +18,7 @@ import cgeo.geocaching.utils.LogTemplateProvider.LogContext;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.tuple.ImmutablePair;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
@@ -26,6 +27,7 @@ import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
+import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
@@ -57,6 +59,11 @@ public class VisitCacheActivity extends AbstractLoggingActivity implements DateD
private static final String SAVED_STATE_RATING = "cgeo.geocaching.saved_state_rating";
private static final String SAVED_STATE_TYPE = "cgeo.geocaching.saved_state_type";
private static final String SAVED_STATE_DATE = "cgeo.geocaching.saved_state_date";
+ private static final String SAVED_STATE_IMAGE_CAPTION = "cgeo.geocaching.saved_state_image_caption";
+ private static final String SAVED_STATE_IMAGE_DESCRIPTION = "cgeo.geocaching.saved_state_image_description";
+ private static final String SAVED_STATE_IMAGE_URI = "cgeo.geocaching.saved_state_image_uri";
+
+ private static final int SELECT_IMAGE = 101;
private LayoutInflater inflater = null;
private cgCache cache = null;
@@ -77,6 +84,9 @@ public class VisitCacheActivity extends AbstractLoggingActivity implements DateD
private double rating;
private LogType typeSelected;
private Calendar date;
+ private String imageCaption;
+ private String imageDescription;
+ private Uri imageUri;
@Override
public Loader<String> onCreateLoader(final int id, final Bundle args) {
@@ -297,6 +307,9 @@ public class VisitCacheActivity extends AbstractLoggingActivity implements DateD
rating = savedInstanceState.getDouble(SAVED_STATE_RATING);
typeSelected = LogType.getById(savedInstanceState.getInt(SAVED_STATE_TYPE));
date.setTimeInMillis(savedInstanceState.getLong(SAVED_STATE_DATE));
+ imageCaption = savedInstanceState.getString(SAVED_STATE_IMAGE_CAPTION);
+ imageDescription = savedInstanceState.getString(SAVED_STATE_IMAGE_DESCRIPTION);
+ imageUri = Uri.parse(savedInstanceState.getString(SAVED_STATE_IMAGE_URI));
} else {
// If log had been previously saved, load it now, otherwise initialize signature as needed
final LogEntry log = cgData.loadLogOffline(geocode);
@@ -334,6 +347,15 @@ public class VisitCacheActivity extends AbstractLoggingActivity implements DateD
tweetCheck.setChecked(true);
+ final Button imageButton = (Button) findViewById(R.id.image_btn);
+ imageButton.setOnClickListener(new View.OnClickListener() {
+
+ @Override
+ public void onClick(View view) {
+ selectImage();
+ }
+ });
+
final Button saveButton = (Button) findViewById(R.id.save);
saveButton.setOnClickListener(new View.OnClickListener() {
@@ -374,6 +396,9 @@ public class VisitCacheActivity extends AbstractLoggingActivity implements DateD
}
}
text = null;
+ imageCaption = "";
+ imageDescription = "";
+ imageUri = Uri.EMPTY;
}
private void clearLog() {
@@ -454,6 +479,8 @@ public class VisitCacheActivity extends AbstractLoggingActivity implements DateD
outState.putDouble(SAVED_STATE_RATING, rating);
outState.putInt(SAVED_STATE_TYPE, typeSelected.id);
outState.putLong(SAVED_STATE_DATE, date.getTimeInMillis());
+ outState.putString(SAVED_STATE_IMAGE_URI, imageUri.getPath());
+ Log.d("saved state");
}
@Override
@@ -497,7 +524,8 @@ public class VisitCacheActivity extends AbstractLoggingActivity implements DateD
private class PostListener implements View.OnClickListener {
@Override
public void onClick(View arg0) {
- waitDialog = ProgressDialog.show(VisitCacheActivity.this, null, res.getString(R.string.log_saving), true);
+ waitDialog = ProgressDialog.show(VisitCacheActivity.this, null,
+ res.getString(StringUtils.isBlank(imageUri.getPath()) ? R.string.log_saving : R.string.log_saving_and_uploading), true);
waitDialog.setCancelable(true);
final Thread thread = new PostLogThread(postLogHandler, currentLogText());
@@ -525,11 +553,19 @@ public class VisitCacheActivity extends AbstractLoggingActivity implements DateD
public StatusCode postLogFn(String log) {
try {
- final StatusCode status = GCParser.postLog(geocode, cacheid, viewstates, typeSelected,
+ // test call only
+ // if (imageUri != null) {
+ // final StatusCode status = GCParser.uploadLogImage("289163155", imageUri);
+ // if (status == StatusCode.LOG_POST_ERROR) {
+ // return status;
+ // }
+ // }
+
+ final ImmutablePair<StatusCode, String> logResult = GCParser.postLog(geocode, cacheid, viewstates, typeSelected,
date.get(Calendar.YEAR), (date.get(Calendar.MONTH) + 1), date.get(Calendar.DATE),
log, trackables);
- if (status == StatusCode.NO_ERROR) {
+ if (logResult.left == StatusCode.NO_ERROR) {
final LogEntry logNow = new LogEntry(date, typeSelected, log);
cache.getLogs().prepend(logNow);
@@ -541,21 +577,25 @@ public class VisitCacheActivity extends AbstractLoggingActivity implements DateD
cgData.saveChangedCache(cache);
}
- if (status == StatusCode.NO_ERROR) {
+ if (logResult.left == StatusCode.NO_ERROR) {
cgData.clearLogOffline(geocode);
}
- if (status == StatusCode.NO_ERROR && typeSelected == LogType.FOUND_IT && Settings.isUseTwitter()
+ if (logResult.left == StatusCode.NO_ERROR && typeSelected == LogType.FOUND_IT && Settings.isUseTwitter()
&& Settings.isTwitterLoginValid()
&& tweetCheck.isChecked() && tweetBox.getVisibility() == View.VISIBLE) {
Twitter.postTweetCache(geocode);
}
- if (status == StatusCode.NO_ERROR && typeSelected == LogType.FOUND_IT && Settings.isGCvoteLogin()) {
+ if (logResult.left == StatusCode.NO_ERROR && typeSelected == LogType.FOUND_IT && Settings.isGCvoteLogin()) {
GCVote.setRating(cache, rating);
}
- return status;
+ if (StringUtils.isNotBlank(imageUri.getPath())) {
+ final StatusCode status = GCParser.uploadLogImage(logResult.right, imageCaption, imageDescription, imageUri);
+ }
+
+ return logResult.left;
} catch (Exception e) {
Log.e("cgeovisit.postLogFn", e);
}
@@ -651,4 +691,35 @@ public class VisitCacheActivity extends AbstractLoggingActivity implements DateD
alert.create().show();
}
+ private void selectImage() {
+ Intent selectImageIntent = new Intent(this, ImageSelectActivity.class);
+ selectImageIntent.putExtra(ImageSelectActivity.EXTRAS_CAPTION, imageCaption);
+ selectImageIntent.putExtra(ImageSelectActivity.EXTRAS_DESCRIPTION, imageDescription);
+ selectImageIntent.putExtra(ImageSelectActivity.EXTRAS_URI_AS_STRING, imageUri.toString());
+
+ startActivityForResult(selectImageIntent, SELECT_IMAGE);
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (requestCode == SELECT_IMAGE) {
+ if (resultCode == RESULT_OK) {
+ imageCaption = data.getStringExtra(ImageSelectActivity.EXTRAS_CAPTION);
+ imageDescription = data.getStringExtra(ImageSelectActivity.EXTRAS_DESCRIPTION);
+ imageUri = Uri.parse(data.getStringExtra(ImageSelectActivity.EXTRAS_URI_AS_STRING));
+ // Image captured and saved to fileUri specified in the Intent
+ showToast("Image saved to:\n" + imageUri);
+ } else if (resultCode == RESULT_CANCELED) {
+ // User cancelled the image capture
+ showToast("Cancelled");
+ } else {
+ // Image capture failed, advise user
+ showToast("Unknown Error");
+ }
+ final Button imageButton = (Button) findViewById(R.id.image_btn);
+ imageButton.setText(StringUtils.isNotBlank(imageUri.getPath()) ?
+ res.getString(R.string.log_image_edit) : res.getString(R.string.log_image_attach));
+
+ }
+ }
}