diff options
| author | bananeweizen <bananeweizen@gmx.de> | 2011-08-19 07:37:53 +0200 |
|---|---|---|
| committer | bananeweizen <bananeweizen@gmx.de> | 2011-08-19 07:37:53 +0200 |
| commit | c33711b5b586232d53d87783979bc04b6f36ae07 (patch) | |
| tree | a25d305d7d14fef37541fc16ca045547dd4d1c60 | |
| parent | b1fd19684fc84f681da836722d03ccc2751b9e10 (diff) | |
| download | cgeo-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.xml | 21 | ||||
| -rw-r--r-- | res/values-de/strings.xml | 2 | ||||
| -rw-r--r-- | res/values/strings.xml | 2 | ||||
| -rw-r--r-- | src/cgeo/geocaching/activity/AbstractActivity.java | 3 | ||||
| -rw-r--r-- | src/cgeo/geocaching/activity/AbstractListActivity.java | 4 | ||||
| -rw-r--r-- | src/cgeo/geocaching/activity/IAbstractActivity.java | 6 | ||||
| -rw-r--r-- | src/cgeo/geocaching/cgCache.java | 37 | ||||
| -rw-r--r-- | src/cgeo/geocaching/cgFileList.java | 4 | ||||
| -rw-r--r-- | src/cgeo/geocaching/cgSettings.java | 15 | ||||
| -rw-r--r-- | src/cgeo/geocaching/cgeocaches.java | 17 | ||||
| -rw-r--r-- | src/cgeo/geocaching/cgeodetail.java | 10 | ||||
| -rw-r--r-- | src/cgeo/geocaching/cgeoinit.java | 11 | ||||
| -rw-r--r-- | src/cgeo/geocaching/cgeopopup.java | 15 | ||||
| -rw-r--r-- | src/cgeo/geocaching/cgeovisit.java | 44 |
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 |
