aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.idea/inspectionProfiles/c_geo_standards.xml2
-rw-r--r--cgeo-calendar/.classpath1
-rw-r--r--cgeo-calendar/.settings/org.eclipse.jdt.ui.prefs29
-rw-r--r--cgeo-calendar/src/cgeo/calendar/AbstractAddEntry.java6
-rw-r--r--cgeo-calendar/src/cgeo/calendar/AddEntry.java4
-rw-r--r--cgeo-calendar/src/cgeo/calendar/AddEntryLevel14.java4
-rw-r--r--cgeo-calendar/src/cgeo/calendar/CalendarActivity.java5
-rw-r--r--cgeo-calendar/src/cgeo/calendar/CalendarEntry.java23
-rw-r--r--cgeo-calendar/src/cgeo/calendar/Compatibility.java4
-rw-r--r--cgeo-contacts/.classpath2
-rw-r--r--cgeo-contacts/.settings/org.eclipse.jdt.ui.prefs29
-rw-r--r--cgeo-contacts/org.eclipse.jdt.annotation_1.1.0.v20130513-1648.jarbin14613 -> 0 bytes
-rw-r--r--cgeo-contacts/src/cgeo/contacts/ContactsActivity.java6
-rw-r--r--main/.settings/org.eclipse.jdt.ui.prefs8
-rw-r--r--main/AndroidManifest.xml4
-rw-r--r--main/project.properties2
-rw-r--r--main/res/menu/cache_list_options.xml6
-rw-r--r--main/res/values/changelog_master.xml3
-rw-r--r--main/src/cgeo/calendar/CalendarAddon.java5
-rw-r--r--main/src/cgeo/calendar/ICalendar.java26
-rw-r--r--main/src/cgeo/contacts/ContactsAddon.java4
-rw-r--r--main/src/cgeo/contacts/IContacts.java10
-rw-r--r--main/src/cgeo/geocaching/AboutActivity.java1
-rw-r--r--main/src/cgeo/geocaching/CacheDetailActivity.java5
-rw-r--r--main/src/cgeo/geocaching/CacheListActivity.java43
-rw-r--r--main/src/cgeo/geocaching/ImagesActivity.java14
-rw-r--r--main/src/cgeo/geocaching/UsefulAppsActivity.java1
-rw-r--r--main/src/cgeo/geocaching/apps/AbstractApp.java19
-rw-r--r--main/src/cgeo/geocaching/apps/AbstractLocusApp.java21
-rw-r--r--main/src/cgeo/geocaching/apps/App.java3
-rw-r--r--main/src/cgeo/geocaching/apps/cache/AbstractGeneralApp.java6
-rw-r--r--main/src/cgeo/geocaching/apps/cache/navi/AbstractPointNavigationApp.java16
-rw-r--r--main/src/cgeo/geocaching/apps/cache/navi/AbstractStaticMapsApp.java9
-rw-r--r--main/src/cgeo/geocaching/apps/cachelist/CacheListApp.java2
-rw-r--r--main/src/cgeo/geocaching/apps/cachelist/CacheListAppFactory.java89
-rw-r--r--main/src/cgeo/geocaching/apps/cachelist/CacheListApps.java29
-rw-r--r--main/src/cgeo/geocaching/apps/cachelist/ListNavigationSelectionActionProvider.java70
-rw-r--r--main/src/cgeo/geocaching/gcvote/GCVoteDialog.java3
-rw-r--r--main/src/cgeo/geocaching/maps/CGeoMap.java2
-rw-r--r--main/src/cgeo/geocaching/sensors/RotationProvider.java1
-rw-r--r--main/src/cgeo/geocaching/utils/ProcessUtils.java17
-rw-r--r--main/thirdparty/menion/android/locus/LocusDataStorageProvider.java (renamed from main/src/cgeo/geocaching/apps/LocusDataStorageProvider.java)2
-rw-r--r--mapswithme-api/build.gradle39
-rw-r--r--mapswithme-api/project.properties2
-rw-r--r--mapswithme-api/res/layout/dlg_install_mwm.xml10
-rw-r--r--mapswithme-api/res/values/strings.xml9
-rw-r--r--mapswithme-api/src/com/mapswithme/maps/api/DownloadMapsWithMeDialog.java3
-rw-r--r--play-services-base/project.properties2
-rw-r--r--play-services-base/src/.gitkeep0
-rw-r--r--play-services-base/src/android/UnusedStub.java8
-rw-r--r--play-services-location/project.properties2
-rw-r--r--play-services-location/src/.gitkeep0
-rw-r--r--play-services-location/src/android/UnusedStub.java7
-rw-r--r--tests/.settings/org.eclipse.jdt.ui.prefs22
-rw-r--r--tests/res/layout/cgeo_tests_activity.xml3
-rw-r--r--tests/src/cgeo/geocaching/location/GeocoderTest.java3
-rw-r--r--tests/src/cgeo/geocaching/utils/ProcessUtilsTest.java4
-rw-r--r--tests/src/cgeo/junit/CgeoTestRunner.java39
58 files changed, 382 insertions, 307 deletions
diff --git a/.idea/inspectionProfiles/c_geo_standards.xml b/.idea/inspectionProfiles/c_geo_standards.xml
index e839710..41a24a9 100644
--- a/.idea/inspectionProfiles/c_geo_standards.xml
+++ b/.idea/inspectionProfiles/c_geo_standards.xml
@@ -454,7 +454,7 @@
<inspection_tool class="UnnecessaryCallToStringValueOf" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="UnnecessaryConstructor" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="UnnecessaryEnumModifier" enabled="true" level="WARNING" enabled_by_default="true" />
- <inspection_tool class="UnnecessaryFullyQualifiedName" enabled="true" level="WARNING" enabled_by_default="true">
+ <inspection_tool class="UnnecessaryFullyQualifiedName" enabled="true" level="WEAK WARNING" enabled_by_default="true">
<option name="m_ignoreJavadoc" value="false" />
</inspection_tool>
<inspection_tool class="UnnecessaryInheritDoc" enabled="true" level="WARNING" enabled_by_default="true" />
diff --git a/cgeo-calendar/.classpath b/cgeo-calendar/.classpath
index 2f1c26a..004d749 100644
--- a/cgeo-calendar/.classpath
+++ b/cgeo-calendar/.classpath
@@ -10,5 +10,6 @@
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
<classpathentry combineaccessrules="false" kind="src" path="/cgeo"/>
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
+ <classpathentry kind="lib" path="/cgeo/compile-libs/org.eclipse.jdt.annotation_1.1.0.v20130513-1648.jar"/>
<classpathentry kind="output" path="bin/classes"/>
</classpath>
diff --git a/cgeo-calendar/.settings/org.eclipse.jdt.ui.prefs b/cgeo-calendar/.settings/org.eclipse.jdt.ui.prefs
index 7616a5b..06e562c 100644
--- a/cgeo-calendar/.settings/org.eclipse.jdt.ui.prefs
+++ b/cgeo-calendar/.settings/org.eclipse.jdt.ui.prefs
@@ -1,4 +1,3 @@
-#Wed Sep 14 20:41:07 CEST 2011
eclipse.preferences.version=1
editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
formatter_profile=_cgeo
@@ -9,7 +8,7 @@ org.eclipse.jdt.ui.ondemandthreshold=99
org.eclipse.jdt.ui.staticondemandthreshold=99
sp_cleanup.add_default_serial_version_id=true
sp_cleanup.add_generated_serial_version_id=false
-sp_cleanup.add_missing_annotations=false
+sp_cleanup.add_missing_annotations=true
sp_cleanup.add_missing_deprecated_annotations=true
sp_cleanup.add_missing_methods=false
sp_cleanup.add_missing_nls_tags=false
@@ -20,15 +19,17 @@ sp_cleanup.always_use_blocks=true
sp_cleanup.always_use_parentheses_in_expressions=false
sp_cleanup.always_use_this_for_non_static_field_access=false
sp_cleanup.always_use_this_for_non_static_method_access=false
-sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.convert_functional_interfaces=false
+sp_cleanup.convert_to_enhanced_for_loop=true
sp_cleanup.correct_indentation=false
sp_cleanup.format_source_code=true
sp_cleanup.format_source_code_changes_only=true
-sp_cleanup.make_local_variable_final=false
-sp_cleanup.make_parameters_final=false
-sp_cleanup.make_private_fields_final=false
+sp_cleanup.insert_inferred_type_arguments=false
+sp_cleanup.make_local_variable_final=true
+sp_cleanup.make_parameters_final=true
+sp_cleanup.make_private_fields_final=true
sp_cleanup.make_type_abstract_if_missing_method=false
-sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.make_variable_declarations_final=true
sp_cleanup.never_use_blocks=false
sp_cleanup.never_use_parentheses_in_expressions=true
sp_cleanup.on_save_use_additional_actions=true
@@ -36,15 +37,16 @@ sp_cleanup.organize_imports=true
sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
-sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=true
sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_type_arguments=false
sp_cleanup.remove_trailing_whitespaces=true
sp_cleanup.remove_trailing_whitespaces_all=true
sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
-sp_cleanup.remove_unnecessary_casts=false
-sp_cleanup.remove_unnecessary_nls_tags=false
-sp_cleanup.remove_unused_imports=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
sp_cleanup.remove_unused_local_variables=false
sp_cleanup.remove_unused_private_fields=true
sp_cleanup.remove_unused_private_members=false
@@ -52,10 +54,13 @@ sp_cleanup.remove_unused_private_methods=true
sp_cleanup.remove_unused_private_types=true
sp_cleanup.sort_members=false
sp_cleanup.sort_members_all=false
-sp_cleanup.use_blocks=false
+sp_cleanup.use_anonymous_class_creation=false
+sp_cleanup.use_blocks=true
sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_lambda=false
sp_cleanup.use_parentheses_in_expressions=false
sp_cleanup.use_this_for_non_static_field_access=false
sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
sp_cleanup.use_this_for_non_static_method_access=false
sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+sp_cleanup.use_type_arguments=false
diff --git a/cgeo-calendar/src/cgeo/calendar/AbstractAddEntry.java b/cgeo-calendar/src/cgeo/calendar/AbstractAddEntry.java
index 893161c..e35ed19 100644
--- a/cgeo-calendar/src/cgeo/calendar/AbstractAddEntry.java
+++ b/cgeo-calendar/src/cgeo/calendar/AbstractAddEntry.java
@@ -1,13 +1,17 @@
package cgeo.calendar;
+import org.eclipse.jdt.annotation.NonNull;
+
import android.util.Log;
abstract class AbstractAddEntry {
+ @NonNull
protected final CalendarEntry entry;
+ @NonNull
protected final CalendarActivity activity;
- public AbstractAddEntry(final CalendarEntry entry, final CalendarActivity activity) {
+ public AbstractAddEntry(@NonNull final CalendarEntry entry, @NonNull final CalendarActivity activity) {
this.entry = entry;
this.activity = activity;
}
diff --git a/cgeo-calendar/src/cgeo/calendar/AddEntry.java b/cgeo-calendar/src/cgeo/calendar/AddEntry.java
index 30af346..a267e47 100644
--- a/cgeo-calendar/src/cgeo/calendar/AddEntry.java
+++ b/cgeo-calendar/src/cgeo/calendar/AddEntry.java
@@ -1,5 +1,7 @@
package cgeo.calendar;
+import org.eclipse.jdt.annotation.NonNull;
+
import android.content.ContentValues;
import android.net.Uri;
import android.text.Html;
@@ -16,7 +18,7 @@ class AddEntry extends AbstractAddEntry {
* @param calendarId
* The selected calendar
*/
- public AddEntry(final CalendarEntry entry, final CalendarActivity activity, final int calendarId) {
+ public AddEntry(@NonNull final CalendarEntry entry, @NonNull final CalendarActivity activity, final int calendarId) {
super(entry, activity);
this.calendarId = calendarId;
}
diff --git a/cgeo-calendar/src/cgeo/calendar/AddEntryLevel14.java b/cgeo-calendar/src/cgeo/calendar/AddEntryLevel14.java
index 11820b4..731a0f8 100644
--- a/cgeo-calendar/src/cgeo/calendar/AddEntryLevel14.java
+++ b/cgeo-calendar/src/cgeo/calendar/AddEntryLevel14.java
@@ -1,5 +1,7 @@
package cgeo.calendar;
+import org.eclipse.jdt.annotation.NonNull;
+
import android.content.Intent;
import android.text.Html;
@@ -12,7 +14,7 @@ import java.util.Date;
*/
class AddEntryLevel14 extends AbstractAddEntry {
- public AddEntryLevel14(final CalendarEntry entry, final CalendarActivity activity) {
+ public AddEntryLevel14(@NonNull final CalendarEntry entry, @NonNull final CalendarActivity activity) {
super(entry, activity);
}
diff --git a/cgeo-calendar/src/cgeo/calendar/CalendarActivity.java b/cgeo-calendar/src/cgeo/calendar/CalendarActivity.java
index 2f0c08d..e21de2b 100644
--- a/cgeo-calendar/src/cgeo/calendar/CalendarActivity.java
+++ b/cgeo-calendar/src/cgeo/calendar/CalendarActivity.java
@@ -1,5 +1,7 @@
package cgeo.calendar;
+import org.eclipse.jdt.annotation.NonNull;
+
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
@@ -47,7 +49,7 @@ public final class CalendarActivity extends Activity {
* @param entry
* new entry to be stored
*/
- private void selectCalendarForAdding(final CalendarEntry entry) {
+ private void selectCalendarForAdding(@NonNull final CalendarEntry entry) {
final SparseArray<String> calendars = queryCalendars();
if (calendars.size() == 0) {
@@ -80,6 +82,7 @@ public final class CalendarActivity extends Activity {
builder.create().show();
}
+ @NonNull
private SparseArray<String> queryCalendars() {
final SparseArray<String> calendars = new SparseArray<>();
diff --git a/cgeo-calendar/src/cgeo/calendar/CalendarEntry.java b/cgeo-calendar/src/cgeo/calendar/CalendarEntry.java
index 1e37d6b..8308b7b 100644
--- a/cgeo-calendar/src/cgeo/calendar/CalendarEntry.java
+++ b/cgeo-calendar/src/cgeo/calendar/CalendarEntry.java
@@ -3,6 +3,7 @@ package cgeo.calendar;
import cgeo.geocaching.utils.Log;
import org.apache.commons.lang3.CharEncoding;
+import org.eclipse.jdt.annotation.NonNull;
import android.net.Uri;
import android.text.Html;
@@ -16,16 +17,23 @@ import java.util.Date;
class CalendarEntry {
+ @NonNull
private final String shortDesc;
+ @NonNull
private final String hiddenDate;
+ @NonNull
private final String url;
+ @NonNull
private final String personalNote;
+ @NonNull
private final String name;
+ @NonNull
private final String coords;
private int startTimeMinutes = -1;
+ @NonNull
private final Uri uri;
- public CalendarEntry(final Uri uri) {
+ public CalendarEntry(@NonNull final Uri uri) {
this.uri = uri;
this.shortDesc = getParameter(ICalendar.PARAM_SHORT_DESC);
this.hiddenDate = getParameter(ICalendar.PARAM_HIDDEN_DATE);
@@ -43,7 +51,8 @@ class CalendarEntry {
}
}
- private String getParameter(final String paramKey) {
+ @NonNull
+ private String getParameter(@NonNull final String paramKey) {
try {
final String param = uri.getQueryParameter(paramKey);
if (param == null) {
@@ -60,18 +69,22 @@ class CalendarEntry {
return getName().length() > 0 && getHiddenDate().length() > 0;
}
+ @NonNull
public String getHiddenDate() {
return hiddenDate;
}
+ @NonNull
public String getUrl() {
return url;
}
+ @NonNull
public String getPersonalNote() {
return personalNote;
}
+ @NonNull
public String getShortDesc() {
return shortDesc;
}
@@ -79,6 +92,7 @@ class CalendarEntry {
/**
* @return <code>Date</code> based on hidden date. Time is set to 00:00:00.
*/
+ @NonNull
protected Date parseDate() {
try {
final Calendar cal = Calendar.getInstance();
@@ -90,13 +104,14 @@ class CalendarEntry {
return cal.getTime();
} catch (final NumberFormatException e) {
// cannot happen normally, but static code analysis does not know
+ throw new IllegalStateException("hidden date must be a valid date for cache calendar entries");
}
- return null;
}
/**
* @return description string with images removed and personal note included
*/
+ @NonNull
protected String parseDescription() {
final StringBuilder description = new StringBuilder();
description.append(getUrl());
@@ -121,6 +136,7 @@ class CalendarEntry {
return description.toString();
}
+ @NonNull
public String getName() {
return name;
}
@@ -129,6 +145,7 @@ class CalendarEntry {
return startTimeMinutes;
}
+ @NonNull
public String getCoords() {
return coords;
}
diff --git a/cgeo-calendar/src/cgeo/calendar/Compatibility.java b/cgeo-calendar/src/cgeo/calendar/Compatibility.java
index ff14a0f..61ea636 100644
--- a/cgeo-calendar/src/cgeo/calendar/Compatibility.java
+++ b/cgeo-calendar/src/cgeo/calendar/Compatibility.java
@@ -1,5 +1,7 @@
package cgeo.calendar;
+import org.eclipse.jdt.annotation.NonNull;
+
import android.net.Uri;
import android.os.Build;
@@ -9,10 +11,12 @@ public final class Compatibility {
private final static boolean IS_LEVEL_8 = SDK_VERSION >= 8;
private final static boolean IS_LEVEL_14 = SDK_VERSION >= 14;
+ @NonNull
public static Uri getCalendarProviderURI() {
return Uri.parse(IS_LEVEL_8 ? "content://com.android.calendar/calendars" : "content://calendar/calendars");
}
+ @NonNull
public static Uri getCalendarEventsProviderURI() {
return Uri.parse(IS_LEVEL_8 ? "content://com.android.calendar/events" : "content://calendar/events");
}
diff --git a/cgeo-contacts/.classpath b/cgeo-contacts/.classpath
index 448b12e..004d749 100644
--- a/cgeo-contacts/.classpath
+++ b/cgeo-contacts/.classpath
@@ -10,6 +10,6 @@
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
<classpathentry combineaccessrules="false" kind="src" path="/cgeo"/>
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
- <classpathentry kind="lib" path="org.eclipse.jdt.annotation_1.1.0.v20130513-1648.jar"/>
+ <classpathentry kind="lib" path="/cgeo/compile-libs/org.eclipse.jdt.annotation_1.1.0.v20130513-1648.jar"/>
<classpathentry kind="output" path="bin/classes"/>
</classpath>
diff --git a/cgeo-contacts/.settings/org.eclipse.jdt.ui.prefs b/cgeo-contacts/.settings/org.eclipse.jdt.ui.prefs
index 7616a5b..06e562c 100644
--- a/cgeo-contacts/.settings/org.eclipse.jdt.ui.prefs
+++ b/cgeo-contacts/.settings/org.eclipse.jdt.ui.prefs
@@ -1,4 +1,3 @@
-#Wed Sep 14 20:41:07 CEST 2011
eclipse.preferences.version=1
editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
formatter_profile=_cgeo
@@ -9,7 +8,7 @@ org.eclipse.jdt.ui.ondemandthreshold=99
org.eclipse.jdt.ui.staticondemandthreshold=99
sp_cleanup.add_default_serial_version_id=true
sp_cleanup.add_generated_serial_version_id=false
-sp_cleanup.add_missing_annotations=false
+sp_cleanup.add_missing_annotations=true
sp_cleanup.add_missing_deprecated_annotations=true
sp_cleanup.add_missing_methods=false
sp_cleanup.add_missing_nls_tags=false
@@ -20,15 +19,17 @@ sp_cleanup.always_use_blocks=true
sp_cleanup.always_use_parentheses_in_expressions=false
sp_cleanup.always_use_this_for_non_static_field_access=false
sp_cleanup.always_use_this_for_non_static_method_access=false
-sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.convert_functional_interfaces=false
+sp_cleanup.convert_to_enhanced_for_loop=true
sp_cleanup.correct_indentation=false
sp_cleanup.format_source_code=true
sp_cleanup.format_source_code_changes_only=true
-sp_cleanup.make_local_variable_final=false
-sp_cleanup.make_parameters_final=false
-sp_cleanup.make_private_fields_final=false
+sp_cleanup.insert_inferred_type_arguments=false
+sp_cleanup.make_local_variable_final=true
+sp_cleanup.make_parameters_final=true
+sp_cleanup.make_private_fields_final=true
sp_cleanup.make_type_abstract_if_missing_method=false
-sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.make_variable_declarations_final=true
sp_cleanup.never_use_blocks=false
sp_cleanup.never_use_parentheses_in_expressions=true
sp_cleanup.on_save_use_additional_actions=true
@@ -36,15 +37,16 @@ sp_cleanup.organize_imports=true
sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
-sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=true
sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_type_arguments=false
sp_cleanup.remove_trailing_whitespaces=true
sp_cleanup.remove_trailing_whitespaces_all=true
sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
-sp_cleanup.remove_unnecessary_casts=false
-sp_cleanup.remove_unnecessary_nls_tags=false
-sp_cleanup.remove_unused_imports=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
sp_cleanup.remove_unused_local_variables=false
sp_cleanup.remove_unused_private_fields=true
sp_cleanup.remove_unused_private_members=false
@@ -52,10 +54,13 @@ sp_cleanup.remove_unused_private_methods=true
sp_cleanup.remove_unused_private_types=true
sp_cleanup.sort_members=false
sp_cleanup.sort_members_all=false
-sp_cleanup.use_blocks=false
+sp_cleanup.use_anonymous_class_creation=false
+sp_cleanup.use_blocks=true
sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_lambda=false
sp_cleanup.use_parentheses_in_expressions=false
sp_cleanup.use_this_for_non_static_field_access=false
sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
sp_cleanup.use_this_for_non_static_method_access=false
sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+sp_cleanup.use_type_arguments=false
diff --git a/cgeo-contacts/org.eclipse.jdt.annotation_1.1.0.v20130513-1648.jar b/cgeo-contacts/org.eclipse.jdt.annotation_1.1.0.v20130513-1648.jar
deleted file mode 100644
index daca164..0000000
--- a/cgeo-contacts/org.eclipse.jdt.annotation_1.1.0.v20130513-1648.jar
+++ /dev/null
Binary files differ
diff --git a/cgeo-contacts/src/cgeo/contacts/ContactsActivity.java b/cgeo-contacts/src/cgeo/contacts/ContactsActivity.java
index 7d2f1e1..60accca 100644
--- a/cgeo-contacts/src/cgeo/contacts/ContactsActivity.java
+++ b/cgeo-contacts/src/cgeo/contacts/ContactsActivity.java
@@ -72,7 +72,7 @@ public final class ContactsActivity extends Activity {
}
}
- private void selectContact(final List<Pair<Integer, String>> contacts) {
+ private void selectContact(@NonNull final List<Pair<Integer, String>> contacts) {
final List<String> list = new ArrayList<>();
for (final Pair<Integer, String> p : contacts) {
list.add(p.second);
@@ -100,6 +100,7 @@ public final class ContactsActivity extends Activity {
finish();
}
+ @NonNull
private List<Pair<Integer, String>> getContacts(final @NonNull String searchName, final Uri uri, final @NonNull String idColumnName, final @NonNull String selectionColumnName, final boolean like) {
final String[] projection = new String[] { idColumnName, selectionColumnName };
final String selection = selectionColumnName + (like ? " LIKE" : " =") + " ? COLLATE NOCASE";
@@ -131,7 +132,8 @@ public final class ContactsActivity extends Activity {
toast.show();
}
- private static String getParameter(final Uri uri, final String paramKey) {
+ @NonNull
+ private static String getParameter(@NonNull final Uri uri, @NonNull final String paramKey) {
try {
final String param = uri.getQueryParameter(paramKey);
if (param == null) {
diff --git a/main/.settings/org.eclipse.jdt.ui.prefs b/main/.settings/org.eclipse.jdt.ui.prefs
index 4d4a905..d321d7d 100644
--- a/main/.settings/org.eclipse.jdt.ui.prefs
+++ b/main/.settings/org.eclipse.jdt.ui.prefs
@@ -12,7 +12,7 @@ org.eclipse.jdt.ui.overrideannotation=true
org.eclipse.jdt.ui.staticondemandthreshold=99
sp_cleanup.add_default_serial_version_id=true
sp_cleanup.add_generated_serial_version_id=false
-sp_cleanup.add_missing_annotations=false
+sp_cleanup.add_missing_annotations=true
sp_cleanup.add_missing_deprecated_annotations=true
sp_cleanup.add_missing_methods=false
sp_cleanup.add_missing_nls_tags=false
@@ -41,15 +41,15 @@ sp_cleanup.organize_imports=true
sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
-sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=true
sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
sp_cleanup.remove_private_constructors=true
sp_cleanup.remove_redundant_type_arguments=false
sp_cleanup.remove_trailing_whitespaces=true
sp_cleanup.remove_trailing_whitespaces_all=true
sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
-sp_cleanup.remove_unnecessary_casts=false
-sp_cleanup.remove_unnecessary_nls_tags=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
sp_cleanup.remove_unused_imports=true
sp_cleanup.remove_unused_local_variables=false
sp_cleanup.remove_unused_private_fields=true
diff --git a/main/AndroidManifest.xml b/main/AndroidManifest.xml
index ca3026a..9364d41 100644
--- a/main/AndroidManifest.xml
+++ b/main/AndroidManifest.xml
@@ -7,7 +7,7 @@
<uses-sdk
android:minSdkVersion="9"
- android:targetSdkVersion="19" />
+ android:targetSdkVersion="21" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
@@ -587,7 +587,7 @@
<!-- provide enhanced meta data for caches (and waypoints) when invoking Locus from c:geo -->
<provider
- android:name=".apps.LocusDataStorageProvider"
+ android:name="menion.android.locus.LocusDataStorageProvider"
android:authorities="cgeo.geocaching.apps.locusdatastorageprovider" />
<!-- search suggestions for the search bar at the top -->
diff --git a/main/project.properties b/main/project.properties
index 4dc8ffb..4fed171 100644
--- a/main/project.properties
+++ b/main/project.properties
@@ -11,7 +11,7 @@
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt:../play-services-base/proguard.txt:../play-services-location/proguard.txt
# Project target.
-target=Google Inc.:Google APIs:19
+target=Google Inc.:Google APIs:21
android.library.reference.1=../mapswithme-api
android.library.reference.2=../android-support-v7-appcompat
android.library.reference.3=../showcaseview
diff --git a/main/res/menu/cache_list_options.xml b/main/res/menu/cache_list_options.xml
index 8c2b066..30fe28a 100644
--- a/main/res/menu/cache_list_options.xml
+++ b/main/res/menu/cache_list_options.xml
@@ -53,12 +53,12 @@
android:visible="false">
</item>
<item
- android:id="@+id/submenu_cache_list_app"
+ android:id="@+id/menu_cache_list_app_provider"
+ android:actionProviderClass="cgeo.geocaching.apps.cachelist.ListNavigationSelectionActionProvider"
android:icon="@drawable/ic_menu_goto"
android:title="@string/caches_on_map"
+ app:actionProviderClass="cgeo.geocaching.apps.cachelist.ListNavigationSelectionActionProvider"
android:visible="false">
- <menu>
- </menu>
</item>
<item
android:id="@+id/menu_create_list"
diff --git a/main/res/values/changelog_master.xml b/main/res/values/changelog_master.xml
index 1e3c3d4..0576519 100644
--- a/main/res/values/changelog_master.xml
+++ b/main/res/values/changelog_master.xml
@@ -2,5 +2,8 @@
<resources>
<!-- changelog for the master branch -->
<string name="changelog_master" translatable="false">
+ <b>Next feature release:</b>\n
+ · Put features there\n
+ \n
</string>
</resources>
diff --git a/main/src/cgeo/calendar/CalendarAddon.java b/main/src/cgeo/calendar/CalendarAddon.java
index 8737447..c5bb0a6 100644
--- a/main/src/cgeo/calendar/CalendarAddon.java
+++ b/main/src/cgeo/calendar/CalendarAddon.java
@@ -8,6 +8,7 @@ import cgeo.geocaching.ui.dialog.Dialogs;
import cgeo.geocaching.utils.ProcessUtils;
import org.apache.commons.lang3.StringUtils;
+import org.eclipse.jdt.annotation.NonNull;
import android.app.Activity;
import android.content.DialogInterface;
@@ -27,7 +28,7 @@ public class CalendarAddon {
return ProcessUtils.isIntentAvailable(ICalendar.INTENT, Uri.parse(ICalendar.URI_SCHEME + "://" + ICalendar.URI_HOST));
}
- public static void addToCalendarWithIntent(final Activity activity, final Geocache cache) {
+ public static void addToCalendarWithIntent(@NonNull final Activity activity, @NonNull final Geocache cache) {
final Resources res = activity.getResources();
if (CalendarAddon.isAvailable()) {
final Date hiddenDate = cache.getHiddenDate();
@@ -51,7 +52,7 @@ public class CalendarAddon {
.append(res.getString(R.string.addon_download_prompt))
.toString(), new DialogInterface.OnClickListener() {
@Override
- public void onClick(DialogInterface dialog, int id) {
+ public void onClick(final DialogInterface dialog, final int id) {
final Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(ICalendar.CALENDAR_ADDON_URI));
activity.startActivity(intent);
diff --git a/main/src/cgeo/calendar/ICalendar.java b/main/src/cgeo/calendar/ICalendar.java
index 6ecb6d5..19089f0 100644
--- a/main/src/cgeo/calendar/ICalendar.java
+++ b/main/src/cgeo/calendar/ICalendar.java
@@ -1,19 +1,21 @@
package cgeo.calendar;
+import org.eclipse.jdt.annotation.NonNull;
+
public interface ICalendar {
- static final String CALENDAR_ADDON_URI = "market://details?id=cgeo.calendar";
+ @NonNull static final String CALENDAR_ADDON_URI = "market://details?id=cgeo.calendar";
- static final String INTENT = "cgeo.calendar.RESERVE";
+ @NonNull static final String INTENT = "cgeo.calendar.RESERVE";
- static final String URI_SCHEME = "add";
- static final String URI_HOST = "cgeo.org";
+ @NonNull static final String URI_SCHEME = "add";
+ @NonNull static final String URI_HOST = "cgeo.org";
- static final String PARAM_SHORT_DESC = "shortDesc"; // cache short description
- static final String PARAM_HIDDEN_DATE = "hiddenDate"; // cache hidden date in milliseconds
- static final String PARAM_URL = "url"; // cache URL
- static final String PARAM_NOTE = "note"; // personal note
- static final String PARAM_NAME = "name"; // cache name
- static final String PARAM_LOCATION = "location"; // cache location, or empty string
- static final String PARAM_COORDS = "coords"; // cache coordinates, or empty string
- static final String PARAM_START_TIME_MINUTES = "time"; // time of start
+ @NonNull static final String PARAM_SHORT_DESC = "shortDesc"; // cache short description
+ @NonNull static final String PARAM_HIDDEN_DATE = "hiddenDate"; // cache hidden date in milliseconds
+ @NonNull static final String PARAM_URL = "url"; // cache URL
+ @NonNull static final String PARAM_NOTE = "note"; // personal note
+ @NonNull static final String PARAM_NAME = "name"; // cache name
+ @NonNull static final String PARAM_LOCATION = "location"; // cache location, or empty string
+ @NonNull static final String PARAM_COORDS = "coords"; // cache coordinates, or empty string
+ @NonNull static final String PARAM_START_TIME_MINUTES = "time"; // time of start
}
diff --git a/main/src/cgeo/contacts/ContactsAddon.java b/main/src/cgeo/contacts/ContactsAddon.java
index 7165a77..6c0dd21 100644
--- a/main/src/cgeo/contacts/ContactsAddon.java
+++ b/main/src/cgeo/contacts/ContactsAddon.java
@@ -3,6 +3,8 @@ package cgeo.contacts;
import cgeo.geocaching.network.Parameters;
import cgeo.geocaching.utils.ProcessUtils;
+import org.eclipse.jdt.annotation.NonNull;
+
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
@@ -13,7 +15,7 @@ public class ContactsAddon {
// utility class
}
- public static void openContactCard(Activity context, String userName) {
+ public static void openContactCard(@NonNull final Activity context, @NonNull final String userName) {
final Parameters params = new Parameters(
IContacts.PARAM_NAME, userName
);
diff --git a/main/src/cgeo/contacts/IContacts.java b/main/src/cgeo/contacts/IContacts.java
index d68b78a..5a6c04d 100644
--- a/main/src/cgeo/contacts/IContacts.java
+++ b/main/src/cgeo/contacts/IContacts.java
@@ -1,10 +1,12 @@
package cgeo.contacts;
+import org.eclipse.jdt.annotation.NonNull;
+
public interface IContacts {
- static final String INTENT = "cgeo.contacts.FIND";
+ @NonNull static final String INTENT = "cgeo.contacts.FIND";
- static final String URI_SCHEME = "find";
- static final String URI_HOST = "cgeo.org";
+ @NonNull static final String URI_SCHEME = "find";
+ @NonNull static final String URI_HOST = "cgeo.org";
- static final String PARAM_NAME = "name"; // user name
+ @NonNull static final String PARAM_NAME = "name"; // user name
}
diff --git a/main/src/cgeo/geocaching/AboutActivity.java b/main/src/cgeo/geocaching/AboutActivity.java
index ceafc31..2f1c20a 100644
--- a/main/src/cgeo/geocaching/AboutActivity.java
+++ b/main/src/cgeo/geocaching/AboutActivity.java
@@ -190,6 +190,7 @@ public class AboutActivity extends AbstractViewPagerActivity<AboutActivity.Page>
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
}
+ @SuppressWarnings("deprecation")
final void market() {
final Intent marketIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + getPackageName()));
marketIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java
index 2be802f..05c593c 100644
--- a/main/src/cgeo/geocaching/CacheDetailActivity.java
+++ b/main/src/cgeo/geocaching/CacheDetailActivity.java
@@ -494,13 +494,12 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
CacheMenuHandler.addMenuItems(this, menu, cache);
- MenuItem menuItem = menu.findItem(R.id.menu_default_navigation);
+ final MenuItem menuItem = menu.findItem(R.id.menu_default_navigation);
final NavigationActionProvider navAction = (NavigationActionProvider) MenuItemCompat.getActionProvider(menuItem);
if (navAction != null) {
navAction.setNavigationSource(this);
}
- menuItem = menu.findItem(R.id.menu_navigate);
- NavigationSelectionActionProvider.initialize(menuItem, cache);
+ NavigationSelectionActionProvider.initialize(menu.findItem(R.id.menu_navigate), cache);
return true;
}
diff --git a/main/src/cgeo/geocaching/CacheListActivity.java b/main/src/cgeo/geocaching/CacheListActivity.java
index 9090a4e..c6cac21 100644
--- a/main/src/cgeo/geocaching/CacheListActivity.java
+++ b/main/src/cgeo/geocaching/CacheListActivity.java
@@ -9,7 +9,9 @@ import cgeo.geocaching.activity.FilteredActivity;
import cgeo.geocaching.activity.Progress;
import cgeo.geocaching.activity.ShowcaseViewBuilder;
import cgeo.geocaching.apps.cache.navi.NavigationAppFactory;
-import cgeo.geocaching.apps.cachelist.CacheListAppFactory;
+import cgeo.geocaching.apps.cachelist.CacheListApp;
+import cgeo.geocaching.apps.cachelist.CacheListApps;
+import cgeo.geocaching.apps.cachelist.ListNavigationSelectionActionProvider;
import cgeo.geocaching.compatibility.Compatibility;
import cgeo.geocaching.connector.gc.RecaptchaHandler;
import cgeo.geocaching.enumerations.CacheListType;
@@ -558,7 +560,6 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
public boolean onCreateOptionsMenu(final Menu menu) {
getMenuInflater().inflate(R.menu.cache_list_options, menu);
- CacheListAppFactory.addMenuItems(menu, this, res);
sortProvider = (SortActionProvider) MenuItemCompat.getActionProvider(menu.findItem(R.id.menu_sort));
assert sortProvider != null; // We set it in the XML file
sortProvider.setSelection(adapter.getCacheComparator());
@@ -579,6 +580,15 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
sortProvider.setSelection(selectedComparator);
}
});
+
+ ListNavigationSelectionActionProvider.initialize(menu.findItem(R.id.menu_cache_list_app_provider), new ListNavigationSelectionActionProvider.Callback() {
+
+ @Override
+ public void onListNavigationSelected(final CacheListApp app) {
+ app.invoke(cacheList, CacheListActivity.this, getFilteredSearch());
+ }
+ });
+
return true;
}
@@ -639,6 +649,11 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
setMenuItemLabel(menu, R.id.menu_remove_from_history, R.string.cache_remove_from_history, R.string.cache_clear_history);
menu.findItem(R.id.menu_import_android).setVisible(Compatibility.isStorageAccessFrameworkAvailable() && isOffline);
+
+ final List<CacheListApp> listNavigationApps = CacheListApps.getActiveApps();
+ menu.findItem(R.id.menu_cache_list_app_provider).setVisible(listNavigationApps.size() > 1);
+ menu.findItem(R.id.menu_cache_list_app).setVisible(listNavigationApps.size() == 1);
+
} catch (final RuntimeException e) {
Log.e("CacheListActivity.onPrepareOptionsMenu", e);
}
@@ -679,9 +694,6 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
@Override
public boolean onOptionsItemSelected(final MenuItem item) {
- if (super.onOptionsItemSelected(item)) {
- return true;
- }
switch (item.getItemId()) {
case R.id.menu_show_on_map:
goMap();
@@ -705,23 +717,23 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
case R.id.menu_import_android:
importGpxFromAndroid();
invalidateOptionsMenuCompatible();
- return false;
+ return true;
case R.id.menu_create_list:
new StoredList.UserInterface(this).promptForListCreation(getListSwitchingRunnable(), listNameMemento.getTerm());
refreshSpinnerAdapter();
invalidateOptionsMenuCompatible();
- return false;
+ return true;
case R.id.menu_drop_list:
removeList(false);
invalidateOptionsMenuCompatible();
- return false;
+ return true;
case R.id.menu_rename_list:
renameList();
- return false;
+ return true;
case R.id.menu_invert_selection:
adapter.invertSelection();
invalidateOptionsMenuCompatible();
- return false;
+ return true;
case R.id.menu_filter:
showFilterMenu(null);
return true;
@@ -737,7 +749,7 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
case R.id.menu_remove_from_history:
removeFromHistoryCheck();
invalidateOptionsMenuCompatible();
- return false;
+ return true;
case R.id.menu_move_to_list:
moveCachesToOtherList();
invalidateOptionsMenuCompatible();
@@ -751,13 +763,12 @@ public class CacheListActivity extends AbstractListActivity implements FilteredA
invalidateOptionsMenuCompatible();
return true;
case R.id.menu_cache_list_app:
- if (!cacheToShow()) {
- return false;
+ if (cacheToShow()) {
+ CacheListApps.getActiveApps().get(0).invoke(cacheList, this, getFilteredSearch());
}
- return CacheListAppFactory.onMenuItemSelected(item, cacheList, this, getFilteredSearch());
- default:
- return CacheListAppFactory.onMenuItemSelected(item, cacheList, this, search);
+ return true;
}
+ return super.onOptionsItemSelected(item);
}
private boolean cacheToShow() {
diff --git a/main/src/cgeo/geocaching/ImagesActivity.java b/main/src/cgeo/geocaching/ImagesActivity.java
index b75e5eb..975a720 100644
--- a/main/src/cgeo/geocaching/ImagesActivity.java
+++ b/main/src/cgeo/geocaching/ImagesActivity.java
@@ -6,6 +6,7 @@ import cgeo.geocaching.ui.ImagesList;
import cgeo.geocaching.ui.ImagesList.ImageType;
import org.apache.commons.collections4.CollectionUtils;
+
import rx.Subscription;
import android.content.Context;
@@ -28,7 +29,7 @@ public class ImagesActivity extends AbstractActionBarActivity {
private Subscription subscription;
@Override
- public void onCreate(Bundle savedInstanceState) {
+ public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// get parameters
@@ -78,11 +79,12 @@ public class ImagesActivity extends AbstractActionBarActivity {
super.onStop();
}
- public static void startActivityLogImages(final Context fromActivity, final String geocode, List<Image> logImages) {
+ public static void startActivityLogImages(final Context fromActivity, final String geocode, final List<Image> logImages) {
startActivity(fromActivity, geocode, logImages, ImageType.LogImages);
}
- private static void startActivity(final Context fromActivity, final String geocode, List<Image> logImages, ImageType imageType) {
+ @SuppressWarnings("deprecation")
+ private static void startActivity(final Context fromActivity, final String geocode, final List<Image> logImages, final ImageType imageType) {
final Intent logImgIntent = new Intent(fromActivity, ImagesActivity.class);
// if resuming our app within this activity, finish it and return to the cache activity
logImgIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET)
@@ -95,18 +97,18 @@ public class ImagesActivity extends AbstractActionBarActivity {
fromActivity.startActivity(logImgIntent);
}
- public static void startActivitySpoilerImages(final Context fromActivity, String geocode, List<Image> spoilers) {
+ public static void startActivitySpoilerImages(final Context fromActivity, final String geocode, final List<Image> spoilers) {
startActivity(fromActivity, geocode, spoilers, ImageType.SpoilerImages);
}
@Override
- public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
+ public void onCreateContextMenu(final ContextMenu menu, final View v, final ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
imagesList.onCreateContextMenu(menu, v);
}
@Override
- public boolean onContextItemSelected(MenuItem item) {
+ public boolean onContextItemSelected(final MenuItem item) {
if (imagesList.onContextItemSelected(item)) {
return true;
}
diff --git a/main/src/cgeo/geocaching/UsefulAppsActivity.java b/main/src/cgeo/geocaching/UsefulAppsActivity.java
index dd92350..b218c84 100644
--- a/main/src/cgeo/geocaching/UsefulAppsActivity.java
+++ b/main/src/cgeo/geocaching/UsefulAppsActivity.java
@@ -45,6 +45,7 @@ public class UsefulAppsActivity extends AbstractActionBarActivity {
this.packageName = packageName;
}
+ @SuppressWarnings("deprecation")
private void installFromMarket(final Activity activity) {
try {
// allow also opening pure http URLs in addition to market packages
diff --git a/main/src/cgeo/geocaching/apps/AbstractApp.java b/main/src/cgeo/geocaching/apps/AbstractApp.java
index 494e245..fa052f1 100644
--- a/main/src/cgeo/geocaching/apps/AbstractApp.java
+++ b/main/src/cgeo/geocaching/apps/AbstractApp.java
@@ -5,28 +5,31 @@ import cgeo.geocaching.Geocache;
import cgeo.geocaching.utils.ProcessUtils;
import org.apache.commons.lang3.StringUtils;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
import android.content.Intent;
public abstract class AbstractApp implements App {
- private final String packageName;
- private final String intent;
+ @Nullable private final String packageName;
+ @Nullable private final String intent;
+ @NonNull
private final String name;
/**
* a unique id, defined in res/values/ids.xml
*/
private final int id;
- protected AbstractApp(final String name, final int id, final String intent,
- final String packageName) {
+ protected AbstractApp(@NonNull final String name, final int id, @Nullable final String intent,
+ @Nullable final String packageName) {
this.name = name;
this.id = id;
this.intent = intent;
this.packageName = packageName;
}
- protected AbstractApp(final String name, final int id, final String intent) {
+ protected AbstractApp(@NonNull final String name, final int id, @Nullable final String intent) {
this(name, id, intent, null);
}
@@ -38,6 +41,7 @@ public abstract class AbstractApp implements App {
return ProcessUtils.isIntentAvailable(intent);
}
+ @Nullable
protected Intent getLaunchIntent() {
return ProcessUtils.getLaunchIntent(packageName);
}
@@ -48,6 +52,7 @@ public abstract class AbstractApp implements App {
}
@Override
+ @NonNull
public String getName() {
return name;
}
@@ -57,12 +62,12 @@ public abstract class AbstractApp implements App {
return id;
}
- protected static String getString(int ressourceId) {
+ protected static String getString(final int ressourceId) {
return CgeoApplication.getInstance().getString(ressourceId);
}
@Override
- public boolean isEnabled(Geocache cache) {
+ public boolean isEnabled(final Geocache cache) {
return cache != null;
}
}
diff --git a/main/src/cgeo/geocaching/apps/AbstractLocusApp.java b/main/src/cgeo/geocaching/apps/AbstractLocusApp.java
index baf36a4..f070ae8 100644
--- a/main/src/cgeo/geocaching/apps/AbstractLocusApp.java
+++ b/main/src/cgeo/geocaching/apps/AbstractLocusApp.java
@@ -8,6 +8,7 @@ import cgeo.geocaching.enumerations.CacheType;
import cgeo.geocaching.enumerations.WaypointType;
import cgeo.geocaching.utils.SynchronizedDateFormat;
+import menion.android.locus.LocusDataStorageProvider;
import menion.android.locus.addon.publiclib.DisplayData;
import menion.android.locus.addon.publiclib.LocusUtils;
import menion.android.locus.addon.publiclib.geoData.Point;
@@ -15,6 +16,9 @@ import menion.android.locus.addon.publiclib.geoData.PointGeocachingData;
import menion.android.locus.addon.publiclib.geoData.PointGeocachingDataWaypoint;
import menion.android.locus.addon.publiclib.geoData.PointsData;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+
import android.app.Activity;
import android.location.Location;
@@ -31,7 +35,7 @@ import java.util.Locale;
public abstract class AbstractLocusApp extends AbstractApp {
private static final SynchronizedDateFormat ISO8601DATE = new SynchronizedDateFormat("yyyy-MM-dd'T'", Locale.US);
- protected AbstractLocusApp(final String text, int id, final String intent) {
+ protected AbstractLocusApp(@NonNull final String text, final int id, @NonNull final String intent) {
super(text, id, intent);
}
@@ -57,7 +61,7 @@ public abstract class AbstractLocusApp extends AbstractApp {
final boolean withCacheDetails = objectsToShow.size() < 200;
final PointsData pd = new PointsData("c:geo");
- for (Object o : objectsToShow) {
+ for (final Object o : objectsToShow) {
Point p = null;
// get icon and Point
if (o instanceof Geocache) {
@@ -98,7 +102,8 @@ public abstract class AbstractLocusApp extends AbstractApp {
* should be false for all if more then 200 Caches are transferred
* @return null, when the <code>Point</code> could not be constructed
*/
- private static Point getCachePoint(Geocache cache, boolean withWaypoints, boolean withCacheDetails) {
+ @Nullable
+ private static Point getCachePoint(final Geocache cache, final boolean withWaypoints, final boolean withCacheDetails) {
if (cache == null || cache.getCoords() == null) {
return null;
}
@@ -141,14 +146,14 @@ public abstract class AbstractLocusApp extends AbstractApp {
if (withWaypoints && cache.hasWaypoints()) {
pg.waypoints = new ArrayList<>();
- for (Waypoint waypoint : cache.getWaypoints()) {
+ for (final Waypoint waypoint : cache.getWaypoints()) {
if (waypoint == null || waypoint.getCoords() == null) {
continue;
}
- PointGeocachingDataWaypoint wp = new PointGeocachingDataWaypoint();
+ final PointGeocachingDataWaypoint wp = new PointGeocachingDataWaypoint();
wp.code = waypoint.getGeocode();
wp.name = waypoint.getName();
- String locusWpId = toLocusWaypoint(waypoint.getWaypointType());
+ final String locusWpId = toLocusWaypoint(waypoint.getWaypointType());
if (locusWpId != null) {
wp.type = locusWpId;
}
@@ -177,7 +182,8 @@ public abstract class AbstractLocusApp extends AbstractApp {
* @param waypoint
* @return null, when the <code>Point</code> could not be constructed
*/
- private static Point getWaypointPoint(Waypoint waypoint) {
+ @Nullable
+ private static Point getWaypointPoint(final Waypoint waypoint) {
if (waypoint == null || waypoint.getCoords() == null) {
return null;
}
@@ -248,6 +254,7 @@ public abstract class AbstractLocusApp extends AbstractApp {
}
}
+ @Nullable
private static String toLocusWaypoint(final WaypointType wt) {
switch (wt) {
case FINAL:
diff --git a/main/src/cgeo/geocaching/apps/App.java b/main/src/cgeo/geocaching/apps/App.java
index 7e70581..db306ac 100644
--- a/main/src/cgeo/geocaching/apps/App.java
+++ b/main/src/cgeo/geocaching/apps/App.java
@@ -2,6 +2,8 @@ package cgeo.geocaching.apps;
import cgeo.geocaching.Geocache;
+import org.eclipse.jdt.annotation.NonNull;
+
public interface App {
public boolean isInstalled();
@@ -10,6 +12,7 @@ public interface App {
*/
public boolean isUsableAsDefaultNavigationApp();
+ @NonNull
public String getName();
/**
diff --git a/main/src/cgeo/geocaching/apps/cache/AbstractGeneralApp.java b/main/src/cgeo/geocaching/apps/cache/AbstractGeneralApp.java
index c4f2723..4e542b8 100644
--- a/main/src/cgeo/geocaching/apps/cache/AbstractGeneralApp.java
+++ b/main/src/cgeo/geocaching/apps/cache/AbstractGeneralApp.java
@@ -4,17 +4,19 @@ import cgeo.geocaching.Geocache;
import cgeo.geocaching.apps.AbstractApp;
import cgeo.geocaching.apps.cache.navi.CacheNavigationApp;
+import org.eclipse.jdt.annotation.NonNull;
+
import android.app.Activity;
import android.content.Intent;
abstract class AbstractGeneralApp extends AbstractApp implements CacheNavigationApp {
- protected AbstractGeneralApp(final String name, final int id, final String packageName) {
+ protected AbstractGeneralApp(@NonNull final String name, final int id, @NonNull final String packageName) {
super(name, id, null, packageName);
}
@Override
- public void navigate(Activity activity, Geocache cache) {
+ public void navigate(final Activity activity, final Geocache cache) {
final Intent intent = getLaunchIntent();
if (intent != null) {
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
diff --git a/main/src/cgeo/geocaching/apps/cache/navi/AbstractPointNavigationApp.java b/main/src/cgeo/geocaching/apps/cache/navi/AbstractPointNavigationApp.java
index 5e7a5cc..0bf2c1c 100644
--- a/main/src/cgeo/geocaching/apps/cache/navi/AbstractPointNavigationApp.java
+++ b/main/src/cgeo/geocaching/apps/cache/navi/AbstractPointNavigationApp.java
@@ -7,6 +7,8 @@ import cgeo.geocaching.activity.ActivityMixin;
import cgeo.geocaching.apps.AbstractApp;
import cgeo.geocaching.location.Geopoint;
+import org.eclipse.jdt.annotation.NonNull;
+
import android.app.Activity;
import android.content.Intent;
@@ -15,20 +17,20 @@ import android.content.Intent;
*/
abstract class AbstractPointNavigationApp extends AbstractApp implements CacheNavigationApp, WaypointNavigationApp, GeopointNavigationApp {
- protected AbstractPointNavigationApp(final String name, final int id, final String intent) {
+ protected AbstractPointNavigationApp(@NonNull final String name, final int id, final String intent) {
super(name, id, intent);
}
- protected AbstractPointNavigationApp(final String name, final int id, final String intent, final String packageName) {
+ protected AbstractPointNavigationApp(@NonNull final String name, final int id, final String intent, final String packageName) {
super(name, id, intent, packageName);
}
@Override
- public void navigate(Activity activity, Geocache cache) {
+ public void navigate(final Activity activity, final Geocache cache) {
navigateWithNullCheck(activity, cache.getCoords());
}
- private void navigateWithNullCheck(Activity activity, final Geopoint coords) {
+ private void navigateWithNullCheck(final Activity activity, final Geopoint coords) {
if (coords != null) {
navigate(activity, coords);
} else {
@@ -37,17 +39,17 @@ abstract class AbstractPointNavigationApp extends AbstractApp implements CacheNa
}
@Override
- public void navigate(Activity activity, Waypoint waypoint) {
+ public void navigate(final Activity activity, final Waypoint waypoint) {
navigateWithNullCheck(activity, waypoint.getCoords());
}
@Override
- public boolean isEnabled(Geocache cache) {
+ public boolean isEnabled(final Geocache cache) {
return cache.getCoords() != null;
}
@Override
- public boolean isEnabled(Waypoint waypoint) {
+ public boolean isEnabled(final Waypoint waypoint) {
return waypoint.getCoords() != null;
}
diff --git a/main/src/cgeo/geocaching/apps/cache/navi/AbstractStaticMapsApp.java b/main/src/cgeo/geocaching/apps/cache/navi/AbstractStaticMapsApp.java
index a2a5803..700c8aa 100644
--- a/main/src/cgeo/geocaching/apps/cache/navi/AbstractStaticMapsApp.java
+++ b/main/src/cgeo/geocaching/apps/cache/navi/AbstractStaticMapsApp.java
@@ -11,11 +11,12 @@ import cgeo.geocaching.activity.ActivityMixin;
import cgeo.geocaching.apps.AbstractApp;
import org.apache.commons.lang3.StringUtils;
+import org.eclipse.jdt.annotation.NonNull;
import android.app.Activity;
abstract class AbstractStaticMapsApp extends AbstractApp implements CacheNavigationApp, WaypointNavigationApp {
- protected AbstractStaticMapsApp(final String name, final int id) {
+ protected AbstractStaticMapsApp(@NonNull final String name, final int id) {
super(name, id, null);
}
@@ -29,11 +30,11 @@ abstract class AbstractStaticMapsApp extends AbstractApp implements CacheNavigat
return false;
}
- protected static boolean hasStaticMap(Waypoint waypoint) {
+ protected static boolean hasStaticMap(final Waypoint waypoint) {
if (waypoint==null) {
return false;
}
- String geocode = waypoint.getGeocode();
+ final String geocode = waypoint.getGeocode();
if (StringUtils.isNotEmpty(geocode) && DataStore.isOffline(geocode, null)) {
return StaticMapsProvider.hasStaticMapForWaypoint(geocode, waypoint);
}
@@ -49,7 +50,7 @@ abstract class AbstractStaticMapsApp extends AbstractApp implements CacheNavigat
}
final String geocode = StringUtils.upperCase(logable.getGeocode());
- StaticMapsActivity_.IntentBuilder_ builder = StaticMapsActivity_.intent(activity).geocode(geocode).download(download);
+ final StaticMapsActivity_.IntentBuilder_ builder = StaticMapsActivity_.intent(activity).geocode(geocode).download(download);
if (waypoint != null) {
builder.waypointId(waypoint.getId());
}
diff --git a/main/src/cgeo/geocaching/apps/cachelist/CacheListApp.java b/main/src/cgeo/geocaching/apps/cachelist/CacheListApp.java
index 40c4d92..8beb5e4 100644
--- a/main/src/cgeo/geocaching/apps/cachelist/CacheListApp.java
+++ b/main/src/cgeo/geocaching/apps/cachelist/CacheListApp.java
@@ -8,7 +8,7 @@ import android.app.Activity;
import java.util.List;
-interface CacheListApp extends App {
+public interface CacheListApp extends App {
boolean invoke(final List<Geocache> caches,
final Activity activity, final SearchResult search);
diff --git a/main/src/cgeo/geocaching/apps/cachelist/CacheListAppFactory.java b/main/src/cgeo/geocaching/apps/cachelist/CacheListAppFactory.java
deleted file mode 100644
index b6706a0..0000000
--- a/main/src/cgeo/geocaching/apps/cachelist/CacheListAppFactory.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package cgeo.geocaching.apps.cachelist;
-
-import cgeo.geocaching.Geocache;
-import cgeo.geocaching.R;
-import cgeo.geocaching.SearchResult;
-import cgeo.geocaching.activity.ActivityMixin;
-import cgeo.geocaching.apps.AbstractAppFactory;
-import cgeo.geocaching.utils.Log;
-
-import android.app.Activity;
-import android.content.res.Resources;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.SubMenu;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public final class CacheListAppFactory extends AbstractAppFactory {
-
- private CacheListAppFactory() {
- // utility class
- }
-
- private static class LazyHolder {
- public static final CacheListApp[] apps = {
- new InternalCacheListMap(),
- new LocusShowCacheListApp(),
- new LocusExportCacheListApp(),
- new MapsWithMeCacheListApp()
- };
- }
-
- /**
- * @param menu
- * @param activity
- * @param res
- */
- public static void addMenuItems(final Menu menu, final Activity activity, final Resources res) {
- final List<CacheListApp> activeApps = getActiveApps();
- if (activeApps.isEmpty()) {
- return;
- }
- if (activeApps.size() == 1) {
- final MenuItem subItem = menu.findItem(R.id.menu_cache_list_app);
- subItem.setVisible(true);
- subItem.setTitle(activeApps.get(0).getName());
- } else {
- final MenuItem subItem = menu.findItem(R.id.submenu_cache_list_app);
- subItem.setVisible(true);
- final SubMenu subMenu = subItem.getSubMenu();
- for (final CacheListApp app : activeApps) {
- subMenu.add(0, app.getId(), 0, app.getName());
- }
- }
- }
-
- private static List<CacheListApp> getActiveApps() {
- final List<CacheListApp> activeApps = new ArrayList<>(LazyHolder.apps.length);
- for (final CacheListApp app : LazyHolder.apps) {
- if (app.isInstalled()) {
- activeApps.add(app);
- }
- }
- return activeApps;
- }
-
- public static boolean onMenuItemSelected(final MenuItem item, final List<Geocache> caches, final Activity activity,
- final SearchResult search) {
- CacheListApp app;
- if (item.getItemId() == R.id.menu_cache_list_app) {
- app = getActiveApps().get(0);
- }
- else {
- app = (CacheListApp) getAppFromMenuItem(item, LazyHolder.apps);
- }
- if (app != null) {
- try {
- final boolean result = app.invoke(caches, activity, search);
- ActivityMixin.invalidateOptionsMenu(activity);
- return result;
- } catch (final Exception e) {
- Log.e("CacheListAppFactory.onMenuItemSelected", e);
- }
- }
- return false;
- }
-
-}
diff --git a/main/src/cgeo/geocaching/apps/cachelist/CacheListApps.java b/main/src/cgeo/geocaching/apps/cachelist/CacheListApps.java
new file mode 100644
index 0000000..e8e81a8
--- /dev/null
+++ b/main/src/cgeo/geocaching/apps/cachelist/CacheListApps.java
@@ -0,0 +1,29 @@
+package cgeo.geocaching.apps.cachelist;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public enum CacheListApps {
+ INTERNAL(new InternalCacheListMap()),
+ LOCUS_SHOW(new LocusShowCacheListApp()),
+ LOCUS_EXPORT(new LocusExportCacheListApp()),
+ MAPS_ME(new MapsWithMeCacheListApp());
+
+ private final CacheListApp app;
+
+ private CacheListApps(final CacheListApp app) {
+ this.app = app;
+ }
+
+ public static List<CacheListApp> getActiveApps() {
+ final List<CacheListApp> activeApps = new ArrayList<>();
+ for (final CacheListApps appEnum : values()) {
+ if (appEnum.app.isInstalled()) {
+ activeApps.add(appEnum.app);
+ }
+ }
+ return activeApps;
+ }
+
+}
+
diff --git a/main/src/cgeo/geocaching/apps/cachelist/ListNavigationSelectionActionProvider.java b/main/src/cgeo/geocaching/apps/cachelist/ListNavigationSelectionActionProvider.java
new file mode 100644
index 0000000..8fe3549
--- /dev/null
+++ b/main/src/cgeo/geocaching/apps/cachelist/ListNavigationSelectionActionProvider.java
@@ -0,0 +1,70 @@
+package cgeo.geocaching.apps.cachelist;
+
+import android.content.Context;
+import android.support.v4.view.ActionProvider;
+import android.support.v4.view.MenuItemCompat;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.MenuItem.OnMenuItemClickListener;
+import android.view.SubMenu;
+import android.view.View;
+
+import java.util.List;
+
+public class ListNavigationSelectionActionProvider extends ActionProvider {
+
+ public static interface Callback {
+ void onListNavigationSelected(final CacheListApp app);
+ }
+
+ private Callback callback;
+
+ public ListNavigationSelectionActionProvider(final Context context) {
+ super(context);
+ }
+
+ @Override
+ public boolean hasSubMenu() {
+ return true;
+ }
+
+ @Override
+ public View onCreateActionView() {
+ // must return null, otherwise the menu will not work
+ return null;
+ }
+
+ public void setCallback(final Callback callback) {
+ this.callback = callback;
+ }
+
+ @Override
+ public void onPrepareSubMenu(final SubMenu subMenu) {
+ subMenu.clear();
+ if (callback == null) {
+ return;
+ }
+ final List<CacheListApp> activeApps = CacheListApps.getActiveApps();
+ for (int i = 0; i < activeApps.size(); i++) {
+ final CacheListApp app = activeApps.get(i);
+ subMenu.add(Menu.NONE, i, Menu.NONE, app.getName()).setOnMenuItemClickListener(new OnMenuItemClickListener() {
+
+ @Override
+ public boolean onMenuItemClick(final MenuItem item) {
+ final CacheListApp app = activeApps.get(item.getItemId());
+ callback.onListNavigationSelected(app);
+ return true;
+ }
+ });
+ }
+ }
+
+ public static void initialize(final MenuItem menuItem, final Callback callback) {
+ final ActionProvider actionProvider = MenuItemCompat.getActionProvider(menuItem);
+ if (actionProvider instanceof ListNavigationSelectionActionProvider) {
+ final ListNavigationSelectionActionProvider navigateAction = (ListNavigationSelectionActionProvider) actionProvider;
+ navigateAction.setCallback(callback);
+ }
+ }
+
+}
diff --git a/main/src/cgeo/geocaching/gcvote/GCVoteDialog.java b/main/src/cgeo/geocaching/gcvote/GCVoteDialog.java
index e5717ab..0738274 100644
--- a/main/src/cgeo/geocaching/gcvote/GCVoteDialog.java
+++ b/main/src/cgeo/geocaching/gcvote/GCVoteDialog.java
@@ -87,9 +87,8 @@ public class GCVoteDialog {
cache.setMyVote(rating);
DataStore.saveChangedCache(cache);
return true;
- } else {
- Log.w("GCVoteDialog.vote: could not send vote");
}
+ Log.w("GCVoteDialog.vote: could not send vote");
}
} catch (final RuntimeException e) {
Log.e("GCVoteDialog.vote: could not send vote", e);
diff --git a/main/src/cgeo/geocaching/maps/CGeoMap.java b/main/src/cgeo/geocaching/maps/CGeoMap.java
index 457b06c..933fdbd 100644
--- a/main/src/cgeo/geocaching/maps/CGeoMap.java
+++ b/main/src/cgeo/geocaching/maps/CGeoMap.java
@@ -994,7 +994,7 @@ public class CGeoMap extends AbstractMap implements ViewFactory {
final boolean needsRepaintForHeading = needsRepaintForHeading();
if (needsRepaintForDistanceOrAccuracy) {
- if (map.followMyLocation) {
+ if (CGeoMap.followMyLocation) {
map.centerMap(new Geopoint(currentLocation));
}
}
diff --git a/main/src/cgeo/geocaching/sensors/RotationProvider.java b/main/src/cgeo/geocaching/sensors/RotationProvider.java
index 02dbc8c..c63e39f 100644
--- a/main/src/cgeo/geocaching/sensors/RotationProvider.java
+++ b/main/src/cgeo/geocaching/sensors/RotationProvider.java
@@ -43,6 +43,7 @@ public class RotationProvider extends LooperCallbacks<Float> implements SensorEv
return ((SensorManager) context.getSystemService(Context.SENSOR_SERVICE)).getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR) != null;
}
+ @TargetApi(19)
public static boolean hasGeomagneticRotationSensor(final Context context) {
return ((SensorManager) context.getSystemService(Context.SENSOR_SERVICE)).getDefaultSensor(Sensor.TYPE_GEOMAGNETIC_ROTATION_VECTOR) != null;
}
diff --git a/main/src/cgeo/geocaching/utils/ProcessUtils.java b/main/src/cgeo/geocaching/utils/ProcessUtils.java
index ce05483..4d45485 100644
--- a/main/src/cgeo/geocaching/utils/ProcessUtils.java
+++ b/main/src/cgeo/geocaching/utils/ProcessUtils.java
@@ -3,6 +3,8 @@ package cgeo.geocaching.utils;
import cgeo.geocaching.CgeoApplication;
import org.apache.commons.collections4.CollectionUtils;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
import android.content.Intent;
import android.content.pm.PackageInfo;
@@ -24,7 +26,7 @@ public final class ProcessUtils {
* @param packageName
* @return
*/
- public static boolean isLaunchable(final String packageName) {
+ public static boolean isLaunchable(@Nullable final String packageName) {
return getLaunchIntent(packageName) != null;
}
@@ -36,14 +38,14 @@ public final class ProcessUtils {
* @param packageName
* @return
*/
- public static boolean isInstalled(final String packageName) {
+ public static boolean isInstalled(@NonNull final String packageName) {
return isLaunchable(packageName) || hasPackageInstalled(packageName);
}
/**
* This will find installed applications even without launch intent (e.g. the streetview plugin).
*/
- private static boolean hasPackageInstalled(final String packageName) {
+ private static boolean hasPackageInstalled(@NonNull final String packageName) {
final List<PackageInfo> packs = CgeoApplication.getInstance().getPackageManager().getInstalledPackages(0);
for (final PackageInfo packageInfo : packs) {
if (packageName.equals(packageInfo.packageName)) {
@@ -56,7 +58,8 @@ public final class ProcessUtils {
/**
* This will find applications, which can be launched.
*/
- public static Intent getLaunchIntent(final String packageName) {
+ @Nullable
+ public static Intent getLaunchIntent(@Nullable final String packageName) {
if (packageName == null) {
return null;
}
@@ -79,16 +82,16 @@ public final class ProcessUtils {
* method queries the package manager for installed packages that can
* respond to an intent with the specified action. If no suitable package is
* found, this method returns false.
- *
+ *
* @param action
* The Intent action to check for availability.
* @param uri
* The Intent URI to check for availability.
- *
+ *
* @return True if an Intent with the specified action can be sent and
* responded to, false otherwise.
*/
- public static boolean isIntentAvailable(final String action, final Uri uri) {
+ public static boolean isIntentAvailable(@NonNull final String action, @Nullable final Uri uri) {
final PackageManager packageManager = CgeoApplication.getInstance().getPackageManager();
final Intent intent;
if (uri == null) {
diff --git a/main/src/cgeo/geocaching/apps/LocusDataStorageProvider.java b/main/thirdparty/menion/android/locus/LocusDataStorageProvider.java
index 03954f5..b575cb5 100644
--- a/main/src/cgeo/geocaching/apps/LocusDataStorageProvider.java
+++ b/main/thirdparty/menion/android/locus/LocusDataStorageProvider.java
@@ -1,4 +1,4 @@
-package cgeo.geocaching.apps;
+package menion.android.locus;
import menion.android.locus.addon.publiclib.geoData.PointsData;
import menion.android.locus.addon.publiclib.utils.DataCursor;
diff --git a/mapswithme-api/build.gradle b/mapswithme-api/build.gradle
index 86d5c77..94cd14f 100644
--- a/mapswithme-api/build.gradle
+++ b/mapswithme-api/build.gradle
@@ -1,34 +1,19 @@
apply plugin: 'android-library'
-dependencies {
- compile fileTree(dir: 'libs', include: '*.jar')
-}
-
android {
- compileSdkVersion 19
- buildToolsVersion "21.1.2"
- sourceSets {
- main {
- manifest.srcFile 'AndroidManifest.xml'
- java.srcDirs = ['src']
- resources.srcDirs = ['src']
- aidl.srcDirs = ['src']
- renderscript.srcDirs = ['src']
- res.srcDirs = ['res']
- assets.srcDirs = ['assets']
- }
+ // Define these properties in the gradle.properties file in the root project folder
+ compileSdkVersion propTargetSdkVersion.toInteger()
+ buildToolsVersion propBuildToolsVersion
- // Move the tests to tests/java, tests/res, etc...
- instrumentTest.setRoot('tests')
+ defaultConfig {
+ minSdkVersion propMinSdkVersion.toInteger()
+ targetSdkVersion propTargetSdkVersion.toInteger()
+ }
- // Move the build types to build-types/<type>
- // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
- // This moves them out of them default location under src/<type>/... which would
- // conflict with src/ being used by the main source set.
- // Adding new build types or product flavors should be accompanied
- // by a similar customization.
- debug.setRoot('build-types/debug')
- release.setRoot('build-types/release')
- }
+ sourceSets.main {
+ manifest.srcFile 'AndroidManifest.xml'
+ java.srcDirs = ['src']
+ res.srcDirs = ['res']
+ }
}
diff --git a/mapswithme-api/project.properties b/mapswithme-api/project.properties
index 91d2b02..93c8c3c 100644
--- a/mapswithme-api/project.properties
+++ b/mapswithme-api/project.properties
@@ -11,5 +11,5 @@
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
# Project target.
-target=android-19
+target=android-21
android.library=true
diff --git a/mapswithme-api/res/layout/dlg_install_mwm.xml b/mapswithme-api/res/layout/dlg_install_mwm.xml
index 0d174a8..1858369 100644
--- a/mapswithme-api/res/layout/dlg_install_mwm.xml
+++ b/mapswithme-api/res/layout/dlg_install_mwm.xml
@@ -54,16 +54,6 @@
android:background="@drawable/btn_green_selector"
android:text="@string/down_pro" />
- <Button
- android:id="@+id/btn_lite"
- style="@style/promoButton"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_weight="1"
- android:background="@drawable/btn_gray_selector"
- android:padding="6dp"
- android:text="@string/down_lite" />
-
</LinearLayout>
</ScrollView> \ No newline at end of file
diff --git a/mapswithme-api/res/values/strings.xml b/mapswithme-api/res/values/strings.xml
index 1955847..d9e3f27 100644
--- a/mapswithme-api/res/values/strings.xml
+++ b/mapswithme-api/res/values/strings.xml
@@ -1,9 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
- <string name="mwm_should_be_installed">Offline maps are required to proceed. We have partnered with MapsWithMe to provide you with offline maps of the entire world.\nTo continue please download the app:</string>
- <string name="down_lite">Download MapsWithMe Lite (free)</string>
- <string name="down_pro">Download MapsWithMe Pro</string>
-
- <string name="url_pro">http://mapswith.me/get</string>
- <string name="url_lite">http://mapswith.me/app</string>
+ <string name="mwm_should_be_installed">Offline maps are required to proceed. We have partnered with MAPS.ME to provide you with offline maps of the entire world.\nTo continue please download the app:</string>
+ <string name="down_pro">Download MAPS.ME</string>
+ <string name="url_pro">http://maps.me/get</string>
</resources> \ No newline at end of file
diff --git a/mapswithme-api/src/com/mapswithme/maps/api/DownloadMapsWithMeDialog.java b/mapswithme-api/src/com/mapswithme/maps/api/DownloadMapsWithMeDialog.java
index 5670a5f..480bbe1 100644
--- a/mapswithme-api/src/com/mapswithme/maps/api/DownloadMapsWithMeDialog.java
+++ b/mapswithme-api/src/com/mapswithme/maps/api/DownloadMapsWithMeDialog.java
@@ -41,7 +41,6 @@ public class DownloadMapsWithMeDialog extends Dialog implements android.view.Vie
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.dlg_install_mwm);
- findViewById(R.id.btn_lite).setOnClickListener(this);
findViewById(R.id.btn_pro).setOnClickListener(this);
setOwnerActivity(activity);
@@ -59,7 +58,7 @@ public class DownloadMapsWithMeDialog extends Dialog implements android.view.Vie
@Override
public void onClick(View v)
{
- String url = getContext().getString(v.getId() == R.id.btn_lite ? R.string.url_lite : R.string.url_pro);
+ String url = getContext().getString(R.string.url_pro);
onDownloadButtonClicked(url);
}
}
diff --git a/play-services-base/project.properties b/play-services-base/project.properties
index ad36a32..664c438 100644
--- a/play-services-base/project.properties
+++ b/play-services-base/project.properties
@@ -11,5 +11,5 @@
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard.txt
# Project target.
-target=Google Inc.:Google APIs:19
+target=Google Inc.:Google APIs:21
android.library=true
diff --git a/play-services-base/src/.gitkeep b/play-services-base/src/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/play-services-base/src/.gitkeep
diff --git a/play-services-base/src/android/UnusedStub.java b/play-services-base/src/android/UnusedStub.java
deleted file mode 100644
index 614f53b..0000000
--- a/play-services-base/src/android/UnusedStub.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package android;
-
-
-// unused file to avoid trouble with the empty src folder
-public class UnusedStub {
-
-}
-
diff --git a/play-services-location/project.properties b/play-services-location/project.properties
index 8a32119..51a7632 100644
--- a/play-services-location/project.properties
+++ b/play-services-location/project.properties
@@ -11,6 +11,6 @@
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard.txt
# Project target.
-target=Google Inc.:Google APIs:19
+target=Google Inc.:Google APIs:21
android.library=true
android.library.reference.1=../play-services-base
diff --git a/play-services-location/src/.gitkeep b/play-services-location/src/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/play-services-location/src/.gitkeep
diff --git a/play-services-location/src/android/UnusedStub.java b/play-services-location/src/android/UnusedStub.java
deleted file mode 100644
index c28e572..0000000
--- a/play-services-location/src/android/UnusedStub.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package android;
-
-// unused file to avoid trouble with the empty src folder
-public class UnusedStub {
-
-}
-
diff --git a/tests/.settings/org.eclipse.jdt.ui.prefs b/tests/.settings/org.eclipse.jdt.ui.prefs
index 1fda530..06e562c 100644
--- a/tests/.settings/org.eclipse.jdt.ui.prefs
+++ b/tests/.settings/org.eclipse.jdt.ui.prefs
@@ -8,7 +8,7 @@ org.eclipse.jdt.ui.ondemandthreshold=99
org.eclipse.jdt.ui.staticondemandthreshold=99
sp_cleanup.add_default_serial_version_id=true
sp_cleanup.add_generated_serial_version_id=false
-sp_cleanup.add_missing_annotations=false
+sp_cleanup.add_missing_annotations=true
sp_cleanup.add_missing_deprecated_annotations=true
sp_cleanup.add_missing_methods=false
sp_cleanup.add_missing_nls_tags=false
@@ -20,16 +20,16 @@ sp_cleanup.always_use_parentheses_in_expressions=false
sp_cleanup.always_use_this_for_non_static_field_access=false
sp_cleanup.always_use_this_for_non_static_method_access=false
sp_cleanup.convert_functional_interfaces=false
-sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.convert_to_enhanced_for_loop=true
sp_cleanup.correct_indentation=false
sp_cleanup.format_source_code=true
sp_cleanup.format_source_code_changes_only=true
sp_cleanup.insert_inferred_type_arguments=false
-sp_cleanup.make_local_variable_final=false
-sp_cleanup.make_parameters_final=false
-sp_cleanup.make_private_fields_final=false
+sp_cleanup.make_local_variable_final=true
+sp_cleanup.make_parameters_final=true
+sp_cleanup.make_private_fields_final=true
sp_cleanup.make_type_abstract_if_missing_method=false
-sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.make_variable_declarations_final=true
sp_cleanup.never_use_blocks=false
sp_cleanup.never_use_parentheses_in_expressions=true
sp_cleanup.on_save_use_additional_actions=true
@@ -37,16 +37,16 @@ sp_cleanup.organize_imports=true
sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
-sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=true
sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
sp_cleanup.remove_private_constructors=true
sp_cleanup.remove_redundant_type_arguments=false
sp_cleanup.remove_trailing_whitespaces=true
sp_cleanup.remove_trailing_whitespaces_all=true
sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
-sp_cleanup.remove_unnecessary_casts=false
-sp_cleanup.remove_unnecessary_nls_tags=false
-sp_cleanup.remove_unused_imports=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
sp_cleanup.remove_unused_local_variables=false
sp_cleanup.remove_unused_private_fields=true
sp_cleanup.remove_unused_private_members=false
@@ -55,7 +55,7 @@ sp_cleanup.remove_unused_private_types=true
sp_cleanup.sort_members=false
sp_cleanup.sort_members_all=false
sp_cleanup.use_anonymous_class_creation=false
-sp_cleanup.use_blocks=false
+sp_cleanup.use_blocks=true
sp_cleanup.use_blocks_only_for_return_and_throw=false
sp_cleanup.use_lambda=false
sp_cleanup.use_parentheses_in_expressions=false
diff --git a/tests/res/layout/cgeo_tests_activity.xml b/tests/res/layout/cgeo_tests_activity.xml
index 43225ac..d035210 100644
--- a/tests/res/layout/cgeo_tests_activity.xml
+++ b/tests/res/layout/cgeo_tests_activity.xml
@@ -13,6 +13,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
+ android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_gravity="center_vertical"
android:gravity="center_vertical"
@@ -27,6 +28,7 @@
android:layout_height="fill_parent"
android:layout_above="@+id/buttonRun"
android:layout_alignParentLeft="true"
+ android:layout_alignParentStart="true"
android:layout_below="@+id/headline" >
<TextView
@@ -43,6 +45,7 @@
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="false"
+ android:layout_alignParentStart="false"
android:onClick="runTests"
android:text="@string/run_tests" />
diff --git a/tests/src/cgeo/geocaching/location/GeocoderTest.java b/tests/src/cgeo/geocaching/location/GeocoderTest.java
index 0cc1a79..937c75d 100644
--- a/tests/src/cgeo/geocaching/location/GeocoderTest.java
+++ b/tests/src/cgeo/geocaching/location/GeocoderTest.java
@@ -49,7 +49,8 @@ public class GeocoderTest extends CGeoTestCase {
if (withAddress) {
assertThat(StringUtils.lowerCase(address.getAddressLine(0))).as(describe("street address", geocoder)).startsWith("46 rue barrault");
assertThat(address.getLocality()).as(describe("locality", geocoder)).isEqualTo("Paris");
- assertThat(address.getCountryName()).as(describe("country name", geocoder)).isEqualTo("France");
+ assertThat(address.getCountryCode()).as(describe("country code", geocoder)).isEqualTo("FR");
+ // don't assert on country name, as this can be localized, e.g. with the mapquest geocoder
}
}
diff --git a/tests/src/cgeo/geocaching/utils/ProcessUtilsTest.java b/tests/src/cgeo/geocaching/utils/ProcessUtilsTest.java
index 2c6ed18..b442c8a 100644
--- a/tests/src/cgeo/geocaching/utils/ProcessUtilsTest.java
+++ b/tests/src/cgeo/geocaching/utils/ProcessUtilsTest.java
@@ -6,7 +6,7 @@ import junit.framework.TestCase;
public class ProcessUtilsTest extends TestCase {
public static void testIsInstalled() {
- assertThat(ProcessUtils.isInstalled("com.android.launcher")).isTrue();
+ assertThat(ProcessUtils.isInstalled("com.android.settings")).isTrue();
}
public static void testIsInstalledNotLaunchable() {
@@ -16,7 +16,7 @@ public class ProcessUtilsTest extends TestCase {
}
public static void testIsLaunchable() {
- assertThat(ProcessUtils.isInstalled("com.android.settings")).isTrue();
+ assertThat(ProcessUtils.isLaunchable("com.android.settings")).isTrue();
}
}
diff --git a/tests/src/cgeo/junit/CgeoTestRunner.java b/tests/src/cgeo/junit/CgeoTestRunner.java
index 16a5f12..94803cf 100644
--- a/tests/src/cgeo/junit/CgeoTestRunner.java
+++ b/tests/src/cgeo/junit/CgeoTestRunner.java
@@ -11,10 +11,12 @@ import android.util.Log;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
/**
* Test runner which derives from the newer Google instrumentation test runner used by the Espresso test framework. It
- * adds junit report functionality by cloning the behaviour of the {@link JUnitReportTestRunner}.
+ * adds junit report functionality by cloning the behavior of the {@link JUnitReportTestRunner}.
*
*/
public class CgeoTestRunner extends GoogleInstrumentationTestRunner {
@@ -86,21 +88,32 @@ public class CgeoTestRunner extends GoogleInstrumentationTestRunner {
@Override
public void start() {
- mListener = new JUnitReportListener(getContext(), getTargetContext(), mReportFile, mReportDir, mFilterTraces, mMultiFile);
- try {
- Class<?> c = getClass();
- Field bridgeTestRunner = c.getSuperclass().getDeclaredField("bridgeTestRunner");
- bridgeTestRunner.setAccessible(true);
- Object obj = bridgeTestRunner.get(this);
- Method m = obj.getClass().getDeclaredMethod("getAndroidTestRunner", (Class[]) null);
- AndroidTestRunner androidTestRunner = (AndroidTestRunner) m.invoke(obj);
- androidTestRunner.addTestListener(mListener);
- } catch (NoSuchFieldException | InvocationTargetException | IllegalAccessException | NoSuchMethodException | SecurityException x) {
- Log.e(LOG_TAG, x.toString());
- }
+ makeAndroidTestRunnerAccessible();
super.start();
}
+ private void makeAndroidTestRunnerAccessible() {
+ AccessController.doPrivileged(new PrivilegedAction<Void>() {
+ @Override
+ public Void run() {
+ mListener = new JUnitReportListener(getContext(), getTargetContext(), mReportFile, mReportDir, mFilterTraces, mMultiFile);
+ try {
+ Class<?> c = getClass();
+ Field bridgeTestRunner = c.getSuperclass().getDeclaredField("bridgeTestRunner");
+ bridgeTestRunner.setAccessible(true);
+ Object obj = bridgeTestRunner.get(this);
+ Method m = obj.getClass().getDeclaredMethod("getAndroidTestRunner", (Class[]) null);
+ AndroidTestRunner androidTestRunner = (AndroidTestRunner) m.invoke(obj);
+ androidTestRunner.addTestListener(mListener);
+ } catch (NoSuchFieldException | InvocationTargetException | IllegalAccessException
+ | NoSuchMethodException | SecurityException x) {
+ Log.e(LOG_TAG, x.toString());
+ }
+ return null;
+ }
+ });
+ }
+
@Override
public void finish(int resultCode, Bundle results) {
if (mListener != null) {