From e48fdfd0d3683994c458a26993a249061d9bf3b1 Mon Sep 17 00:00:00 2001 From: Tobias Preuss Date: Fri, 7 Jun 2013 03:27:52 +0200 Subject: [PATCH 1/3] Split project into library and sample project. + For detailed information see README.md and CHANGELOG.md. --- .classpath | 7 -- .gitignore | 67 ++++++++++- .project | 33 ------ AndroidManifest.xml | 21 ---- CHANGELOG.md | 24 ++++ MapChangeLibrary/AndroidManifest.xml | 9 ++ MapChangeLibrary/pom.xml | 58 +++++++++ proguard.cfg => MapChangeLibrary/proguard.cfg | 0 .../res}/drawable-hdpi/icon.png | Bin .../res}/drawable-ldpi/icon.png | Bin .../res}/drawable-mdpi/icon.png | Bin .../res}/values/strings.xml | 0 .../mapchange/MyMapView.java | 50 ++++---- .../mapchange/MyOverlay.java | 24 ++-- MapChangeSample/AndroidManifest.xml | 16 +++ MapChangeSample/pom.xml | 90 ++++++++++++++ MapChangeSample/proguard.cfg | 36 ++++++ MapChangeSample/res/drawable-hdpi/icon.png | Bin 0 -> 4147 bytes MapChangeSample/res/drawable-ldpi/icon.png | Bin 0 -> 1723 bytes MapChangeSample/res/drawable-mdpi/icon.png | Bin 0 -> 2574 bytes {res => MapChangeSample/res}/layout/map.xml | 6 +- MapChangeSample/res/values/strings.xml | 4 + .../mapchange/MyMapActivity.java | 24 ++-- README.md | 43 ++++++- pom.xml | 110 ++++++++++++++++++ project.properties | 11 -- release/MapChange.apk | Bin 17042 -> 0 bytes 27 files changed, 503 insertions(+), 130 deletions(-) delete mode 100644 .classpath delete mode 100644 .project delete mode 100644 AndroidManifest.xml create mode 100644 CHANGELOG.md create mode 100644 MapChangeLibrary/AndroidManifest.xml create mode 100644 MapChangeLibrary/pom.xml rename proguard.cfg => MapChangeLibrary/proguard.cfg (100%) rename {res => MapChangeLibrary/res}/drawable-hdpi/icon.png (100%) rename {res => MapChangeLibrary/res}/drawable-ldpi/icon.png (100%) rename {res => MapChangeLibrary/res}/drawable-mdpi/icon.png (100%) rename {res => MapChangeLibrary/res}/values/strings.xml (100%) rename {src => MapChangeLibrary/src}/com/bricolsoftconsulting/mapchange/MyMapView.java (96%) rename {src => MapChangeLibrary/src}/com/bricolsoftconsulting/mapchange/MyOverlay.java (98%) create mode 100644 MapChangeSample/AndroidManifest.xml create mode 100644 MapChangeSample/pom.xml create mode 100644 MapChangeSample/proguard.cfg create mode 100644 MapChangeSample/res/drawable-hdpi/icon.png create mode 100644 MapChangeSample/res/drawable-ldpi/icon.png create mode 100644 MapChangeSample/res/drawable-mdpi/icon.png rename {res => MapChangeSample/res}/layout/map.xml (93%) create mode 100644 MapChangeSample/res/values/strings.xml rename {src => MapChangeSample/src}/com/bricolsoftconsulting/mapchange/MyMapActivity.java (95%) create mode 100644 pom.xml delete mode 100644 project.properties delete mode 100644 release/MapChange.apk diff --git a/.classpath b/.classpath deleted file mode 100644 index 6c635c0..0000000 --- a/.classpath +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/.gitignore b/.gitignore index 0e19489..7100567 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,13 @@ -# Built app files +# Android Tools +# Is generated when importing via Eclipse +project.properties + + +# Android ########################### +# Source: https://github.com/github/gitignore/blob/master/Android.gitignore + +# Built application files +*.apk *.ap_ # files for the dex VM @@ -12,4 +21,58 @@ bin/ gen/ # Local configuration file (sdk path, etc) -local.properties \ No newline at end of file +local.properties + +# Eclipse project files +.classpath +.project + +# Proguard folder generated by Eclipse +proguard/ + +# Intellij project files +*.iml +*.ipr +*.iws +.idea/ +gen-external-apklibs + + + +# Maven ########################### +https://github.com/github/gitignore/blob/master/Maven.gitignore + +# Maven build folder +target/ + + + +# Eclipse ########################### +# Source: https://raw.github.com/github/gitignore/master/Global/Eclipse.gitignore + +*.pydevproject +.project +.metadata +bin/** +tmp/** +tmp/**/* +*.tmp +*.bak +*.swp +*~.nib +local.properties +.classpath +.settings/ +.loadpath + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# CDT-specific +.cproject + +# PDT-specific +.buildpath diff --git a/.project b/.project deleted file mode 100644 index c4f1c03..0000000 --- a/.project +++ /dev/null @@ -1,33 +0,0 @@ - - - MapChange - - - - - - com.android.ide.eclipse.adt.ResourceManagerBuilder - - - - - com.android.ide.eclipse.adt.PreCompilerBuilder - - - - - org.eclipse.jdt.core.javabuilder - - - - - com.android.ide.eclipse.adt.ApkBuilder - - - - - - com.android.ide.eclipse.adt.AndroidNature - org.eclipse.jdt.core.javanature - - diff --git a/AndroidManifest.xml b/AndroidManifest.xml deleted file mode 100644 index 8ad3e24..0000000 --- a/AndroidManifest.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..7fb45e9 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,24 @@ +Change Log +=============================================================================== + +Version 0.1.0-SNAPSHOT *(2013-06-07)* +------------------------------------- +* Split the project into a separate library and sample project. +* Add Maven support. +* Successfully tested with Eclipse 4.2.2, IntelliJ 12.1.3, Android Studio 0.1.1. +* Remove project files generated by Eclipse. +* Update .gitignore to exclude IDE noise and generated files. +* Remove .apk from repository. +* Set version tag to `0.1.0-SNAPSHOT`. +* Update `README.md`. +* Add this changelog file. + + +No official version *(2012-12-03)* +------------------------------------- +* Add support for double tap gesture. Allows to zoom in the map. + + +No official version *(2011-10-31)* +------------------------------------- +* Original release. diff --git a/MapChangeLibrary/AndroidManifest.xml b/MapChangeLibrary/AndroidManifest.xml new file mode 100644 index 0000000..2ec6bd9 --- /dev/null +++ b/MapChangeLibrary/AndroidManifest.xml @@ -0,0 +1,9 @@ + + + + + + diff --git a/MapChangeLibrary/pom.xml b/MapChangeLibrary/pom.xml new file mode 100644 index 0000000..5c14295 --- /dev/null +++ b/MapChangeLibrary/pom.xml @@ -0,0 +1,58 @@ + + + + + + 4.0.0 + + com.bricolsoftconsulting + mapchange-library + 0.1.0-SNAPSHOT + apklib + MapChange Library + https://github.com/bricolsoftconsulting/MapChangeLibrary + Google Maps notifications on panning, zooming or both + + + com.bricolsoftconsulting + mapchange-parent + 0.1.0-SNAPSHOT + + + + ${project.artifactId} + + src + + + com.jayway.maven.plugins.android.generation2 + android-maven-plugin + ${android-maven-plugin.version} + + + ${sdk.platform} + + + true + + + + diff --git a/proguard.cfg b/MapChangeLibrary/proguard.cfg similarity index 100% rename from proguard.cfg rename to MapChangeLibrary/proguard.cfg diff --git a/res/drawable-hdpi/icon.png b/MapChangeLibrary/res/drawable-hdpi/icon.png similarity index 100% rename from res/drawable-hdpi/icon.png rename to MapChangeLibrary/res/drawable-hdpi/icon.png diff --git a/res/drawable-ldpi/icon.png b/MapChangeLibrary/res/drawable-ldpi/icon.png similarity index 100% rename from res/drawable-ldpi/icon.png rename to MapChangeLibrary/res/drawable-ldpi/icon.png diff --git a/res/drawable-mdpi/icon.png b/MapChangeLibrary/res/drawable-mdpi/icon.png similarity index 100% rename from res/drawable-mdpi/icon.png rename to MapChangeLibrary/res/drawable-mdpi/icon.png diff --git a/res/values/strings.xml b/MapChangeLibrary/res/values/strings.xml similarity index 100% rename from res/values/strings.xml rename to MapChangeLibrary/res/values/strings.xml diff --git a/src/com/bricolsoftconsulting/mapchange/MyMapView.java b/MapChangeLibrary/src/com/bricolsoftconsulting/mapchange/MyMapView.java similarity index 96% rename from src/com/bricolsoftconsulting/mapchange/MyMapView.java rename to MapChangeLibrary/src/com/bricolsoftconsulting/mapchange/MyMapView.java index b5c2430..d725cf8 100644 --- a/src/com/bricolsoftconsulting/mapchange/MyMapView.java +++ b/MapChangeLibrary/src/com/bricolsoftconsulting/mapchange/MyMapView.java @@ -1,5 +1,5 @@ /* -Copyright 2012 Bricolsoft Consulting +Copyright 2013 Bricolsoft Consulting Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -24,21 +24,21 @@ import com.google.android.maps.MapView; public class MyMapView extends MapView -{ +{ // ------------------------------------------------------------------------ // LISTENER DEFINITIONS // ------------------------------------------------------------------------ - + // Change listener public interface OnChangeListener { public void onChange(MapView view, GeoPoint newCenter, GeoPoint oldCenter, int newZoom, int oldZoom); } - + // ------------------------------------------------------------------------ // MEMBERS // ------------------------------------------------------------------------ - + private MyMapView mThis; private long mEventsTimeout = 250L; // Set this variable to your preferred timeout private boolean mIsTouched = false; @@ -46,11 +46,11 @@ public interface OnChangeListener private int mLastZoomLevel; //private Timer mChangeDelayTimer = new Timer(); private MyMapView.OnChangeListener mChangeListener = null; - + // ------------------------------------------------------------------------ // RUNNABLES // ------------------------------------------------------------------------ - + private Runnable mOnChangeTask = new Runnable() { @Override @@ -58,43 +58,43 @@ public void run() { if (mChangeListener != null) mChangeListener.onChange(mThis, getMapCenter(), mLastCenterPosition, getZoomLevel(), mLastZoomLevel); mLastCenterPosition = getMapCenter(); - mLastZoomLevel = getZoomLevel(); + mLastZoomLevel = getZoomLevel(); } }; - + // ------------------------------------------------------------------------ // CONSTRUCTORS // ------------------------------------------------------------------------ - + public MyMapView(Context context, String apiKey) { super(context, apiKey); init(); } - + public MyMapView(Context context, AttributeSet attrs) { super(context, attrs); init(); } - + public MyMapView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } - + private void init() { mThis = this; mLastCenterPosition = this.getMapCenter(); mLastZoomLevel = this.getZoomLevel(); } - + // ------------------------------------------------------------------------ // GETTERS / SETTERS // ------------------------------------------------------------------------ - + public void setOnChangeListener(MyMapView.OnChangeListener l) { mChangeListener = l; @@ -103,10 +103,10 @@ public void setOnChangeListener(MyMapView.OnChangeListener l) // ------------------------------------------------------------------------ // EVENT HANDLERS // ------------------------------------------------------------------------ - + @Override public boolean onTouchEvent(MotionEvent ev) - { + { // Set touch internal mIsTouched = (ev.getAction() != MotionEvent.ACTION_UP); @@ -117,11 +117,11 @@ public boolean onTouchEvent(MotionEvent ev) public void computeScroll() { super.computeScroll(); - + // Check for change if (isSpanChange() || isZoomChange()) { - // If computeScroll called before timer counts down we should drop it and + // If computeScroll called before timer counts down we should drop it and // start counter over again resetMapChangeTimer(); } @@ -130,25 +130,25 @@ public void computeScroll() // ------------------------------------------------------------------------ // TIMER RESETS // ------------------------------------------------------------------------ - + private void resetMapChangeTimer() { MyMapView.this.removeCallbacks(mOnChangeTask); MyMapView.this.postDelayed(mOnChangeTask, mEventsTimeout); } - + // ------------------------------------------------------------------------ // CHANGE FUNCTIONS // ------------------------------------------------------------------------ - + private boolean isSpanChange() { return !mIsTouched && !getMapCenter().equals(mLastCenterPosition); } - + private boolean isZoomChange() { return (getZoomLevel() != mLastZoomLevel); } - -} \ No newline at end of file + +} diff --git a/src/com/bricolsoftconsulting/mapchange/MyOverlay.java b/MapChangeLibrary/src/com/bricolsoftconsulting/mapchange/MyOverlay.java similarity index 98% rename from src/com/bricolsoftconsulting/mapchange/MyOverlay.java rename to MapChangeLibrary/src/com/bricolsoftconsulting/mapchange/MyOverlay.java index 662a90b..b89a2a8 100644 --- a/src/com/bricolsoftconsulting/mapchange/MyOverlay.java +++ b/MapChangeLibrary/src/com/bricolsoftconsulting/mapchange/MyOverlay.java @@ -1,5 +1,5 @@ /* -Copyright 2012 Bricolsoft Consulting +Copyright 2013 Bricolsoft Consulting Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -52,32 +52,32 @@ public boolean onDoubleTap(MotionEvent e) return true; } }; - + // ------------------------------------------------------------------------ // CONSTRUCTOR // ------------------------------------------------------------------------ - + MyOverlay(Context context, MapView mapView) { mMapView = mapView; - mGestureDetector = new GestureDetector(context, mGestureListener); + mGestureDetector = new GestureDetector(context, mGestureListener); } - + // ------------------------------------------------------------------------ // LISTENER DEFINITIONS // ------------------------------------------------------------------------ - + // Tap listener public interface OnTapListener { public void onTap(GeoPoint p, MapView mapView); public void onDoubleTap(GeoPoint p, MapView mapView); } - + // ------------------------------------------------------------------------ // GETTERS / SETTERS // ------------------------------------------------------------------------ - + // Setters public void setOnTapListener(OnTapListener listener) { @@ -87,15 +87,15 @@ public void setOnTapListener(OnTapListener listener) // ------------------------------------------------------------------------ // MEMBERS // ------------------------------------------------------------------------ - + private OnTapListener mTapListener; - + // ------------------------------------------------------------------------ // EVENT HANDLERS // ------------------------------------------------------------------------ - + public boolean onTouchEvent(MotionEvent motionEvent, MapView mapView) { return mGestureDetector.onTouchEvent(motionEvent); } -} \ No newline at end of file +} diff --git a/MapChangeSample/AndroidManifest.xml b/MapChangeSample/AndroidManifest.xml new file mode 100644 index 0000000..e925fba --- /dev/null +++ b/MapChangeSample/AndroidManifest.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/MapChangeSample/pom.xml b/MapChangeSample/pom.xml new file mode 100644 index 0000000..a2ff8e6 --- /dev/null +++ b/MapChangeSample/pom.xml @@ -0,0 +1,90 @@ + + + + + + 4.0.0 + + + com.bricolsoftconsulting + mapchange-parent + 0.1.0-SNAPSHOT + + + com.bricolsoftconsulting + mapchange-sample + 0.1.0-SNAPSHOT + apk + MapChange Sample + https://github.com/bricolsoftconsulting/MapChangeSample + Google Maps notifications on panning, zooming or both + + + 2.6 + + + + + com.bricolsoftconsulting + mapchange-library + 0.1.0-SNAPSHOT + compile + apklib + + + + + ${project.artifactId} + + src + + + com.jayway.maven.plugins.android.generation2 + android-maven-plugin + ${android-maven-plugin.version} + + + ${sdk.platform} + + true + + true + + + maven-resources-plugin + ${maven-resources-plugin.version} + + + initialize + + resources + + + + default-resources + DISABLED + + + + + + + diff --git a/MapChangeSample/proguard.cfg b/MapChangeSample/proguard.cfg new file mode 100644 index 0000000..12dd039 --- /dev/null +++ b/MapChangeSample/proguard.cfg @@ -0,0 +1,36 @@ +-optimizationpasses 5 +-dontusemixedcaseclassnames +-dontskipnonpubliclibraryclasses +-dontpreverify +-verbose +-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* + +-keep public class * extends android.app.Activity +-keep public class * extends android.app.Application +-keep public class * extends android.app.Service +-keep public class * extends android.content.BroadcastReceiver +-keep public class * extends android.content.ContentProvider +-keep public class * extends android.app.backup.BackupAgentHelper +-keep public class * extends android.preference.Preference +-keep public class com.android.vending.licensing.ILicensingService + +-keepclasseswithmembernames class * { + native ; +} + +-keepclasseswithmembernames class * { + public (android.content.Context, android.util.AttributeSet); +} + +-keepclasseswithmembernames class * { + public (android.content.Context, android.util.AttributeSet, int); +} + +-keepclassmembers enum * { + public static **[] values(); + public static ** valueOf(java.lang.String); +} + +-keep class * implements android.os.Parcelable { + public static final android.os.Parcelable$Creator *; +} diff --git a/MapChangeSample/res/drawable-hdpi/icon.png b/MapChangeSample/res/drawable-hdpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8074c4c571b8cd19e27f4ee5545df367420686d7 GIT binary patch literal 4147 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 literal 0 HcmV?d00001 diff --git a/MapChangeSample/res/drawable-ldpi/icon.png b/MapChangeSample/res/drawable-ldpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1095584ec21f71cd0afc9e0993aa2209671b590c GIT binary patch literal 1723 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 - + - + diff --git a/MapChangeSample/res/values/strings.xml b/MapChangeSample/res/values/strings.xml new file mode 100644 index 0000000..5202606 --- /dev/null +++ b/MapChangeSample/res/values/strings.xml @@ -0,0 +1,4 @@ + + + MapChange + diff --git a/src/com/bricolsoftconsulting/mapchange/MyMapActivity.java b/MapChangeSample/src/com/bricolsoftconsulting/mapchange/MyMapActivity.java similarity index 95% rename from src/com/bricolsoftconsulting/mapchange/MyMapActivity.java rename to MapChangeSample/src/com/bricolsoftconsulting/mapchange/MyMapActivity.java index 9bf0d0a..e4918c0 100644 --- a/src/com/bricolsoftconsulting/mapchange/MyMapActivity.java +++ b/MapChangeSample/src/com/bricolsoftconsulting/mapchange/MyMapActivity.java @@ -1,5 +1,5 @@ /* -Copyright 2012 Bricolsoft Consulting +Copyright 2013 Bricolsoft Consulting Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -31,29 +31,29 @@ public class MyMapActivity extends MapActivity MyMapView mMapView; MyOverlay mMapOverlay; Handler mHandler = new Handler(); - + /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.map); - + // Populate the map member mMapView = (MyMapView) findViewById(R.id.theMap); - + // Add overlay mMapOverlay = new MyOverlay(getBaseContext(), mMapView); - mMapView.getOverlays().add(mMapOverlay); - + mMapView.getOverlays().add(mMapOverlay); + // Add zoom controls mMapView.setBuiltInZoomControls(true); - + // Add listeners mMapView.setOnChangeListener(new MapViewChangeListener()); mMapOverlay.setOnTapListener(new MapViewTapListener()); } - + private class MapViewChangeListener implements MyMapView.OnChangeListener { @@ -73,9 +73,9 @@ else if (newZoom != oldZoom) { Toast.makeText(MyMapActivity.this, "Map Zoom", Toast.LENGTH_SHORT).show(); } - } + } } - + private class MapViewTapListener implements MyOverlay.OnTapListener { @Override @@ -92,7 +92,7 @@ public void onDoubleTap(GeoPoint p, MapView mapView) Point screenPoint = new Point(); mMapView.getProjection().toPixels(p, screenPoint); mMapView.getController().zoomInFixing(screenPoint.x, screenPoint.y); - + // Display message Toast.makeText(MyMapActivity.this, "Map Double Tap", Toast.LENGTH_SHORT).show(); } @@ -103,4 +103,4 @@ protected boolean isRouteDisplayed() { return false; } -} \ No newline at end of file +} diff --git a/README.md b/README.md index 14d36e2..639b8d5 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ What is MapChange? --------------------- MapChange is an Android app that shows how to extend Google Maps' MapView class to get notifications when the map has been panned, zoomed or both. + Installation ------------ To setup this project: @@ -18,6 +19,33 @@ Usage ----- Pan, zoom or pinch the map. The app will tell you what you just did (panned, zoomed or both). + +Project structure +----------------- +There is a library project named `MapChangeLibrary` which can be used with other applications. +The sample application named `MapChangeSample` shows how to integrate the functionality of the library. + +IDEs +---- +The projects have been set up to work with common IDEs such as Eclipse, IntelliJ or Android Studio. + + +Maven +----- + +MapChange is **not** yet available from Maven central repository. You can however easily install it into your local repository. + +In order to use the library project add the following dependency to your application `pom.xml`: + + + com.bricolsoftconsulting + mapchange-library + 0.1.0-SNAPSHOT + compile + apklib + + + Credits ------- Thanks to [Dave Smith](https://github.com/devunwired) for suggesting the use of View.postDelayed instead of a timer so the change events are not launched on the timer's background thread. His wonderful suggestion has been incorporated in this code. @@ -26,10 +54,17 @@ Thanks to [Tobias](https://github.com/johnjohndoe) for his patch to support map Copyright --------- -Copyright 2012 Bricolsoft Consulting -Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at + Copyright 2013 Bricolsoft Consulting + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 -Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. \ No newline at end of file + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied. See the License for the specific language governing + permissions and limitations under the License. diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..5e9b73e --- /dev/null +++ b/pom.xml @@ -0,0 +1,110 @@ + + + + + + 4.0.0 + + com.bricolsoftconsulting + mapchange-parent + 0.1.0-SNAPSHOT + pom + MapChange Library Parent + Google Maps notifications on panning, zooming or both + + + MapChangeLibrary + MapChangeSample + + + + https://github.com/bricolsoftconsulting/MapChangeLibrary/issues + GitHub Issues + + + + + Apache License Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.html + repo + + + + + https://github.com/bricolsoftconsulting/MapChange + scm:git:git://github.com/bricolsoftconsulting/MapChange.git + scm:git:git@github.com:bricolsoftconsulting/MapChange.git + + + + + Bricolsoftconsulting Consulting + https://github.com/bricolsoftconsulting + bricolsoftconsulting + + + + + UTF-8 + + + 1.6 + 7 + 3.6.0 + 2.3.2 + + + 4.1.1.4 + 7_r1 + + + + + com.google.android + android + provided + ${android.version} + + + com.google.android.maps + maps + ${android.maps.version} + provided + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${jdk.version} + ${jdk.version} + + + + + + + diff --git a/project.properties b/project.properties deleted file mode 100644 index 6adb3d6..0000000 --- a/project.properties +++ /dev/null @@ -1,11 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system use, -# "ant.properties", and override values to adapt the script to your -# project structure. - -# Project target. -target=Google Inc.:Google APIs:7 diff --git a/release/MapChange.apk b/release/MapChange.apk deleted file mode 100644 index 0c3509d7c5e9d3288c7f8524f11936c8d376c5ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17042 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 Date: Fri, 7 Jun 2013 13:55:16 +0200 Subject: [PATCH 2/3] Make constructor public so it can be used from another namespace. --- .../src/com/bricolsoftconsulting/mapchange/MyOverlay.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MapChangeLibrary/src/com/bricolsoftconsulting/mapchange/MyOverlay.java b/MapChangeLibrary/src/com/bricolsoftconsulting/mapchange/MyOverlay.java index b89a2a8..41b171a 100644 --- a/MapChangeLibrary/src/com/bricolsoftconsulting/mapchange/MyOverlay.java +++ b/MapChangeLibrary/src/com/bricolsoftconsulting/mapchange/MyOverlay.java @@ -57,7 +57,7 @@ public boolean onDoubleTap(MotionEvent e) // CONSTRUCTOR // ------------------------------------------------------------------------ - MyOverlay(Context context, MapView mapView) + public MyOverlay(Context context, MapView mapView) { mMapView = mapView; mGestureDetector = new GestureDetector(context, mGestureListener); From 858fec0bed42e8ac6600fe4e66e783f948bd193b Mon Sep 17 00:00:00 2001 From: Tobias Preuss Date: Fri, 7 Jun 2013 14:05:04 +0200 Subject: [PATCH 3/3] Extract Google Maps API key. --- MapChangeSample/res/layout/map.xml | 2 +- MapChangeSample/res/values/apikeys.xml | 4 ++++ README.md | 4 ++-- 3 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 MapChangeSample/res/values/apikeys.xml diff --git a/MapChangeSample/res/layout/map.xml b/MapChangeSample/res/layout/map.xml index 5dc0a44..4ab7a35 100644 --- a/MapChangeSample/res/layout/map.xml +++ b/MapChangeSample/res/layout/map.xml @@ -11,7 +11,7 @@ android:enabled="true" android:clickable="true" android:id="@+id/theMap" - android:apiKey="ENTER_YOUR_GOOGLE_MAPS_API_KEY_HERE"> + android:apiKey="@string/google_maps_api_key"> diff --git a/MapChangeSample/res/values/apikeys.xml b/MapChangeSample/res/values/apikeys.xml new file mode 100644 index 0000000..e3c76ab --- /dev/null +++ b/MapChangeSample/res/values/apikeys.xml @@ -0,0 +1,4 @@ + + + ENTER_GOOGLE_MAPS_API_KEY_HERE + diff --git a/README.md b/README.md index 639b8d5..77863b5 100644 --- a/README.md +++ b/README.md @@ -11,9 +11,9 @@ Installation To setup this project: 1. Download a copy of this code. -1. Edit the `map.xml` file in `/res/layout` to add your Google Maps API Key on this line: +1. Edit the `apikeys.xml` file in `/res/values` to add your Google Maps API Key on this line: - android:apiKey="ENTER_GOOGLE_MAPS_API_KEY_HERE" + `google_maps_api_key="ENTER_GOOGLE_MAPS_API_KEY_HERE"` Usage -----