aboutsummaryrefslogtreecommitdiffstats
path: root/main/src
diff options
context:
space:
mode:
Diffstat (limited to 'main/src')
-rw-r--r--main/src/cgeo/geocaching/ImageSelectActivity.java57
-rw-r--r--main/src/cgeo/geocaching/VisitCacheActivity.java45
-rw-r--r--main/src/cgeo/geocaching/compatibility/AndroidLevel8.java9
-rw-r--r--main/src/cgeo/geocaching/compatibility/AndroidLevel8Emulation.java9
-rw-r--r--main/src/cgeo/geocaching/compatibility/AndroidLevel8Interface.java4
-rw-r--r--main/src/cgeo/geocaching/compatibility/Compatibility.java6
-rw-r--r--main/src/cgeo/geocaching/connector/gc/GCConstants.java1
-rw-r--r--main/src/cgeo/geocaching/connector/gc/GCParser.java48
-rw-r--r--main/src/cgeo/geocaching/enumerations/StatusCode.java3
-rw-r--r--main/src/cgeo/geocaching/utils/HtmlUtils.java4
10 files changed, 86 insertions, 100 deletions
diff --git a/main/src/cgeo/geocaching/ImageSelectActivity.java b/main/src/cgeo/geocaching/ImageSelectActivity.java
index 572ac31..9b29c38 100644
--- a/main/src/cgeo/geocaching/ImageSelectActivity.java
+++ b/main/src/cgeo/geocaching/ImageSelectActivity.java
@@ -1,18 +1,17 @@
package cgeo.geocaching;
import cgeo.geocaching.activity.AbstractActivity;
+import cgeo.geocaching.compatibility.Compatibility;
import cgeo.geocaching.utils.Log;
import org.apache.commons.lang3.StringUtils;
-import android.annotation.SuppressLint;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
-import android.os.Environment;
import android.provider.MediaStore;
import android.provider.MediaStore.MediaColumns;
import android.view.View;
@@ -46,7 +45,7 @@ public class ImageSelectActivity extends AbstractActivity {
private Uri imageUri;
public ImageSelectActivity() {
- super("ImageSelectActivity");
+ super("c:geo-selectimage");
}
@Override
@@ -126,14 +125,9 @@ public class ImageSelectActivity extends AbstractActivity {
}
@Override
- public void onStop() {
- super.onStop();
- }
-
- @Override
protected void onSaveInstanceState(final Bundle outState) {
super.onSaveInstanceState(outState);
- currentEditTexts();
+ syncEditTexts();
outState.putString(SAVED_STATE_IMAGE_CAPTION, imageCaption);
outState.putString(SAVED_STATE_IMAGE_DESCRIPTION, imageDescription);
outState.putString(SAVED_STATE_IMAGE_URI, imageUri != null ? imageUri.getPath() : StringUtils.EMPTY);
@@ -142,7 +136,7 @@ public class ImageSelectActivity extends AbstractActivity {
public void saveImageInfo(boolean saveInfo) {
if (saveInfo) {
Intent intent = new Intent();
- currentEditTexts();
+ syncEditTexts();
intent.putExtra(EXTRAS_CAPTION, imageCaption);
intent.putExtra(EXTRAS_DESCRIPTION, imageDescription);
intent.putExtra(EXTRAS_URI_AS_STRING, imageUri.toString());
@@ -155,7 +149,7 @@ public class ImageSelectActivity extends AbstractActivity {
finish();
}
- private void currentEditTexts() {
+ private void syncEditTexts() {
imageCaption = captionView.getText().toString();
imageDescription = descriptionView.getText().toString();
}
@@ -172,10 +166,6 @@ public class ImageSelectActivity extends AbstractActivity {
}
private void selectImageFromStorage() {
- //Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
-
- //Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
- //intent.addCategory(Intent.CATEGORY_OPENABLE);
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/jpeg");
@@ -186,22 +176,12 @@ public class ImageSelectActivity extends AbstractActivity {
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_CANCELED) {
// User cancelled the image capture
- showToast("Cancelled");
+ showToast(getResources().getString(R.string.info_select_logimage_cancelled));
return;
}
if (resultCode == RESULT_OK) {
- if (requestCode == SELECT_NEW_IMAGE) {
-
- // Image captured and saved to fileUri specified in the Intent
- //TODO: Some camera program ignore the URI passed in and store it in a location given in data
- showToast("Image saved to:\n" + imageUri);//data.getData());
- if (data != null) {
- Log.d("SELECT_NEW_IMAGE data = " + data.toString());
- } else {
- Log.d("SELECT_NEW_IMAGE data is null");
- }
- } else if (requestCode == SELECT_STORED_IMAGE) {
+ if (data != null) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaColumns.DATA };
@@ -212,16 +192,18 @@ public class ImageSelectActivity extends AbstractActivity {
String filePath = cursor.getString(columnIndex);
imageUri = Uri.parse(filePath);
cursor.close();
- if (data != null) {
- Log.d("SELECT_STORED_IMAGE data = " + data.toString());
- } else {
- Log.d("SELECT_STORED_IMAGE data is null");
- }
- // imageUri = data.getData();
+
+ Log.d("SELECT IMAGE data = " + data.toString());
+ } else {
+ Log.d("SELECT IMAGE data is null");
+ }
+
+ if (requestCode == SELECT_NEW_IMAGE) {
+ showToast(getResources().getString(R.string.info_stored_image) + "\n" + imageUri);
}
} else {
// Image capture failed, advise user
- showToast("Unknown Error");
+ showToast(getResources().getString(R.string.err_aquire_image_failed));
return;
}
@@ -231,7 +213,7 @@ public class ImageSelectActivity extends AbstractActivity {
private void loadImagePreview()
{
if (!new File(imageUri.getPath()).exists()) {
- Log.i("loading Image Preview with nonexistant file");
+ Log.i("Image does not exist");
return;
}
@@ -248,14 +230,11 @@ public class ImageSelectActivity extends AbstractActivity {
}
/** Create a File for saving an image or video */
- @SuppressLint("NewApi")
- // TODO: Get rid of that suppress
private static File getOutputImageFile() {
// To be safe, you should check that the SDCard is mounted
// using Environment.getExternalStorageState() before doing this.
- File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
- Environment.DIRECTORY_PICTURES), "cgeo");
+ File mediaStorageDir = new File(Compatibility.getExternalPictureDir(), "cgeo");
// This location works best if you want the created images to be shared
// between applications and persist after your app has been uninstalled.
diff --git a/main/src/cgeo/geocaching/VisitCacheActivity.java b/main/src/cgeo/geocaching/VisitCacheActivity.java
index b2c6625..43c439b 100644
--- a/main/src/cgeo/geocaching/VisitCacheActivity.java
+++ b/main/src/cgeo/geocaching/VisitCacheActivity.java
@@ -324,6 +324,7 @@ public class VisitCacheActivity extends AbstractLoggingActivity implements DateD
}
}
updatePostButtonText();
+ setImageButtonText();
enablePostButton(false);
final Button typeButton = (Button) findViewById(R.id.type);
@@ -412,6 +413,8 @@ public class VisitCacheActivity extends AbstractLoggingActivity implements DateD
final EditText logView = (EditText) findViewById(R.id.log);
logView.setText(StringUtils.EMPTY);
+ setImageButtonText();
+
showToast(res.getString(R.string.info_log_cleared));
}
@@ -480,7 +483,8 @@ public class VisitCacheActivity extends AbstractLoggingActivity implements DateD
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");
+ outState.putString(SAVED_STATE_IMAGE_CAPTION, imageCaption);
+ outState.putString(SAVED_STATE_IMAGE_DESCRIPTION, imageDescription);
}
@Override
@@ -552,25 +556,23 @@ public class VisitCacheActivity extends AbstractLoggingActivity implements DateD
}
public StatusCode postLogFn(String log) {
+
+ StatusCode result = StatusCode.LOG_POST_ERROR;
+
try {
- // 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);
+ result = logResult.left;
+
if (logResult.left == StatusCode.NO_ERROR) {
final LogEntry logNow = new LogEntry(date, typeSelected, log);
cache.getLogs().add(0, logNow);
- if (typeSelected == LogType.FOUND_IT) {
+ if (typeSelected == LogType.FOUND_IT || typeSelected == LogType.ATTENDED) {
cache.setFound(true);
}
@@ -591,11 +593,11 @@ public class VisitCacheActivity extends AbstractLoggingActivity implements DateD
GCVote.setRating(cache, rating);
}
- if (StringUtils.isNotBlank(imageUri.getPath())) {
- final StatusCode status = GCParser.uploadLogImage(logResult.right, imageCaption, imageDescription, imageUri);
+ if (logResult.left == StatusCode.NO_ERROR && StringUtils.isNotBlank(imageUri.getPath())) {
+ result = GCParser.uploadLogImage(logResult.right, imageCaption, imageDescription, imageUri);
}
- return logResult.left;
+ return result;
} catch (Exception e) {
Log.e("cgeovisit.postLogFn", e);
}
@@ -707,19 +709,18 @@ public class VisitCacheActivity extends AbstractLoggingActivity implements DateD
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 {
+ } else if (resultCode != RESULT_CANCELED) {
// Image capture failed, advise user
- showToast("Unknown Error");
+ showToast(getResources().getString(R.string.err_select_logimage_failed));
}
- 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));
+ setImageButtonText();
}
}
+
+ private void setImageButtonText() {
+ 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));
+ }
}
diff --git a/main/src/cgeo/geocaching/compatibility/AndroidLevel8.java b/main/src/cgeo/geocaching/compatibility/AndroidLevel8.java
index a388adb..e250934 100644
--- a/main/src/cgeo/geocaching/compatibility/AndroidLevel8.java
+++ b/main/src/cgeo/geocaching/compatibility/AndroidLevel8.java
@@ -5,9 +5,12 @@ import cgeo.geocaching.utils.Log;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.backup.BackupManager;
+import android.os.Environment;
import android.view.Display;
import android.view.Surface;
+import java.io.File;
+
@TargetApi(8)
public class AndroidLevel8 implements AndroidLevel8Interface {
@@ -41,4 +44,10 @@ public class AndroidLevel8 implements AndroidLevel8Interface {
return 0;
}
+
+ @Override
+ public File getExternalPictureDir() {
+ return Environment.getExternalStoragePublicDirectory(
+ Environment.DIRECTORY_PICTURES);
+ }
}
diff --git a/main/src/cgeo/geocaching/compatibility/AndroidLevel8Emulation.java b/main/src/cgeo/geocaching/compatibility/AndroidLevel8Emulation.java
index 197993d..996c527 100644
--- a/main/src/cgeo/geocaching/compatibility/AndroidLevel8Emulation.java
+++ b/main/src/cgeo/geocaching/compatibility/AndroidLevel8Emulation.java
@@ -3,8 +3,11 @@ package cgeo.geocaching.compatibility;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.res.Configuration;
+import android.os.Environment;
import android.view.Display;
+import java.io.File;
+
@TargetApi(value = 7)
public class AndroidLevel8Emulation implements AndroidLevel8Interface {
@@ -27,4 +30,10 @@ public class AndroidLevel8Emulation implements AndroidLevel8Interface {
}
return 0;
}
+
+ @Override
+ public File getExternalPictureDir() {
+ // Use externalStorage/Pictures as default
+ return new File(Environment.getExternalStorageDirectory(), "Pictures");
+ }
}
diff --git a/main/src/cgeo/geocaching/compatibility/AndroidLevel8Interface.java b/main/src/cgeo/geocaching/compatibility/AndroidLevel8Interface.java
index 761c23a..75998aa 100644
--- a/main/src/cgeo/geocaching/compatibility/AndroidLevel8Interface.java
+++ b/main/src/cgeo/geocaching/compatibility/AndroidLevel8Interface.java
@@ -2,9 +2,13 @@ package cgeo.geocaching.compatibility;
import android.app.Activity;
+import java.io.File;
+
public interface AndroidLevel8Interface {
public int getRotation(final Activity activity);
public void dataChanged(final String name);
public int getRotationOffset(final Activity activity);
+
+ public File getExternalPictureDir();
} \ No newline at end of file
diff --git a/main/src/cgeo/geocaching/compatibility/Compatibility.java b/main/src/cgeo/geocaching/compatibility/Compatibility.java
index 05a3331..d846bda 100644
--- a/main/src/cgeo/geocaching/compatibility/Compatibility.java
+++ b/main/src/cgeo/geocaching/compatibility/Compatibility.java
@@ -13,6 +13,8 @@ import android.os.Build;
import android.text.InputType;
import android.widget.EditText;
+import java.io.File;
+
public final class Compatibility {
private final static int sdkVersion = Build.VERSION.SDK_INT;
@@ -108,4 +110,8 @@ public final class Compatibility {
return level13.getDisplaySize();
}
+ public static File getExternalPictureDir() {
+ return level8.getExternalPictureDir();
+ }
+
}
diff --git a/main/src/cgeo/geocaching/connector/gc/GCConstants.java b/main/src/cgeo/geocaching/connector/gc/GCConstants.java
index 8660ec4..295ffb8 100644
--- a/main/src/cgeo/geocaching/connector/gc/GCConstants.java
+++ b/main/src/cgeo/geocaching/connector/gc/GCConstants.java
@@ -149,6 +149,7 @@ public final class GCConstants {
public final static Pattern PATTERN_MAINTENANCE = Pattern.compile("<span id=\"ctl00_ContentBody_LogBookPanel1_lbConfirm\"[^>]*>([^<]*<font[^>]*>)?([^<]+)(</font>[^<]*)?</span>", Pattern.CASE_INSENSITIVE);
public final static Pattern PATTERN_OK1 = Pattern.compile("<h2[^>]*>[^<]*<span id=\"ctl00_ContentBody_lbHeading\"[^>]*>[^<]*</span>[^<]*</h2>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
public final static Pattern PATTERN_OK2 = Pattern.compile("<div id=[\"|']ctl00_ContentBody_LogBookPanel1_ViewLogPanel[\"|']>", Pattern.CASE_INSENSITIVE);
+ public final static Pattern PATTERN_OK_IMAGEUPLOAD = Pattern.compile("<div id=[\"|']ctl00_ContentBody_ImageUploadControl1_uxUploadDonePanel[\"|']>", Pattern.CASE_INSENSITIVE);
public final static Pattern PATTERN_VIEWSTATEFIELDCOUNT = Pattern.compile("id=\"__VIEWSTATEFIELDCOUNT\"[^(value)]+value=\"(\\d+)\"[^>]+>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
public final static Pattern PATTERN_VIEWSTATES = Pattern.compile("id=\"__VIEWSTATE(\\d*)\"[^(value)]+value=\"([^\"]+)\"[^>]+>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
public final static Pattern PATTERN_USERTOKEN = Pattern.compile("userToken\\s*=\\s*'([^']+)'");
diff --git a/main/src/cgeo/geocaching/connector/gc/GCParser.java b/main/src/cgeo/geocaching/connector/gc/GCParser.java
index 23102c9..494e040 100644
--- a/main/src/cgeo/geocaching/connector/gc/GCParser.java
+++ b/main/src/cgeo/geocaching/connector/gc/GCParser.java
@@ -1073,7 +1073,7 @@ public abstract class GCParser {
if (loginState == StatusCode.NO_ERROR) {
page = Network.getResponseData(Network.getRequest(uri));
} else {
- Log.e("xxx upload: No login (error: " + loginState + ')');
+ Log.e("Image upload: No login (error: " + loginState + ')');
return StatusCode.NOT_LOGGED_IN;
}
}
@@ -1091,42 +1091,18 @@ public abstract class GCParser {
final File image = new File(imageUri.getPath());
final String response = Network.getResponseData(Network.postRequest(uri, uploadParams, "ctl00$ContentBody$ImageUploadControl1$uxFileUpload", "image/jpeg", image));
- //TODO: check response and return correct error codes
-
- /*
- * String page = Login.postRequestLogged(uri, params);
- * if (!Login.getLoginStatus(page)) {
- * Log.e("GCParser.postLogTrackable: Can not log in geocaching");
- * return StatusCode.NOT_LOGGED_IN;
- * }
- *
- * try {
- *
- * final MatcherWrapper matcherOk = new MatcherWrapper(GCConstants.PATTERN_OK1, page);
- * if (matcherOk.find()) {
- * Log.i("Log successfully posted to cache #" + cacheid);
- *
- * if (geocode != null) {
- * cgData.saveVisitDate(geocode);
- * }
- *
- * Login.getLoginStatus(page);
- * // the log-successful-page contains still the old value
- * if (Login.getActualCachesFound() >= 0) {
- * Login.setActualCachesFound(Login.getActualCachesFound() + 1);
- * }
- *
- * final String logID = BaseUtils.getMatch(page, GCConstants.PATTERN_LOG_IMAGE_UPLOAD, "");
- *
- * return StatusCode.NO_ERROR;
- * }
- * } catch (Exception e) {
- * Log.e("GCParser.postLog.check", e);
- * }
- */
- Log.e("GCParser.postLog: Failed to post log because of unknown error");
- return StatusCode.LOG_POST_ERROR;
+ MatcherWrapper matcherOK = new MatcherWrapper(GCConstants.PATTERN_OK_IMAGEUPLOAD, response);
+
+ if (matcherOK.find()) {
+ Log.i("Logimage successfully uploaded.");
+
+ return StatusCode.NO_ERROR;
+ }
+ Log.e("GCParser.uploadLogIMage: Failed to upload image because of unknown error");
+
+ return StatusCode.LOGIMAGE_POST_ERROR;
}
+
public static StatusCode postLogTrackable(final String tbid, final String trackingCode, final String[] viewstates,
final LogType logType, final int year, final int month, final int day, final String log) {
if (Login.isEmpty(viewstates)) {
diff --git a/main/src/cgeo/geocaching/enumerations/StatusCode.java b/main/src/cgeo/geocaching/enumerations/StatusCode.java
index dc62225..102b9e9 100644
--- a/main/src/cgeo/geocaching/enumerations/StatusCode.java
+++ b/main/src/cgeo/geocaching/enumerations/StatusCode.java
@@ -23,7 +23,8 @@ public enum StatusCode {
LOG_POST_ERROR(R.string.err_log_post_failed),
NO_LOG_TEXT(R.string.warn_log_text_fill),
NO_DATA_FROM_SERVER(R.string.err_log_failed_server),
- NOT_LOGGED_IN(R.string.init_login_popup_failed);
+ NOT_LOGGED_IN(R.string.init_login_popup_failed),
+ LOGIMAGE_POST_ERROR(R.string.err_logimage_post_failed);
final private int error_string;
diff --git a/main/src/cgeo/geocaching/utils/HtmlUtils.java b/main/src/cgeo/geocaching/utils/HtmlUtils.java
index 9b627ac..30aa19b 100644
--- a/main/src/cgeo/geocaching/utils/HtmlUtils.java
+++ b/main/src/cgeo/geocaching/utils/HtmlUtils.java
@@ -54,8 +54,8 @@ public class HtmlUtils {
}
/**
- * Convert any non-Latin characters into their HTML escaped equivalents
- *
+ * Convert any non-Latin characters into HTML unicode entities
+ *
* @param input
* String
* @return output String