From aa68184d2b6ed595660060b3e10e6f60ae8cbe1f Mon Sep 17 00:00:00 2001 From: Bananeweizen Date: Sun, 22 Jan 2012 12:01:47 +0100 Subject: refactoring: moved some classes to packages, renaming --- main/src/cgeo/geocaching/CacheDetailActivity.java | 1 + main/src/cgeo/geocaching/LogTemplateProvider.java | 152 -------------------- main/src/cgeo/geocaching/Parameters.java | 74 ---------- main/src/cgeo/geocaching/UsefulAppsActivity.java | 79 +++++++++++ main/src/cgeo/geocaching/VisitCacheActivity.java | 4 +- main/src/cgeo/geocaching/cgBase.java | 1 + main/src/cgeo/geocaching/cgCache.java | 1 + main/src/cgeo/geocaching/cgeo.java | 2 +- main/src/cgeo/geocaching/cgeocaches.java | 1 + main/src/cgeo/geocaching/cgeohelpers.java | 79 ----------- main/src/cgeo/geocaching/cgeoinit.java | 4 +- main/src/cgeo/geocaching/cgeotouch.java | 1 + .../src/cgeo/geocaching/connector/GCConnector.java | 2 +- .../opencaching/ApiOpenCachingConnector.java | 2 +- .../connector/opencaching/OkapiClient.java | 2 +- main/src/cgeo/geocaching/gcvote/GCVote.java | 2 +- main/src/cgeo/geocaching/go4cache/Go4Cache.java | 2 +- main/src/cgeo/geocaching/network/OAuth.java | 1 - main/src/cgeo/geocaching/network/Parameters.java | 74 ++++++++++ main/src/cgeo/geocaching/twitter/Twitter.java | 2 +- .../twitter/TwitterAuthorizationActivity.java | 2 +- main/src/cgeo/geocaching/ui/DirectionImage.java | 2 +- .../cgeo/geocaching/utils/LogTemplateProvider.java | 156 +++++++++++++++++++++ 23 files changed, 329 insertions(+), 317 deletions(-) delete mode 100644 main/src/cgeo/geocaching/LogTemplateProvider.java delete mode 100644 main/src/cgeo/geocaching/Parameters.java create mode 100644 main/src/cgeo/geocaching/UsefulAppsActivity.java delete mode 100644 main/src/cgeo/geocaching/cgeohelpers.java create mode 100644 main/src/cgeo/geocaching/network/Parameters.java create mode 100644 main/src/cgeo/geocaching/utils/LogTemplateProvider.java (limited to 'main/src') diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java index 954824e..1f7edb9 100644 --- a/main/src/cgeo/geocaching/CacheDetailActivity.java +++ b/main/src/cgeo/geocaching/CacheDetailActivity.java @@ -13,6 +13,7 @@ import cgeo.geocaching.enumerations.LogType; import cgeo.geocaching.enumerations.WaypointType; import cgeo.geocaching.geopoint.GeopointFormatter; import cgeo.geocaching.network.HtmlImage; +import cgeo.geocaching.network.Parameters; import cgeo.geocaching.utils.BaseUtils; import cgeo.geocaching.utils.CancellableHandler; import cgeo.geocaching.utils.CryptUtils; diff --git a/main/src/cgeo/geocaching/LogTemplateProvider.java b/main/src/cgeo/geocaching/LogTemplateProvider.java deleted file mode 100644 index 7d330a3..0000000 --- a/main/src/cgeo/geocaching/LogTemplateProvider.java +++ /dev/null @@ -1,152 +0,0 @@ -package cgeo.geocaching; - -import org.apache.commons.lang3.StringUtils; - -import android.util.Log; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * provides all the available templates for logging - * - */ -public class LogTemplateProvider { - public static abstract class LogTemplate { - private final String template; - private final int resourceId; - - protected LogTemplate(String template, int resourceId) { - this.template = template; - this.resourceId = resourceId; - } - - abstract String getValue(boolean offline); - - public int getResourceId() { - return resourceId; - } - - public int getItemId() { - return template.hashCode(); - } - - public String getTemplateString() { - return template; - } - - protected String apply(String input, boolean offline) { - if (input.contains("[" + template + "]")) { - return StringUtils.replace(input, "[" + template + "]", getValue(offline)); - } - return input; - } - } - - private static LogTemplate[] templates; - - public static LogTemplate[] getTemplates() { - if (templates == null) { - templates = new LogTemplate[] { - new LogTemplate("DATE", R.string.init_signature_template_date) { - - @Override - String getValue(final boolean offline) { - return cgBase.formatFullDate(System.currentTimeMillis()); - } - }, - new LogTemplate("TIME", R.string.init_signature_template_time) { - - @Override - String getValue(final boolean offline) { - return cgBase.formatTime(System.currentTimeMillis()); - } - }, - new LogTemplate("DATETIME", R.string.init_signature_template_datetime) { - - @Override - String getValue(final boolean offline) { - final long currentTime = System.currentTimeMillis(); - return cgBase.formatFullDate(currentTime) + " " + cgBase.formatTime(currentTime); - } - }, - new LogTemplate("USER", R.string.init_signature_template_user) { - - @Override - String getValue(final boolean offline) { - return Settings.getUsername(); - } - }, - new LogTemplate("NUMBER", R.string.init_signature_template_number) { - - @Override - String getValue(final boolean offline) { - if (offline) { - return ""; - } - String findCount = ""; - final String page = cgBase.getResponseData(cgBase.request("http://www.geocaching.com/email/", null, false, false, false)); - int current = parseFindCount(page); - - if (current >= 0) { - findCount = String.valueOf(current + 1); - } - return findCount; - } - } - }; - } - return templates; - } - - public static LogTemplate getTemplate(int itemId) { - for (LogTemplate template : getTemplates()) { - if (template.getItemId() == itemId) { - return template; - } - } - return null; - } - - public static String applyTemplates(String signature, boolean offline) { - if (signature == null) { - return ""; - } - String result = signature; - for (LogTemplate template : getTemplates()) { - result = template.apply(result, offline); - } - return result; - } - - private static int parseFindCount(String page) { - if (StringUtils.isBlank(page)) { - return -1; - } - - int findCount = -1; - - try { - final Pattern findPattern = Pattern.compile(" ([,\\d]+)", Pattern.CASE_INSENSITIVE); - final Matcher findMatcher = findPattern.matcher(page); - if (findMatcher.find()) { - if (findMatcher.groupCount() > 0) { - String count = findMatcher.group(1); - - if (count != null) { - if (count.length() == 0) { - findCount = 0; - } else { - findCount = Integer.parseInt(count.replaceAll("[.,]", "")); - } - } - } - } - } catch (Exception e) { - Log.w(Settings.tag, "cgBase.parseFindCount: " + e.toString()); - } - - return findCount; - } - -} diff --git a/main/src/cgeo/geocaching/Parameters.java b/main/src/cgeo/geocaching/Parameters.java deleted file mode 100644 index fdbbe3b..0000000 --- a/main/src/cgeo/geocaching/Parameters.java +++ /dev/null @@ -1,74 +0,0 @@ -package cgeo.geocaching; - -import org.apache.http.NameValuePair; -import org.apache.http.client.utils.URLEncodedUtils; -import org.apache.http.message.BasicNameValuePair; -import org.apache.http.protocol.HTTP; - -import java.security.InvalidParameterException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; - -/** - * List of key/values pairs to be used in a GET or POST request. - * - */ -public class Parameters extends ArrayList { - - private static final long serialVersionUID = 1L; - - /** - * @param keyValues - * list of initial key/value pairs - * @throws InvalidParameterException - * if the number of key/values is unbalanced - */ - public Parameters(final String... keyValues) { - super(); - put(keyValues); - } - - private static final Comparator comparator = new Comparator() { - @Override - public int compare(final NameValuePair nv1, final NameValuePair nv2) { - final int comparedKeys = nv1.getName().compareTo(nv2.getName()); - return comparedKeys != 0 ? comparedKeys : nv1.getValue().compareTo(nv2.getValue()); - } - }; - - /** - * Add new key/value pairs to the current parameters. - * - * @param keyValues - * list of key/value pairs - * @throws InvalidParameterException - * if the number of key/values is unbalanced - */ - public void put(final String... keyValues) { - if (keyValues.length % 2 == 1) { - throw new InvalidParameterException("odd number of parameters"); - } - for (int i = 0; i < keyValues.length; i += 2) { - add(new BasicNameValuePair(keyValues[i], keyValues[i + 1])); - } - } - - /** - * Lexically sort key/value pairs first by key, then by value. - * - * Some signing algorithms need the values to be ordered before issuing the signature. - */ - public void sort() { - Collections.sort(this, comparator); - } - - /** - * @return the URL encoded string corresponding to those parameters - */ - @Override - public String toString() { - return URLEncodedUtils.format(this, HTTP.UTF_8); - } - -} diff --git a/main/src/cgeo/geocaching/UsefulAppsActivity.java b/main/src/cgeo/geocaching/UsefulAppsActivity.java new file mode 100644 index 0000000..6a08d56 --- /dev/null +++ b/main/src/cgeo/geocaching/UsefulAppsActivity.java @@ -0,0 +1,79 @@ +package cgeo.geocaching; + +import cgeo.geocaching.activity.AbstractActivity; + +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.view.View; + +import java.util.Locale; + +public class UsefulAppsActivity extends AbstractActivity { + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // init + setTheme(); + setContentView(R.layout.helpers); + setTitle(res.getString(R.string.helpers)); + } + + @Override + public void onResume() { + super.onResume(); + + } + + private void installFromMarket(String marketId) { + try { + startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://search?q=pname:" + marketId))); + } catch (Exception e) { + // market not available in standard emulator + } + + finish(); + } + + /** + * @param view + * unused here but needed since this method is referenced from XML layout + */ + public void installManual(View view) { + final Locale loc = Locale.getDefault(); + final String language = loc.getLanguage(); + + if ("de".equalsIgnoreCase(language)) { + installFromMarket("gnu.android.app.cgeomanual.de"); + } + else { + installFromMarket("gnu.android.app.cgeomanual.en"); + } + } + + /** + * @param view + * unused here but needed since this method is referenced from XML layout + */ + public void installLocus(View view) { + installFromMarket("menion.android.locus"); + } + + /** + * @param view + * unused here but needed since this method is referenced from XML layout + */ + public void installGpsStatus(View view) { + installFromMarket("com.eclipsim.gpsstatus2"); + } + + /** + * @param view + * unused here but needed since this method is referenced from XML layout + */ + public void installBluetoothGps(View view) { + installFromMarket("googoo.android.btgps"); + } +} diff --git a/main/src/cgeo/geocaching/VisitCacheActivity.java b/main/src/cgeo/geocaching/VisitCacheActivity.java index d0e8a5e..f3a1cbe 100644 --- a/main/src/cgeo/geocaching/VisitCacheActivity.java +++ b/main/src/cgeo/geocaching/VisitCacheActivity.java @@ -1,12 +1,14 @@ package cgeo.geocaching; -import cgeo.geocaching.LogTemplateProvider.LogTemplate; import cgeo.geocaching.activity.AbstractActivity; import cgeo.geocaching.enumerations.LogType; import cgeo.geocaching.enumerations.LogTypeTrackable; import cgeo.geocaching.enumerations.StatusCode; import cgeo.geocaching.gcvote.GCVote; +import cgeo.geocaching.network.Parameters; import cgeo.geocaching.ui.DateDialog; +import cgeo.geocaching.utils.LogTemplateProvider; +import cgeo.geocaching.utils.LogTemplateProvider.LogTemplate; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; diff --git a/main/src/cgeo/geocaching/cgBase.java b/main/src/cgeo/geocaching/cgBase.java index 6315f99..d1b1387 100644 --- a/main/src/cgeo/geocaching/cgBase.java +++ b/main/src/cgeo/geocaching/cgBase.java @@ -19,6 +19,7 @@ import cgeo.geocaching.geopoint.GeopointFormatter.Format; import cgeo.geocaching.geopoint.IConversion; import cgeo.geocaching.geopoint.Viewport; import cgeo.geocaching.network.HtmlImage; +import cgeo.geocaching.network.Parameters; import cgeo.geocaching.twitter.Twitter; import cgeo.geocaching.ui.DirectionImage; import cgeo.geocaching.utils.BaseUtils; diff --git a/main/src/cgeo/geocaching/cgCache.java b/main/src/cgeo/geocaching/cgCache.java index fe15c41..c774151 100644 --- a/main/src/cgeo/geocaching/cgCache.java +++ b/main/src/cgeo/geocaching/cgCache.java @@ -13,6 +13,7 @@ import cgeo.geocaching.geopoint.Geopoint; import cgeo.geocaching.geopoint.GeopointFormatter; import cgeo.geocaching.geopoint.GeopointParser; import cgeo.geocaching.utils.CryptUtils; +import cgeo.geocaching.utils.LogTemplateProvider; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; diff --git a/main/src/cgeo/geocaching/cgeo.java b/main/src/cgeo/geocaching/cgeo.java index 99da133..7c80834 100644 --- a/main/src/cgeo/geocaching/cgeo.java +++ b/main/src/cgeo/geocaching/cgeo.java @@ -253,7 +253,7 @@ public class cgeo extends AbstractActivity { showAbout(null); return true; case MENU_HELPERS: - startActivity(new Intent(this, cgeohelpers.class)); + startActivity(new Intent(this, UsefulAppsActivity.class)); return true; case MENU_SETTINGS: startActivity(new Intent(this, cgeoinit.class)); diff --git a/main/src/cgeo/geocaching/cgeocaches.java b/main/src/cgeo/geocaching/cgeocaches.java index 5923009..8fb3212 100644 --- a/main/src/cgeo/geocaching/cgeocaches.java +++ b/main/src/cgeo/geocaching/cgeocaches.java @@ -18,6 +18,7 @@ import cgeo.geocaching.filter.TrackablesFilter; import cgeo.geocaching.filter.TypeFilter; import cgeo.geocaching.geopoint.Geopoint; import cgeo.geocaching.maps.CGeoMap; +import cgeo.geocaching.network.Parameters; import cgeo.geocaching.sorting.CacheComparator; import cgeo.geocaching.sorting.DateComparator; import cgeo.geocaching.sorting.DifficultyComparator; diff --git a/main/src/cgeo/geocaching/cgeohelpers.java b/main/src/cgeo/geocaching/cgeohelpers.java deleted file mode 100644 index 560ab84..0000000 --- a/main/src/cgeo/geocaching/cgeohelpers.java +++ /dev/null @@ -1,79 +0,0 @@ -package cgeo.geocaching; - -import cgeo.geocaching.activity.AbstractActivity; - -import android.content.Intent; -import android.net.Uri; -import android.os.Bundle; -import android.view.View; - -import java.util.Locale; - -public class cgeohelpers extends AbstractActivity { - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - // init - setTheme(); - setContentView(R.layout.helpers); - setTitle(res.getString(R.string.helpers)); - } - - @Override - public void onResume() { - super.onResume(); - - } - - private void installFromMarket(String marketId) { - try { - startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://search?q=pname:" + marketId))); - } catch (Exception e) { - // market not available in standard emulator - } - - finish(); - } - - /** - * @param view - * unused here but needed since this method is referenced from XML layout - */ - public void installManual(View view) { - final Locale loc = Locale.getDefault(); - final String language = loc.getLanguage(); - - if ("de".equalsIgnoreCase(language)) { - installFromMarket("gnu.android.app.cgeomanual.de"); - } - else { - installFromMarket("gnu.android.app.cgeomanual.en"); - } - } - - /** - * @param view - * unused here but needed since this method is referenced from XML layout - */ - public void installLocus(View view) { - installFromMarket("menion.android.locus"); - } - - /** - * @param view - * unused here but needed since this method is referenced from XML layout - */ - public void installGpsStatus(View view) { - installFromMarket("com.eclipsim.gpsstatus2"); - } - - /** - * @param view - * unused here but needed since this method is referenced from XML layout - */ - public void installBluetoothGps(View view) { - installFromMarket("googoo.android.btgps"); - } -} diff --git a/main/src/cgeo/geocaching/cgeoinit.java b/main/src/cgeo/geocaching/cgeoinit.java index 09f2396..be6782f 100644 --- a/main/src/cgeo/geocaching/cgeoinit.java +++ b/main/src/cgeo/geocaching/cgeoinit.java @@ -1,6 +1,5 @@ package cgeo.geocaching; -import cgeo.geocaching.LogTemplateProvider.LogTemplate; import cgeo.geocaching.activity.AbstractActivity; import cgeo.geocaching.apps.cache.navi.NavigationApp; import cgeo.geocaching.apps.cache.navi.NavigationAppFactory; @@ -8,7 +7,10 @@ import cgeo.geocaching.compatibility.Compatibility; import cgeo.geocaching.enumerations.CacheType; import cgeo.geocaching.enumerations.StatusCode; import cgeo.geocaching.maps.MapProviderFactory; +import cgeo.geocaching.network.Parameters; import cgeo.geocaching.twitter.TwitterAuthorizationActivity; +import cgeo.geocaching.utils.LogTemplateProvider; +import cgeo.geocaching.utils.LogTemplateProvider.LogTemplate; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.ImmutablePair; diff --git a/main/src/cgeo/geocaching/cgeotouch.java b/main/src/cgeo/geocaching/cgeotouch.java index b2163c0..d261687 100644 --- a/main/src/cgeo/geocaching/cgeotouch.java +++ b/main/src/cgeo/geocaching/cgeotouch.java @@ -3,6 +3,7 @@ package cgeo.geocaching; import cgeo.geocaching.activity.AbstractActivity; import cgeo.geocaching.enumerations.LogType; import cgeo.geocaching.enumerations.StatusCode; +import cgeo.geocaching.network.Parameters; import cgeo.geocaching.ui.DateDialog; import org.apache.commons.lang3.StringUtils; diff --git a/main/src/cgeo/geocaching/connector/GCConnector.java b/main/src/cgeo/geocaching/connector/GCConnector.java index 6a2bc72..f65312c 100644 --- a/main/src/cgeo/geocaching/connector/GCConnector.java +++ b/main/src/cgeo/geocaching/connector/GCConnector.java @@ -1,7 +1,6 @@ package cgeo.geocaching.connector; import cgeo.geocaching.GCConstants; -import cgeo.geocaching.Parameters; import cgeo.geocaching.ParseResult; import cgeo.geocaching.R; import cgeo.geocaching.Settings; @@ -9,6 +8,7 @@ import cgeo.geocaching.cgBase; import cgeo.geocaching.cgCache; import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.enumerations.StatusCode; +import cgeo.geocaching.network.Parameters; import cgeo.geocaching.utils.CancellableHandler; import org.apache.commons.collections.CollectionUtils; diff --git a/main/src/cgeo/geocaching/connector/opencaching/ApiOpenCachingConnector.java b/main/src/cgeo/geocaching/connector/opencaching/ApiOpenCachingConnector.java index dfd474d..c5d7f3c 100644 --- a/main/src/cgeo/geocaching/connector/opencaching/ApiOpenCachingConnector.java +++ b/main/src/cgeo/geocaching/connector/opencaching/ApiOpenCachingConnector.java @@ -1,10 +1,10 @@ package cgeo.geocaching.connector.opencaching; -import cgeo.geocaching.Parameters; import cgeo.geocaching.ParseResult; import cgeo.geocaching.Settings; import cgeo.geocaching.cgCache; import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.network.Parameters; import cgeo.geocaching.utils.CancellableHandler; import cgeo.geocaching.utils.CryptUtils; diff --git a/main/src/cgeo/geocaching/connector/opencaching/OkapiClient.java b/main/src/cgeo/geocaching/connector/opencaching/OkapiClient.java index 09fc8f1..a69d5c9 100644 --- a/main/src/cgeo/geocaching/connector/opencaching/OkapiClient.java +++ b/main/src/cgeo/geocaching/connector/opencaching/OkapiClient.java @@ -1,6 +1,5 @@ package cgeo.geocaching.connector.opencaching; -import cgeo.geocaching.Parameters; import cgeo.geocaching.Settings; import cgeo.geocaching.cgBase; import cgeo.geocaching.cgCache; @@ -14,6 +13,7 @@ import cgeo.geocaching.enumerations.LogType; import cgeo.geocaching.geopoint.Geopoint; import cgeo.geocaching.geopoint.GeopointFormatter; import cgeo.geocaching.geopoint.GeopointParser; +import cgeo.geocaching.network.Parameters; import org.apache.commons.lang3.StringUtils; import org.json.JSONArray; diff --git a/main/src/cgeo/geocaching/gcvote/GCVote.java b/main/src/cgeo/geocaching/gcvote/GCVote.java index 377014e..077add2 100644 --- a/main/src/cgeo/geocaching/gcvote/GCVote.java +++ b/main/src/cgeo/geocaching/gcvote/GCVote.java @@ -1,9 +1,9 @@ package cgeo.geocaching.gcvote; -import cgeo.geocaching.Parameters; import cgeo.geocaching.Settings; import cgeo.geocaching.cgBase; import cgeo.geocaching.cgCache; +import cgeo.geocaching.network.Parameters; import cgeo.geocaching.utils.LeastRecentlyUsedCache; import org.apache.commons.lang3.StringUtils; diff --git a/main/src/cgeo/geocaching/go4cache/Go4Cache.java b/main/src/cgeo/geocaching/go4cache/Go4Cache.java index 10da7d5..7243383 100644 --- a/main/src/cgeo/geocaching/go4cache/Go4Cache.java +++ b/main/src/cgeo/geocaching/go4cache/Go4Cache.java @@ -1,12 +1,12 @@ package cgeo.geocaching.go4cache; -import cgeo.geocaching.Parameters; import cgeo.geocaching.Settings; import cgeo.geocaching.cgBase; import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.geopoint.Geopoint; import cgeo.geocaching.geopoint.GeopointFormatter.Format; import cgeo.geocaching.geopoint.Viewport; +import cgeo.geocaching.network.Parameters; import cgeo.geocaching.utils.CryptUtils; import org.apache.commons.lang3.StringUtils; diff --git a/main/src/cgeo/geocaching/network/OAuth.java b/main/src/cgeo/geocaching/network/OAuth.java index 9e0a703..6d82bf7 100644 --- a/main/src/cgeo/geocaching/network/OAuth.java +++ b/main/src/cgeo/geocaching/network/OAuth.java @@ -1,6 +1,5 @@ package cgeo.geocaching.network; -import cgeo.geocaching.Parameters; import cgeo.geocaching.Settings; import cgeo.geocaching.cgBase; import cgeo.geocaching.utils.CryptUtils; diff --git a/main/src/cgeo/geocaching/network/Parameters.java b/main/src/cgeo/geocaching/network/Parameters.java new file mode 100644 index 0000000..e65bec2 --- /dev/null +++ b/main/src/cgeo/geocaching/network/Parameters.java @@ -0,0 +1,74 @@ +package cgeo.geocaching.network; + +import org.apache.http.NameValuePair; +import org.apache.http.client.utils.URLEncodedUtils; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.protocol.HTTP; + +import java.security.InvalidParameterException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; + +/** + * List of key/values pairs to be used in a GET or POST request. + * + */ +public class Parameters extends ArrayList { + + private static final long serialVersionUID = 1L; + + /** + * @param keyValues + * list of initial key/value pairs + * @throws InvalidParameterException + * if the number of key/values is unbalanced + */ + public Parameters(final String... keyValues) { + super(); + put(keyValues); + } + + private static final Comparator comparator = new Comparator() { + @Override + public int compare(final NameValuePair nv1, final NameValuePair nv2) { + final int comparedKeys = nv1.getName().compareTo(nv2.getName()); + return comparedKeys != 0 ? comparedKeys : nv1.getValue().compareTo(nv2.getValue()); + } + }; + + /** + * Add new key/value pairs to the current parameters. + * + * @param keyValues + * list of key/value pairs + * @throws InvalidParameterException + * if the number of key/values is unbalanced + */ + public void put(final String... keyValues) { + if (keyValues.length % 2 == 1) { + throw new InvalidParameterException("odd number of parameters"); + } + for (int i = 0; i < keyValues.length; i += 2) { + add(new BasicNameValuePair(keyValues[i], keyValues[i + 1])); + } + } + + /** + * Lexically sort key/value pairs first by key, then by value. + * + * Some signing algorithms need the values to be ordered before issuing the signature. + */ + public void sort() { + Collections.sort(this, comparator); + } + + /** + * @return the URL encoded string corresponding to those parameters + */ + @Override + public String toString() { + return URLEncodedUtils.format(this, HTTP.UTF_8); + } + +} diff --git a/main/src/cgeo/geocaching/twitter/Twitter.java b/main/src/cgeo/geocaching/twitter/Twitter.java index 2f653f5..a47409f 100644 --- a/main/src/cgeo/geocaching/twitter/Twitter.java +++ b/main/src/cgeo/geocaching/twitter/Twitter.java @@ -1,12 +1,12 @@ package cgeo.geocaching.twitter; -import cgeo.geocaching.Parameters; import cgeo.geocaching.Settings; import cgeo.geocaching.cgBase; import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.geopoint.Geopoint; import cgeo.geocaching.geopoint.GeopointFormatter.Format; import cgeo.geocaching.network.OAuth; +import cgeo.geocaching.network.Parameters; import org.apache.http.HttpResponse; diff --git a/main/src/cgeo/geocaching/twitter/TwitterAuthorizationActivity.java b/main/src/cgeo/geocaching/twitter/TwitterAuthorizationActivity.java index a3cb61a..83b1569 100644 --- a/main/src/cgeo/geocaching/twitter/TwitterAuthorizationActivity.java +++ b/main/src/cgeo/geocaching/twitter/TwitterAuthorizationActivity.java @@ -1,11 +1,11 @@ package cgeo.geocaching.twitter; -import cgeo.geocaching.Parameters; import cgeo.geocaching.R; import cgeo.geocaching.Settings; import cgeo.geocaching.cgBase; import cgeo.geocaching.activity.AbstractActivity; import cgeo.geocaching.network.OAuth; +import cgeo.geocaching.network.Parameters; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.ImmutablePair; diff --git a/main/src/cgeo/geocaching/ui/DirectionImage.java b/main/src/cgeo/geocaching/ui/DirectionImage.java index 17c253a..c559531 100644 --- a/main/src/cgeo/geocaching/ui/DirectionImage.java +++ b/main/src/cgeo/geocaching/ui/DirectionImage.java @@ -1,8 +1,8 @@ package cgeo.geocaching.ui; -import cgeo.geocaching.Parameters; import cgeo.geocaching.cgBase; import cgeo.geocaching.files.LocalStorage; +import cgeo.geocaching.network.Parameters; import org.apache.commons.lang3.StringUtils; import org.apache.http.HttpResponse; diff --git a/main/src/cgeo/geocaching/utils/LogTemplateProvider.java b/main/src/cgeo/geocaching/utils/LogTemplateProvider.java new file mode 100644 index 0000000..141e3d9 --- /dev/null +++ b/main/src/cgeo/geocaching/utils/LogTemplateProvider.java @@ -0,0 +1,156 @@ +package cgeo.geocaching.utils; + +import cgeo.geocaching.R; +import cgeo.geocaching.Settings; +import cgeo.geocaching.cgBase; + +import org.apache.commons.lang3.StringUtils; + +import android.util.Log; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * provides all the available templates for logging + * + */ +public class LogTemplateProvider { + public static abstract class LogTemplate { + private final String template; + private final int resourceId; + + protected LogTemplate(String template, int resourceId) { + this.template = template; + this.resourceId = resourceId; + } + + abstract public String getValue(boolean offline); + + public int getResourceId() { + return resourceId; + } + + public int getItemId() { + return template.hashCode(); + } + + public String getTemplateString() { + return template; + } + + protected String apply(String input, boolean offline) { + if (input.contains("[" + template + "]")) { + return StringUtils.replace(input, "[" + template + "]", getValue(offline)); + } + return input; + } + } + + private static LogTemplate[] templates; + + public static LogTemplate[] getTemplates() { + if (templates == null) { + templates = new LogTemplate[] { + new LogTemplate("DATE", R.string.init_signature_template_date) { + + @Override + public String getValue(final boolean offline) { + return cgBase.formatFullDate(System.currentTimeMillis()); + } + }, + new LogTemplate("TIME", R.string.init_signature_template_time) { + + @Override + public String getValue(final boolean offline) { + return cgBase.formatTime(System.currentTimeMillis()); + } + }, + new LogTemplate("DATETIME", R.string.init_signature_template_datetime) { + + @Override + public String getValue(final boolean offline) { + final long currentTime = System.currentTimeMillis(); + return cgBase.formatFullDate(currentTime) + " " + cgBase.formatTime(currentTime); + } + }, + new LogTemplate("USER", R.string.init_signature_template_user) { + + @Override + public String getValue(final boolean offline) { + return Settings.getUsername(); + } + }, + new LogTemplate("NUMBER", R.string.init_signature_template_number) { + + @Override + public String getValue(final boolean offline) { + if (offline) { + return ""; + } + String findCount = ""; + final String page = cgBase.getResponseData(cgBase.request("http://www.geocaching.com/email/", null, false, false, false)); + int current = parseFindCount(page); + + if (current >= 0) { + findCount = String.valueOf(current + 1); + } + return findCount; + } + } + }; + } + return templates; + } + + public static LogTemplate getTemplate(int itemId) { + for (LogTemplate template : getTemplates()) { + if (template.getItemId() == itemId) { + return template; + } + } + return null; + } + + public static String applyTemplates(String signature, boolean offline) { + if (signature == null) { + return ""; + } + String result = signature; + for (LogTemplate template : getTemplates()) { + result = template.apply(result, offline); + } + return result; + } + + private static int parseFindCount(String page) { + if (StringUtils.isBlank(page)) { + return -1; + } + + int findCount = -1; + + try { + final Pattern findPattern = Pattern.compile(" ([,\\d]+)", Pattern.CASE_INSENSITIVE); + final Matcher findMatcher = findPattern.matcher(page); + if (findMatcher.find()) { + if (findMatcher.groupCount() > 0) { + String count = findMatcher.group(1); + + if (count != null) { + if (count.length() == 0) { + findCount = 0; + } else { + findCount = Integer.parseInt(count.replaceAll("[.,]", "")); + } + } + } + } + } catch (Exception e) { + Log.w(Settings.tag, "cgBase.parseFindCount: " + e.toString()); + } + + return findCount; + } + +} -- cgit v1.1