Change nearby design, first create views then register listeners

This commit is contained in:
neslihanturan 2019-05-20 18:57:23 +03:00
parent 297eb67dae
commit cdd62290ac
5 changed files with 153 additions and 30 deletions

View file

@ -1,8 +1,10 @@
package fr.free.nrw.commons.nearby.mvp.contract;
import android.net.Uri;
import android.os.Bundle;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.mapbox.mapboxsdk.maps.MapView;
import fr.free.nrw.commons.nearby.Place;
@ -21,7 +23,7 @@ public interface NearbyMapContract {
void updateMapMarkers();
void updateMapToTrackPosition();
void setListeners();
void setupMapView();
MapView setupMapView(Bundle savedInstanceState);
void addCurrentLocationMarker();
void setSearchThisAreaButtonVisibility(boolean visible);
boolean isCurrentLocationMarkerVisible();
@ -38,6 +40,7 @@ public interface NearbyMapContract {
void animateFABs(boolean isFabOpen);
void closeFabs ( boolean isFabOpen);
void updateMarker(boolean isBookmarked, Place place);
void setViewsAreReady(NearbyParentFragmentContract.ViewsAreReadyCallback viewsAreReadyCallback);
}
interface UserActions extends NearbyElementContract.UserActions {

View file

@ -23,4 +23,8 @@ public interface NearbyParentFragmentContract {
void updateMapAndList(LocationServiceManager.LocationChangeType locationChangeType);
void lockNearby(boolean isNearbyLocked);
}
interface ViewsAreReadyCallback {
void nearbyFragmentAndMapViewReady();
}
}

View file

@ -1,14 +1,114 @@
package fr.free.nrw.commons.nearby.mvp.fragments;
import android.net.Uri;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import com.google.android.material.bottomsheet.BottomSheetBehavior;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.mapbox.mapboxsdk.Mapbox;
import com.mapbox.mapboxsdk.maps.MapView;
import com.mapbox.mapboxsdk.maps.MapboxMap;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import butterknife.BindView;
import butterknife.ButterKnife;
import fr.free.nrw.commons.R;
import fr.free.nrw.commons.di.CommonsDaggerSupportFragment;
import fr.free.nrw.commons.nearby.NearbyFragment;
import fr.free.nrw.commons.nearby.Place;
import fr.free.nrw.commons.nearby.mvp.contract.NearbyMapContract;
import fr.free.nrw.commons.nearby.mvp.contract.NearbyParentFragmentContract;
import timber.log.Timber;
public class NearbyMapFragment extends CommonsDaggerSupportFragment implements NearbyMapContract.View {
@BindView(R.id.bottom_sheet)
View bottomSheetList;
@BindView(R.id.bottom_sheet_details)
View bottomSheetDetails;
MapView mapView;
public NearbyParentFragmentContract.ViewsAreReadyCallback viewsAreReadyCallback;
private BottomSheetBehavior bottomSheetListBehavior;
private BottomSheetBehavior bottomSheetDetailsBehavior;
private Animation rotate_backward;
private Animation fab_close;
private Animation fab_open;
private Animation rotate_forward;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Timber.d("Nearby map fragment created");
Mapbox.getInstance(getActivity(),
getString(R.string.mapbox_commons_app_token));
Mapbox.getTelemetry().setUserTelemetryRequestState(false);
setRetainInstance(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Timber.d("onCreateView called");
this.mapView = setupMapView(savedInstanceState);
setHasOptionsMenu(false);
initViews();
return mapView;
}
@Override
public void initViews() {
Timber.d("init views called");
View view = ((NearbyFragment)getParentFragment()).view;
ButterKnife.bind(this, view);
bottomSheetListBehavior = BottomSheetBehavior.from(bottomSheetList);
bottomSheetDetailsBehavior = BottomSheetBehavior.from(bottomSheetDetails);
bottomSheetDetailsBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
bottomSheetDetails.setVisibility(View.VISIBLE);
fab_open = AnimationUtils.loadAnimation(getParentFragment().getActivity(), R.anim.fab_open);
fab_close = AnimationUtils.loadAnimation(getParentFragment().getActivity(), R.anim.fab_close);
rotate_forward = AnimationUtils.loadAnimation(getParentFragment().getActivity(), R.anim.rotate_forward);
rotate_backward = AnimationUtils.loadAnimation(getParentFragment().getActivity(), R.anim.rotate_backward);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
super.onViewCreated(view, savedInstanceState);
this.getView().setFocusableInTouchMode(true);
this.getView().requestFocus();
this.getView().setOnKeyListener((v, keyCode, event) -> {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (bottomSheetDetailsBehavior.getState() == BottomSheetBehavior
.STATE_EXPANDED) {
bottomSheetDetailsBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
return true;
} else if (bottomSheetDetailsBehavior.getState() == BottomSheetBehavior
.STATE_COLLAPSED) {
bottomSheetDetailsBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
mapView.getMapAsync(MapboxMap::deselectMarkers);
return true;
}
}
return false;
});
viewsAreReadyCallback.nearbyFragmentAndMapViewReady();
}
@Override
public MapView setupMapView(Bundle savedInstanceState) {
return null;
}
@Override
public void showSearchThisAreaButton() {
@ -19,11 +119,6 @@ public class NearbyMapFragment extends CommonsDaggerSupportFragment implements N
}
@Override
public void initViews() {
}
@Override
public void updateMapMarkers() {
@ -39,11 +134,6 @@ public class NearbyMapFragment extends CommonsDaggerSupportFragment implements N
}
@Override
public void setupMapView() {
}
@Override
public void addCurrentLocationMarker() {
@ -124,6 +214,11 @@ public class NearbyMapFragment extends CommonsDaggerSupportFragment implements N
}
@Override
public void setViewsAreReady(NearbyParentFragmentContract.ViewsAreReadyCallback viewsAreReadyCallback) {
this.viewsAreReadyCallback = viewsAreReadyCallback;
}
@Override
public void showPlaces() {

View file

@ -27,8 +27,6 @@ import fr.free.nrw.commons.location.LatLng;
import fr.free.nrw.commons.location.LocationServiceManager;
import fr.free.nrw.commons.location.LocationUpdateListener;
import fr.free.nrw.commons.nearby.NearbyController;
import fr.free.nrw.commons.nearby.NearbyListFragment;
import fr.free.nrw.commons.nearby.NearbyMapFragment;
import fr.free.nrw.commons.nearby.mvp.contract.NearbyParentFragmentContract;
import fr.free.nrw.commons.nearby.mvp.presenter.NearbyParentFragmentPresenter;
import fr.free.nrw.commons.utils.NetworkUtils;
@ -68,8 +66,8 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment
private NearbyParentFragmentContract.UserActions userActions;
private fr.free.nrw.commons.nearby.NearbyMapFragment nearbyMapFragment;
private fr.free.nrw.commons.nearby.NearbyListFragment nearbyListFragment;
private NearbyMapFragment nearbyMapFragment;
private NearbyListFragment nearbyListFragment;
private static final String TAG_RETAINED_MAP_FRAGMENT = NearbyMapFragment.class.getSimpleName();
private static final String TAG_RETAINED_LIST_FRAGMENT = NearbyListFragment.class.getSimpleName();
private NearbyParentFragmentPresenter nearbyParentFragmentPresenter;
@ -78,7 +76,6 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
nearbyParentFragmentPresenter = new NearbyParentFragmentPresenter(this);
}
@Nullable
@ -93,6 +90,7 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment
public void onResume() {
super.onResume();
resumeFragment();
nearbyParentFragmentPresenter = new NearbyParentFragmentPresenter(this, nearbyMapFragment);
}
/**

View file

@ -17,7 +17,8 @@ import static fr.free.nrw.commons.location.LocationServiceManager.LocationChange
public class NearbyParentFragmentPresenter
implements NearbyParentFragmentContract.UserActions,
WikidataEditListener.WikidataP18EditListener,
LocationUpdateListener {
LocationUpdateListener,
NearbyParentFragmentContract.ViewsAreReadyCallback{
@Inject
LocationServiceManager locationManager;
@ -26,10 +27,14 @@ public class NearbyParentFragmentPresenter
private boolean isNearbyLocked;
private LatLng curLatLng;
boolean nearbyViewsAreReady;
boolean onTabSelected;
public NearbyParentFragmentPresenter(NearbyParentFragmentContract.View nearbyParentFragmentView,
NearbyMapContract.View nearbyMapFragmentView) {
this.nearbyParentFragmentView = nearbyParentFragmentView;
this.nearbyMapFragmentView = nearbyMapFragmentView;
nearbyMapFragmentView.setViewsAreReady(this);
}
@Override
@ -37,10 +42,29 @@ public class NearbyParentFragmentPresenter
}
/**
* -To initialize nearby operations both views should be ready and tab is selected.
* Initializes nearby operations if nearby views are ready
*/
@Override
public void onTabSelected() {
onTabSelected = true;
if (nearbyViewsAreReady) {
initializeNearbyOperations();
}
}
/**
* -To initialize nearby operations both views should be ready and tab is selected.
* Initializes nearby operations if tab selected, otherwise just sets nearby views are ready
*/
@Override
public void nearbyFragmentAndMapViewReady() {
nearbyViewsAreReady = true;
if (onTabSelected) {
initializeNearbyOperations();
}
}
/**
* Initializes nearby operations by following these steps:
@ -50,8 +74,6 @@ public class NearbyParentFragmentPresenter
public void initializeNearbyOperations() {
locationManager.addLocationListener(this);
nearbyParentFragmentView.registerLocationUpdates(locationManager);
}
/**
@ -102,17 +124,17 @@ public class NearbyParentFragmentPresenter
return;
}
/**
* Significant changed - Markers and current location will be updated together
* Slightly changed - Only current position marker will be updated
*/
if (locationChangeType.equals(LOCATION_SIGNIFICANTLY_CHANGED)
|| locationChangeType.equals(MAP_UPDATED)) {
nearbyMapFragmentView.updateMapMarkers();
nearbyMapFragmentView.updateMapToTrackPosition();
} else {
nearbyMapFragmentView.updateMapToTrackPosition();
}
}
@Override
@ -134,4 +156,5 @@ public class NearbyParentFragmentPresenter
public void onLocationChangedMedium(LatLng latLng) {
}
}