diff --git a/app/src/main/assets/building.geojson b/app/src/main/assets/building.geojson index e000dd8..a151032 100644 --- a/app/src/main/assets/building.geojson +++ b/app/src/main/assets/building.geojson @@ -3,7 +3,9 @@ { "type": "Feature", "properties": { - "name": "Skrzydło B" + "name": "Skrzydło B", + "longitude" : 52.466669, + "latitude" : 16.926624 }, "geometry": { "coordinates": [ @@ -89,7 +91,9 @@ { "type": "Feature", "properties": { - "name": "Biblioteka" + "name": "Biblioteka", + "longitude" : 52.467351, + "latitude" : 16.926900 }, "geometry": { "coordinates": [ @@ -139,7 +143,9 @@ { "type": "Feature", "properties": { - "name": "Łącznik" + "name": "Łącznik", + "longitude" : 52.466619, + "latitude" : 16.926860 }, "geometry": { "coordinates": [ @@ -173,7 +179,9 @@ { "type": "Feature", "properties": { - "name": "Skrzydło A" + "name": "Skrzydło A", + "longitude" : 52.466559, + "latitude" : 16.927163 }, "geometry": { "coordinates": [ @@ -231,7 +239,10 @@ { "type": "Feature", "properties": { - "name": "Aule" + "name": "Aule", + "longitude" : 52.467114, + "latitude" : 16.927621 + }, "geometry": { "coordinates": [ @@ -334,7 +345,8 @@ "type": "Feature", "properties": { "name": "Hol", - "point" : [52.467088, 16.927150] + "longitude" : 52.4671021, + "latitude" : 16.927122 }, "geometry": { "coordinates": [ diff --git a/app/src/main/java/com/uam/wmi/findmytutor/activity/SharingFragment.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/SharingFragment.java index 839f673..38bff8d 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/activity/SharingFragment.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/SharingFragment.java @@ -19,6 +19,7 @@ import android.widget.Toast; import com.uam.wmi.findmytutor.R; import com.uam.wmi.findmytutor.service.BackgroundLocalizationService; import com.uam.wmi.findmytutor.utils.PrefUtils; +import com.uam.wmi.findmytutor.utils.SharingLevel; import java.util.Arrays; import java.util.HashMap; @@ -40,9 +41,10 @@ public class SharingFragment extends PreferenceFragment { public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); locationLevelMapping = new HashMap(); - locationLevelMapping.put(0,"presence"); - locationLevelMapping.put(1,"approximated"); - locationLevelMapping.put(2,"exact"); + + locationLevelMapping.put(0, SharingLevel.PRESENCE.toString()); + locationLevelMapping.put(1, SharingLevel.APPROXIMATED.toString()); + locationLevelMapping.put(2, SharingLevel.EXACT.toString()); addPreferencesFromResource(R.layout.pref_sharing); Preference manualStatus = findPreference("key_manual_status"); @@ -60,8 +62,8 @@ public class SharingFragment extends PreferenceFragment { }); locationMode.setOnPreferenceChangeListener((preference, newValue) -> { - ListPreference lp = (ListPreference) preference; PrefUtils.storeLocationMode(getApplicationContext(),locationLevelMapping.get(Integer.parseInt((String) newValue))); + return true; }); diff --git a/app/src/main/java/com/uam/wmi/findmytutor/model/Coordinate.java b/app/src/main/java/com/uam/wmi/findmytutor/model/Coordinate.java index 1f838e4..9b9d580 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/model/Coordinate.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/model/Coordinate.java @@ -47,6 +47,7 @@ public class Coordinate extends BaseResponse { public Coordinate (Double latitude, Double longitude, Double altitude, String approximatedLocation, String label, String userId, String displayMode) { //if (!latitudeRange.contains(latitude)) throw new IllegalArgumentException("Inappropriate latitude value" + latitude); //if (!longtitudeRange.contains(longitude)) throw new IllegalArgumentException("Inappropriate longitude value" + longitude); + //if (approximatedLocation == null) throw new IllegalArgumentException("Inappropriate approximatedLocation"); this.latitude = latitude; this.longitude = longitude; 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 44a0d08..3a09b6f 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 @@ -33,6 +33,7 @@ import com.uam.wmi.findmytutor.network.ApiClient; import com.uam.wmi.findmytutor.utils.ApproximatedLocalization; 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.mapUtils; import java.util.ArrayList; @@ -45,7 +46,6 @@ import io.reactivex.schedulers.Schedulers; import okhttp3.ResponseBody; import timber.log.Timber; -import static com.mapbox.geojson.Point.fromLngLat; import static com.uam.wmi.findmytutor.utils.PrefUtils.storeBackgroundLocationStatus; public class BackgroundLocalizationService extends Service { @@ -68,7 +68,6 @@ public class BackgroundLocalizationService extends Service { private FusedLocationProviderClient mFusedLocationClient; - public BackgroundLocalizationService() { providers.add(LocationManager.GPS_PROVIDER); providers.add(LocationManager.NETWORK_PROVIDER); @@ -96,7 +95,7 @@ public class BackgroundLocalizationService extends Service { stopService = intent.getBooleanExtra("request_stop", false); } if (stopService) { - storeBackgroundLocationStatus(getApplication(),false); + storeBackgroundLocationStatus(getApplication(), false); stopForeground(true); stopSelf(); return START_STICKY; @@ -108,7 +107,7 @@ public class BackgroundLocalizationService extends Service { @Override public void onCreate() { Log.e(TAG, "onCreate"); - storeBackgroundLocationStatus(getApplication(),true); + storeBackgroundLocationStatus(getApplication(), true); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) startMyOwnForeground(); @@ -143,7 +142,7 @@ public class BackgroundLocalizationService extends Service { providerIndex++; } - if(!stopService){ + if (!stopService) { mStatusChecker = () -> { try { fn_getlocation(); @@ -289,36 +288,49 @@ public class BackgroundLocalizationService extends Service { } } + @SuppressLint("StaticFieldLeak") private class Task extends AsyncTask { + ApproximatedLocalization approximatedLocalization; private Double latitude; private Double longitude; private Double altitude; - + private String approximatedBuildingPart = null; private CompositeDisposable disposable = new CompositeDisposable(); private CoordinateService coordinateService = ApiClient.getClient(getApplicationContext()) .create(CoordinateService.class); - ApproximatedLocalization approximatedLocalization; - private Task(Location location) { latitude = location.getLatitude(); longitude = location.getLongitude(); altitude = location.getAltitude(); - approximatedLocalization = new ApproximatedLocalization(mapUtils.loadJsonFromAsset(getApplicationContext(),"building.geojson")); + approximatedLocalization = new ApproximatedLocalization(mapUtils.loadJsonFromAsset(getApplicationContext(), "building.geojson")); + approximatedBuildingPart = approximatedLocalization.getNameOfBuildingPart(Point.fromLngLat(longitude, latitude)); } @Override protected Object doInBackground(Object[] objects) { -/* - Point point = approximatedLocalization.getPointerBuildingPart("Aule"); - Log.e("APPROXIMATED", String.valueOf(point));*/ + + if (PrefUtils.getLocationLevel(getApplicationContext()).equals(SharingLevel.PRESENCE.toString())) { + longitude = 52.467491; + latitude = 16.926782; + Log.e(TAG,"PRESENCE"); + } else if (PrefUtils.getLocationLevel(getApplicationContext()).equals(SharingLevel.APPROXIMATED.toString())) { + List points = approximatedLocalization.getPointerBuildingPart(approximatedBuildingPart); + + latitude = points.get(0); + longitude = points.get(1); + Log.e(TAG,"APPROXIMATED"); + }else { + Log.e(TAG,"EXACT"); + } + try { Coordinate coordinate = new Coordinate( latitude, longitude, altitude, - approximatedLocalization.getNameOfBuildingPart(Point.fromLngLat(longitude, latitude)), + approximatedBuildingPart, PrefUtils.getUserStatus(getApplicationContext()), PrefUtils.getUserId(getApplicationContext()), PrefUtils.getLocationLevel(getApplicationContext()) diff --git a/app/src/main/java/com/uam/wmi/findmytutor/utils/ApproximatedLocalization.java b/app/src/main/java/com/uam/wmi/findmytutor/utils/ApproximatedLocalization.java index 71074ca..39aca2a 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/utils/ApproximatedLocalization.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/utils/ApproximatedLocalization.java @@ -1,8 +1,12 @@ package com.uam.wmi.findmytutor.utils; import android.support.annotation.NonNull; +import android.util.Log; + import com.google.gson.GsonBuilder; -; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; import com.mapbox.geojson.BoundingBox; import com.mapbox.geojson.Feature; import com.mapbox.geojson.FeatureCollection; @@ -15,47 +19,61 @@ import com.mapbox.geojson.gson.GeometryDeserializer; import com.mapbox.geojson.gson.PointDeserializer; import com.mapbox.turf.TurfJoins; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import java.util.Objects; +; + public class ApproximatedLocalization { private FeatureCollection buildingSchema = null; - public ApproximatedLocalization(String buildingObject){ + public ApproximatedLocalization(String buildingObject) { buildingSchema = fromJson(buildingObject); } - private FeatureCollection fromJson(@NonNull String json) { + private FeatureCollection fromJson(@NonNull String json) { GsonBuilder gson = new GsonBuilder(); + gson.registerTypeAdapterFactory(GeoJsonAdapterFactory.create()); gson.registerTypeAdapter(Point.class, new PointDeserializer()); gson.registerTypeAdapter(Geometry.class, new GeometryDeserializer()); gson.registerTypeAdapter(BoundingBox.class, new BoundingBoxDeserializer()); + return gson.create().fromJson(json, FeatureCollection.class); } - public String getNameOfBuildingPart(Point point) { + public String getNameOfBuildingPart(Point point) { - for(Feature feature : Objects.requireNonNull(buildingSchema.features())){ + for (Feature feature : Objects.requireNonNull(buildingSchema.features())) { boolean isInside = TurfJoins.inside(point, (Polygon) Objects.requireNonNull(feature.geometry())); - if (isInside){ - return Objects.requireNonNull(Objects.requireNonNull(feature.getStringProperty("name"))); - } + if (isInside) + return Objects.requireNonNull(Objects.requireNonNull(feature.getStringProperty("name"))); } return null; } -/* - public Point getMiddlePointForBuildingPart(String BuildingPart) { - for(Feature feature : Objects.requireNonNull(buildingSchema.features())){ + + public List getPointerBuildingPart(String buildingPart) { + + for (Feature feature : Objects.requireNonNull(buildingSchema.features())) { String partName = feature.getStringProperty("name"); - if(BuildingPart.equals(partName)) { - JsonElement pointsList = feature.getProperty("point"); - return Point.fromLngLat(pointsList.getAsNumber().doubleValue(), pointsList.getAsJsonArray().get(1)); + if (buildingPart != null && buildingPart.equals(partName)) { + Double longitude = feature.getNumberProperty("longitude").doubleValue(); + Double latitude = feature.getNumberProperty("latitude").doubleValue(); + + List list = Arrays.asList(longitude,latitude); + + Log.e("APPROX",partName + " " + buildingPart + list); + + return list; + } } - return Point.fromLngLat(0,0); - }*/ + return Arrays.asList(0.0,0.0); + } } diff --git a/app/src/main/java/com/uam/wmi/findmytutor/utils/SharingLevel.java b/app/src/main/java/com/uam/wmi/findmytutor/utils/SharingLevel.java new file mode 100644 index 0000000..055651b --- /dev/null +++ b/app/src/main/java/com/uam/wmi/findmytutor/utils/SharingLevel.java @@ -0,0 +1,18 @@ +package com.uam.wmi.findmytutor.utils; + +public enum SharingLevel { + PRESENCE("presence"), + APPROXIMATED("approximated"), + EXACT("exact"); + + private final String text; + + SharingLevel(final String text) { + this.text = text; + } + + @Override + public String toString() { + return text; + } +} \ No newline at end of file