aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cgeo/geocaching/activity/AbstractActivity.java3
-rw-r--r--src/cgeo/geocaching/activity/AbstractListActivity.java4
-rw-r--r--src/cgeo/geocaching/activity/IAbstractActivity.java6
-rw-r--r--src/cgeo/geocaching/cgCache.java37
-rw-r--r--src/cgeo/geocaching/cgFileList.java4
-rw-r--r--src/cgeo/geocaching/cgSettings.java15
-rw-r--r--src/cgeo/geocaching/cgeocaches.java17
-rw-r--r--src/cgeo/geocaching/cgeodetail.java10
-rw-r--r--src/cgeo/geocaching/cgeoinit.java11
-rw-r--r--src/cgeo/geocaching/cgeopopup.java15
-rw-r--r--src/cgeo/geocaching/cgeovisit.java44
11 files changed, 104 insertions, 62 deletions
diff --git a/src/cgeo/geocaching/activity/AbstractActivity.java b/src/cgeo/geocaching/activity/AbstractActivity.java
index b42756a..7368842 100644
--- a/src/cgeo/geocaching/activity/AbstractActivity.java
+++ b/src/cgeo/geocaching/activity/AbstractActivity.java
@@ -71,4 +71,7 @@ public abstract class AbstractActivity extends Activity implements IAbstractActi
base = new cgBase(app, settings, prefs);
}
+ final public cgSettings getSettings() {
+ return settings;
+ }
}
diff --git a/src/cgeo/geocaching/activity/AbstractListActivity.java b/src/cgeo/geocaching/activity/AbstractListActivity.java
index 17e81d2..12fea96 100644
--- a/src/cgeo/geocaching/activity/AbstractListActivity.java
+++ b/src/cgeo/geocaching/activity/AbstractListActivity.java
@@ -71,4 +71,8 @@ public abstract class AbstractListActivity extends ListActivity implements
final public void setTitle(final String title) {
ActivityMixin.setTitle(this, title);
}
+
+ final public cgSettings getSettings() {
+ return settings;
+ }
}
diff --git a/src/cgeo/geocaching/activity/IAbstractActivity.java b/src/cgeo/geocaching/activity/IAbstractActivity.java
index 6e591b7..390262c 100644
--- a/src/cgeo/geocaching/activity/IAbstractActivity.java
+++ b/src/cgeo/geocaching/activity/IAbstractActivity.java
@@ -1,6 +1,7 @@
package cgeo.geocaching.activity;
import android.view.View;
+import cgeo.geocaching.cgSettings;
public interface IAbstractActivity {
public void goHome(View view);
@@ -19,4 +20,9 @@ public interface IAbstractActivity {
public void setTitle(final String title);
+ /**
+ * TODO: remove after settings are a singleton
+ */
+ public cgSettings getSettings();
+
}
diff --git a/src/cgeo/geocaching/cgCache.java b/src/cgeo/geocaching/cgCache.java
index 06adbb1..f69f286 100644
--- a/src/cgeo/geocaching/cgCache.java
+++ b/src/cgeo/geocaching/cgCache.java
@@ -1,13 +1,18 @@
package cgeo.geocaching;
import java.util.ArrayList;
+import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import android.app.Activity;
+import android.content.Intent;
+import android.content.res.Resources;
import android.text.Spannable;
import android.util.Log;
+import cgeo.geocaching.activity.IAbstractActivity;
public class cgCache {
@@ -270,5 +275,37 @@ public class cgCache {
return (type.equalsIgnoreCase("event") || type.equalsIgnoreCase("mega") || type.equalsIgnoreCase("cito"));
}
+ public boolean logVisit(IAbstractActivity fromActivity) {
+ if (cacheid == null || cacheid.length() == 0) {
+ fromActivity.showToast(((Activity)fromActivity).getResources().getString(R.string.err_cannot_log_visit));
+ return true;
+ }
+ if (fromActivity.getSettings().getLogOffline()) {
+ logOffline(fromActivity, "", Calendar.getInstance());
+ return true;
+ }
+
+ Intent logVisitIntent = new Intent((Activity)fromActivity, cgeovisit.class);
+ logVisitIntent.putExtra(cgeovisit.EXTRAS_ID, cacheid);
+ logVisitIntent.putExtra(cgeovisit.EXTRAS_GEOCODE, geocode.toUpperCase());
+ logVisitIntent.putExtra(cgeovisit.EXTRAS_FOUND, found);
+
+ ((Activity)fromActivity).startActivity(logVisitIntent);
+
+ return true;
+ }
+
+ void logOffline(final IAbstractActivity fromActivity, final String log, Calendar date) {
+ cgeoapplication app = (cgeoapplication)((Activity)fromActivity).getApplication();
+ final boolean status = app.saveLogOffline(geocode, date.getTime(), cgBase.LOG_FOUND_IT, log);
+
+ Resources res = ((Activity)fromActivity).getResources();
+ if (status) {
+ fromActivity.showToast(res.getString(R.string.info_log_saved));
+ app.saveVisitDate(geocode);
+ } else {
+ fromActivity.showToast(res.getString(R.string.err_log_post_failed));
+ }
+ }
}
diff --git a/src/cgeo/geocaching/cgFileList.java b/src/cgeo/geocaching/cgFileList.java
index 2a5ea87..3536ba6 100644
--- a/src/cgeo/geocaching/cgFileList.java
+++ b/src/cgeo/geocaching/cgFileList.java
@@ -110,10 +110,6 @@ public abstract class cgFileList<T extends ArrayAdapter<File>> extends AbstractL
getSettings().load();
}
- final protected cgSettings getSettings() {
- return settings;
- }
-
protected abstract T getAdapter(ArrayList<File> files);
private void setAdapter() {
diff --git a/src/cgeo/geocaching/cgSettings.java b/src/cgeo/geocaching/cgSettings.java
index f68201f..87eacdd 100644
--- a/src/cgeo/geocaching/cgSettings.java
+++ b/src/cgeo/geocaching/cgSettings.java
@@ -54,6 +54,7 @@ public class cgSettings {
private static final String KEY_PASSWORD = "password";
private static final String KEY_USERNAME = "username";
private static final String KEY_COORD_INPUT_FORMAT = "coordinputformat";
+ private static final String KEY_LOG_OFFLINE = "log_offline";
private interface PrefRunnable {
void edit(final Editor edit);
@@ -580,5 +581,19 @@ public class cgSettings {
runnable.edit(prefsEdit);
return prefsEdit.commit();
}
+
+ void setLogOffline(final boolean offline) {
+ editSettings(new PrefRunnable() {
+
+ @Override
+ public void edit(Editor edit) {
+ edit.putBoolean(KEY_LOG_OFFLINE, offline);
+ }
+ });
+ }
+
+ public boolean getLogOffline() {
+ return prefs.getBoolean(KEY_LOG_OFFLINE, false);
+ }
}
diff --git a/src/cgeo/geocaching/cgeocaches.java b/src/cgeo/geocaching/cgeocaches.java
index c0b00da..6040bdd 100644
--- a/src/cgeo/geocaching/cgeocaches.java
+++ b/src/cgeo/geocaching/cgeocaches.java
@@ -1091,7 +1091,8 @@ public class cgeocaches extends AbstractListActivity {
menu.add(0, MENU_COMPASS, 0, res.getString(R.string.cache_menu_compass));
SubMenu subMenu = menu.addSubMenu(1, 0, 0, res.getString(R.string.cache_menu_navigate)).setIcon(android.R.drawable.ic_menu_more);
NavigationAppFactory.addMenuItems(subMenu, this, res);
- menu.add(0, MENU_LOG_VISIT, 0, res.getString(R.string.cache_menu_visit));
+ String label = settings.getLogOffline()? res.getString(R.string.cache_menu_visit_offline) : res.getString(R.string.cache_menu_visit);
+ menu.add(0, MENU_LOG_VISIT, 0, label);
menu.add(0, MENU_CACHE_DETAILS, 0, res.getString(R.string.cache_menu_details));
}
if (cache.reason >= 1) {
@@ -1159,19 +1160,7 @@ public class cgeocaches extends AbstractListActivity {
return true;
} else if (id == MENU_LOG_VISIT) {
- if (cache.cacheid == null || cache.cacheid.length() == 0) {
- showToast(res.getString(R.string.err_cannot_log_visit));
- return true;
- }
-
- Intent logVisitIntent = new Intent(this, cgeovisit.class);
- logVisitIntent.putExtra("id", cache.cacheid);
- logVisitIntent.putExtra("geocode", cache.geocode.toUpperCase());
- logVisitIntent.putExtra("type", cache.type.toLowerCase());
-
- startActivity(logVisitIntent);
-
- return true;
+ return cache.logVisit(this);
} else if (id == MENU_CACHE_DETAILS) {
Intent cachesIntent = new Intent(this, cgeodetail.class);
cachesIntent.putExtra("geocode", cache.geocode.toUpperCase());
diff --git a/src/cgeo/geocaching/cgeodetail.java b/src/cgeo/geocaching/cgeodetail.java
index b3de304..1eb1df5 100644
--- a/src/cgeo/geocaching/cgeodetail.java
+++ b/src/cgeo/geocaching/cgeodetail.java
@@ -471,7 +471,8 @@ public class cgeodetail extends AbstractActivity {
menu.add(1, 11, 0, res.getString(R.string.cache_menu_event)).setIcon(android.R.drawable.ic_menu_agenda); // add event to calendar
}
if (settings.isLogin()) {
- menu.add(1, 3, 0, res.getString(R.string.cache_menu_visit)).setIcon(android.R.drawable.ic_menu_agenda); // log visit
+ String label = settings.getLogOffline()? res.getString(R.string.cache_menu_visit_offline) : res.getString(R.string.cache_menu_visit);
+ menu.add(1, 3, 0, label).setIcon(android.R.drawable.ic_menu_agenda); // log visit
}
if (cache != null && cache.spoilers != null && cache.spoilers.size() > 0) {
@@ -1561,12 +1562,7 @@ public class cgeodetail extends AbstractActivity {
}
private void logVisit() {
- Intent logVisitIntent = new Intent(this, cgeovisit.class);
- logVisitIntent.putExtra("id", cache.cacheid);
- logVisitIntent.putExtra("geocode", cache.geocode.toUpperCase());
- logVisitIntent.putExtra("type", cache.type.toLowerCase());
- logVisitIntent.putExtra("found", cache.found);
- startActivity(logVisitIntent);
+ cache.logVisit(this);
}
private void showSpoilers() {
diff --git a/src/cgeo/geocaching/cgeoinit.java b/src/cgeo/geocaching/cgeoinit.java
index e58b9ae..5b78dab 100644
--- a/src/cgeo/geocaching/cgeoinit.java
+++ b/src/cgeo/geocaching/cgeoinit.java
@@ -398,6 +398,17 @@ public class cgeoinit extends AbstractActivity {
}
gnavButton.setOnClickListener(new cgeoChangeGNav());
+ final CheckBox logOffline = (CheckBox) findViewById(R.id.log_offline);
+ logOffline.setChecked(settings.getLogOffline());
+ logOffline.setOnClickListener(new View.OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ settings.setLogOffline(!settings.getLogOffline());
+ logOffline.setChecked(settings.getLogOffline());
+ }
+ });
+
CheckBox browserButton = (CheckBox) findViewById(R.id.browser);
if (prefs.getInt("asbrowser", 1) == 0) {
browserButton.setChecked(false);
diff --git a/src/cgeo/geocaching/cgeopopup.java b/src/cgeo/geocaching/cgeopopup.java
index 868cc9a..55c3498 100644
--- a/src/cgeo/geocaching/cgeopopup.java
+++ b/src/cgeo/geocaching/cgeopopup.java
@@ -134,7 +134,8 @@ public class cgeopopup extends AbstractActivity {
SubMenu subMenu = menu.addSubMenu(1, 0, 0, res.getString(R.string.cache_menu_navigate)).setIcon(android.R.drawable.ic_menu_more);
NavigationAppFactory.addMenuItems(subMenu, this, res);
- menu.add(0, 6, 0, res.getString(R.string.cache_menu_visit)).setIcon(android.R.drawable.ic_menu_agenda); // log visit
+ String label = settings.getLogOffline()? res.getString(R.string.cache_menu_visit_offline) : res.getString(R.string.cache_menu_visit);
+ menu.add(0, 6, 0, label).setIcon(android.R.drawable.ic_menu_agenda); // log visit
menu.add(0, 5, 0, res.getString(R.string.cache_menu_around)).setIcon(android.R.drawable.ic_menu_rotate); // caches around
menu.add(0, 7, 0, res.getString(R.string.cache_menu_browser)).setIcon(android.R.drawable.ic_menu_info_details); // browser
@@ -179,17 +180,7 @@ public class cgeopopup extends AbstractActivity {
cachesAround();
return true;
} else if (menuItem == 6) {
- if (cache.cacheid == null || cache.cacheid.length() == 0) {
- showToast(res.getString(R.string.err_cannot_log_visit));
- return false;
- }
-
- Intent logVisitIntent = new Intent(this, cgeovisit.class);
- logVisitIntent.putExtra("id", cache.cacheid);
- logVisitIntent.putExtra("geocode", cache.geocode.toUpperCase());
- logVisitIntent.putExtra("type", cache.type.toLowerCase());
- startActivity(logVisitIntent);
-
+ cache.logVisit(this);
finish();
return true;
diff --git a/src/cgeo/geocaching/cgeovisit.java b/src/cgeo/geocaching/cgeovisit.java
index 8b6effd..9a5c1a0 100644
--- a/src/cgeo/geocaching/cgeovisit.java
+++ b/src/cgeo/geocaching/cgeovisit.java
@@ -28,6 +28,11 @@ import android.widget.TextView;
import cgeo.geocaching.LogTemplateProvider.LogTemplate;
public class cgeovisit extends cgLogForm {
+ static final String EXTRAS_FOUND = "found";
+ static final String EXTRAS_TEXT = "text";
+ static final String EXTRAS_GEOCODE = "geocode";
+ static final String EXTRAS_ID = "id";
+
private static final int MENU_SIGNATURE = 1;
private static final int SUBMENU_VOTE = 2;
@@ -121,7 +126,7 @@ public class cgeovisit extends cgLogForm {
public void onClick(View view) {
final Intent trackablesIntent = new Intent(cgeovisit.this, cgeotrackable.class);
- trackablesIntent.putExtra("geocode", tbCode);
+ trackablesIntent.putExtra(EXTRAS_GEOCODE, tbCode);
startActivity(trackablesIntent);
}
});
@@ -223,10 +228,10 @@ public class cgeovisit extends cgLogForm {
// get parameters
Bundle extras = getIntent().getExtras();
if (extras != null) {
- cacheid = extras.getString("id");
- geocode = extras.getString("geocode");
- text = extras.getString("text");
- alreadyFound = extras.getBoolean("found");
+ cacheid = extras.getString(EXTRAS_ID);
+ geocode = extras.getString(EXTRAS_GEOCODE);
+ text = extras.getString(EXTRAS_TEXT);
+ alreadyFound = extras.getBoolean(EXTRAS_FOUND);
}
if ((cacheid == null || cacheid.length() == 0) && geocode != null && geocode.length() > 0) {
@@ -591,7 +596,14 @@ public class cgeovisit extends cgLogForm {
if (save == null) {
save = (Button) findViewById(R.id.save);
}
- save.setOnClickListener(new saveListener());
+ save.setOnClickListener(new View.OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ String log = ((EditText) findViewById(R.id.log)).getText().toString();
+ cache.logOffline(cgeovisit.this, log, date);
+ }
+ });
if (clear == null) {
clear = (Button) findViewById(R.id.clear);
@@ -673,25 +685,6 @@ public class cgeovisit extends cgLogForm {
}
}
- private class saveListener implements View.OnClickListener {
-
- public void onClick(View arg0) {
- String log = ((EditText) findViewById(R.id.log)).getText().toString();
- final boolean status = app.saveLogOffline(geocode, date.getTime(), typeSelected, log);
- if (save == null) {
- save = (Button) findViewById(R.id.save);
- }
- save.setOnClickListener(new saveListener());
-
- if (status) {
- showToast(res.getString(R.string.info_log_saved));
- app.saveVisitDate(geocode);
- } else {
- showToast(res.getString(R.string.err_log_post_failed));
- }
- }
- }
-
private class clearListener implements View.OnClickListener {
public void onClick(View arg0) {
@@ -862,4 +855,5 @@ public class cgeovisit extends cgLogForm {
return 1000;
}
+
} \ No newline at end of file