aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbananeweizen <bananeweizen@gmx.de>2011-08-19 07:37:53 +0200
committerbananeweizen <bananeweizen@gmx.de>2011-08-19 07:37:53 +0200
commitc33711b5b586232d53d87783979bc04b6f36ae07 (patch)
treea25d305d7d14fef37541fc16ca045547dd4d1c60
parentb1fd19684fc84f681da836722d03ccc2751b9e10 (diff)
downloadcgeo-c33711b5b586232d53d87783979bc04b6f36ae07.zip
cgeo-c33711b5b586232d53d87783979bc04b6f36ae07.tar.gz
cgeo-c33711b5b586232d53d87783979bc04b6f36ae07.tar.bz2
first part of #232, sub menu for state selection is still missing
-rw-r--r--res/layout/init.xml21
-rw-r--r--res/values-de/strings.xml2
-rw-r--r--res/values/strings.xml2
-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
14 files changed, 129 insertions, 62 deletions
diff --git a/res/layout/init.xml b/res/layout/init.xml
index 6653886..887aef0 100644
--- a/res/layout/init.xml
+++ b/res/layout/init.xml
@@ -503,6 +503,27 @@
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
+ <CheckBox android:id="@+id/log_offline"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentLeft="true"
+ android:layout_gravity="left"
+ android:padding="1px"
+ android:gravity="center" />
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"
+ android:gravity="left"
+ android:paddingRight="3dip"
+ android:textSize="14dip"
+ android:textColor="?text_color"
+ android:text="@string/init_log_offline" />
+ </LinearLayout>
+ <LinearLayout
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal" >
<CheckBox android:id="@+id/browser"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 3e05d47..afd4e27 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -403,6 +403,7 @@
<string name="init_nav">Google Navigation verwenden</string>
<string name="init_autoload">Ausführliche Beschreibung automatisch laden</string>
<string name="init_livelist">Richtung zum Cache in der Cache-Liste anzeigen</string>
+ <string name="init_log_offline">Offline loggen (Dialog für Online-Log nicht anzeigen)</string>
<string name="init_browser">c:geo als normalen Internet-Browser tarnen</string>
<string name="init_altitude">Höhenkorrektur</string>
<string name="init_altitude_description">Falls das GPS eine falsche Höhe ermittelt, kannst du diese durch Angabe eines positiven oder negativen Wertes in Metern korrigieren.</string>
@@ -515,6 +516,7 @@
<string name="cache_menu_map_ext_short">Externe Karte</string>
<string name="cache_menu_browser">Im Browser öffnen</string>
<string name="cache_menu_visit">Besuch loggen</string>
+ <string name="cache_menu_visit_offline">Besuch offline loggen (beim Loggen keinen Dialog anzeigen, Status immer auf \'Gefunden\' setzen, nicht online senden)</string>
<string name="cache_menu_spoilers">Hinweisbild</string>
<string name="cache_menu_around">Caches im Umkreis</string>
<string name="cache_menu_event">Zum Kalender hinzufügen</string>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 95c591c..eee555e 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -412,6 +412,7 @@
<string name="init_nav">Use Google Navigation</string>
<string name="init_autoload">Auto-loading long description</string>
<string name="init_livelist">Show direction to caches in its list</string>
+ <string name="init_log_offline">When logging, always log offline (don\'t show online log screen when logging, don\'t send the log online)</string>
<string name="init_browser">Identify c:geo as standard browser</string>
<string name="init_altitude">Altitude correction</string>
<string name="init_altitude_description">If GPS is giving wrong altitude to you, you can correct with a positive or negative number. Correction is always in metres.</string>
@@ -524,6 +525,7 @@
<string name="cache_menu_map_ext_short">Ext. map</string>
<string name="cache_menu_browser">Open in browser</string>
<string name="cache_menu_visit">Log visit</string>
+ <string name="cache_menu_visit_offline">Log visit offline</string>
<string name="cache_menu_spoilers">Spoiler images</string>
<string name="cache_menu_around">Caches around</string>
<string name="cache_menu_event">Add to calendar</string>
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