diff options
28 files changed, 99 insertions, 84 deletions
diff --git a/main/res/drawable-hdpi/actionbar_share.png b/main/res/drawable-hdpi/actionbar_share.png Binary files differdeleted file mode 100644 index e748c85..0000000 --- a/main/res/drawable-hdpi/actionbar_share.png +++ /dev/null diff --git a/main/res/drawable-hdpi/hw_menu.png b/main/res/drawable-hdpi/hw_menu.png Binary files differdeleted file mode 100644 index 182788a..0000000 --- a/main/res/drawable-hdpi/hw_menu.png +++ /dev/null diff --git a/main/res/drawable-hdpi/main_about.png b/main/res/drawable-hdpi/main_about.png Binary files differdeleted file mode 100644 index a3c75cb..0000000 --- a/main/res/drawable-hdpi/main_about.png +++ /dev/null diff --git a/main/res/drawable-hdpi/main_settings.png b/main/res/drawable-hdpi/main_settings.png Binary files differdeleted file mode 100644 index 02b564d..0000000 --- a/main/res/drawable-hdpi/main_settings.png +++ /dev/null diff --git a/main/res/drawable-hdpi/trackable_coin.png b/main/res/drawable-hdpi/trackable_coin.png Binary files differdeleted file mode 100644 index 3f5138e..0000000 --- a/main/res/drawable-hdpi/trackable_coin.png +++ /dev/null diff --git a/main/res/drawable-hdpi/trackable_coins.png b/main/res/drawable-hdpi/trackable_coins.png Binary files differdeleted file mode 100644 index 7713407..0000000 --- a/main/res/drawable-hdpi/trackable_coins.png +++ /dev/null diff --git a/main/res/drawable-hdpi/trackable_tb.png b/main/res/drawable-hdpi/trackable_tb.png Binary files differdeleted file mode 100644 index 29f348c..0000000 --- a/main/res/drawable-hdpi/trackable_tb.png +++ /dev/null diff --git a/main/res/drawable-hdpi/trackable_tbs.png b/main/res/drawable-hdpi/trackable_tbs.png Binary files differdeleted file mode 100644 index 595f7a1..0000000 --- a/main/res/drawable-hdpi/trackable_tbs.png +++ /dev/null diff --git a/main/res/drawable-ldpi/actionbar_share.png b/main/res/drawable-ldpi/actionbar_share.png Binary files differdeleted file mode 100644 index 53f28fe..0000000 --- a/main/res/drawable-ldpi/actionbar_share.png +++ /dev/null diff --git a/main/res/drawable-ldpi/hw_menu.png b/main/res/drawable-ldpi/hw_menu.png Binary files differdeleted file mode 100644 index d1b54f4..0000000 --- a/main/res/drawable-ldpi/hw_menu.png +++ /dev/null diff --git a/main/res/drawable-ldpi/main_about.png b/main/res/drawable-ldpi/main_about.png Binary files differdeleted file mode 100644 index 482e511..0000000 --- a/main/res/drawable-ldpi/main_about.png +++ /dev/null diff --git a/main/res/drawable-ldpi/main_settings.png b/main/res/drawable-ldpi/main_settings.png Binary files differdeleted file mode 100644 index a6c46b3..0000000 --- a/main/res/drawable-ldpi/main_settings.png +++ /dev/null diff --git a/main/res/drawable/actionbar_share.png b/main/res/drawable/actionbar_share.png Binary files differdeleted file mode 100644 index f323732..0000000 --- a/main/res/drawable/actionbar_share.png +++ /dev/null diff --git a/main/res/drawable/hw_menu.png b/main/res/drawable/hw_menu.png Binary files differdeleted file mode 100644 index ba7dee9..0000000 --- a/main/res/drawable/hw_menu.png +++ /dev/null diff --git a/main/res/drawable/main_about.png b/main/res/drawable/main_about.png Binary files differdeleted file mode 100644 index 61abcac..0000000 --- a/main/res/drawable/main_about.png +++ /dev/null diff --git a/main/res/drawable/main_settings.png b/main/res/drawable/main_settings.png Binary files differdeleted file mode 100644 index a0a624e..0000000 --- a/main/res/drawable/main_settings.png +++ /dev/null diff --git a/main/res/drawable/my_location.png b/main/res/drawable/my_location.png Binary files differdeleted file mode 100644 index cdb58c7..0000000 --- a/main/res/drawable/my_location.png +++ /dev/null diff --git a/main/res/drawable/my_location_arrow.png b/main/res/drawable/my_location_arrow.png Binary files differdeleted file mode 100644 index c8401d2..0000000 --- a/main/res/drawable/my_location_arrow.png +++ /dev/null diff --git a/main/res/layout/address_button.xml b/main/res/layout/address_button.xml deleted file mode 100644 index 5369282..0000000 --- a/main/res/layout/address_button.xml +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:id="@+id/button_map" - android:layout_height="wrap_content" - android:layout_width="fill_parent" - android:padding="5dip" > - <Button style="@style/button" - android:id="@+id/button" - android:singleLine="false" - android:gravity="left" /> -</LinearLayout>
\ No newline at end of file diff --git a/main/res/layout/touch.xml b/main/res/layout/touch.xml index 52378aa..de17c3d 100644 --- a/main/res/layout/touch.xml +++ b/main/res/layout/touch.xml @@ -23,65 +23,59 @@ android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" - android:layout_height="fill_parent" + android:layout_height="wrap_content" android:layout_marginTop="10dip" android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" - android:layout_marginTop="10dip" - android:orientation="vertical" > - <LinearLayout - android:layout_width="fill_parent" + android:orientation="horizontal" > + <Button style="@style/button" + android:id="@+id/type" + android:layout_width="0dip" + android:layout_weight="1"/> + <Button style="@style/button" + android:id="@+id/date" + android:layout_width="0dip" + android:layout_weight="1"/> + </LinearLayout> + <EditText style="@style/edittext" + android:id="@+id/tracking" + android:inputType="textCapCharacters" + android:hint="@string/trackable_code" /> + <EditText style="@style/edittext" + android:id="@+id/log" + android:hint="@string/log_new_log_text" + android:singleLine="false" + android:lines="5" + android:capitalize="sentences" /> + <LinearLayout android:id="@+id/tweet_box" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:orientation="horizontal" + android:layout_marginLeft="10dip" + android:layout_marginRight="10dip" + android:layout_marginBottom="5dip" + android:visibility="gone" > + <CheckBox android:id="@+id/tweet" + android:layout_width="wrap_content" android:layout_height="wrap_content" - android:orientation="horizontal" > - <Button style="@style/button" - android:id="@+id/type" - android:layout_width="0dip" - android:layout_weight="1"/> - <Button style="@style/button" - android:id="@+id/date" - android:layout_width="0dip" - android:layout_weight="1"/> - </LinearLayout> - <EditText style="@style/edittext" - android:id="@+id/tracking" - android:inputType="textCapCharacters" - android:hint="@string/trackable_code" /> - <EditText style="@style/edittext" - android:id="@+id/log" - android:hint="@string/log_new_log_text" - android:singleLine="false" - android:lines="5" - android:capitalize="sentences" /> - <LinearLayout android:id="@+id/tweet_box" - android:layout_width="fill_parent" + android:layout_gravity="left" + android:padding="1px" + android:gravity="center" /> + <TextView + android:layout_width="wrap_content" android:layout_height="wrap_content" - android:orientation="horizontal" - android:layout_marginLeft="10dip" - android:layout_marginRight="10dip" - android:layout_marginBottom="5dip" - android:visibility="gone" > - <CheckBox android:id="@+id/tweet" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - 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/visit_tweet" /> - </LinearLayout> - <Button style="@style/button" - android:id="@+id/post" - android:text="@string/log_post" /> + android:layout_gravity="center_vertical" + android:gravity="left" + android:paddingRight="3dip" + android:textSize="14dip" + android:textColor="?text_color" + android:text="@string/visit_tweet" /> </LinearLayout> + <Button style="@style/button" + android:id="@+id/post" + android:text="@string/log_post" /> </LinearLayout> </ScrollView> </LinearLayout> diff --git a/main/src/cgeo/geocaching/Settings.java b/main/src/cgeo/geocaching/Settings.java index 397c8b1..1a58a85 100644 --- a/main/src/cgeo/geocaching/Settings.java +++ b/main/src/cgeo/geocaching/Settings.java @@ -204,10 +204,8 @@ public final class Settings { @Override public void edit(Editor edit) { if (StringUtils.isBlank(memberStatus)) { - // erase password edit.remove(KEY_MEMBER_STATUS); } else { - // save password edit.putString(KEY_MEMBER_STATUS, memberStatus); } } diff --git a/main/src/cgeo/geocaching/connector/OXConnector.java b/main/src/cgeo/geocaching/connector/OXConnector.java index 7348421..755dbaa 100644 --- a/main/src/cgeo/geocaching/connector/OXConnector.java +++ b/main/src/cgeo/geocaching/connector/OXConnector.java @@ -2,7 +2,7 @@ package cgeo.geocaching.connector; import cgeo.geocaching.cgCache; -import org.apache.commons.lang3.StringUtils; +import java.util.regex.Pattern; /** * connector for OpenCaching.com @@ -10,9 +10,11 @@ import org.apache.commons.lang3.StringUtils; */ public class OXConnector extends AbstractConnector { + private static final Pattern PATTERN_GEOCODE = Pattern.compile("OX[A-Z0-9]+", Pattern.CASE_INSENSITIVE); + @Override public boolean canHandle(String geocode) { - return StringUtils.startsWithIgnoreCase(geocode, "OX"); + return PATTERN_GEOCODE.matcher(geocode).matches(); } @Override diff --git a/main/src/cgeo/geocaching/connector/gc/GCConnector.java b/main/src/cgeo/geocaching/connector/gc/GCConnector.java index 9f71f62..95e4921 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCConnector.java +++ b/main/src/cgeo/geocaching/connector/gc/GCConnector.java @@ -38,7 +38,10 @@ public class GCConnector extends AbstractConnector { @Override public boolean canHandle(String geocode) { - return StringUtils.startsWithIgnoreCase(geocode, "GC"); + if (geocode == null) { + return false; + } + return GCConstants.PATTERN_GC_CODE.matcher(geocode).matches(); } @Override diff --git a/main/src/cgeo/geocaching/connector/gc/GCConstants.java b/main/src/cgeo/geocaching/connector/gc/GCConstants.java index b166d95..cb4f896 100644 --- a/main/src/cgeo/geocaching/connector/gc/GCConstants.java +++ b/main/src/cgeo/geocaching/connector/gc/GCConstants.java @@ -143,8 +143,8 @@ public final class GCConstants { /** * Patterns for GC and TB codes */ - public final static Pattern PATTERN_GC_CODE = Pattern.compile("GC[0-9A-Z]*", Pattern.CASE_INSENSITIVE); - public final static Pattern PATTERN_TB_CODE = Pattern.compile("TB[0-9A-Z]*", Pattern.CASE_INSENSITIVE); + public final static Pattern PATTERN_GC_CODE = Pattern.compile("GC[0-9A-Z]+", Pattern.CASE_INSENSITIVE); + public final static Pattern PATTERN_TB_CODE = Pattern.compile("TB[0-9A-Z]+", Pattern.CASE_INSENSITIVE); /** Live Map since 14.02.2012 */ public final static Pattern PATTERN_USERSESSION = Pattern.compile("UserSession\\('([^']+)'"); diff --git a/main/src/cgeo/geocaching/connector/opencaching/OpenCachingConnector.java b/main/src/cgeo/geocaching/connector/opencaching/OpenCachingConnector.java index 7c13c5b..bfaa345 100644 --- a/main/src/cgeo/geocaching/connector/opencaching/OpenCachingConnector.java +++ b/main/src/cgeo/geocaching/connector/opencaching/OpenCachingConnector.java @@ -3,26 +3,27 @@ package cgeo.geocaching.connector.opencaching; import cgeo.geocaching.cgCache; import cgeo.geocaching.connector.AbstractConnector; -import org.apache.commons.lang3.StringUtils; - import java.util.regex.Pattern; public class OpenCachingConnector extends AbstractConnector { private final String host; private final String name; - private final String prefix; + private final Pattern codePattern; private static final Pattern gpxZipFilePattern = Pattern.compile("oc[a-z]{2,3}\\d{5,}\\.zip", Pattern.CASE_INSENSITIVE); public OpenCachingConnector(final String name, final String host, final String prefix) { this.name = name; this.host = host; - this.prefix = prefix; + codePattern = Pattern.compile(prefix + "[A-Z0-9]+", Pattern.CASE_INSENSITIVE); } @Override public boolean canHandle(String geocode) { - return StringUtils.startsWithIgnoreCase(geocode, prefix); + if (geocode == null) { + return false; + } + return codePattern.matcher(geocode).matches(); } @Override diff --git a/main/src/cgeo/geocaching/gcvote/GCVote.java b/main/src/cgeo/geocaching/gcvote/GCVote.java index 663fd20..c98d4d9 100644 --- a/main/src/cgeo/geocaching/gcvote/GCVote.java +++ b/main/src/cgeo/geocaching/gcvote/GCVote.java @@ -118,7 +118,7 @@ public final class GCVote { } } } catch (Exception e) { - Log.w(Settings.tag, "cgBase.getRating: Failed to parse guid"); + Log.w(Settings.tag, "GCVote.getRating: Failed to parse guid"); } if (guid == null) { continue; @@ -135,7 +135,7 @@ public final class GCVote { } } } catch (Exception e) { - Log.w(Settings.tag, "cgBase.getRating: Failed to parse loggedIn"); + Log.w(Settings.tag, "GCVote.getRating: Failed to parse loggedIn"); } float rating = 0; @@ -145,7 +145,7 @@ public final class GCVote { rating = Float.parseFloat(matcherRating.group(1)); } } catch (Exception e) { - Log.w(Settings.tag, "cgBase.getRating: Failed to parse rating"); + Log.w(Settings.tag, "GCVote.getRating: Failed to parse rating"); } if (rating <= 0) { continue; @@ -158,7 +158,7 @@ public final class GCVote { votes = Integer.parseInt(matcherVotes.group(1)); } } catch (Exception e) { - Log.w(Settings.tag, "cgBase.getRating: Failed to parse vote count"); + Log.w(Settings.tag, "GCVote.getRating: Failed to parse vote count"); } if (votes < 0) { continue; @@ -172,7 +172,7 @@ public final class GCVote { myVote = Float.parseFloat(matcherVote.group(1)); } } catch (Exception e) { - Log.w(Settings.tag, "cgBase.getRating: Failed to parse user's vote"); + Log.w(Settings.tag, "GCVote.getRating: Failed to parse user's vote"); } } @@ -183,7 +183,7 @@ public final class GCVote { } } } catch (Exception e) { - Log.e(Settings.tag, "cgBase.getRating: " + e.toString()); + Log.e(Settings.tag, "GCVote.getRating: " + e.toString()); } return ratings; @@ -238,6 +238,10 @@ public final class GCVote { } } + if (guids.isEmpty()) { + return; + } + try { final Map<String, GCVoteRating> ratings = GCVote.getRating(guids, null); diff --git a/tests/src/cgeo/geocaching/cgBaseTest.java b/tests/src/cgeo/geocaching/cgBaseTest.java index 6b7c6b6..b9c3586 100644 --- a/tests/src/cgeo/geocaching/cgBaseTest.java +++ b/tests/src/cgeo/geocaching/cgBaseTest.java @@ -21,7 +21,7 @@ public class cgBaseTest extends AndroidTestCase { public static void testRegEx() { String page = MockedCache.readCachePage("GC2CJPF"); assertEquals("blafoo", BaseUtils.getMatch(page, GCConstants.PATTERN_LOGIN_NAME, true, "???")); - assertEquals("Premium Member", BaseUtils.getMatch(page, GCConstants.PATTERN_MEMBER_STATUS, true, "???")); + assertTrue(page.contains("id=\"ctl00_hlRenew\"") || "Premium Member".equals(BaseUtils.getMatch(page, GCConstants.PATTERN_MEMBER_STATUS, true, "???"))); int cachesFound = Integer.parseInt(BaseUtils.getMatch(page, GCConstants.PATTERN_CACHES_FOUND, true, "0").replaceAll("[,.]", "")); assertTrue(cachesFound >= 491); } @@ -59,7 +59,6 @@ public class cgBaseTest extends AndroidTestCase { assertEquals(expected.getPersonalNote(), actual.getPersonalNote()); assertEquals(expected.isFound(), actual.isFound()); assertEquals(expected.isFavorite(), actual.isFavorite()); - System.out.println(expected.getFavoritePoints() + " " + actual.getFavoritePoints()); assertTrue(expected.getFavoritePoints() <= actual.getFavoritePoints()); assertEquals(expected.isWatchlist(), actual.isWatchlist()); assertEquals(expected.getHiddenDate().toString(), actual.getHiddenDate().toString()); diff --git a/tests/src/cgeo/geocaching/connector/ConnectorFactoryTest.java b/tests/src/cgeo/geocaching/connector/ConnectorFactoryTest.java index 41a819f..75beb2c 100644 --- a/tests/src/cgeo/geocaching/connector/ConnectorFactoryTest.java +++ b/tests/src/cgeo/geocaching/connector/ConnectorFactoryTest.java @@ -1,13 +1,14 @@ package cgeo.geocaching.connector; import cgeo.geocaching.connector.gc.GCConnector; +import cgeo.geocaching.connector.opencaching.OpenCachingConnector; import cgeo.geocaching.test.AbstractResourceInstrumentationTestCase; import cgeo.geocaching.test.mock.GC1ZXX2; public class ConnectorFactoryTest extends AbstractResourceInstrumentationTestCase { public static void testGetConnectors() { - IConnector[] connectors = ConnectorFactory.getConnectors(); + final IConnector[] connectors = ConnectorFactory.getConnectors(); assertNotNull(connectors); assertTrue(connectors.length > 0); // unknown connector must exist } @@ -19,12 +20,36 @@ public class ConnectorFactoryTest extends AbstractResourceInstrumentationTestCas assertFalse(ConnectorFactory.canHandle("[/start with special char")); } + public static void testGeocodeOpenCaching() { + assertTrue(ConnectorFactory.getConnector("OZ12345") instanceof OpenCachingConnector); // opencaching CZ + assertTrue(ConnectorFactory.getConnector("OC12345") instanceof OpenCachingConnector); // opencaching DE + assertTrue(ConnectorFactory.getConnector("OU12345") instanceof OpenCachingConnector); // opencaching US + assertTrue(ConnectorFactory.getConnector("OK12345") instanceof OpenCachingConnector); // opencaching UK + assertTrue(ConnectorFactory.getConnector("OJ12345") instanceof OpenCachingConnector); // opencaching JP + assertTrue(ConnectorFactory.getConnector("OS12345") instanceof OpenCachingConnector); // opencaching NO + assertTrue(ConnectorFactory.getConnector("OB12345") instanceof OpenCachingConnector); // opencaching NL + assertTrue(ConnectorFactory.getConnector("OP12345") instanceof OpenCachingConnector); // opencaching PL + } + + public static void testGeocodeInvalidFormat() throws Exception { + // all codes are invalid + assertTrue(ConnectorFactory.getConnector("GC") instanceof UnknownConnector); + assertTrue(ConnectorFactory.getConnector("OC") instanceof UnknownConnector); + assertTrue(ConnectorFactory.getConnector("OX") instanceof UnknownConnector); + assertTrue(ConnectorFactory.getConnector("GC 1234") instanceof UnknownConnector); + assertTrue(ConnectorFactory.getConnector("OC 1234") instanceof UnknownConnector); + assertTrue(ConnectorFactory.getConnector("OX 1234") instanceof UnknownConnector); + assertTrue(ConnectorFactory.getConnector("GC-1234") instanceof UnknownConnector); + assertTrue(ConnectorFactory.getConnector("OC-1234") instanceof UnknownConnector); + assertTrue(ConnectorFactory.getConnector("OX-1234") instanceof UnknownConnector); + } + public static void testGetConnectorCgCache() { assertEquals(GCConnector.getInstance(), ConnectorFactory.getConnector(new GC1ZXX2())); } public static void testGetConnectorString() { - IConnector connector = ConnectorFactory.getConnector("GC12345"); + final IConnector connector = ConnectorFactory.getConnector("GC12345"); assertNotNull(connector); assertEquals(GCConnector.getInstance().getName(), connector.getName()); } |
