A little refactor
This commit is contained in:
parent
2178b4d61d
commit
451ea60bbb
@ -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'
|
||||
}
|
||||
|
@ -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());
|
||||
|
||||
*/
|
Loading…
Reference in New Issue
Block a user