Working update

This commit is contained in:
Mieszko Wrzeszczyński 2018-12-11 10:19:27 +01:00
parent 2dda6ef65f
commit 3e44d6c3b4
7 changed files with 139 additions and 29 deletions

View File

@ -67,7 +67,6 @@ dependencies {
implementation 'com.auth0.android:jwtdecode:1.1.1'
implementation 'com.annimon:stream:1.2.1'
implementation 'com.google.android.gms:play-services-location:16.0.0'
// FloatingBarMenu
implementation 'com.getbase:floatingactionbutton:1.10.1'
implementation 'org.apache.commons:commons-collections4:4.0'
}

View File

@ -148,10 +148,10 @@ public class LoginActivity extends AppCompatActivity {
}
private void loginProcess(String email, String password) {
ValidateUser user = new ValidateUser(email, password);
//LdapUser fakeUser = new LdapUser(email, password,"wmi","tutor",email,"Fałszywy",email);
disposable.add(ldapService.validate(user)
//disposable.add(ldapService.fakeValidate(fakeUser)
//ValidateUser user = new ValidateUser(email, password);
LdapUser fakeUser = new LdapUser(email, password,"wmi","tutor",email,"Fałszywy",email);
// disposable.add(ldapService.validate(user)
disposable.add(ldapService.fakeValidate(fakeUser)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::handleResponse, this::handleError));

View File

@ -4,6 +4,7 @@ import android.Manifest;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.annotation.SuppressLint;
import android.graphics.Color;
import android.location.Location;
import android.os.Bundle;
import android.os.Handler;
@ -24,6 +25,8 @@ import com.getbase.floatingactionbutton.FloatingActionButton;
import com.jakewharton.retrofit2.adapter.rxjava2.HttpException;
import com.mapbox.android.core.permissions.PermissionsListener;
import com.mapbox.android.core.permissions.PermissionsManager;
import com.mapbox.geojson.FeatureCollection;
import com.mapbox.geojson.LineString;
import com.mapbox.geojson.Point;
import com.mapbox.mapboxsdk.Mapbox;
import com.mapbox.mapboxsdk.annotations.Icon;
@ -38,6 +41,10 @@ import com.mapbox.mapboxsdk.location.modes.RenderMode;
import com.mapbox.mapboxsdk.maps.MapView;
import com.mapbox.mapboxsdk.maps.MapboxMap;
import com.mapbox.mapboxsdk.maps.OnMapReadyCallback;
import com.mapbox.mapboxsdk.style.expressions.Expression;
import com.mapbox.mapboxsdk.style.layers.CircleLayer;
import com.mapbox.mapboxsdk.style.layers.SymbolLayer;
import com.mapbox.mapboxsdk.style.sources.GeoJsonSource;
import com.uam.wmi.findmytutor.R;
import com.uam.wmi.findmytutor.model.Coordinate;
import com.uam.wmi.findmytutor.model.PredefinedCoordViewModel;
@ -67,6 +74,32 @@ import io.reactivex.schedulers.Schedulers;
import okhttp3.ResponseBody;
import timber.log.Timber;
import com.mapbox.geojson.Feature;
import static com.mapbox.mapboxsdk.style.expressions.Expression.all;
import static com.mapbox.mapboxsdk.style.expressions.Expression.division;
import static com.mapbox.mapboxsdk.style.expressions.Expression.exponential;
import static com.mapbox.mapboxsdk.style.expressions.Expression.get;
import static com.mapbox.mapboxsdk.style.expressions.Expression.gt;
import static com.mapbox.mapboxsdk.style.expressions.Expression.gte;
import static com.mapbox.mapboxsdk.style.expressions.Expression.has;
import static com.mapbox.mapboxsdk.style.expressions.Expression.interpolate;
import static com.mapbox.mapboxsdk.style.expressions.Expression.literal;
import static com.mapbox.mapboxsdk.style.expressions.Expression.lt;
import static com.mapbox.mapboxsdk.style.expressions.Expression.rgb;
import static com.mapbox.mapboxsdk.style.expressions.Expression.stop;
import static com.mapbox.mapboxsdk.style.expressions.Expression.toNumber;
import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.circleColor;
import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.circleRadius;
import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.iconColor;
import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.iconImage;
import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.iconSize;
import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.textAllowOverlap;
import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.textColor;
import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.textField;
import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.textIgnorePlacement;
import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.textSize;
public class MapActivity extends BaseActivity
implements PermissionsListener, OnMapReadyCallback {
@ -99,6 +132,7 @@ public class MapActivity extends BaseActivity
private boolean isTutor;
private ApproximatedLocalization approximatedLocalization;
private boolean shouldFetchNewCoords = true;
private GeoJsonSource geoJsonSource = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -171,6 +205,8 @@ public class MapActivity extends BaseActivity
setOnMapClickListener();
MapUtils.setMapBoundsArea(getApplicationContext(), mapboxMap, mapView, true);
convertMarkersToGeoJson();
addClusteredGeoJsonSource();
}
private void updateUserHashMap(String userId, Long markerId) {
@ -219,6 +255,32 @@ public class MapActivity extends BaseActivity
}
private void convertMarkersToGeoJson(){
List<Point> coordinates = Stream.of(coordsMap.values())
.map(c -> Point.fromLngLat(c.getLongitude(), c.getLatitude()))
.toList();
LineString lineString = LineString.fromLngLats(coordinates);
FeatureCollection featureCollection = FeatureCollection.fromFeatures(
new Feature[]{Feature.fromGeometry(lineString)});
geoJsonSource = new GeoJsonSource("markers", featureCollection);
mapboxMap.addSource(geoJsonSource);
}
private void updateGeoJsonSource(){
List<Point> coordinates = Stream.of(coordsMap.values())
.map(c -> Point.fromLngLat(c.getLongitude(), c.getLatitude()))
.toList();
LineString lineString = LineString.fromLngLats(coordinates);
FeatureCollection featureCollection = FeatureCollection.fromFeatures(
new Feature[]{Feature.fromGeometry(lineString)});
geoJsonSource = new GeoJsonSource("markers", featureCollection);
}
private void handleError(Throwable error) {
showError(error);
}
@ -307,6 +369,73 @@ public class MapActivity extends BaseActivity
}
private void addClusteredGeoJsonSource() {
// Use the earthquakes GeoJSON source to create three layers: One layer for each cluster category.
// Each point range gets a different fill color.
int[][] layers = new int[][] {
new int[] {150, ContextCompat.getColor(this, R.color.mapboxRed)},
new int[] {20, ContextCompat.getColor(this, R.color.mapboxGreen)},
new int[] {0, ContextCompat.getColor(this, R.color.mapbox_blue)}
};
//Creating a marker layer for single data points
SymbolLayer unclustered = new SymbolLayer("unclustered-points", "markers");
unclustered.setProperties(
iconImage("cross-icon-id"),
iconSize(
division(
get("mag"), literal(4.0f)
)
),
iconColor(
interpolate(exponential(1), get("mag"),
stop(2.0, rgb(0, 255, 0)),
stop(4.5, rgb(0, 0, 255)),
stop(7.0, rgb(255, 0, 0))
)
)
);
mapboxMap.addLayer(unclustered);
for (int i = 0; i < layers.length; i++) {
//Add clusters' circles
CircleLayer circles = new CircleLayer("cluster-" + i, "markers");
circles.setProperties(
circleColor(layers[i][1]),
circleRadius(18f)
);
Expression pointCount = toNumber(get("point_count"));
// Add a filter to the cluster layer that hides the circles based on "point_count"
circles.setFilter(
i == 0
? all(has("point_count"),
gte(pointCount, literal(layers[i][0]))
) : all(has("point_count"),
gt(pointCount, literal(layers[i][0])),
lt(pointCount, literal(layers[i - 1][0]))
)
);
mapboxMap.addLayer(circles);
}
//Add the count labels
SymbolLayer count = new SymbolLayer("count", "markers");
count.setProperties(
textField(Expression.toString(get("point_count"))),
textSize(12f),
textColor(Color.WHITE),
textIgnorePlacement(true),
textAllowOverlap(true)
);
mapboxMap.addLayer(count);
}
public void showLocationDialog(LatLng latLng) {
LayoutInflater layoutInflaterAndroid = LayoutInflater.from(getApplicationContext());
@ -501,6 +630,7 @@ public class MapActivity extends BaseActivity
// For next fetch
previousCoordsIds.clear();
previousCoordsIds.addAll(currentCoordsIds);
updateGeoJsonSource();
}
@Override

