From 32ab1a989ed91e85a89a4487fc5fdbf46688043a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80=20?= =?UTF-8?q?=D0=97=D0=B0=D1=86=D0=B5=D0=BF=D0=B8=D0=BD?= Date: Mon, 28 Jan 2019 17:38:03 +0300 Subject: [PATCH] [android] Implemented place page toolbar based on scrolling behavior --- android/res/layout/activity_map.xml | 14 ++++++ android/res/layout/toolbar_elevated.xml | 17 ------- android/res/values/donottranslate.xml | 2 +- .../BottomSheetPlacePageController.java | 26 +++++----- .../widget/placepage/ToolbarBehavior.java | 48 +++++++++++++++++++ android/src/com/mapswithme/util/UiUtils.java | 8 ++++ 6 files changed, 84 insertions(+), 31 deletions(-) delete mode 100644 android/res/layout/toolbar_elevated.xml create mode 100644 android/src/com/mapswithme/maps/widget/placepage/ToolbarBehavior.java diff --git a/android/res/layout/activity_map.xml b/android/res/layout/activity_map.xml index 383ca98284..396dc96e95 100644 --- a/android/res/layout/activity_map.xml +++ b/android/res/layout/activity_map.xml @@ -95,4 +95,18 @@ android:background="?ppButtonsBackground"/> + + + diff --git a/android/res/layout/toolbar_elevated.xml b/android/res/layout/toolbar_elevated.xml deleted file mode 100644 index e86ba03c60..0000000000 --- a/android/res/layout/toolbar_elevated.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/android/res/values/donottranslate.xml b/android/res/values/donottranslate.xml index f6f1b681ab..0abff8106c 100644 --- a/android/res/values/donottranslate.xml +++ b/android/res/values/donottranslate.xml @@ -96,5 +96,5 @@ NEVER ALWAYS AUTO - com.mapswithme.maps.widget.UserLockBottomSheetBehavior + com.mapswithme.maps.widget.placepage.ToolbarBehavior diff --git a/android/src/com/mapswithme/maps/widget/placepage/BottomSheetPlacePageController.java b/android/src/com/mapswithme/maps/widget/placepage/BottomSheetPlacePageController.java index 65388967c6..41f1a222d5 100644 --- a/android/src/com/mapswithme/maps/widget/placepage/BottomSheetPlacePageController.java +++ b/android/src/com/mapswithme/maps/widget/placepage/BottomSheetPlacePageController.java @@ -7,6 +7,7 @@ import android.graphics.Rect; import android.location.Location; import android.support.annotation.NonNull; import android.support.design.widget.BottomSheetBehavior; +import android.support.v7.widget.Toolbar; import android.view.View; import android.view.ViewGroup; @@ -16,7 +17,6 @@ import com.mapswithme.maps.bookmarks.data.MapObject; import com.mapswithme.maps.location.LocationHelper; import com.mapswithme.maps.location.LocationListener; import com.mapswithme.util.UiUtils; -import com.mapswithme.util.Utils; import com.mapswithme.util.log.Logger; import com.mapswithme.util.log.LoggerFactory; import com.mapswithme.util.statistics.PlacePageTracker; @@ -41,6 +41,11 @@ public class BottomSheetPlacePageController implements PlacePageController, Loca @SuppressWarnings("NullableProblems") @NonNull private PlacePageTracker mPlacePageTracker; + @SuppressWarnings("NullableProblems") + @NonNull + private Toolbar mToolbar; + private int mLastPeekHeight; + private int mViewportMinHeight; @NonNull private final BottomSheetBehavior.BottomSheetCallback mSheetCallback = new BottomSheetBehavior.BottomSheetCallback() @@ -71,9 +76,6 @@ public class BottomSheetPlacePageController implements PlacePageController, Loca } }; - private int mLastPeekHeight; - private int mViewportMinHeight; - public BottomSheetPlacePageController(@NonNull Activity activity) { mActivity = activity; @@ -83,27 +85,24 @@ public class BottomSheetPlacePageController implements PlacePageController, Loca public void initialize() { mViewportMinHeight = mActivity.getResources().getDimensionPixelSize(R.dimen.viewport_min_height); + mToolbar = mActivity.findViewById(R.id.pp_toolbar); + UiUtils.extendViewWithStatusBar(mToolbar); + UiUtils.showHomeUpButton(mToolbar); + mToolbar.setNavigationOnClickListener(v -> close()); mPlacePage = mActivity.findViewById(R.id.placepage); mPlacePageBehavior = BottomSheetBehavior.from(mPlacePage); mPlacePageBehavior.setState(BottomSheetBehavior.STATE_HIDDEN); mPlacePageBehavior.setBottomSheetCallback(mSheetCallback); mPlacePage.addOnLayoutChangeListener(this); mButtonsLayout = mActivity.findViewById(R.id.pp_buttons_layout); - bringButtonsToFront(); ViewGroup buttons = mButtonsLayout.findViewById(R.id.container); mPlacePage.initButtons(buttons); + UiUtils.bringViewToFrontOf(mButtonsLayout, mPlacePage); + UiUtils.bringViewToFrontOf(mActivity.findViewById(R.id.app_bar), mPlacePage); mPlacePageTracker = new PlacePageTracker(mPlacePage, buttons); LocationHelper.INSTANCE.addListener(this); } - private void bringButtonsToFront() - { - if (Utils.isLollipopOrLater()) - mButtonsLayout.setZ(mPlacePage.getZ() + 1); - else - mButtonsLayout.bringToFront(); - } - @Override public void destroy() { @@ -122,6 +121,7 @@ public class BottomSheetPlacePageController implements PlacePageController, Loca openBottomSheet(); }); + mToolbar.setTitle(object.getTitle()); mPlacePageTracker.setMapObject(object); Framework.logLocalAdsEvent(Framework.LocalAdsEventType.LOCAL_ADS_EVENT_OPEN_INFO, object); } diff --git a/android/src/com/mapswithme/maps/widget/placepage/ToolbarBehavior.java b/android/src/com/mapswithme/maps/widget/placepage/ToolbarBehavior.java new file mode 100644 index 0000000000..8fbe6ada25 --- /dev/null +++ b/android/src/com/mapswithme/maps/widget/placepage/ToolbarBehavior.java @@ -0,0 +1,48 @@ +package com.mapswithme.maps.widget.placepage; + +import android.content.Context; +import android.support.design.widget.AppBarLayout; +import android.support.design.widget.CoordinatorLayout; +import android.util.AttributeSet; +import android.view.View; + +import com.mapswithme.maps.R; +import com.mapswithme.util.UiUtils; + +@SuppressWarnings("unused") +public class ToolbarBehavior extends AppBarLayout.ScrollingViewBehavior +{ + public ToolbarBehavior() + { + // Do nothing by default. + } + + public ToolbarBehavior(Context context, AttributeSet attrs) + { + super(context, attrs); + } + + @Override + public boolean layoutDependsOn(CoordinatorLayout parent, View child, View dependency) + { + return dependency.getId() == R.id.placepage; + } + + @Override + public boolean onDependentViewChanged(CoordinatorLayout parent, View child, View dependency) + { + if (dependency.getY() == 0 && UiUtils.isHidden(child)) + { + UiUtils.show(child); + return false; + } + + if (dependency.getY() > 0 && UiUtils.isVisible(child)) + { + UiUtils.hide(child); + return false; + } + + return false; + } +} diff --git a/android/src/com/mapswithme/util/UiUtils.java b/android/src/com/mapswithme/util/UiUtils.java index 873a31ffcf..f483277457 100644 --- a/android/src/com/mapswithme/util/UiUtils.java +++ b/android/src/com/mapswithme/util/UiUtils.java @@ -55,6 +55,14 @@ public final class UiUtils params.setMargins(0, UiUtils.getStatusBarHeight(view.getContext()), 0, 0); } + public static void bringViewToFrontOf(@NonNull View frontView, @NonNull View backView) + { + if (Utils.isLollipopOrLater()) + frontView.setZ(backView.getZ() + 1); + else + frontView.bringToFront(); + } + public static class SimpleAnimationListener implements AnimationListener { @Override