Compare commits

...

1 Commits

Author SHA1 Message Date
451ea60bbb A little refactor 2018-12-25 20:58:54 +01:00
2 changed files with 91 additions and 19 deletions

View File

@ -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'
}

View File

@ -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<String> providers = new ArrayList<String>();
@ -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<Boolean> 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;
}
}
}
}
/*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());
*/