forked from organicmaps/organicmaps
[android] Unbound elevation logic from simple place page controller to make it reusable for another bottom sheet (e.g. guides layer)
This commit is contained in:
parent
a83e0893b0
commit
eadfe70581
8 changed files with 52 additions and 36 deletions
|
@ -531,7 +531,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
|||
|
||||
setContentView(R.layout.activity_map);
|
||||
|
||||
mPlacePageController = PlacePageFactory.createPlacePageController(this, this, this);
|
||||
mPlacePageController = PlacePageFactory.createCompositePlacePageController(this, this, this);
|
||||
mPlacePageController.initialize(this);
|
||||
mPlacePageController.onActivityCreated(this, savedInstanceState);
|
||||
|
||||
|
|
|
@ -57,7 +57,7 @@ public class BottomSheetMenuController implements MenuController
|
|||
};
|
||||
|
||||
BottomSheetMenuController(int sheetResId, @NonNull MenuRenderer menuRenderer,
|
||||
@Nullable MenuStateObserver stateObserver)
|
||||
@Nullable MenuStateObserver stateObserver)
|
||||
{
|
||||
mSheetResId = sheetResId;
|
||||
mMenuRenderer = menuRenderer;
|
||||
|
|
|
@ -174,4 +174,10 @@ public class ElevationProfileViewRenderer implements PlacePageViewRenderer<Place
|
|||
if (mElevationInfo != null)
|
||||
Statistics.INSTANCE.trackElevationProfilePageClose(mElevationInfo.getServerId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean support(@NonNull PlacePageData data)
|
||||
{
|
||||
return data instanceof ElevationInfo;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -113,14 +113,15 @@ class PlacePageControllerComposite implements PlacePageController
|
|||
throw new AssertionError("Place page controllers already initialized!");
|
||||
|
||||
PlacePageController richController =
|
||||
createRichPlacePageController(mAdsProvider, mSlideListener, mRoutingModeListener);
|
||||
PlacePageFactory.createRichPlacePageController(mAdsProvider, mSlideListener,
|
||||
mRoutingModeListener);
|
||||
richController.initialize(activity);
|
||||
mControllers.add(richController);
|
||||
|
||||
PlacePageController simpleController =
|
||||
createSimplePlacePageController(mSlideListener);
|
||||
simpleController.initialize(activity);
|
||||
mControllers.add(simpleController);
|
||||
PlacePageController elevationProfileController =
|
||||
PlacePageFactory.createElevationProfilePlacePageController(mSlideListener);
|
||||
elevationProfileController.initialize(activity);
|
||||
mControllers.add(elevationProfileController);
|
||||
|
||||
mActiveController = richController;
|
||||
}
|
||||
|
@ -147,10 +148,10 @@ class PlacePageControllerComposite implements PlacePageController
|
|||
@Override
|
||||
public void onRestore(@NonNull Bundle inState)
|
||||
{
|
||||
PlacePageData userMark = inState.getParcelable(PlacePageUtils.EXTRA_PLACE_PAGE_DATA);
|
||||
if (userMark != null)
|
||||
PlacePageData data = inState.getParcelable(PlacePageUtils.EXTRA_PLACE_PAGE_DATA);
|
||||
if (data != null)
|
||||
{
|
||||
PlacePageController controller = findControllerFor(userMark);
|
||||
PlacePageController controller = findControllerFor(data);
|
||||
if (controller != null)
|
||||
mActiveController = controller;
|
||||
}
|
||||
|
@ -174,21 +175,4 @@ class PlacePageControllerComposite implements PlacePageController
|
|||
{
|
||||
return mActiveController.support(object);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private static PlacePageController createRichPlacePageController(
|
||||
@NonNull AdsRemovalPurchaseControllerProvider provider,
|
||||
@NonNull PlacePageController.SlideListener listener,
|
||||
@Nullable RoutingModeListener routingModeListener)
|
||||
{
|
||||
return new RichPlacePageController(provider, listener, routingModeListener);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private static PlacePageController createSimplePlacePageController(
|
||||
@NonNull PlacePageController.SlideListener listener)
|
||||
{
|
||||
ElevationProfileViewRenderer renderer = new ElevationProfileViewRenderer();
|
||||
return new SimplePlacePageController(listener, renderer, renderer);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,16 +1,35 @@
|
|||
package com.mapswithme.maps.widget.placepage;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.mapswithme.maps.R;
|
||||
import com.mapswithme.maps.purchase.AdsRemovalPurchaseControllerProvider;
|
||||
|
||||
public class PlacePageFactory
|
||||
{
|
||||
@NonNull
|
||||
public static PlacePageController createPlacePageController(
|
||||
public static PlacePageController createCompositePlacePageController(
|
||||
@NonNull AdsRemovalPurchaseControllerProvider provider,
|
||||
@NonNull PlacePageController.SlideListener slideListener,
|
||||
@NonNull RoutingModeListener routingModeListener)
|
||||
{
|
||||
return new PlacePageControllerComposite(provider, slideListener, routingModeListener);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
static PlacePageController createRichPlacePageController(
|
||||
@NonNull AdsRemovalPurchaseControllerProvider provider,
|
||||
@NonNull PlacePageController.SlideListener listener,
|
||||
@Nullable RoutingModeListener routingModeListener)
|
||||
{
|
||||
return new RichPlacePageController(provider, listener, routingModeListener);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
static PlacePageController createElevationProfilePlacePageController(
|
||||
@NonNull PlacePageController.SlideListener listener)
|
||||
{
|
||||
ElevationProfileViewRenderer renderer = new ElevationProfileViewRenderer();
|
||||
return new SimplePlacePageController(R.id.elevation_profile, renderer, renderer, listener);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -68,6 +68,10 @@ class PlacePageUtils
|
|||
static void setPullDrawable(@NonNull AnchorBottomSheetBehavior behavior, @NonNull View bottomSheet,
|
||||
@IdRes int pullDrawableId)
|
||||
{
|
||||
final ImageView img = bottomSheet.findViewById(pullDrawableId);
|
||||
if (img == null)
|
||||
return;
|
||||
|
||||
@AnchorBottomSheetBehavior.State
|
||||
int state = behavior.getState();
|
||||
@DrawableRes
|
||||
|
@ -80,7 +84,6 @@ class PlacePageUtils
|
|||
if (drawableId == UiUtils.NO_ID)
|
||||
return;
|
||||
|
||||
ImageView img = bottomSheet.findViewById(pullDrawableId);
|
||||
Drawable drawable = Graphics.tint(bottomSheet.getContext(), drawableId,
|
||||
R.attr.bannerButtonBackgroundColor);
|
||||
img.setImageDrawable(drawable);
|
||||
|
|
|
@ -7,9 +7,10 @@ import androidx.annotation.NonNull;
|
|||
import com.mapswithme.maps.base.Hideable;
|
||||
import com.mapswithme.maps.base.Initializable;
|
||||
import com.mapswithme.maps.base.Savable;
|
||||
import com.mapswithme.maps.base.Supportable;
|
||||
|
||||
public interface PlacePageViewRenderer<Data> extends Initializable<View>, Savable<Bundle>,
|
||||
Hideable
|
||||
Hideable, Supportable<Data>
|
||||
{
|
||||
void render(@NonNull Data data);
|
||||
}
|
||||
|
|
|
@ -7,12 +7,12 @@ import android.os.Bundle;
|
|||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.IdRes;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.view.GestureDetectorCompat;
|
||||
import com.mapswithme.maps.Framework;
|
||||
import com.mapswithme.maps.R;
|
||||
import com.mapswithme.maps.bookmarks.data.ElevationInfo;
|
||||
import com.mapswithme.util.UiUtils;
|
||||
import com.trafi.anchorbottomsheetbehavior.AnchorBottomSheetBehavior;
|
||||
|
||||
|
@ -99,11 +99,14 @@ public class SimplePlacePageController implements PlacePageController
|
|||
= new DefaultBottomSheetCallback(mBottomSheetChangedListener);
|
||||
|
||||
private boolean mDeactivateMapSelection = true;
|
||||
@IdRes
|
||||
private final int mSheetResId;
|
||||
|
||||
SimplePlacePageController(@NonNull SlideListener slideListener,
|
||||
@NonNull PlacePageViewRenderer<PlacePageData> renderer,
|
||||
@Nullable PlacePageStateObserver stateObserver)
|
||||
SimplePlacePageController(int sheetResId, @NonNull PlacePageViewRenderer<PlacePageData> renderer,
|
||||
@Nullable PlacePageStateObserver stateObserver,
|
||||
@NonNull SlideListener slideListener)
|
||||
{
|
||||
mSheetResId = sheetResId;
|
||||
mSlideListener = slideListener;
|
||||
mViewRenderer = renderer;
|
||||
mStateObserver = stateObserver;
|
||||
|
@ -181,7 +184,7 @@ public class SimplePlacePageController implements PlacePageController
|
|||
{
|
||||
Objects.requireNonNull(activity);
|
||||
mApplication = activity.getApplication();
|
||||
mSheet = activity.findViewById(R.id.elevation_profile);
|
||||
mSheet = activity.findViewById(mSheetResId);
|
||||
mViewportMinHeight = mSheet.getResources().getDimensionPixelSize(R.dimen.viewport_min_height);
|
||||
mViewPortMinWidth = mSheet.getResources().getDimensionPixelSize(R.dimen.viewport_min_width);
|
||||
mSheetBehavior = AnchorBottomSheetBehavior.from(mSheet);
|
||||
|
@ -250,7 +253,7 @@ public class SimplePlacePageController implements PlacePageController
|
|||
@Override
|
||||
public boolean support(@NonNull PlacePageData data)
|
||||
{
|
||||
return data instanceof ElevationInfo;
|
||||
return mViewRenderer.support(data);
|
||||
}
|
||||
|
||||
private static class SimplePlacePageGestureListener extends PlacePageGestureListener
|
||||
|
|
Loading…
Add table
Reference in a new issue