View File

@ -26,7 +26,7 @@ public class ApiClient {
private static Retrofit retrofit = null;
private static int REQUEST_TIMEOUT = 60;
private static OkHttpClient okHttpClient;
private static final String BASE_URL = "https://s416084.projektstudencki.pl/master/";
private static final String BASE_URL = "https://s416084.projektstudencki.pl/develop/";
public static Retrofit getClient(Context context) {

View File

@ -1,42 +1,23 @@
package com.uam.wmi.findmytutor.utils;
import android.support.annotation.NonNull;
import com.google.gson.GsonBuilder;
import com.mapbox.geojson.BoundingBox;
import com.mapbox.geojson.Feature;
import com.mapbox.geojson.FeatureCollection;
import com.mapbox.geojson.Geometry;
import com.mapbox.geojson.Point;
import com.mapbox.geojson.Polygon;
import com.mapbox.geojson.gson.BoundingBoxDeserializer;
import com.mapbox.geojson.gson.GeoJsonAdapterFactory;
import com.mapbox.geojson.gson.GeometryDeserializer;
import com.mapbox.geojson.gson.PointDeserializer;
import com.mapbox.turf.TurfJoins;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
;
public class ApproximatedLocalization {
private FeatureCollection buildingSchema = null;
public ApproximatedLocalization(String buildingObject) {
buildingSchema = fromJson(buildingObject);
}
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);
buildingSchema = FeatureCollection.fromJson(buildingObject);
}
public String getNameOfBuildingPart(Point point) {

View File

@ -9,7 +9,7 @@ public class Const {
public final static Integer onlineBackgroundLocationInterval = 15000;
public final static Integer offlineBackgroundLocationInterval = 36000;
public final static Integer defaultMapZoom = 17;
public final static Integer searchMapZoom = 13;
public final static Integer searchMapZoom = 4;
public final static Double presenceLatitude = 52.466365;
public final static Double presenceLongitude = 16.926792;
public final static String presenceApproximatedName = "Unknown";

View File

@ -42,7 +42,7 @@ public class MapUtils {
// Map Bounds Area
public static void setZoom(MapboxMap mapboxMap, Integer zoom) {
makeNewCamera(mapboxMap, 52.466799, 16.927002, zoom, 0, 0, 1000);
mapboxMap.setMinZoomPreference(16); // TODO export to map config
mapboxMap.setMinZoomPreference(5); // TODO export to map config
}
public static void makeNewCamera(MapboxMap mapboxMap, double lat, double lon, int zoomParam, int bearingParam, int tiltParam, int duration) {