aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBananeweizen <bananeweizen@gmx.de>2012-06-03 11:36:29 +0200
committerBananeweizen <bananeweizen@gmx.de>2012-06-03 11:36:29 +0200
commit661fe873ef6bbdaa69b6d164c15bb6657d31a7a0 (patch)
tree59bdbb1c7d794b75ebc4ff8720aaff57ab17a057
parentd384d2cd3f45a1559ae721a7fd30333fd7d1e61b (diff)
downloadcgeo-661fe873ef6bbdaa69b6d164c15bb6657d31a7a0.zip
cgeo-661fe873ef6bbdaa69b6d164c15bb6657d31a7a0.tar.gz
cgeo-661fe873ef6bbdaa69b6d164c15bb6657d31a7a0.tar.bz2
refactoring: extract logging UI to its own class
* use alert builder instead of sub menus
-rw-r--r--main/src/cgeo/geocaching/AbstractPopupActivity.java32
-rw-r--r--main/src/cgeo/geocaching/CacheDetailActivity.java12
-rw-r--r--main/src/cgeo/geocaching/activity/AbstractActivity.java6
-rw-r--r--main/src/cgeo/geocaching/activity/AbstractListActivity.java6
-rw-r--r--main/src/cgeo/geocaching/activity/ActivityMixin.java29
-rw-r--r--main/src/cgeo/geocaching/activity/IAbstractActivity.java2
-rw-r--r--main/src/cgeo/geocaching/cgCache.java13
-rw-r--r--main/src/cgeo/geocaching/cgeocaches.java10
-rw-r--r--main/src/cgeo/geocaching/ui/AbstractUIFactory.java9
-rw-r--r--main/src/cgeo/geocaching/ui/LoggingUI.java104
10 files changed, 140 insertions, 83 deletions
diff --git a/main/src/cgeo/geocaching/AbstractPopupActivity.java b/main/src/cgeo/geocaching/AbstractPopupActivity.java
index 819aa68..a119949 100644
--- a/main/src/cgeo/geocaching/AbstractPopupActivity.java
+++ b/main/src/cgeo/geocaching/AbstractPopupActivity.java
@@ -4,12 +4,12 @@ import cgeo.geocaching.activity.AbstractActivity;
import cgeo.geocaching.apps.cache.navi.NavigationAppFactory;
import cgeo.geocaching.enumerations.CacheSize;
import cgeo.geocaching.enumerations.LoadFlags;
-import cgeo.geocaching.enumerations.LogType;
import cgeo.geocaching.gcvote.GCVote;
import cgeo.geocaching.gcvote.GCVoteRating;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.geopoint.Units;
import cgeo.geocaching.ui.CacheDetailsCreator;
+import cgeo.geocaching.ui.LoggingUI;
import cgeo.geocaching.utils.GeoDirHandler;
import cgeo.geocaching.utils.Log;
@@ -123,15 +123,6 @@ public abstract class AbstractPopupActivity extends AbstractActivity {
geocode = cache.getGeocode().toUpperCase();
}
- private void logOffline(int menuItem) {
- cache.logOffline(this, LogType.getById(menuItem - MENU_LOG_VISIT_OFFLINE));
- }
-
- private void logVisit() {
- cache.logVisit(this);
- finish();
- }
-
private void showInBrowser() {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.geocaching.com/seek/cache_details.aspx?wp=" + cache.getGeocode())));
}
@@ -173,7 +164,7 @@ public abstract class AbstractPopupActivity extends AbstractActivity {
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, MENU_DEFAULT_NAVIGATION, 0, NavigationAppFactory.getDefaultNavigationApplication().getName()).setIcon(R.drawable.ic_menu_compass); // default navigation tool
menu.add(0, MENU_NAVIGATION, 0, res.getString(R.string.cache_menu_navigate)).setIcon(R.drawable.ic_menu_mapmode);
- addVisitMenu(menu, cache);
+ LoggingUI.addMenuItems(menu, cache);
menu.add(0, MENU_CACHES_AROUND, 0, res.getString(R.string.cache_menu_around)).setIcon(R.drawable.ic_menu_rotate); // caches around
menu.add(0, MENU_SHOW_IN_BROWSER, 0, res.getString(R.string.cache_menu_browser)).setIcon(R.drawable.ic_menu_info_details); // browser
@@ -187,21 +178,20 @@ public abstract class AbstractPopupActivity extends AbstractActivity {
switch (menuItem) {
case MENU_DEFAULT_NAVIGATION:
navigateTo();
- break;
+ return true;
case MENU_NAVIGATION:
showNavigationMenu();
- break;
+ return true;
case MENU_CACHES_AROUND:
cachesAround();
- break;
- case MENU_LOG_VISIT:
- logVisit();
- break;
+ return true;
case MENU_SHOW_IN_BROWSER:
showInBrowser();
- break;
- default:
- logOffline(menuItem);
+ return true;
+ }
+
+ if (LoggingUI.onMenuItemSelected(item, this, cache)) {
+ return true;
}
return true;
@@ -223,7 +213,7 @@ public abstract class AbstractPopupActivity extends AbstractActivity {
menu.findItem(MENU_NAVIGATION).setVisible(visible);
menu.findItem(MENU_CACHES_AROUND).setVisible(visible);
- menu.findItem(MENU_LOG_VISIT).setEnabled(Settings.isLogin());
+ LoggingUI.onPrepareOptionsMenu(menu);
} catch (Exception e) {
// nothing
}
diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java
index f897ffe..b5a22c0 100644
--- a/main/src/cgeo/geocaching/CacheDetailActivity.java
+++ b/main/src/cgeo/geocaching/CacheDetailActivity.java
@@ -20,6 +20,7 @@ import cgeo.geocaching.network.Parameters;
import cgeo.geocaching.ui.CacheDetailsCreator;
import cgeo.geocaching.ui.DecryptTextClickListener;
import cgeo.geocaching.ui.Formatter;
+import cgeo.geocaching.ui.LoggingUI;
import cgeo.geocaching.utils.BaseUtils;
import cgeo.geocaching.utils.CancellableHandler;
import cgeo.geocaching.utils.ClipboardUtils;
@@ -556,7 +557,7 @@ public class CacheDetailActivity extends AbstractActivity {
GeneralAppsFactory.addMenuItems(subMenu, cache);
menu.add(1, MENU_CALENDAR, 0, res.getString(R.string.cache_menu_event)).setIcon(R.drawable.ic_menu_agenda); // add event to calendar
- addVisitMenu(menu, cache);
+ LoggingUI.addMenuItems(menu, cache);
menu.add(0, MENU_CACHES_AROUND, 0, res.getString(R.string.cache_menu_around)).setIcon(R.drawable.ic_menu_rotate); // caches around
menu.add(1, MENU_BROWSER, 0, res.getString(R.string.cache_menu_browser)).setIcon(R.drawable.ic_menu_globe); // browser
menu.add(0, MENU_SHARE, 0, res.getString(R.string.cache_menu_share)).setIcon(R.drawable.ic_menu_share); // share cache
@@ -584,10 +585,6 @@ public class CacheDetailActivity extends AbstractActivity {
case MENU_DEFAULT_NAVIGATION:
startDefaultNavigation();
return true;
- case MENU_LOG_VISIT:
- refreshOnResume = true;
- cache.logVisit(this);
- return true;
case MENU_BROWSER:
cache.openInBrowser(this);
return true;
@@ -610,8 +607,11 @@ public class CacheDetailActivity extends AbstractActivity {
if (GeneralAppsFactory.onMenuItemSelected(item, this, cache)) {
return true;
}
+ if (LoggingUI.onMenuItemSelected(item, this, cache)) {
+ refreshOnResume = true;
+ return true;
+ }
- cache.logOffline(this, LogType.getById(menuItem - MENU_LOG_VISIT_OFFLINE));
return true;
}
diff --git a/main/src/cgeo/geocaching/activity/AbstractActivity.java b/main/src/cgeo/geocaching/activity/AbstractActivity.java
index 5a90238..a648486 100644
--- a/main/src/cgeo/geocaching/activity/AbstractActivity.java
+++ b/main/src/cgeo/geocaching/activity/AbstractActivity.java
@@ -1,7 +1,6 @@
package cgeo.geocaching.activity;
import cgeo.geocaching.Settings;
-import cgeo.geocaching.cgCache;
import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.compatibility.Compatibility;
import cgeo.geocaching.network.Cookies;
@@ -10,7 +9,6 @@ import android.app.Activity;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
-import android.view.Menu;
import android.view.View;
import android.widget.EditText;
@@ -90,10 +88,6 @@ public abstract class AbstractActivity extends Activity implements IAbstractActi
ActivityMixin.keepScreenOn(this, keepScreenOn);
}
- public void addVisitMenu(Menu menu, cgCache cache) {
- ActivityMixin.addVisitMenu(this, menu, cache);
- }
-
protected static void disableSuggestions(final EditText edit) {
Compatibility.disableSuggestions(edit);
}
diff --git a/main/src/cgeo/geocaching/activity/AbstractListActivity.java b/main/src/cgeo/geocaching/activity/AbstractListActivity.java
index a209b23..dc9c0fe 100644
--- a/main/src/cgeo/geocaching/activity/AbstractListActivity.java
+++ b/main/src/cgeo/geocaching/activity/AbstractListActivity.java
@@ -1,6 +1,5 @@
package cgeo.geocaching.activity;
-import cgeo.geocaching.cgCache;
import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.compatibility.Compatibility;
@@ -8,7 +7,6 @@ import android.app.ListActivity;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
-import android.view.Menu;
import android.view.View;
public abstract class AbstractListActivity extends ListActivity implements
@@ -85,10 +83,6 @@ public abstract class AbstractListActivity extends ListActivity implements
ActivityMixin.setTitle(this, title);
}
- public void addVisitMenu(Menu menu, cgCache cache) {
- ActivityMixin.addVisitMenu(this, menu, cache);
- }
-
@Override
public void invalidateOptionsMenuCompatible() {
Compatibility.invalidateOptionsMenu(this);
diff --git a/main/src/cgeo/geocaching/activity/ActivityMixin.java b/main/src/cgeo/geocaching/activity/ActivityMixin.java
index 8d5611b..8900593 100644
--- a/main/src/cgeo/geocaching/activity/ActivityMixin.java
+++ b/main/src/cgeo/geocaching/activity/ActivityMixin.java
@@ -2,10 +2,8 @@ package cgeo.geocaching.activity;
import cgeo.geocaching.R;
import cgeo.geocaching.Settings;
-import cgeo.geocaching.cgCache;
import cgeo.geocaching.cgeo;
import cgeo.geocaching.compatibility.Compatibility;
-import cgeo.geocaching.enumerations.LogType;
import org.apache.commons.lang3.StringUtils;
@@ -14,11 +12,8 @@ import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
-import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.view.Gravity;
-import android.view.Menu;
-import android.view.SubMenu;
import android.view.View;
import android.view.WindowManager;
import android.widget.ProgressBar;
@@ -27,10 +22,7 @@ import android.widget.Toast;
import gnu.android.app.appmanualclient.AppManualReaderClient;
-import java.util.List;
-
public final class ActivityMixin {
- private static final int MENU_ICON_LOG_VISIT = R.drawable.ic_menu_edit;
public final static void goHome(final Activity fromActivity) {
final Intent intent = new Intent(fromActivity, cgeo.class);
@@ -129,27 +121,6 @@ public final class ActivityMixin {
helpDialog(activity, title, message, null);
}
- protected static void addVisitMenu(IAbstractActivity activity, Menu menu, cgCache cache) {
- if (cache == null) {
- return;
- }
- if (!cache.supportsLogging()) {
- return;
- }
- Resources res = ((Activity) activity).getResources();
- if (Settings.getLogOffline()) {
- SubMenu logMenu = menu.addSubMenu(1, IAbstractActivity.MENU_LOG_VISIT_OFFLINE, 0, res.getString(R.string.cache_menu_visit_offline)).setIcon(MENU_ICON_LOG_VISIT);
- List<LogType> logTypes = cache.getPossibleLogTypes();
- for (LogType logType : logTypes) {
- logMenu.add(1, IAbstractActivity.MENU_LOG_VISIT_OFFLINE + logType.id, 0, logType.getL10n());
- }
- logMenu.add(1, IAbstractActivity.MENU_LOG_VISIT, 0, res.getString(R.string.cache_menu_visit));
- }
- else {
- menu.add(1, IAbstractActivity.MENU_LOG_VISIT, 0, res.getString(R.string.cache_menu_visit)).setIcon(MENU_ICON_LOG_VISIT);
- }
- }
-
public static void keepScreenOn(final Activity abstractActivity, boolean keepScreenOn) {
if (keepScreenOn) {
abstractActivity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
diff --git a/main/src/cgeo/geocaching/activity/IAbstractActivity.java b/main/src/cgeo/geocaching/activity/IAbstractActivity.java
index 2503b99..04709c6 100644
--- a/main/src/cgeo/geocaching/activity/IAbstractActivity.java
+++ b/main/src/cgeo/geocaching/activity/IAbstractActivity.java
@@ -3,8 +3,6 @@ package cgeo.geocaching.activity;
import android.view.View;
public interface IAbstractActivity {
- static final int MENU_LOG_VISIT = 100;
- static final int MENU_LOG_VISIT_OFFLINE = 101;
public void goHome(View view);
diff --git a/main/src/cgeo/geocaching/cgCache.java b/main/src/cgeo/geocaching/cgCache.java
index c765678..fce7709 100644
--- a/main/src/cgeo/geocaching/cgCache.java
+++ b/main/src/cgeo/geocaching/cgCache.java
@@ -1,6 +1,7 @@
package cgeo.geocaching;
import cgeo.geocaching.cgData.StorageLocation;
+import cgeo.geocaching.activity.ActivityMixin;
import cgeo.geocaching.activity.IAbstractActivity;
import cgeo.geocaching.connector.ConnectorFactory;
import cgeo.geocaching.connector.IConnector;
@@ -404,28 +405,28 @@ public class cgCache implements ICache, IWaypoint {
((Activity) fromActivity).startActivity(logVisitIntent);
}
- public void logOffline(final IAbstractActivity fromActivity, final LogType logType) {
+ public void logOffline(final Activity fromActivity, final LogType logType) {
final boolean mustIncludeSignature = StringUtils.isNotBlank(Settings.getSignature()) && Settings.isAutoInsertSignature();
final String initial = mustIncludeSignature ? LogTemplateProvider.applyTemplates(Settings.getSignature(), true) : "";
logOffline(fromActivity, initial, Calendar.getInstance(), logType);
}
- void logOffline(final IAbstractActivity fromActivity, final String log, Calendar date, final LogType logType) {
+ void logOffline(final Activity fromActivity, final String log, Calendar date, final LogType logType) {
if (logType == LogType.UNKNOWN) {
return;
}
- cgeoapplication app = (cgeoapplication) ((Activity) fromActivity).getApplication();
+ cgeoapplication app = (cgeoapplication) fromActivity.getApplication();
final boolean status = app.saveLogOffline(geocode, date.getTime(), logType, log);
- Resources res = ((Activity) fromActivity).getResources();
+ Resources res = fromActivity.getResources();
if (status) {
- fromActivity.showToast(res.getString(R.string.info_log_saved));
+ ActivityMixin.showToast(fromActivity, res.getString(R.string.info_log_saved));
app.saveVisitDate(geocode);
logOffline = true;
notifyChange();
} else {
- fromActivity.showToast(res.getString(R.string.err_log_post_failed));
+ ActivityMixin.showToast(fromActivity, res.getString(R.string.err_log_post_failed));
}
}
diff --git a/main/src/cgeo/geocaching/cgeocaches.java b/main/src/cgeo/geocaching/cgeocaches.java
index 4951f9f..81c29e0 100644
--- a/main/src/cgeo/geocaching/cgeocaches.java
+++ b/main/src/cgeo/geocaching/cgeocaches.java
@@ -12,7 +12,6 @@ import cgeo.geocaching.connector.gc.SearchHandler;
import cgeo.geocaching.enumerations.CacheListType;
import cgeo.geocaching.enumerations.CacheType;
import cgeo.geocaching.enumerations.LoadFlags;
-import cgeo.geocaching.enumerations.LogType;
import cgeo.geocaching.enumerations.StatusCode;
import cgeo.geocaching.export.ExportFactory;
import cgeo.geocaching.files.GPXImporter;
@@ -28,6 +27,7 @@ import cgeo.geocaching.sorting.ComparatorUserInterface;
import cgeo.geocaching.sorting.EventDateComparator;
import cgeo.geocaching.sorting.VisitComparator;
import cgeo.geocaching.ui.CacheListAdapter;
+import cgeo.geocaching.ui.LoggingUI;
import cgeo.geocaching.utils.GeoDirHandler;
import cgeo.geocaching.utils.Log;
import cgeo.geocaching.utils.RunnableWithArgument;
@@ -922,7 +922,7 @@ public class cgeocaches extends AbstractListActivity {
if (cache.getCoords() != null) {
menu.add(0, MENU_DEFAULT_NAVIGATION, 0, NavigationAppFactory.getDefaultNavigationApplication().getName());
menu.add(1, MENU_NAVIGATION, 0, res.getString(R.string.cache_menu_navigate)).setIcon(R.drawable.ic_menu_mapmode);
- addVisitMenu(menu, cache);
+ LoggingUI.addMenuItems(menu, cache);
menu.add(0, MENU_CACHE_DETAILS, 0, res.getString(R.string.cache_menu_details));
}
if (cache.isOffline()) {
@@ -984,9 +984,6 @@ public class cgeocaches extends AbstractListActivity {
case MENU_NAVIGATION:
NavigationAppFactory.showNavigationMenu(this, cache, null, null);
break;
- case MENU_LOG_VISIT:
- cache.logVisit(this);
- break;
case MENU_CACHE_DETAILS:
final Intent cachesIntent = new Intent(this, CacheDetailActivity.class);
cachesIntent.putExtra("geocode", cache.getGeocode().toUpperCase());
@@ -1024,8 +1021,7 @@ public class cgeocaches extends AbstractListActivity {
// in Android:
// https://code.google.com/p/android/issues/detail?id=7139
lastMenuInfo = info;
- // create a search for a single cache (as if in details view)
- cache.logOffline(this, LogType.getById(id - MENU_LOG_VISIT_OFFLINE));
+ LoggingUI.onMenuItemSelected(item, this, cache);
}
return true;
diff --git a/main/src/cgeo/geocaching/ui/AbstractUIFactory.java b/main/src/cgeo/geocaching/ui/AbstractUIFactory.java
new file mode 100644
index 0000000..2351383
--- /dev/null
+++ b/main/src/cgeo/geocaching/ui/AbstractUIFactory.java
@@ -0,0 +1,9 @@
+package cgeo.geocaching.ui;
+
+import cgeo.geocaching.cgeoapplication;
+
+import android.content.res.Resources;
+
+public class AbstractUIFactory {
+ protected final static Resources res = cgeoapplication.getInstance().getResources();
+}
diff --git a/main/src/cgeo/geocaching/ui/LoggingUI.java b/main/src/cgeo/geocaching/ui/LoggingUI.java
new file mode 100644
index 0000000..90130f8
--- /dev/null
+++ b/main/src/cgeo/geocaching/ui/LoggingUI.java
@@ -0,0 +1,104 @@
+package cgeo.geocaching.ui;
+
+import cgeo.geocaching.R;
+import cgeo.geocaching.Settings;
+import cgeo.geocaching.cgCache;
+import cgeo.geocaching.activity.IAbstractActivity;
+import cgeo.geocaching.enumerations.LogType;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.DialogInterface;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.widget.ArrayAdapter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class LoggingUI extends AbstractUIFactory {
+ public static class LogTypeEntry {
+ private final LogType logType;
+
+ public LogTypeEntry(final LogType logType) {
+ this.logType = logType;
+ }
+
+ @Override
+ public String toString() {
+ if (logType == null) {
+ return res.getString(R.string.cache_menu_visit);
+ }
+ return logType.getL10n();
+ }
+ }
+
+ private static final int MENU_ICON_LOG_VISIT = R.drawable.ic_menu_edit;
+ private static final int MENU_LOG_VISIT = 100;
+ private static final int MENU_LOG_VISIT_OFFLINE = 101;
+
+ public static void addMenuItems(final Menu menu, final cgCache cache) {
+ if (cache == null) {
+ return;
+ }
+ if (!cache.supportsLogging()) {
+ return;
+ }
+ if (Settings.getLogOffline()) {
+ menu.add(0, MENU_LOG_VISIT_OFFLINE, 0, res.getString(R.string.cache_menu_visit_offline)).setIcon(MENU_ICON_LOG_VISIT);
+ }
+ else {
+ menu.add(0, MENU_LOG_VISIT, 0, res.getString(R.string.cache_menu_visit)).setIcon(MENU_ICON_LOG_VISIT);
+ }
+ }
+
+ public static boolean onMenuItemSelected(final MenuItem item, IAbstractActivity activity, cgCache cache) {
+ switch (item.getItemId()) {
+ case MENU_LOG_VISIT:
+ cache.logVisit(activity);
+ return true;
+ case MENU_LOG_VISIT_OFFLINE:
+ showOfflineMenu(cache, (Activity) activity);
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ private static void showOfflineMenu(final cgCache cache, final Activity activity) {
+ final List<LogType> logTypes = cache.getPossibleLogTypes();
+ final ArrayList<LogTypeEntry> list = new ArrayList<LogTypeEntry>();
+ for (LogType logType : logTypes) {
+ list.add(new LogTypeEntry(logType));
+ }
+ // online logging
+ list.add(new LogTypeEntry(null));
+
+ final AlertDialog.Builder builder = new AlertDialog.Builder(activity);
+ builder.setTitle(R.string.cache_menu_visit_offline);
+
+ final ArrayAdapter<LogTypeEntry> adapter = new ArrayAdapter<LogTypeEntry>(activity, android.R.layout.select_dialog_item, list);
+
+ builder.setAdapter(adapter, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int item) {
+ final LogTypeEntry logTypeEntry = adapter.getItem(item);
+ if (logTypeEntry.logType != null) {
+ cache.logOffline(activity, logTypeEntry.logType);
+ } else {
+ cache.logVisit((IAbstractActivity) activity);
+ }
+ }
+ });
+
+ builder.create().show();
+
+ }
+
+ public static void onPrepareOptionsMenu(Menu menu) {
+ final MenuItem item = menu.findItem(MENU_LOG_VISIT);
+ if (item != null) {
+ item.setEnabled(Settings.isLogin());
+ }
+ }
+}