A little refactor
This commit is contained in:
parent
2178b4d61d
commit
451ea60bbb
@ -72,4 +72,5 @@ dependencies {
|
|||||||
// FloatingBarMenu
|
// FloatingBarMenu
|
||||||
implementation 'com.getbase:floatingactionbutton:1.10.1'
|
implementation 'com.getbase:floatingactionbutton:1.10.1'
|
||||||
implementation 'org.apache.commons:commons-collections4:4.0'
|
implementation 'org.apache.commons:commons-collections4:4.0'
|
||||||
|
implementation 'com.patloew.rxlocation:rxlocation:1.0.5'
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,7 @@ import android.os.Build;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
|
import android.os.Looper;
|
||||||
import android.support.annotation.RequiresApi;
|
import android.support.annotation.RequiresApi;
|
||||||
import android.support.v4.app.ActivityCompat;
|
import android.support.v4.app.ActivityCompat;
|
||||||
import android.support.v4.app.NotificationCompat;
|
import android.support.v4.app.NotificationCompat;
|
||||||
@ -24,8 +25,10 @@ import android.util.Log;
|
|||||||
|
|
||||||
import com.annimon.stream.Stream;
|
import com.annimon.stream.Stream;
|
||||||
import com.google.android.gms.location.FusedLocationProviderClient;
|
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.google.android.gms.location.LocationServices;
|
||||||
import com.jakewharton.retrofit2.adapter.rxjava2.HttpException;
|
|
||||||
import com.mapbox.geojson.Point;
|
import com.mapbox.geojson.Point;
|
||||||
import com.mapbox.mapboxsdk.geometry.LatLng;
|
import com.mapbox.mapboxsdk.geometry.LatLng;
|
||||||
import com.uam.wmi.findmytutor.model.Coordinate;
|
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.ApproximatedLocalization;
|
||||||
import com.uam.wmi.findmytutor.utils.MapUtils;
|
import com.uam.wmi.findmytutor.utils.MapUtils;
|
||||||
import com.uam.wmi.findmytutor.utils.PrefUtils;
|
import com.uam.wmi.findmytutor.utils.PrefUtils;
|
||||||
import com.uam.wmi.findmytutor.utils.RestApiHelper;
|
|
||||||
import com.uam.wmi.findmytutor.utils.SharingLevel;
|
import com.uam.wmi.findmytutor.utils.SharingLevel;
|
||||||
|
|
||||||
import org.apache.commons.collections4.queue.CircularFifoQueue;
|
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.android.schedulers.AndroidSchedulers;
|
||||||
import io.reactivex.disposables.CompositeDisposable;
|
import io.reactivex.disposables.CompositeDisposable;
|
||||||
import io.reactivex.observers.DisposableCompletableObserver;
|
import io.reactivex.observers.DisposableCompletableObserver;
|
||||||
import io.reactivex.observers.DisposableSingleObserver;
|
|
||||||
import io.reactivex.schedulers.Schedulers;
|
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.offlineBackgroundLocationInterval;
|
||||||
import static com.uam.wmi.findmytutor.utils.Const.onlineBackgroundLocationInterval;
|
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 String TAG = "MyLocationService";
|
||||||
private static final float LOCATION_DISTANCE = 1f;
|
private static final float LOCATION_DISTANCE = 1f;
|
||||||
private static long notify_interval = onlineBackgroundLocationInterval;
|
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_inside_building = onlineBackgroundLocationInterval;
|
||||||
private static long notify_interval_outside_building = offlineBackgroundLocationInterval;
|
private static long notify_interval_outside_building = offlineBackgroundLocationInterval;
|
||||||
private static int coordinatesHistoryLength = 5;
|
private static int coordinatesHistoryLength = 5;
|
||||||
private static final Long LOCATION_INTERVAL = notify_interval;
|
|
||||||
private Location mLastLocation;
|
private Location mLastLocation;
|
||||||
private Boolean stopService = false;
|
private Boolean stopService = false;
|
||||||
private ArrayList<String> providers = new ArrayList<String>();
|
private ArrayList<String> providers = new ArrayList<String>();
|
||||||
@ -75,6 +75,8 @@ public class BackgroundLocalizationService extends Service {
|
|||||||
private Handler mHandler = new Handler();
|
private Handler mHandler = new Handler();
|
||||||
private Runnable mStatusChecker;
|
private Runnable mStatusChecker;
|
||||||
private FusedLocationProviderClient mFusedLocationClient;
|
private FusedLocationProviderClient mFusedLocationClient;
|
||||||
|
private LocationCallback mLocationCallback;
|
||||||
|
private LocationRequest locationRequest;
|
||||||
|
|
||||||
public BackgroundLocalizationService() {
|
public BackgroundLocalizationService() {
|
||||||
providers.add(LocationManager.GPS_PROVIDER);
|
providers.add(LocationManager.GPS_PROVIDER);
|
||||||
@ -111,6 +113,7 @@ public class BackgroundLocalizationService extends Service {
|
|||||||
return START_STICKY;
|
return START_STICKY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressLint("CheckResult")
|
||||||
@Override
|
@Override
|
||||||
public void onCreate() {
|
public void onCreate() {
|
||||||
Log.e(TAG, "onCreate");
|
Log.e(TAG, "onCreate");
|
||||||
@ -128,13 +131,13 @@ public class BackgroundLocalizationService extends Service {
|
|||||||
if (!stopService) {
|
if (!stopService) {
|
||||||
mStatusChecker = () -> {
|
mStatusChecker = () -> {
|
||||||
try {
|
try {
|
||||||
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
|
mFusedLocationClient = new FusedLocationProviderClient(this);
|
||||||
initializeLocationManager();
|
initializeLocationManager();
|
||||||
getLocalizationFromListeners();
|
getLocalizationFromListeners();
|
||||||
changeBackgroundMode();
|
changeBackgroundMode();
|
||||||
} finally {
|
} finally {
|
||||||
mFusedLocationClient = null;
|
//mFusedLocationClient = null;
|
||||||
destroyLocationListeners();
|
//destroyLocationListeners();
|
||||||
mHandler.postDelayed(mStatusChecker, notify_interval);
|
mHandler.postDelayed(mStatusChecker, notify_interval);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -196,18 +199,50 @@ public class BackgroundLocalizationService extends Service {
|
|||||||
Location bestLocation = null;
|
Location bestLocation = null;
|
||||||
AtomicReference<Boolean> triggerAnotherLocationListener = new AtomicReference<>(false);
|
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(
|
mFusedLocationClient.getLastLocation().addOnSuccessListener(
|
||||||
location -> {
|
location -> {
|
||||||
|
Log.e(TAG,"Getting loc from fused");
|
||||||
if (location != null) {
|
if (location != null) {
|
||||||
mLastLocation = location;
|
mLastLocation = location;
|
||||||
coordinatesHistory.add(location);
|
coordinatesHistory.add(location);
|
||||||
sendCoordinateToBackend(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) {
|
for (String provider : providers1) {
|
||||||
Location location = mLocationManager.getLastKnownLocation(provider);
|
Location location = mLocationManager.getLastKnownLocation(provider);
|
||||||
|
|
||||||
@ -218,9 +253,9 @@ public class BackgroundLocalizationService extends Service {
|
|||||||
bestLocation = location;
|
bestLocation = location;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Log.e(TAG, bestLocation.getLongitude() + " " + bestLocation.getLatitude());
|
||||||
coordinatesHistory.add(bestLocation);
|
coordinatesHistory.add(bestLocation);
|
||||||
}
|
sendCoordinateToBackend(bestLocation);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -231,13 +266,14 @@ public class BackgroundLocalizationService extends Service {
|
|||||||
@Override
|
@Override
|
||||||
public void onDestroy() {
|
public void onDestroy() {
|
||||||
Log.e(TAG, "onDestroy");
|
Log.e(TAG, "onDestroy");
|
||||||
|
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
mHandler.removeCallbacks(mStatusChecker);
|
mHandler.removeCallbacks(mStatusChecker);
|
||||||
destroyLocationListeners();
|
destroyLocationListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void destroyLocationListeners(){
|
private void destroyLocationListeners() {
|
||||||
|
//mFusedLocationClient.removeLocationUpdates(mLocationCallback);
|
||||||
|
|
||||||
if (mLocationManager != null) {
|
if (mLocationManager != null) {
|
||||||
for (LocationListener listener : mLocationListeners) {
|
for (LocationListener listener : mLocationListeners) {
|
||||||
try {
|
try {
|
||||||
@ -280,7 +316,7 @@ public class BackgroundLocalizationService extends Service {
|
|||||||
providerIndex++;
|
providerIndex++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class LocationListener implements android.location.LocationListener {
|
private class LocationListener implements android.location.LocationListener {
|
||||||
|
|
||||||
LocationListener(String provider) {
|
LocationListener(String provider) {
|
||||||
@ -337,7 +373,7 @@ public class BackgroundLocalizationService extends Service {
|
|||||||
|
|
||||||
|
|
||||||
if (locationLevel.equals(SharingLevel.PRESENCE.toString())) {
|
if (locationLevel.equals(SharingLevel.PRESENCE.toString())) {
|
||||||
if(!MapUtils.checkIfCoordinateIsValid(latitude,longitude)){
|
if (!MapUtils.checkIfCoordinateIsValid(latitude, longitude)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -381,7 +417,7 @@ public class BackgroundLocalizationService extends Service {
|
|||||||
@Override
|
@Override
|
||||||
public void onError(Throwable e) {
|
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;
|
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());
|
||||||
|
|
||||||
|
*/
|
Loading…
Reference in New Issue
Block a user