From fe2dae7af1967f89b082778089dd87b49f163827 Mon Sep 17 00:00:00 2001 From: Leith Bade Date: Wed, 21 Jan 2015 12:06:11 +1100 Subject: [PATCH] Use LOST for GPS --- android/LICENSE_LOST.txt | 13 ++ android/java/app/build.gradle | 1 + .../com/mapbox/mapboxgl/app/MainActivity.java | 115 ++++++++++-------- .../ic_action_location_searching.png | Bin 0 -> 641 bytes .../ic_action_location_searching.png | Bin 0 -> 482 bytes .../ic_action_location_searching.png | Bin 0 -> 854 bytes .../ic_action_location_searching.png | Bin 0 -> 1191 bytes .../java/app/src/main/res/menu/menu_main.xml | 2 +- .../java/app/src/main/res/values/strings.xml | 2 +- 9 files changed, 81 insertions(+), 52 deletions(-) create mode 100644 android/LICENSE_LOST.txt create mode 100644 android/java/app/src/main/res/drawable-hdpi/ic_action_location_searching.png create mode 100644 android/java/app/src/main/res/drawable-mdpi/ic_action_location_searching.png create mode 100644 android/java/app/src/main/res/drawable-xhdpi/ic_action_location_searching.png create mode 100644 android/java/app/src/main/res/drawable-xxhdpi/ic_action_location_searching.png diff --git a/android/LICENSE_LOST.txt b/android/LICENSE_LOST.txt new file mode 100644 index 000000000..a0fba4cbc --- /dev/null +++ b/android/LICENSE_LOST.txt @@ -0,0 +1,13 @@ +Copyright (c) 2014 Mapzen + +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 + +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/android/java/app/build.gradle b/android/java/app/build.gradle index 1bc65f6fa..f5b71f030 100644 --- a/android/java/app/build.gradle +++ b/android/java/app/build.gradle @@ -53,4 +53,5 @@ dependencies { compile 'com.android.support:support-annotations:21.0.0' compile 'com.android.support:support-v4:21.0.3' compile 'com.android.support:appcompat-v7:21.0.3' + compile 'com.mapzen.android:lost:0.2' } 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 2005359da..c26cdfd7a 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,14 +1,6 @@ package com.mapbox.mapboxgl.app; -import android.app.PendingIntent; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -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.ActionBarActivity; import android.support.v7.widget.Toolbar; @@ -22,9 +14,13 @@ import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.Spinner; import android.widget.TextView; +import android.widget.Toast; import com.mapbox.mapboxgl.lib.LonLatZoom; import com.mapbox.mapboxgl.lib.MapView; +import com.mapzen.android.lost.LocationClient; +import com.mapzen.android.lost.LocationListener; +import com.mapzen.android.lost.LocationRequest; public class MainActivity extends ActionBarActivity { @@ -35,9 +31,6 @@ public class MainActivity extends ActionBarActivity { // Tag used for logging private static final String TAG = "MainActivity"; - // Used for GPS - private static final String SINGLE_LOCATION_UPDATE_ACTION = "com.mapbox.mapboxgl.app.SINGLE_LOCATION_UPDATE_ACTION"; - // // Instance members // @@ -52,9 +45,10 @@ public class MainActivity extends ActionBarActivity { private ImageView mCompassView; // Used for GPS - private LocationManager mLocationManager; - private PendingIntent mLocationPendingIntent; - private LocationReceiver mLocationReceiver; + private boolean mIsGpsOn = false; + private LocationClient mLocationClient; + private LocationListener mLocationListener; + private LocationRequest mLocationRequest; // // Lifecycle events @@ -66,10 +60,6 @@ public class MainActivity extends ActionBarActivity { super.onCreate(savedInstanceState); Log.v(TAG, "onCreate"); - Intent locationIntent = new Intent(SINGLE_LOCATION_UPDATE_ACTION); - mLocationManager = (LocationManager)getSystemService(getApplicationContext().LOCATION_SERVICE); - mLocationPendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, locationIntent, PendingIntent.FLAG_UPDATE_CURRENT); - // Load the layout setContentView(R.layout.activity_main); mMapFragment = (MapFragment)getSupportFragmentManager().findFragmentById(R.id.fragment_map); @@ -93,6 +83,33 @@ public class MainActivity extends ActionBarActivity { R.array.style_list, android.R.layout.simple_spinner_dropdown_item); styleSpinner.setAdapter(styleAdapter); styleSpinner.setOnItemSelectedListener(new StyleSpinnerListener()); + + // Prepare for GPS + mLocationRequest = LocationRequest.create(); + mLocationRequest.setInterval(0); + mLocationRequest.setSmallestDisplacement(0); + + mLocationClient = new LocationClient(getApplicationContext(), new LocationClient.ConnectionCallbacks() { + @Override + public void onConnected(Bundle connectionHint) { + updateLocation(mLocationClient.getLastLocation()); + + mLocationListener = new LocationListener() { + @Override + public void onLocationChanged(Location location) { + //Toast.makeText(getApplicationContext(), "Location: " + location.toString(), Toast.LENGTH_SHORT).show(); + updateLocation(location); + } + }; + + mLocationClient.requestLocationUpdates(mLocationRequest, mLocationListener); + } + + @Override + public void onDisconnected() { + mLocationListener = null; + } + }); } // Called when our app goes into the background @@ -101,13 +118,23 @@ public class MainActivity extends ActionBarActivity { super.onPause(); Log.v(TAG, "onPause"); - // Cancel any outstanding GPS - if (mLocationReceiver != null) { - getApplicationContext().unregisterReceiver(mLocationReceiver); - mLocationReceiver = null; + // Cancel GPS + if (mIsGpsOn) { + mLocationClient.disconnect(); } + } - mLocationManager.removeUpdates(mLocationPendingIntent); + // Called when our app comes into the foreground + @Override + public void onResume() { + super.onResume(); + Log.v(TAG, "onResume"); + + // Restart GPS + // Cancel any outstanding GPS + if (mIsGpsOn) { + mLocationClient.connect(); + } } // @@ -127,19 +154,17 @@ public class MainActivity extends ActionBarActivity { public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_gps: - // Get a GPS position - Criteria criteria = new Criteria(); - criteria.setAccuracy(Criteria.ACCURACY_LOW); - String provider = mLocationManager.getBestProvider(criteria, true); - Location location = mLocationManager.getLastKnownLocation(provider); - if (location != null) { - LonLatZoom coordinate = new LonLatZoom(location.getLongitude(), location.getLatitude(), 15); - mMapFragment.getMap().setCenterCoordinate(coordinate, true); + // Toggle GPS position updates + if (mIsGpsOn) { + mIsGpsOn = false; + item.setIcon(R.drawable.ic_action_location_searching); + mLocationClient.disconnect(); + + } else { + mIsGpsOn = true; + item.setIcon(R.drawable.ic_action_location_found); + mLocationClient.connect(); } - IntentFilter locationIntentFilter = new IntentFilter(SINGLE_LOCATION_UPDATE_ACTION); - mLocationReceiver = new LocationReceiver(); - getApplicationContext().registerReceiver(mLocationReceiver, locationIntentFilter); - mLocationManager.requestSingleUpdate(provider, mLocationPendingIntent); return true; case R.id.action_debug: @@ -160,21 +185,11 @@ public class MainActivity extends ActionBarActivity { } } - // This class handles location events - private class LocationReceiver extends BroadcastReceiver { - - @Override - public void onReceive(Context context, Intent intent) { - context.unregisterReceiver(this); - - Location location = (Location)intent.getExtras().get(LocationManager.KEY_LOCATION_CHANGED); - if (location != null) { - LonLatZoom coordinate = new LonLatZoom(location.getLongitude(), location.getLatitude(), 15); - mMapFragment.getMap().setCenterCoordinate(coordinate, true); - } - - mLocationManager.removeUpdates(mLocationPendingIntent); - mLocationReceiver = null; + // Handles location updates from GPS + private void updateLocation(Location location) { + if (location != null) { + LonLatZoom coordinate = new LonLatZoom(location.getLongitude(), location.getLatitude(), 16); + mMapFragment.getMap().setCenterCoordinate(coordinate, true); } } diff --git a/android/java/app/src/main/res/drawable-hdpi/ic_action_location_searching.png b/android/java/app/src/main/res/drawable-hdpi/ic_action_location_searching.png new file mode 100644 index 0000000000000000000000000000000000000000..48f4aec5b0092eb5a061ede1006a2fb4ebdd00b4 GIT binary patch literal 641 zcmV-{0)G98P)k-NVCBuGL9-RX)+9zXUl-4hw3kSw1DV$jy+yNNhL)Ay|mDj?sT>JEV!#B@xVtOzK zV0@y4i9jl57e>trQfsXLgYSoXcL2uRqw3IOhBDkWzGg8MM*Q zX~~$sv9bK~`Ft7#L7P^xgLaO0A8b58*`_bUri$?r)JH~-eHw#}$RZ_^R5o6L?910S zxOE3&C3LJ267`j8W7u_oGKVCoF@q|QeYR*U>nk8r-fCN(ueb^`A~(-O#hS?JHq|+! zHp``s!YZgCy52Tv&4Q4*+lQVnNEYg57FlXgOF3N>LN9cxlDINWaTPE^$h=l^K#w`f z3=yeHF37$Y99c-RrBAAo;}XEv#UH?bs}$b@WmB*~}@Nt!y4 zDrA#boc%;OrKN0g8dCQQlJ^tMOF{WU3JXbW;Z)b7$0t*kH$D#ty{>8a(oSqR(7d@L z<-a-9*Wy~G78hGv;=4=o`&tRDckfuQ77Lttq~-vIXB=a=>-A$k57>YVo3-cQ;NVb8 bdM%|j#e}pASWMw51UA%N)?mOv4vJjzQQ>92b>BNW4-MjPoote+B zEb|+HNdpMOFcx*Ov2YCFY4S^OH!$TME)jGMT{eabXbw%YEUQNc0O#T~feHw5aD-|O z`_Pp!wg-rOGyrfeQ9skTg7LItUQ8gLm*$yr-!t+TXbF9X(c;qFs;W*w5FEHX8{D7p z?#sFex#kHY-@&>54KU~I_)S6^*1I5LI#nO%4G@aoMlJv({dJ$UYypun3u_kuOIEwB z99y<)HxrUtO@`AB05omB^0`E2)W2fFMa$YLBO4zi8C&sb^Ubyf3NoCntZ2i!2!&2P zGThKsecr;k3xM-hlD_W`aPE_mHEq}dU{~8Sl5HOloU=6utaj=J!sXy}iDV-sMF{xP_937I zC;>VPc#Hbq;Aa2@qkkVt*Loy}vZ7#^!mRLc^aOy?sN@Jr1f{p<>l-L@D0e_ceslzY z@*|q&x&@DHEp7@tfOzhfdAPqw7v9wwqWhMyDivb?Ej#ner&)&AwLOh4p%!1woL} zusEf14t0Ovzo(|G1ICu}6PKGCYHLDm8|rJ^2oIoW|D9E#ssXPg2~(O`wnJegNkGJ|YgfLYuSkRd zn)Z6k`g32}Q(s#z=#ebmJz&7DQ-O_KS|E!z0>TCn5K0ixx1zIGSbg>nZRe!KSm)VW zj;?7Ay0m1r@oBcXOjg*=-kKe|G$~}v{o_OAYkf+rj0Y?W>f@>b$N_lYvpr-lPXLXf zY)5SP(V#exAG!*yG6Ysup!5o>&y~b9n7LSpI9iBh5(K0TA|Uln0Hvh(dOY&z{*kp0 zd64h`1m6H99<84g$l#p-%+=@23lb03=b7T1WRM|%a`bkFCah8U(7ew;RXQiAoD;;H zTo43j%qj!8|BE?1$I9cL|H}N&3co~tQ2uw-c3mxnZ_V2@)wN4cptks#!-o2-3@7IT zn4hQI{keI~-Csam2lM(4#{4C-Ji7cZu>Qt{>~$QCjm_KRESE=PFP3lQ(HIlFy@#Wg zGM^of^Cj#@@#46S$9H%`J3o*ph!5@hM5aV^kJ*A|Dj|n{CZ_}_0qut5*W$~9YlT9g gP$(1%FL)MU0G7!m2!~_IVE_OC07*qoM6N<$f-tL+ng9R* literal 0 HcmV?d00001 diff --git a/android/java/app/src/main/res/drawable-xxhdpi/ic_action_location_searching.png b/android/java/app/src/main/res/drawable-xxhdpi/ic_action_location_searching.png new file mode 100644 index 0000000000000000000000000000000000000000..aff020a6b9d2c928751d0ddf811202aa02f044f1 GIT binary patch literal 1191 zcmV;Y1X%ltP){n zNI*%XYM^AGM+O!eGLW*WWTddap?I1!(9)2B;tLols+7ST8EB-UBLx{4+4J@$MXnuR z+OyBE`98_I$QRwc_dfgiJ)i9)0RR9100000000000M-Q?5`{iEIB3yjcd_pF_O_6y z%a+iFql|y1)tyLG92mk>92mk>95;0ri)uBt5b0JsI9e1d(tJ0{$6( zk1j(hdyc=B?BmsSYWa^ECsH0GQpfY|s9X^dcWX-k8DF`Zfy3xI`|xtbXQw=VWDYV$ z^z3}?2p|I;)8%kUG;>{76vI(ee@XOoL+`p=3j%ncJ+&BP&Te7i>D@hccP$I)pFxdJhd3Vu?&@rJhPCnPxU|O{=-Wd1BMp2)A;lN%P^`av%DU_ z8SYzsz$L{;v1H-wj#Mw*S*YHox(&Kli0uI!avqsN%_Kftv22StVjaY~pv(|+U&S;T zw&05923Pcda!@P*dh0KI#`!gk2Zcii83gcrzTWz;llY;_*kWD8^#DDzDF_gqn}bB z0i{EyTHtGcfbK7+0trwue^}J1!Zn1zF5`WVrgQ-00AIiz44Sm zc*ef&IlfXPXn;LwoB$r>3&%iRXpvA?U@p)Nk<0jUL3${b3T*JHL#L<-m^tzS3FtU< zikbjD@k)8ErUaxo)M2PTrJD&NAam#BfeLA7}LxvwWYYJI+1r{AFQj}5m*p_Whv+abeCz+Wei z_XGEua7XNRJ{oSRElS@)$vr^LJ~|L-;_K10-c3zhs=KaB0f{ofnKa8Ua8YZEx!#Z00 z3>?<+L?UopO(gR%IIt-aGH_&BL}ciP_U$J26HjnxUm#MxXjK;ykFdwmL=XT101yBI z01yBIfCjK7Sa$ux$qaM?000000000000000G2@Q_0|1aampElNk>LOU002ovPDHLk FV1f-2Cl~+# literal 0 HcmV?d00001 diff --git a/android/java/app/src/main/res/menu/menu_main.xml b/android/java/app/src/main/res/menu/menu_main.xml index 0b9c10aff..bf6dbbf36 100644 --- a/android/java/app/src/main/res/menu/menu_main.xml +++ b/android/java/app/src/main/res/menu/menu_main.xml @@ -1,7 +1,7 @@ Mapbox GL - Go to GPS location + Toggle GPS location Toggle debug mode