diff --git a/app/src/main/java/com/uam/wmi/findmytutor/activity/BaseActivity.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/BaseActivity.java index ad2c2a4..c347afc 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/activity/BaseActivity.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/BaseActivity.java @@ -138,6 +138,7 @@ public abstract class BaseActivity if (!isTutor) { navigationView.findViewById(R.id.nav_profile).setVisibility(View.GONE); + drawerNavigationView.getMenu().setGroupVisible(R.id.drawer_group_tutor, false); } } diff --git a/app/src/main/java/com/uam/wmi/findmytutor/activity/MapActivity.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/MapActivity.java index b35dd5a..6cc1e52 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/activity/MapActivity.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/MapActivity.java @@ -75,9 +75,14 @@ public class MapActivity extends BaseActivity private int mInterval = 10000; private Handler mHandler = new Handler(); private Runnable mStatusChecker; + private Handler manualLocHandler = new Handler(); + private Runnable manualLocStatusChecker; private MapView mapView; private MapboxMap mapboxMap; + private Button selectLocationButton; private Marker droppedMarker; + private Marker tmpLocalMarker; + private Coordinate droppedMarkercoordinate; private HashMap coordsMap = new HashMap<>(); private HashMap markerHash = new HashMap<>(); private Set previousCoordsIds = new HashSet<>(); @@ -86,6 +91,7 @@ public class MapActivity extends BaseActivity private int zoomParam = 17; private int bearingParam = 180; private int tiltParam = 30; + private String myID; @Override @@ -93,7 +99,7 @@ public class MapActivity extends BaseActivity super.onCreate(savedInstanceState); final SharedPreferences sharedPref = getSharedPreferences("fmtPrefs", Context.MODE_PRIVATE); - + myID = PrefUtils.getUserId(getApplicationContext()); // fetching coords service coordinateService = ApiClient.getClient(getApplicationContext()) .create(CoordinateService.class); @@ -109,8 +115,10 @@ public class MapActivity extends BaseActivity } }; + Bundle extras = getIntent().getExtras(); + selectLocationButton = findViewById(R.id.select_location_button); Mapbox.getInstance(this, getString(R.string.access_token)); mapView = findViewById(R.id.mapView); @@ -126,8 +134,26 @@ public class MapActivity extends BaseActivity MapActivity.this.mapboxMap = mapboxMap; mStatusChecker.run(); enableLocationPlugin(); + mapboxMap.setOnMarkerClickListener(marker -> { - createMarkerModal(marker.getTitle()); + String id = marker.getTitle(); + if (id.equals(myID)) { + Log.e(tag + "Manual", "my own marker from API"); + Button rmButton = findViewById(R.id.remove_location_button); + rmButton.setVisibility(View.VISIBLE); + rmButton.setOnClickListener(view -> { + Log.e(tag + "Manual", "manual coords sending stopped"); + // TODO to remove after BGserv + manualLocHandler.removeCallbacks(manualLocStatusChecker); + + rmButton.setVisibility(View.GONE); + Toast.makeText(MapActivity.this, "Your marker will disappear in next couple minutes", Toast.LENGTH_SHORT).show(); + + }); + } else { + createMarkerModal(id); + } + return true; }); @@ -207,38 +233,31 @@ public class MapActivity extends BaseActivity private void setOnMapLongClickListener() { - final boolean[] cancel = {false}; - Button selectLocationButton = findViewById(R.id.select_location_button); - mapboxMap.addOnMapLongClickListener((LatLng latLng) -> { selectLocationButton.setVisibility(View.VISIBLE); Icon icon = IconFactory.getInstance(MapActivity.this).fromResource(R.drawable.green_marker); + if (tmpLocalMarker == null) { - if (droppedMarker == null) { - - droppedMarker = mapboxMap.addMarker(new MarkerOptions() + tmpLocalMarker = mapboxMap.addMarker(new MarkerOptions() .position(latLng) .icon(icon) .title("My Loc") .setSnippet("Snipecik")); - } else if (!cancel[0]) { - ValueAnimator markerAnimator = ObjectAnimator.ofObject(droppedMarker, "position", - new mapUtils.LatLngEvaluator(), droppedMarker.getPosition(), latLng); + } else { + ValueAnimator markerAnimator = ObjectAnimator.ofObject(tmpLocalMarker, "position", + new mapUtils.LatLngEvaluator(), tmpLocalMarker.getPosition(), latLng); markerAnimator.setDuration(2000); markerAnimator.start(); } selectLocationButton.setOnClickListener((View view) -> { - - if (!cancel[0] && droppedMarker != null) { + if (tmpLocalMarker != null) { // Toast instructing user to tap on the mapboxMap - - // TODO PUT MANUAL CORD try { - Coordinate coordinate = new Coordinate( + droppedMarkercoordinate = new Coordinate( latLng.getLatitude(), latLng.getLongitude(), latLng.getAltitude(), @@ -248,64 +267,57 @@ public class MapActivity extends BaseActivity PrefUtils.getLocationLevel(getApplicationContext()) ); - disposable.add( - coordinateService - .postCoordinate(coordinate) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribeWith(new DisposableSingleObserver() { - @SuppressLint("LongLogTag") - @Override - public void onSuccess(Coordinate coord) { - Log.e(tag + "POST", String.valueOf(coord)); - } + // TODO remove after BG sending + manualLocStatusChecker = () -> { + try { + Log.e(tag + "Manual", "sending manual coords"); + // TODO ^^^ wrapper to removve + disposable.add( + coordinateService + .postCoordinate(droppedMarkercoordinate) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribeWith(new DisposableSingleObserver() { + @SuppressLint("LongLogTag") + @Override + public void onSuccess(Coordinate coord) { + Log.e(tag + "POST", String.valueOf(coord)); + } - @SuppressLint("LongLogTag") - @Override - public void onError(Throwable e) { + @SuppressLint("LongLogTag") + @Override + public void onError(Throwable e) { - Log.e(tag + "onError", e.getMessage()); + Log.e(tag + "onError", e.getMessage()); + + if (e instanceof HttpException) { + ResponseBody responseBody = ((HttpException) e).response().errorBody(); + Log.e(tag + "onError", RestApiHelper.getErrorMessage(responseBody)); + + } + } + })); + // TODO \/\/\/\/\/ wrapper to removve + } finally { + manualLocHandler.postDelayed(manualLocStatusChecker, mInterval); + } + }; + manualLocStatusChecker.run(); - if (e instanceof HttpException) { - ResponseBody responseBody = ((HttpException) e).response().errorBody(); - Log.e(tag + "onError", RestApiHelper.getErrorMessage(responseBody)); - } - } - })); } catch (IllegalArgumentException e) { Timber.e(String.valueOf(e)); } - Toast.makeText( MapActivity.this, "Manual Locations selected!" + latLng, Toast.LENGTH_LONG ).show(); - selectLocationButton.setBackgroundColor( - ContextCompat.getColor(MapActivity.this, R.color.colorAccent)); - selectLocationButton.setText("Remove Manual location"); - selectLocationButton.setVisibility(View.VISIBLE); - cancel[0] = true; - } else { - - // TODO REMOVE Manual Locatio - mapboxMap.removeMarker(droppedMarker); - droppedMarker = null; - - Toast.makeText( - MapActivity.this, - "REMOVED!!" + latLng, - Toast.LENGTH_LONG - ).show(); - - cancel[0] = false; selectLocationButton.setVisibility(View.GONE); - selectLocationButton.setText(R.string.select_a_location); - selectLocationButton.setBackgroundColor( - ContextCompat.getColor(MapActivity.this, R.color.colorPrimary)); + mapboxMap.removeMarker(tmpLocalMarker); + tmpLocalMarker = null; } }); }); @@ -330,13 +342,11 @@ public class MapActivity extends BaseActivity } if (coordsList.isEmpty()) { - Log.e(tag, "200 empty []"); - //mapboxMap.clear(); - + Timber.e("200 empty []"); + mapboxMap.clear(); return; } - ArrayList tmp = new ArrayList<>(); for (Coordinate coordinate : coordsList) { tmp.add(coordinate.getUserId()); @@ -371,9 +381,6 @@ public class MapActivity extends BaseActivity if (coordinate != null) { Log.e(tag, "Coordin: " + coordinate.getLatitude() + " | " + coordinate.getLongitude()); -// Log.e(tag, "Element: " + element.getLatitude()+" | " + element.getLongitude()); -// Log.e(tag, "isEqual: " + coordinate.getLatitude().equals(element.getLatitude())); -// Log.e(tag, "isEqual: " + coordinate.getLongitude().equals(element.getLongitude())); boolean statement = coordinate.getLatitude().equals(element.getLatitude()) || coordinate.getLongitude().equals(element.getLongitude()); Log.e(tag, "diff || diff: " + !statement); @@ -406,7 +413,11 @@ public class MapActivity extends BaseActivity MarkerOptions markerOptions = new MarkerOptions() .title(id) .position(new LatLng(element.getLatitude(), element.getLongitude())); - + // Check if this is me + if (id.equals(myID)) { + Icon icon = IconFactory.getInstance(MapActivity.this).fromResource(R.drawable.blue_marker); + markerOptions.setIcon(icon); + } Marker marker = mapboxMap.addMarker(markerOptions); markerHash.put(id, marker); @@ -534,6 +545,8 @@ public class MapActivity extends BaseActivity super.onDestroy(); mapView.onDestroy(); mHandler.removeCallbacks(mStatusChecker); + // TODO remove after BG sending + manualLocHandler.removeCallbacks(manualLocStatusChecker); disposable.dispose(); } 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 38bff8d..9bfc6a5 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 @@ -45,6 +45,8 @@ public class SharingFragment extends PreferenceFragment { locationLevelMapping.put(0, SharingLevel.PRESENCE.toString()); locationLevelMapping.put(1, SharingLevel.APPROXIMATED.toString()); locationLevelMapping.put(2, SharingLevel.EXACT.toString()); + locationLevelMapping.put(3, SharingLevel.MANUAL.toString()); + addPreferencesFromResource(R.layout.pref_sharing); Preference manualStatus = findPreference("key_manual_status"); diff --git a/app/src/main/java/com/uam/wmi/findmytutor/utils/MapboxMarker.java b/app/src/main/java/com/uam/wmi/findmytutor/utils/MapboxMarker.java deleted file mode 100644 index 371b819..0000000 --- a/app/src/main/java/com/uam/wmi/findmytutor/utils/MapboxMarker.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.uam.wmi.findmytutor.utils; - -import android.support.annotation.NonNull; - -import com.mapbox.mapboxsdk.annotations.InfoWindow; -import com.mapbox.mapboxsdk.annotations.Marker; -import com.mapbox.mapboxsdk.annotations.MarkerOptions; -import com.mapbox.mapboxsdk.maps.MapView; - -public class MapboxMarker extends Marker { - public MapboxMarker( MarkerOptions markerOptions ){ - super(markerOptions); - } -/* - @NonNull - - private InfoWindow showInfoWindow(InfoWindow iw, MapView mapView) { - iw.open(mapView, this, this.getPosition(), 0, 0); - this.infoWindowShown = true; - return iw; - }*/ - -} 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 index 055651b..9b0a027 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/utils/SharingLevel.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/utils/SharingLevel.java @@ -3,7 +3,8 @@ package com.uam.wmi.findmytutor.utils; public enum SharingLevel { PRESENCE("presence"), APPROXIMATED("approximated"), - EXACT("exact"); + EXACT("exact"), + MANUAL("manuak"); private final String text; diff --git a/app/src/main/java/com/uam/wmi/findmytutor/utils/mapUtils.java b/app/src/main/java/com/uam/wmi/findmytutor/utils/mapUtils.java index d67b4a6..4f3b2c1 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/utils/mapUtils.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/utils/mapUtils.java @@ -2,6 +2,11 @@ package com.uam.wmi.findmytutor.utils; import android.animation.TypeEvaluator; import android.content.Context; +import android.graphics.Color; +import android.view.Gravity; +import android.view.View; +import android.widget.FrameLayout; +import android.content.res.AssetManager; import com.mapbox.mapboxsdk.annotations.Polygon; import com.mapbox.mapboxsdk.annotations.PolygonOptions; @@ -11,6 +16,8 @@ import com.mapbox.mapboxsdk.geometry.LatLng; import com.mapbox.mapboxsdk.geometry.LatLngBounds; import com.mapbox.mapboxsdk.maps.MapView; import com.mapbox.mapboxsdk.maps.MapboxMap; +import com.mapbox.mapboxsdk.style.layers.FillLayer; +import com.mapbox.mapboxsdk.style.layers.Layer; import java.io.IOException; import java.io.InputStream; @@ -23,15 +30,6 @@ public class mapUtils { .include(new LatLng(52.46548540224137, 16.925255680881094)) .build(); - private static final PolygonOptions boundsArea = new PolygonOptions() - .add(WMI_BOUNDS.getNorthWest()) - .add(WMI_BOUNDS.getNorthEast()) - .add(WMI_BOUNDS.getSouthEast()) - .add(WMI_BOUNDS.getSouthWest()) - .alpha(0.0f); - // For adding and removing - private static Polygon polygon; - // Map Bounds Area public static void setMapBoundsArea(Context context, MapboxMap mapboxMap, MapView mapView, Boolean check) { @@ -40,16 +38,40 @@ public class mapUtils { mapboxMap.setLatLngBoundsForCameraTarget(WMI_BOUNDS); makeNewCamera(mapboxMap, 52.466799, 16.927002, 17, 0, 0, 4000); mapboxMap.setMinZoomPreference(16); // TODO export to map config - - // Visualise bounds area - // showBoundsArea - polygon = mapboxMap.addPolygon(boundsArea); + // drawBoundsArea(context, mapboxMap, mapView, check); } else { mapboxMap.setLatLngBoundsForCameraTarget(null); mapboxMap.setMinZoomPreference(2); - mapboxMap.removePolygon(polygon); + // drawBoundsArea(context, mapboxMap, mapView, check); } + } + // TODO: remove b4 release + private static final PolygonOptions boundsArea = new PolygonOptions() + .add(WMI_BOUNDS.getNorthWest()) + .add(WMI_BOUNDS.getNorthEast()) + .add(WMI_BOUNDS.getSouthEast()) + .add(WMI_BOUNDS.getSouthWest()) + .alpha(0.1f) + .fillColor(Color.YELLOW); + // For adding and removing + private static Polygon polygon; + private static View crosshair; + + private static void drawBoundsArea(Context context, MapboxMap mapboxMap, MapView mapView, Boolean check) { + if (check) { + // Visualise bounds area + // showBoundsArea + polygon = mapboxMap.addPolygon(boundsArea); + // showCrosshair + crosshair = new View(context); + crosshair.setLayoutParams(new FrameLayout.LayoutParams(15, 15, Gravity.CENTER)); + crosshair.setBackgroundColor(Color.GREEN); + mapView.addView(crosshair); + } else { + mapboxMap.removePolygon(polygon); + mapView.removeView(crosshair); + } } diff --git a/app/src/main/res/drawable/blue_marker.png b/app/src/main/res/drawable/blue_marker.png index d7068f2..7bbbd9b 100644 Binary files a/app/src/main/res/drawable/blue_marker.png and b/app/src/main/res/drawable/blue_marker.png differ diff --git a/app/src/main/res/drawable/green_marker.png b/app/src/main/res/drawable/green_marker.png index b8f9abb..0babab0 100644 Binary files a/app/src/main/res/drawable/green_marker.png and b/app/src/main/res/drawable/green_marker.png differ diff --git a/app/src/main/res/layout/activity_map.xml b/app/src/main/res/layout/activity_map.xml index dd40aea..42813df 100644 --- a/app/src/main/res/layout/activity_map.xml +++ b/app/src/main/res/layout/activity_map.xml @@ -111,6 +111,17 @@ android:textColor="@android:color/white" android:visibility="gone" /> +