mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-28 05:13:53 +01:00
Mostly implement search this area methods, not tested yet even once
This commit is contained in:
parent
9a50f54b4a
commit
e8ae344215
5 changed files with 96 additions and 16 deletions
|
|
@ -6,6 +6,7 @@ import android.os.Bundle;
|
||||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||||
import com.mapbox.mapboxsdk.annotations.BaseMarkerOptions;
|
import com.mapbox.mapboxsdk.annotations.BaseMarkerOptions;
|
||||||
import com.mapbox.mapboxsdk.maps.MapView;
|
import com.mapbox.mapboxsdk.maps.MapView;
|
||||||
|
import com.mapbox.mapboxsdk.maps.MapboxMap;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
@ -47,6 +48,7 @@ public interface NearbyMapContract {
|
||||||
void updateMarker(boolean isBookmarked, Place place);
|
void updateMarker(boolean isBookmarked, Place place);
|
||||||
LatLng getCameraTarget();
|
LatLng getCameraTarget();
|
||||||
void viewsAreSet(NearbyParentFragmentContract.ViewsAreReadyCallback viewsAreReadyCallback);
|
void viewsAreSet(NearbyParentFragmentContract.ViewsAreReadyCallback viewsAreReadyCallback);
|
||||||
|
void addOnCameraMoveListener(MapboxMap.OnCameraMoveListener onCameraMoveListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
interface UserActions extends NearbyElementContract.UserActions {
|
interface UserActions extends NearbyElementContract.UserActions {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,10 @@
|
||||||
package fr.free.nrw.commons.nearby.mvp.contract;
|
package fr.free.nrw.commons.nearby.mvp.contract;
|
||||||
|
|
||||||
|
|
||||||
|
import android.widget.Button;
|
||||||
|
|
||||||
|
import com.mapbox.mapboxsdk.maps.MapboxMap;
|
||||||
|
|
||||||
import fr.free.nrw.commons.location.LatLng;
|
import fr.free.nrw.commons.location.LatLng;
|
||||||
import fr.free.nrw.commons.location.LocationServiceManager;
|
import fr.free.nrw.commons.location.LocationServiceManager;
|
||||||
|
|
||||||
|
|
@ -19,6 +23,9 @@ public interface NearbyParentFragmentContract {
|
||||||
void listOptionMenuItemClicked();
|
void listOptionMenuItemClicked();
|
||||||
void populatePlaces(LatLng curlatLng, LatLng searchLatLng);
|
void populatePlaces(LatLng curlatLng, LatLng searchLatLng);
|
||||||
boolean isBottomSheetExpanded();
|
boolean isBottomSheetExpanded();
|
||||||
|
void addSearchThisAreaButtonAction();
|
||||||
|
void setSearchThisAreaButtonVisibility(boolean isVisible);
|
||||||
|
void setSearchThisAreaProgressVisibility(boolean isVisible);
|
||||||
}
|
}
|
||||||
|
|
||||||
interface UserActions {
|
interface UserActions {
|
||||||
|
|
@ -32,7 +39,7 @@ public interface NearbyParentFragmentContract {
|
||||||
|
|
||||||
void lockNearby(boolean isNearbyLocked);
|
void lockNearby(boolean isNearbyLocked);
|
||||||
|
|
||||||
void addMapMovementListeners();
|
MapboxMap.OnCameraMoveListener onCameraMove(LatLng cameraTarget);
|
||||||
}
|
}
|
||||||
|
|
||||||
interface ViewsAreReadyCallback {
|
interface ViewsAreReadyCallback {
|
||||||
|
|
|
||||||
|
|
@ -409,6 +409,11 @@ public class NearbyMapFragment extends CommonsDaggerSupportFragment implements N
|
||||||
this.viewsAreReadyCallback.nearbyFragmentAndMapViewReady();
|
this.viewsAreReadyCallback.nearbyFragmentAndMapViewReady();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addOnCameraMoveListener(MapboxMap.OnCameraMoveListener onCameraMoveListener) {
|
||||||
|
mapboxMap.addOnCameraMoveListener(onCameraMoveListener);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void showPlaces() {
|
public void showPlaces() {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -119,12 +119,6 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
|
||||||
super.onViewCreated(view, savedInstanceState);
|
|
||||||
addSearchThisAreaButtonAction();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
|
|
@ -142,15 +136,28 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment
|
||||||
Timber.d("Child fragment attached");
|
Timber.d("Child fragment attached");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void addSearchThisAreaButtonAction() {
|
public void addSearchThisAreaButtonAction() {
|
||||||
searchThisAreaButton.setOnClickListener(view -> {
|
searchThisAreaButton.setOnClickListener(nearbyParentFragmentPresenter.onSearchThisAreaClicked());
|
||||||
// Lock map operations during search this area operation
|
}
|
||||||
nearbyParentFragmentPresenter.lockNearby(true);
|
|
||||||
searchThisAreaButtonProgressBar.setVisibility(View.VISIBLE);
|
@Override
|
||||||
|
public void setSearchThisAreaButtonVisibility(boolean isVisible) {
|
||||||
|
if (isVisible) {
|
||||||
|
searchThisAreaButton.setVisibility(View.VISIBLE);
|
||||||
|
} else {
|
||||||
searchThisAreaButton.setVisibility(View.GONE);
|
searchThisAreaButton.setVisibility(View.GONE);
|
||||||
nearbyParentFragmentPresenter.updateMapAndList(SEARCH_CUSTOM_AREA,
|
}
|
||||||
NearbyParentFragment.this.nearbyParentFragmentPresenter.getCameraTarget());
|
}
|
||||||
});
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setSearchThisAreaProgressVisibility(boolean isVisible) {
|
||||||
|
if (isVisible) {
|
||||||
|
searchThisAreaButtonProgressBar.setVisibility(View.VISIBLE);
|
||||||
|
} else {
|
||||||
|
searchThisAreaButtonProgressBar.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,11 @@ package fr.free.nrw.commons.nearby.mvp.presenter;
|
||||||
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.widget.Button;
|
||||||
|
|
||||||
|
import com.mapbox.mapboxsdk.maps.MapboxMap;
|
||||||
|
|
||||||
|
import ch.qos.logback.core.util.LocationUtil;
|
||||||
import fr.free.nrw.commons.R;
|
import fr.free.nrw.commons.R;
|
||||||
import fr.free.nrw.commons.location.LatLng;
|
import fr.free.nrw.commons.location.LatLng;
|
||||||
import fr.free.nrw.commons.location.LocationServiceManager;
|
import fr.free.nrw.commons.location.LocationServiceManager;
|
||||||
|
|
@ -10,6 +14,8 @@ import fr.free.nrw.commons.location.LocationUpdateListener;
|
||||||
import fr.free.nrw.commons.nearby.NearbyController;
|
import fr.free.nrw.commons.nearby.NearbyController;
|
||||||
import fr.free.nrw.commons.nearby.mvp.contract.NearbyMapContract;
|
import fr.free.nrw.commons.nearby.mvp.contract.NearbyMapContract;
|
||||||
import fr.free.nrw.commons.nearby.mvp.contract.NearbyParentFragmentContract;
|
import fr.free.nrw.commons.nearby.mvp.contract.NearbyParentFragmentContract;
|
||||||
|
import fr.free.nrw.commons.utils.LocationUtils;
|
||||||
|
import fr.free.nrw.commons.utils.NetworkUtils;
|
||||||
import fr.free.nrw.commons.wikidata.WikidataEditListener;
|
import fr.free.nrw.commons.wikidata.WikidataEditListener;
|
||||||
import io.reactivex.Observable;
|
import io.reactivex.Observable;
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||||
|
|
@ -35,6 +41,7 @@ public class NearbyParentFragmentPresenter
|
||||||
|
|
||||||
boolean nearbyViewsAreReady;
|
boolean nearbyViewsAreReady;
|
||||||
boolean onTabSelected;
|
boolean onTabSelected;
|
||||||
|
boolean searchingThisArea;
|
||||||
|
|
||||||
private LocationServiceManager locationServiceManager;
|
private LocationServiceManager locationServiceManager;
|
||||||
|
|
||||||
|
|
@ -45,6 +52,10 @@ public class NearbyParentFragmentPresenter
|
||||||
this.nearbyMapFragmentView = nearbyMapFragmentView;
|
this.nearbyMapFragmentView = nearbyMapFragmentView;
|
||||||
this.nearbyMapFragmentView.viewsAreSet(this);
|
this.nearbyMapFragmentView.viewsAreSet(this);
|
||||||
this.locationServiceManager = locationServiceManager;
|
this.locationServiceManager = locationServiceManager;
|
||||||
|
|
||||||
|
// Add on map camera moved listener after making sure presenter is ready
|
||||||
|
this.nearbyParentFragmentView.addSearchThisAreaButtonAction();
|
||||||
|
this.nearbyMapFragmentView.addOnCameraMoveListener(onCameraMove(getCameraTarget()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -131,8 +142,55 @@ public class NearbyParentFragmentPresenter
|
||||||
* this area button to search nearby places for other locations
|
* this area button to search nearby places for other locations
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void addMapMovementListeners() {
|
public MapboxMap.OnCameraMoveListener onCameraMove(LatLng cameraTarget) {
|
||||||
|
return new MapboxMap.OnCameraMoveListener() {
|
||||||
|
@Override
|
||||||
|
public void onCameraMove() {
|
||||||
|
// If our nearby markers are calculated at least once
|
||||||
|
if (NearbyController.currentLocation != null) {
|
||||||
|
if (nearbyParentFragmentView.isNetworkConnectionEstablished()) {
|
||||||
|
nearbyParentFragmentView.setSearchThisAreaButtonVisibility(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public View.OnClickListener onSearchThisAreaClicked() {
|
||||||
|
return new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
// Lock map operations during search this area operation
|
||||||
|
lockNearby(true);
|
||||||
|
nearbyParentFragmentView.setSearchThisAreaProgressVisibility(true);
|
||||||
|
// TODO: make this invisible at somewhere
|
||||||
|
nearbyParentFragmentView.setSearchThisAreaButtonVisibility(false);
|
||||||
|
|
||||||
|
if (searchCloseToCurrentLocation()){
|
||||||
|
updateMapAndList(LOCATION_SIGNIFICANTLY_CHANGED,
|
||||||
|
null);
|
||||||
|
} else {
|
||||||
|
updateMapAndList(SEARCH_CUSTOM_AREA,
|
||||||
|
getCameraTarget());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if search this area button is used around our current location, so that
|
||||||
|
* we can continue following our current location again
|
||||||
|
* @return Returns true if search this area button is used around our current location
|
||||||
|
*/
|
||||||
|
public boolean searchCloseToCurrentLocation() {
|
||||||
|
double distance = LocationUtils.commonsLatLngToMapBoxLatLng(getCameraTarget())
|
||||||
|
.distanceTo(new com.mapbox.mapboxsdk.geometry.LatLng(NearbyController.currentLocation.getLatitude()
|
||||||
|
, NearbyController.currentLocation.getLongitude()));
|
||||||
|
if (distance > NearbyController.searchedRadius*1000*3/4) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -180,6 +238,7 @@ public class NearbyParentFragmentPresenter
|
||||||
|
|
||||||
} else if (locationChangeType.equals(SEARCH_CUSTOM_AREA)) {
|
} else if (locationChangeType.equals(SEARCH_CUSTOM_AREA)) {
|
||||||
nearbyParentFragmentView.populatePlaces(lastLocation, cameraTarget);
|
nearbyParentFragmentView.populatePlaces(lastLocation, cameraTarget);
|
||||||
|
searchingThisArea = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
else { // Means location changed slightly, ie user is walking or driving.
|
else { // Means location changed slightly, ie user is walking or driving.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue