From db68e86a95f527876dc84aff09f7f97b67efa707 Mon Sep 17 00:00:00 2001 From: Leith Bade Date: Sun, 23 Nov 2014 19:02:01 +1100 Subject: [PATCH] Add gps button --- android/java/app/src/main/AndroidManifest.xml | 10 ++- .../com/mapbox/mapboxgl/app/MainActivity.java | 78 +++++++++++++++--- .../ic_action_location_found.png | Bin 0 -> 722 bytes .../ic_action_location_found.png | Bin 0 -> 484 bytes .../ic_action_location_found.png | Bin 0 -> 994 bytes .../ic_action_location_found.png | Bin 0 -> 1432 bytes .../app/src/main/res/layout/activity_main.xml | 8 +- .../java/app/src/main/res/menu/menu_main.xml | 7 ++ .../java/app/src/main/res/values/strings.xml | 2 + android/java/lib/src/main/AndroidManifest.xml | 2 +- .../java/com/mapbox/mapboxgl/lib/LonLat.java | 2 +- .../com/mapbox/mapboxgl/lib/LonLatZoom.java | 51 ++---------- 12 files changed, 97 insertions(+), 63 deletions(-) create mode 100644 android/java/app/src/main/res/drawable-hdpi/ic_action_location_found.png create mode 100644 android/java/app/src/main/res/drawable-mdpi/ic_action_location_found.png create mode 100644 android/java/app/src/main/res/drawable-xhdpi/ic_action_location_found.png create mode 100644 android/java/app/src/main/res/drawable-xxhdpi/ic_action_location_found.png create mode 100644 android/java/app/src/main/res/menu/menu_main.xml diff --git a/android/java/app/src/main/AndroidManifest.xml b/android/java/app/src/main/AndroidManifest.xml index 7776d7098..bd9d2da06 100644 --- a/android/java/app/src/main/AndroidManifest.xml +++ b/android/java/app/src/main/AndroidManifest.xml @@ -1,19 +1,21 @@ + package="com.mapbox.mapboxgl.app"> + + + + android:theme="@style/AppTheme"> + android:configChanges="keyboard|keyboardHidden|orientation|screenSize|smallestScreenSize"> - diff --git a/android/java/app/src/main/java/com/mapbox/mapboxgl/app/MainActivity.java b/android/java/app/src/main/java/com/mapbox/mapboxgl/app/MainActivity.java index 12707ff49..28b04a9cf 100644 --- a/android/java/app/src/main/java/com/mapbox/mapboxgl/app/MainActivity.java +++ b/android/java/app/src/main/java/com/mapbox/mapboxgl/app/MainActivity.java @@ -1,16 +1,22 @@ package com.mapbox.mapboxgl.app; +import android.location.Criteria; +import android.location.Location; +import android.location.LocationListener; +import android.location.LocationManager; import android.os.Bundle; -import android.support.v7.app.ActionBar; import android.support.v7.app.ActionBarActivity; import android.support.v7.widget.Toolbar; import android.util.Log; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Spinner; -import com.mapbox.mapboxgl.lib.MapView; +import com.mapbox.mapboxgl.lib.LonLatZoom; public class MainActivity extends ActionBarActivity { @@ -42,18 +48,70 @@ public class MainActivity extends ActionBarActivity { setContentView(R.layout.activity_main); mMapFragment = (MapFragment)getSupportFragmentManager().findFragmentById(R.id.fragment_map); - // TODO move to layout file and save state - // Add the spinner to select map styles - Spinner styleSpinner = (Spinner)findViewById(R.id.spinner_style); - ArrayAdapter styleAdapter = ArrayAdapter.createFromResource(this, - R.array.style_list, android.R.layout.simple_spinner_dropdown_item); - styleSpinner.setAdapter(styleAdapter); - styleSpinner.setOnItemSelectedListener(new StyleSpinnerListener()); - // Add a toolbar as the action bar Toolbar mainToolbar = (Toolbar)findViewById(R.id.toolbar_main); setSupportActionBar(mainToolbar); getSupportActionBar().setDisplayShowTitleEnabled(false); + + // TODO move to layout file and save state + // Add the spinner to select map styles + Spinner styleSpinner = (Spinner)findViewById(R.id.spinner_style); + ArrayAdapter styleAdapter = ArrayAdapter.createFromResource(getSupportActionBar().getThemedContext(), + R.array.style_list, android.R.layout.simple_spinner_dropdown_item); + styleSpinner.setAdapter(styleAdapter); + styleSpinner.setOnItemSelectedListener(new StyleSpinnerListener()); + } + + // Adds items to the action bar menu + @Override + public boolean onCreateOptionsMenu(Menu menu) { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.menu_main, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle presses on the action bar items + switch (item.getItemId()) { + case R.id.action_gps: + // Get a GPS position + LocationManager locationManager = (LocationManager)getSystemService(getApplicationContext().LOCATION_SERVICE); + String provider = locationManager.getBestProvider(new Criteria(), true); + Location location = locationManager.getLastKnownLocation(provider); + LonLatZoom coordinate = new LonLatZoom(location.getLongitude(), location.getLatitude(), 15); + mMapFragment.getMap().setCenterCoordinate(coordinate, true); + locationManager.requestSingleUpdate(provider, new MyLocationListener(), null); + return true; + + default: + return super.onOptionsItemSelected(item); + } + } + + // This class handles location events + private class MyLocationListener implements LocationListener { + + @Override + public void onLocationChanged(Location location) { + LonLatZoom coordinate = new LonLatZoom(location.getLongitude(), location.getLatitude(), 15); + mMapFragment.getMap().setCenterCoordinate(coordinate, true); + } + + @Override + public void onStatusChanged(String provider, int status, Bundle extras) { + // Do nothing + } + + @Override + public void onProviderEnabled(String provider) { + // Do nothing + } + + @Override + public void onProviderDisabled(String provider) { + // Do nothing + } } // This class handles navigation events diff --git a/android/java/app/src/main/res/drawable-hdpi/ic_action_location_found.png b/android/java/app/src/main/res/drawable-hdpi/ic_action_location_found.png new file mode 100644 index 0000000000000000000000000000000000000000..e1bf5807b02dd04383733c2f78c08cb18063ac89 GIT binary patch literal 722 zcmV;@0xkWCP)B++;PGV-~xKnd&N%+SNkB#A?CrUGgruTwc4ras>+alFOCje%^QY zy?5_j!>PG6EC36@0;sn%tD1N)7<8e!7vHnlET|m-kTWPfOCf6meD1f9I+se@EmXfy z60nEV3Ngis;?v)VZTP`(e<0~A+j7K$yjt`|g~cK{LZ3;-xU z!kw2AiQNUI<~gp_)5k#n$<_gYGS5(T@n-^MQk36lCnLqp&SC6J89h!n*!e4E2gl3h za$R)1=nEz4bUJO^gmdu?ZE@uQkn?vYj$bIOfat>a0@{8mqY!$VS2V_i3K5`B4|(3# z{)*8)5@L*xbP|UB#PLqti)^TPk_n-Rh<$uQc?a8k?4ygE%he3rH~>$fPD&{66`4Z^ zfpbOL8fF2Y=a83Fm_eJu8-Zg~k#n|iE#oI37hDm3-Ya3lo^}dzv;l_`#d2byHr9&_ zeshHyvygEVoPtWxb=KwB%%P0Gjd(uCS*XS=JXdgZ;q(-tA@-%{$v#akfJnJ)M#L#i(cQ%voDX#6wYgSGNKs8fgW>d}iEx_8 z>c-p@lbsKUcwLL(OC=(N@?tZ->Y7p}WuG69H>p2}XO)9^*vjB{55w;pg<9XvzCJDH zfO*5ufJ){~h<#q)=X}6~NZPC&E7k@q01MzC0sILt0A9ZlB8=j0ng9R*07*qoM6N<$ Eg4(7>!2kdN literal 0 HcmV?d00001 diff --git a/android/java/app/src/main/res/drawable-mdpi/ic_action_location_found.png b/android/java/app/src/main/res/drawable-mdpi/ic_action_location_found.png new file mode 100644 index 0000000000000000000000000000000000000000..33f660f2d8691b04dc4e0d56987f2f3bcefd2c21 GIT binary patch literal 484 zcmVOAUME@q=R}z zvJtv(0#VNffP(X?b2!)Jyd1Do0CN1zZV~{j{Dq_?`6Q>^i2VxoYuMM$0I=up_`5g3 z5o9a6fWZ}({tddO+9?L)<6S>Gou)>?=71Rd^i^&lSpi}*Aam(1-IKZh7V@|rj?Y{UVE&xffOJr z*{%vjScXf*H*pwQnNX-~`#63?cf@$7XFZPp^Frb^nBfG=g?T6Ry%o1n=;Qurc69(h a0t^6i&8?D{9;^@m0000m zomVx*vds5QcTaZ@Q4|mm5D*X$P**g34czT^6Zq)R*X3fd$bHP?%p>`@_&)R93jvSn zt^$F8KtMPJO0)Vge56p&`d>h4a#eOv)?^GbI2BfvCjb_Wi@b)?gVHM4d<$g`&x4Okcn-=Nz-)InR z1+?25M36Vkt8ccaL&JgSe_(cBsq;`jC4G)1RaVqTW@r;oBHr1Y3|2M(^zapYJlk7) zn8-v%6x4kSk68a)(Ix)&9O`zU{1oXp*@P=19qqwAzVl@Rdd%}wAtfV$U!Vfk9Z_2m zrjj|7M*tmrEoS%U3IiD*FhndfbTro9UbJW~rAt7{JZB1>Pb|hrs1Fe`$y`b!Akh)P zIWUK!Z$LoegMbU}oE9B*u>%5P>PzGs{5O}PI5W_7HhasWX`sWd&|-96geD!2Jha(n zldNz@Bg%OR1au_hW1EGY16B3>+~pv4GYSqo~d%FOVrB zL#-!zR01d^#ros2pk#8ODqx#065pi9#UU#n5`bU>pn-&_9c6Q}g3>is#Q6is97@jz zpz(P@aXH5P4N+{4aXpkDRR5_WCxAQo6&5~|<@?CvOPPeoXPew$NQt>Pq+wz=j8oz~ zchBS>*tB~NW8B*I>&g|LFb1(n*__1T;uCK1TN=|EPVNOz2Pt=d89n6guVgl%;Nnr| z-%y`>3Hzi|mr_-L6VqYz?{${TtFb>jf09>Y%*5+^IVw0E`kH_#H%Mt!>v~)u4fXtk zgv377>n}0})_tE;vA#z4?FUpAfq+0j&EfOk;!DYMKtMo1KtMo1DflhG0HP#*(;hBv QdjJ3c07*qoM6N<$f)$Fnx&QzG literal 0 HcmV?d00001 diff --git a/android/java/app/src/main/res/drawable-xxhdpi/ic_action_location_found.png b/android/java/app/src/main/res/drawable-xxhdpi/ic_action_location_found.png new file mode 100644 index 0000000000000000000000000000000000000000..43f18ea01d8a4efa7cad4dca11dd473d0e7468af GIT binary patch literal 1432 zcmV;J1!ww+P)g;t%$t}CPPd` z5D1t-VJe8JC>B#eL}wUG4U)}B6xvYR{deKR`;ciF%9-M*i_-Hjpu00000000000001BRxnq_Mz620SLm`deDC7o zqF2VgER^)cQNrKX?(LSbBafg2KmZ5;KmZ5;KmZ5;5Qt?3UUj-Gv;VJxuzJQ%RWO!P z>Qm~LAvl{Wu+TT?vc_o~T&hH5d;vw!Pn@rL#bx@X~H^QUAq~-QFbC`8xdQ|yQb78BCcna0201ZH`^AWcUXrfj%CMe zKN=P?PN?k8%n?8WYSLw6gg0|KDKCb-sI3v+(>JQCH4_A|q20?6M#^g8(o@}QtnMlq zq#uVi(9;OSvV^aMe&9>^3S9O9*QKM*ZF{&QV1(KUu7^k1pP=e!K5&O$7#_8#!(T$b zd4s{=XSG^Q41r#a?*CTL9}EHPYVKtSe`*mb3Avv^!V2BLqUSdc#RlwTsGX@#4{#e! zgl#UL4d4j(rEYMkEZ1_V=WIK2JyQMdMA*-3EPJmed~fEPW^k0o-X_c&83|n-gqKQ%ZuNjTMKy zg&G0+&`%_DJFGIA9@^8Cs3UG;V(CjM3FrufU-9hz?Qk77bV^MC&pw*wdh!_UNkVE= zFNJ+7>umgS9sM(nSZp6L^p~L|R$Xl1K-$z1q z8!QqAKmZ5;CTxWJtn0?nm04a#C_9kk$wUTrcj^SNmG4;$bx-qzmIcP?Iv@d()o{x> zVwu9IpfrcqaT##rOX`X(eJV5oeM?+m!j-R18U%TjBbMoxi2yzDig~T3O|_i|AmH2< zEOA@o9KmEU2*{ZCmxTWv&!ZrX1k>WCw))y_!2V6$-~=+60yN zNGd>XTiw!!QW0P>s@uZvvct>C&m4(JInROAcygPza~kd3@VYp6Fc|!)R;y36x9Tya zMSAvKS_Y*amGhPU{WVmE>7$Pl_9sdoNbo;YUTIsY{MXU_?*yM!IX-0+WPbp?U2hGY zo9f;yt$n7w0@u{OcfRWmH5+PjEw_CxcybW_Mr7Wo(GF36ko^H_oxR%hK!2|20gqar zuh!{LQTR>6qZ6N7rGgW{B&Z!JPYtSQE#!_AP3^ogJW^YfK89+?G!lVxCs6_wwj^VJ597N!_ngWo31Dgs&297K% z5E=TReM?dHi6=O;FAyp3wOdDJJi;DJ6F~q706+i;06+i;0H%P261QFdaMA~z00000 m0000000000K#}oRfB^s*I|^?h16Vl#0000 - - - + + + \ No newline at end of file diff --git a/android/java/app/src/main/res/values/strings.xml b/android/java/app/src/main/res/values/strings.xml index 4fc9298f4..d7698f0db 100644 --- a/android/java/app/src/main/res/values/strings.xml +++ b/android/java/app/src/main/res/values/strings.xml @@ -3,6 +3,8 @@ Mapbox GL + Go to GPS location + Bright Basic diff --git a/android/java/lib/src/main/AndroidManifest.xml b/android/java/lib/src/main/AndroidManifest.xml index 22b0afbc3..7c7dac9a0 100644 --- a/android/java/lib/src/main/AndroidManifest.xml +++ b/android/java/lib/src/main/AndroidManifest.xml @@ -1,5 +1,5 @@ + package="com.mapbox.mapboxgl.lib"> diff --git a/android/java/lib/src/main/java/com/mapbox/mapboxgl/lib/LonLat.java b/android/java/lib/src/main/java/com/mapbox/mapboxgl/lib/LonLat.java index 69e9a6835..a36548fe3 100644 --- a/android/java/lib/src/main/java/com/mapbox/mapboxgl/lib/LonLat.java +++ b/android/java/lib/src/main/java/com/mapbox/mapboxgl/lib/LonLat.java @@ -23,7 +23,7 @@ public class LonLat implements Parcelable { this.lat = lat; } - private LonLat(Parcel in) { + protected LonLat(Parcel in) { lon = in.readDouble(); lat = in.readDouble(); } diff --git a/android/java/lib/src/main/java/com/mapbox/mapboxgl/lib/LonLatZoom.java b/android/java/lib/src/main/java/com/mapbox/mapboxgl/lib/LonLatZoom.java index 885052028..fd78e9356 100644 --- a/android/java/lib/src/main/java/com/mapbox/mapboxgl/lib/LonLatZoom.java +++ b/android/java/lib/src/main/java/com/mapbox/mapboxgl/lib/LonLatZoom.java @@ -3,7 +3,7 @@ package com.mapbox.mapboxgl.lib; import android.os.Parcel; import android.os.Parcelable; -public class LonLatZoom implements Parcelable { +public class LonLatZoom extends LonLat implements Parcelable { public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { public LonLatZoom createFromParcel(Parcel in) { @@ -15,44 +15,23 @@ public class LonLatZoom implements Parcelable { } }; - private double lon; - private double lat; private double zoom; public LonLatZoom(double lon, double lat, double zoom) { - this.lon = lon; - this.lat = lat; + super(lon, lat); this.zoom = zoom; } public LonLatZoom(LonLat lonLat, double zoom) { - this.lon = lonLat.getLon(); - this.lat = lonLat.getLat(); + super(lonLat.getLon(), lonLat.getLat()); this.zoom = zoom; } private LonLatZoom(Parcel in) { - lon = in.readDouble(); - lat = in.readDouble(); + super(in); zoom = in.readDouble(); } - public double getLon() { - return lon; - } - - public void setLon(double lon) { - this.lon = lon; - } - - public double getLat() { - return lat; - } - - public void setLat(double lat) { - this.lat = lat; - } - public double getZoom() { return zoom; } @@ -61,25 +40,12 @@ public class LonLatZoom implements Parcelable { this.zoom = zoom; } - public LonLat getLonLat() { - return new LonLat(lon, lat); - } - - public void setLonLat(LonLat lonLat) { - this.lon = lonLat.getLon(); - this.lat = lonLat.getLat(); - } - @Override public int hashCode() { final int prime = 31; int result = 1; long temp; - temp = Double.doubleToLongBits(lat); - result = prime * result + (int) (temp ^ (temp >>> 32)); - temp = Double.doubleToLongBits(lon); - result = prime * result + (int) (temp ^ (temp >>> 32)); - temp = Double.doubleToLongBits(zoom); + temp = super.hashCode(); result = prime * result + (int) (temp ^ (temp >>> 32)); return result; } @@ -93,12 +59,12 @@ public class LonLatZoom implements Parcelable { if (getClass() != obj.getClass()) return false; LonLatZoom other = (LonLatZoom) obj; - return Double.doubleToLongBits(lat) == Double.doubleToLongBits(other.lat) && Double.doubleToLongBits(lon) == Double.doubleToLongBits(other.lon) && Double.doubleToLongBits(zoom) == Double.doubleToLongBits(other.zoom); + return super.equals(obj) && Double.doubleToLongBits(zoom) == Double.doubleToLongBits(other.zoom); } @Override public String toString() { - return "LonLatZoom [lon=" + lon + ", lat=" + lat + ", zoom=" + zoom + return "LonLatZoom [lon=" + super.getLon() + ", lat=" + super.getLat() + ", zoom=" + zoom + "]"; } @@ -109,8 +75,7 @@ public class LonLatZoom implements Parcelable { @Override public void writeToParcel(Parcel out, int flags) { - out.writeDouble(lon); - out.writeDouble(lat); + super.writeToParcel(out, flags); out.writeDouble(zoom); }