1717/**
1818 * Sample LocationEngine using the Open Source Lost library
1919 */
20- public class LostLocationEngine extends LocationEngine implements LocationListener {
20+ public class LostLocationEngine extends LocationEngine implements LostApiClient . ConnectionCallbacks , LocationListener {
2121
2222 private static LocationEngine instance ;
2323
@@ -27,7 +27,9 @@ public class LostLocationEngine extends LocationEngine implements LocationListen
2727 public LostLocationEngine (Context context ) {
2828 super ();
2929 this .context = new WeakReference <>(context );
30- lostApiClient = new LostApiClient .Builder (this .context .get ()).build ();
30+ lostApiClient = new LostApiClient .Builder (this .context .get ())
31+ .addConnectionCallbacks (this )
32+ .build ();
3133 }
3234
3335 public static synchronized LocationEngine getLocationEngine (Context context ) {
@@ -44,12 +46,7 @@ public static synchronized LocationEngine getLocationEngine(Context context) {
4446 */
4547 @ Override
4648 public void activate () {
47- if (!lostApiClient .isConnected ()) {
48- lostApiClient .connect ();
49- }
50- for (LocationEngineListener listener : locationListeners ) {
51- listener .onConnected ();
52- }
49+ connect ();
5350 }
5451
5552 /**
@@ -59,7 +56,7 @@ public void activate() {
5956 */
6057 @ Override
6158 public void deactivate () {
62- if (lostApiClient .isConnected ()) {
59+ if (lostApiClient != null && lostApiClient .isConnected ()) {
6360 lostApiClient .disconnect ();
6461 }
6562 }
@@ -75,6 +72,24 @@ public boolean isConnected() {
7572 return lostApiClient .isConnected ();
7673 }
7774
75+ /**
76+ * Invoked when the location provider has connected.
77+ */
78+ @ Override
79+ public void onConnected () {
80+ for (LocationEngineListener listener : locationListeners ) {
81+ listener .onConnected ();
82+ }
83+ }
84+
85+ /**
86+ * Invoked when the location provider connection has been suspended.
87+ */
88+ @ Override
89+ public void onConnectionSuspended () {
90+ // Empty
91+ }
92+
7893 /**
7994 * Returns the Last known location if the location provider is connected and location permissions are granted.
8095 *
@@ -85,7 +100,7 @@ public boolean isConnected() {
85100 public Location getLastLocation () {
86101 if (lostApiClient .isConnected ()) {
87102 //noinspection MissingPermission
88- return LocationServices .FusedLocationApi .getLastLocation ();
103+ return LocationServices .FusedLocationApi .getLastLocation (lostApiClient );
89104 }
90105 return null ;
91106 }
@@ -120,7 +135,7 @@ public void requestLocationUpdates() {
120135
121136 if (lostApiClient .isConnected ()) {
122137 //noinspection MissingPermission
123- LocationServices .FusedLocationApi .requestLocationUpdates (request , this );
138+ LocationServices .FusedLocationApi .requestLocationUpdates (lostApiClient , request , this );
124139 }
125140 }
126141
@@ -135,7 +150,7 @@ public Type obtainType() {
135150 @ Override
136151 public void removeLocationUpdates () {
137152 if (lostApiClient .isConnected ()) {
138- LocationServices .FusedLocationApi .removeLocationUpdates (this );
153+ LocationServices .FusedLocationApi .removeLocationUpdates (lostApiClient , this );
139154 }
140155 }
141156
@@ -150,4 +165,14 @@ public void onLocationChanged(Location location) {
150165 listener .onLocationChanged (location );
151166 }
152167 }
168+
169+ private void connect () {
170+ if (lostApiClient != null ) {
171+ if (lostApiClient .isConnected ()) {
172+ onConnected ();
173+ } else {
174+ lostApiClient .connect ();
175+ }
176+ }
177+ }
153178}
0 commit comments