From 451ea60bbbd931e3fe461c1e6fd9b51aa9a00540 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mieszko=20Wrzeszczy=C5=84ski?= Date: Tue, 25 Dec 2018 20:58:54 +0100 Subject: [PATCH] A little refactor --- app/build.gradle | 1 + .../BackgroundLocalizationService.java | 109 +++++++++++++++--- 2 files changed, 91 insertions(+), 19 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 3c08d18..208ec0a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -72,4 +72,5 @@ dependencies { // FloatingBarMenu implementation 'com.getbase:floatingactionbutton:1.10.1' implementation 'org.apache.commons:commons-collections4:4.0' + implementation 'com.patloew.rxlocation:rxlocation:1.0.5' } diff --git a/app/src/main/java/com/uam/wmi/findmytutor/service/BackgroundLocalizationService.java b/app/src/main/java/com/uam/wmi/findmytutor/service/BackgroundLocalizationService.java index 6b1ef41..13919d9 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/service/BackgroundLocalizationService.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/service/BackgroundLocalizationService.java @@ -17,6 +17,7 @@ import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; +import android.os.Looper; import android.support.annotation.RequiresApi; import android.support.v4.app.ActivityCompat; import android.support.v4.app.NotificationCompat; @@ -24,8 +25,10 @@ import android.util.Log; import com.annimon.stream.Stream; import com.google.android.gms.location.FusedLocationProviderClient; +import com.google.android.gms.location.LocationCallback; +import com.google.android.gms.location.LocationRequest; +import com.google.android.gms.location.LocationResult; import com.google.android.gms.location.LocationServices; -import com.jakewharton.retrofit2.adapter.rxjava2.HttpException; import com.mapbox.geojson.Point; import com.mapbox.mapboxsdk.geometry.LatLng; import com.uam.wmi.findmytutor.model.Coordinate; @@ -33,7 +36,6 @@ import com.uam.wmi.findmytutor.network.ApiClient; import com.uam.wmi.findmytutor.utils.ApproximatedLocalization; import com.uam.wmi.findmytutor.utils.MapUtils; import com.uam.wmi.findmytutor.utils.PrefUtils; -import com.uam.wmi.findmytutor.utils.RestApiHelper; import com.uam.wmi.findmytutor.utils.SharingLevel; import org.apache.commons.collections4.queue.CircularFifoQueue; @@ -45,9 +47,7 @@ import java.util.concurrent.atomic.AtomicReference; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; import io.reactivex.observers.DisposableCompletableObserver; -import io.reactivex.observers.DisposableSingleObserver; import io.reactivex.schedulers.Schedulers; -import okhttp3.ResponseBody; import static com.uam.wmi.findmytutor.utils.Const.offlineBackgroundLocationInterval; import static com.uam.wmi.findmytutor.utils.Const.onlineBackgroundLocationInterval; @@ -62,10 +62,10 @@ public class BackgroundLocalizationService extends Service { private static final String TAG = "MyLocationService"; private static final float LOCATION_DISTANCE = 1f; private static long notify_interval = onlineBackgroundLocationInterval; + private static final Long LOCATION_INTERVAL = notify_interval; private static long notify_interval_inside_building = onlineBackgroundLocationInterval; private static long notify_interval_outside_building = offlineBackgroundLocationInterval; private static int coordinatesHistoryLength = 5; - private static final Long LOCATION_INTERVAL = notify_interval; private Location mLastLocation; private Boolean stopService = false; private ArrayList providers = new ArrayList(); @@ -75,6 +75,8 @@ public class BackgroundLocalizationService extends Service { private Handler mHandler = new Handler(); private Runnable mStatusChecker; private FusedLocationProviderClient mFusedLocationClient; + private LocationCallback mLocationCallback; + private LocationRequest locationRequest; public BackgroundLocalizationService() { providers.add(LocationManager.GPS_PROVIDER); @@ -111,6 +113,7 @@ public class BackgroundLocalizationService extends Service { return START_STICKY; } + @SuppressLint("CheckResult") @Override public void onCreate() { Log.e(TAG, "onCreate"); @@ -128,13 +131,13 @@ public class BackgroundLocalizationService extends Service { if (!stopService) { mStatusChecker = () -> { try { - mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this); + mFusedLocationClient = new FusedLocationProviderClient(this); initializeLocationManager(); getLocalizationFromListeners(); changeBackgroundMode(); } finally { - mFusedLocationClient = null; - destroyLocationListeners(); + //mFusedLocationClient = null; + //destroyLocationListeners(); mHandler.postDelayed(mStatusChecker, notify_interval); } }; @@ -196,18 +199,50 @@ public class BackgroundLocalizationService extends Service { Location bestLocation = null; AtomicReference triggerAnotherLocationListener = new AtomicReference<>(false); + /* mLocationCallback = new LocationCallback() { + + + for (Location location : locationResult.getLocations()) { + mLastLocation = location; + coordinatesHistory.add(location); + sendCoordinateToBackend(location); + } + }; + }; +*/ + + + /* @Override + public void onLo(LocationResult locationResult) { + for (Location location : locationResult.getLocations()) { + mLastLocation = location; + coordinatesHistory.add(location); + sendCoordinateToBackend(location); + Log.i("MainActivity", "Location: " + location.getLatitude() + " " + location.getLongitude()); + + } + };*/ + + + mFusedLocationClient.getLastLocation().addOnSuccessListener( location -> { + Log.e(TAG,"Getting loc from fused"); if (location != null) { mLastLocation = location; coordinatesHistory.add(location); sendCoordinateToBackend(location); } - - triggerAnotherLocationListener.set(true); + //triggerAnotherLocationListener.set(true); + }) + .addOnFailureListener(e -> { + Log.d(TAG, "Error trying to get last GPS location"); + e.printStackTrace(); }); - if (triggerAnotherLocationListener.get()) { + + + for (String provider : providers1) { Location location = mLocationManager.getLastKnownLocation(provider); @@ -218,9 +253,9 @@ public class BackgroundLocalizationService extends Service { bestLocation = location; } } - + Log.e(TAG, bestLocation.getLongitude() + " " + bestLocation.getLatitude()); coordinatesHistory.add(bestLocation); - } + sendCoordinateToBackend(bestLocation); } @@ -231,13 +266,14 @@ public class BackgroundLocalizationService extends Service { @Override public void onDestroy() { Log.e(TAG, "onDestroy"); - super.onDestroy(); mHandler.removeCallbacks(mStatusChecker); destroyLocationListeners(); } - private void destroyLocationListeners(){ + private void destroyLocationListeners() { + //mFusedLocationClient.removeLocationUpdates(mLocationCallback); + if (mLocationManager != null) { for (LocationListener listener : mLocationListeners) { try { @@ -280,7 +316,7 @@ public class BackgroundLocalizationService extends Service { providerIndex++; } } - + private class LocationListener implements android.location.LocationListener { LocationListener(String provider) { @@ -337,7 +373,7 @@ public class BackgroundLocalizationService extends Service { if (locationLevel.equals(SharingLevel.PRESENCE.toString())) { - if(!MapUtils.checkIfCoordinateIsValid(latitude,longitude)){ + if (!MapUtils.checkIfCoordinateIsValid(latitude, longitude)) { return null; } @@ -381,7 +417,7 @@ public class BackgroundLocalizationService extends Service { @Override public void onError(Throwable e) { - Log.e(TAG,"onErr" + valueOf(e)); + Log.e(TAG, "onErr" + valueOf(e)); } })); @@ -392,4 +428,39 @@ public class BackgroundLocalizationService extends Service { return null; } } -} \ No newline at end of file +} + + + + /*locationRequest = new LocationRequest(); + locationRequest.setInterval(notify_interval); + locationRequest.setFastestInterval(notify_interval); + locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); + + mLocationCallback = new LocationCallback() { + @Override + public void onLocationResult(LocationResult locationResult) { + Log.e(TAG, "ELO"); + for (Location location : locationResult.getLocations()) { + mLastLocation = location; + coordinatesHistory.add(location); + sendCoordinateToBackend(location); + Log.i(TAG, "Location: " + location.getLatitude() + " " + location.getLongitude()); + + } + } + }; + mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this); + if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { + // TODO: Consider calling + // ActivityCompat#requestPermissions + // here to request the missing permissions, and then overriding + // public void onRequestPermissionsResult(int requestCode, String[] permissions, + // int[] grantResults) + // to handle the case where the user grants the permission. See the documentation + // for ActivityCompat#requestPermissions for more details. + return; + } + mFusedLocationClient.requestLocationUpdates(locationRequest, mLocationCallback, Looper.getMainLooper()); + +*/ \ No newline at end of file