diff --git a/android/res/layout/menu_content.xml b/android/res/layout/menu_content.xml index 784947e7af..9abf2d1dba 100644 --- a/android/res/layout/menu_content.xml +++ b/android/res/layout/menu_content.xml @@ -4,88 +4,59 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginBottom="@dimen/margin_half" android:layout_marginTop="@dimen/margin_half" + android:layout_marginBottom="@dimen/margin_half" android:orientation="vertical"> - - + tools:background="#40FF00FF" /> - + tools:targetApi="m" /> - - - - - + tools:background="#200000FF" /> - + tools:background="#2000FF00" /> + tools:visibility="visible" /> - - + tools:background="#20FF0000" /> + tools:background="#400FF000" /> diff --git a/android/src/com/mapswithme/maps/MwmActivity.java b/android/src/com/mapswithme/maps/MwmActivity.java index 0b3d14008b..31b4809527 100644 --- a/android/src/com/mapswithme/maps/MwmActivity.java +++ b/android/src/com/mapswithme/maps/MwmActivity.java @@ -124,7 +124,9 @@ import com.mapswithme.maps.tips.TutorialAction; import com.mapswithme.maps.widget.FadeView; import com.mapswithme.maps.widget.menu.BaseMenu; import com.mapswithme.maps.widget.menu.MainMenu; +import com.mapswithme.maps.widget.menu.MainMenuOptionListener; import com.mapswithme.maps.widget.menu.MenuController; +import com.mapswithme.maps.widget.menu.MenuControllerFactory; import com.mapswithme.maps.widget.menu.MenuStateObserver; import com.mapswithme.maps.widget.menu.MyPositionButton; import com.mapswithme.maps.widget.placepage.PlacePageController; @@ -533,8 +535,8 @@ public class MwmActivity extends BaseMwmFragmentActivity mPlacePageController.initialize(this); mPlacePageController.onActivityCreated(this, savedInstanceState); - // TODO: set state observer. - mMainMenuController = com.mapswithme.maps.widget.menu.Factory.createMainMenuController(new MainMenuStateObserver()); + mMainMenuController = MenuControllerFactory.createMainMenuController(new MainMenuStateObserver(), + new MainMenuOptionSelectedListener()); mMainMenuController.initialize(findViewById(R.id.coordinator)); boolean isLaunchByDeepLink = getIntent().getBooleanExtra(EXTRA_LAUNCH_BY_DEEP_LINK, false); @@ -1479,6 +1481,12 @@ public class MwmActivity extends BaseMwmFragmentActivity return; } + if (!mMainMenuController.isClosed()) + { + mMainMenuController.close(); + return; + } + if (mSearchController != null && mSearchController.hide()) { SearchEngine.INSTANCE.cancelInteractiveSearch(); @@ -2667,23 +2675,6 @@ public class MwmActivity extends BaseMwmFragmentActivity } } - public static class AddPlaceDelegate extends StatisticClickMenuDelegate - { - public AddPlaceDelegate(@NonNull MwmActivity activity, @NonNull MainMenu.Item item) - { - super(activity, item); - } - - @Override - void onPostStatisticMenuItemClick() - { - getActivity().closePlacePage(); - if (getActivity().mIsTabletLayout) - getActivity().closeSidePanel(); - getActivity().closeMenu(() -> getActivity().showPositionChooser(false, false)); - } - } - public static class SearchClickDelegate extends AbstractClickMenuDelegate { public SearchClickDelegate(@NonNull MwmActivity activity, @NonNull MainMenu.Item item) @@ -2700,55 +2691,6 @@ public class MwmActivity extends BaseMwmFragmentActivity } } - public static class SettingsDelegate extends StatisticClickMenuDelegate - { - public SettingsDelegate(@NonNull MwmActivity activity, @NonNull MainMenu.Item item) - { - super(activity, item); - } - - @Override - void onPostStatisticMenuItemClick() - { - Intent intent = new Intent(getActivity(), SettingsActivity.class); - getActivity().closeMenu(() -> getActivity().startActivity(intent)); - } - } - - public static class DownloadGuidesDelegate extends StatisticClickMenuDelegate - { - public DownloadGuidesDelegate(@NonNull MwmActivity activity, @NonNull MainMenu.Item item) - { - super(activity, item); - } - - @Override - void onPostStatisticMenuItemClick() - { - int requestCode = BookmarkCategoriesActivity.REQ_CODE_DOWNLOAD_BOOKMARK_CATEGORY; - String catalogUrl = BookmarkManager.INSTANCE.getCatalogFrontendUrl(UTM.UTM_TOOLBAR_BUTTON); - getActivity().closeMenu(() -> BookmarksCatalogActivity.startForResult(getActivity(), - requestCode, - catalogUrl)); - } - } - - public static class HotelSearchDelegate extends StatisticClickMenuDelegate - { - public HotelSearchDelegate(@NonNull MwmActivity activity, @NonNull MainMenu.Item item) - { - super(activity, item); - } - - @Override - void onPostStatisticMenuItemClick() - { - getActivity().closeMenu(() -> { - getActivity().runHotelCategorySearchOnMap(); - }); - } - } - public abstract static class StatisticClickMenuDelegate extends AbstractClickMenuDelegate { StatisticClickMenuDelegate(@NonNull MwmActivity activity, @NonNull MainMenu.Item item) @@ -2766,21 +2708,6 @@ public class MwmActivity extends BaseMwmFragmentActivity abstract void onPostStatisticMenuItemClick(); } - public static class DownloadMapsDelegate extends StatisticClickMenuDelegate - { - public DownloadMapsDelegate(@NonNull MwmActivity activity, @NonNull MainMenu.Item item) - { - super(activity, item); - } - - @Override - void onPostStatisticMenuItemClick() - { - RoutingController.get().cancel(); - getActivity().closeMenu(() -> getActivity().showDownloader(false)); - } - } - public static class BookmarksDelegate extends StatisticClickMenuDelegate { public BookmarksDelegate(@NonNull MwmActivity activity, @NonNull MainMenu.Item item) @@ -2795,20 +2722,6 @@ public class MwmActivity extends BaseMwmFragmentActivity } } - public static class ShareMyLocationDelegate extends StatisticClickMenuDelegate - { - public ShareMyLocationDelegate(@NonNull MwmActivity activity, @NonNull MainMenu.Item item) - { - super(activity, item); - } - - @Override - void onPostStatisticMenuItemClick() - { - getActivity().closeMenu(getActivity()::shareMyLocation); - } - } - public static class DiscoveryDelegate extends StatisticClickMenuDelegate { public DiscoveryDelegate(@NonNull MwmActivity activity, @NonNull MainMenu.Item item) @@ -2842,13 +2755,8 @@ public class MwmActivity extends BaseMwmFragmentActivity @Override public void onGlobalLayout() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) - mSearchController.getToolbar().getViewTreeObserver() - .removeOnGlobalLayoutListener(this); - else - mSearchController.getToolbar().getViewTreeObserver() - .removeGlobalOnLayoutListener(this); - + mSearchController.getToolbar().getViewTreeObserver() + .removeGlobalOnLayoutListener(this); adjustCompassAndTraffic(UiUtils.isVisible(mSearchController.getToolbar()) ? calcFloatingViewsOffset() @@ -2871,4 +2779,55 @@ public class MwmActivity extends BaseMwmFragmentActivity mFadeView.fadeOut(); } } + + private class MainMenuOptionSelectedListener implements MainMenuOptionListener + { + @Override + public void onAddPlaceOptionSelected() + { + Statistics.INSTANCE.trackToolbarMenu(MainMenu.Item.ADD_PLACE); + closePlacePage(); + closeMenu(() -> showPositionChooser(false, false)); + } + + @Override + public void onSearchGuidesOptionSelected() + { + Statistics.INSTANCE.trackToolbarMenu(MainMenu.Item.DOWNLOAD_GUIDES); + int requestCode = BookmarkCategoriesActivity.REQ_CODE_DOWNLOAD_BOOKMARK_CATEGORY; + String catalogUrl = BookmarkManager.INSTANCE.getCatalogFrontendUrl(UTM.UTM_TOOLBAR_BUTTON); + closeMenu(() -> BookmarksCatalogActivity.startForResult(getActivity(), requestCode, + catalogUrl)); + } + + @Override + public void onHotelSearchOptionSelected() + { + Statistics.INSTANCE.trackToolbarMenu(MainMenu.Item.HOTEL_SEARCH); + closeMenu(MwmActivity.this::runHotelCategorySearchOnMap); + } + + @Override + public void onDownloadMapsOptionSelected() + { + Statistics.INSTANCE.trackToolbarMenu(MainMenu.Item.DOWNLOAD_MAPS); + RoutingController.get().cancel(); + closeMenu(() -> showDownloader(false)); + } + + @Override + public void onSettingsOptionSelected() + { + Statistics.INSTANCE.trackToolbarMenu(MainMenu.Item.SETTINGS); + Intent intent = new Intent(getActivity(), SettingsActivity.class); + closeMenu(() -> getActivity().startActivity(intent)); + } + + @Override + public void onShareLocationOptionSelected() + { + Statistics.INSTANCE.trackToolbarMenu(MainMenu.Item.SHARE_MY_LOCATION); + closeMenu(MwmActivity.this::shareMyLocation); + } + } } diff --git a/android/src/com/mapswithme/maps/widget/menu/BottomSheetMenuController.java b/android/src/com/mapswithme/maps/widget/menu/BottomSheetMenuController.java index 310bd06eef..48e0a3b8e7 100644 --- a/android/src/com/mapswithme/maps/widget/menu/BottomSheetMenuController.java +++ b/android/src/com/mapswithme/maps/widget/menu/BottomSheetMenuController.java @@ -76,6 +76,12 @@ public class BottomSheetMenuController implements MenuController mSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN); } + @Override + public boolean isClosed() + { + return BottomSheetMenuUtils.isHiddenState(mSheetBehavior.getState()); + } + @SuppressLint("ClickableViewAccessibility") @Override public void initialize(@Nullable View view) diff --git a/android/src/com/mapswithme/maps/widget/menu/MainMenu.java b/android/src/com/mapswithme/maps/widget/menu/MainMenu.java index dbfaa0fda7..a4f375514d 100644 --- a/android/src/com/mapswithme/maps/widget/menu/MainMenu.java +++ b/android/src/com/mapswithme/maps/widget/menu/MainMenu.java @@ -69,7 +69,7 @@ public class MainMenu extends BaseMenu public ClickMenuDelegate createClickDelegate(@NonNull MwmActivity activity, @NonNull Item item) { - return new MwmActivity.AddPlaceDelegate(activity, item); + throw new UnsupportedOperationException("Main menu option doesn't support it!"); } }, DOWNLOAD_GUIDES(R.id.download_guides) @@ -79,7 +79,7 @@ public class MainMenu extends BaseMenu public ClickMenuDelegate createClickDelegate(@NonNull MwmActivity activity, @NonNull Item item) { - return new MwmActivity.DownloadGuidesDelegate(activity, item); + throw new UnsupportedOperationException("Main menu option doesn't support it!"); } }, HOTEL_SEARCH(R.id.hotel_search) @@ -89,7 +89,7 @@ public class MainMenu extends BaseMenu public ClickMenuDelegate createClickDelegate(@NonNull MwmActivity activity, @NonNull Item item) { - return new MwmActivity.HotelSearchDelegate(activity, item); + throw new UnsupportedOperationException("Main menu option doesn't support it!"); } @NonNull @@ -146,7 +146,7 @@ public class MainMenu extends BaseMenu public ClickMenuDelegate createClickDelegate(@NonNull MwmActivity activity, @NonNull Item item) { - return new MwmActivity.ShareMyLocationDelegate(activity, item); + throw new UnsupportedOperationException("Main menu option doesn't support it!"); } }, DOWNLOAD_MAPS(R.id.download_maps) @@ -156,7 +156,7 @@ public class MainMenu extends BaseMenu public ClickMenuDelegate createClickDelegate(@NonNull MwmActivity activity, @NonNull Item item) { - return new MwmActivity.DownloadMapsDelegate(activity, item); + throw new UnsupportedOperationException("Main menu option doesn't support it!"); } }, SETTINGS(R.id.settings) @@ -166,7 +166,7 @@ public class MainMenu extends BaseMenu public ClickMenuDelegate createClickDelegate(@NonNull MwmActivity activity, @NonNull Item item) { - return new MwmActivity.SettingsDelegate(activity, item); + throw new UnsupportedOperationException("Main menu option doesn't support it!"); } }; diff --git a/android/src/com/mapswithme/maps/widget/menu/MainMenuOptionListener.java b/android/src/com/mapswithme/maps/widget/menu/MainMenuOptionListener.java new file mode 100644 index 0000000000..8018fb43ed --- /dev/null +++ b/android/src/com/mapswithme/maps/widget/menu/MainMenuOptionListener.java @@ -0,0 +1,11 @@ +package com.mapswithme.maps.widget.menu; + +public interface MainMenuOptionListener +{ + void onAddPlaceOptionSelected(); + void onSearchGuidesOptionSelected(); + void onHotelSearchOptionSelected(); + void onDownloadMapsOptionSelected(); + void onSettingsOptionSelected(); + void onShareLocationOptionSelected(); +} diff --git a/android/src/com/mapswithme/maps/widget/menu/MainMenuRenderer.java b/android/src/com/mapswithme/maps/widget/menu/MainMenuRenderer.java index e886fb7a93..49c8b0a1aa 100644 --- a/android/src/com/mapswithme/maps/widget/menu/MainMenuRenderer.java +++ b/android/src/com/mapswithme/maps/widget/menu/MainMenuRenderer.java @@ -2,10 +2,22 @@ package com.mapswithme.maps.widget.menu; import android.view.View; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import com.mapswithme.maps.R; + +import java.util.Objects; public class MainMenuRenderer implements MenuRenderer { + @NonNull + private final MainMenuOptionListener mListener; + + MainMenuRenderer(@NonNull MainMenuOptionListener listener) + { + mListener = listener; + } + @Override public void render() { @@ -15,7 +27,19 @@ public class MainMenuRenderer implements MenuRenderer @Override public void initialize(@Nullable View view) { - // TODO: Implement. + Objects.requireNonNull(view); + View addPlace = view.findViewById(R.id.add_place); + addPlace.setOnClickListener(v -> mListener.onAddPlaceOptionSelected()); + View downloadGuides = view.findViewById(R.id.download_guides); + downloadGuides.setOnClickListener(v -> mListener.onSearchGuidesOptionSelected()); + View hotelSearch = view.findViewById(R.id.hotel_search); + hotelSearch.setOnClickListener(v -> mListener.onHotelSearchOptionSelected()); + View downloadMaps = view.findViewById(R.id.download_maps_container); + downloadMaps.setOnClickListener(v -> mListener.onDownloadMapsOptionSelected()); + View settings = view.findViewById(R.id.settings); + settings.setOnClickListener(v -> mListener.onSettingsOptionSelected()); + View share = view.findViewById(R.id.share); + share.setOnClickListener(v -> mListener.onShareLocationOptionSelected()); } @Override diff --git a/android/src/com/mapswithme/maps/widget/menu/MenuController.java b/android/src/com/mapswithme/maps/widget/menu/MenuController.java index 799109d535..7d4bd26768 100644 --- a/android/src/com/mapswithme/maps/widget/menu/MenuController.java +++ b/android/src/com/mapswithme/maps/widget/menu/MenuController.java @@ -8,4 +8,5 @@ public interface MenuController extends Initializable { void open(); void close(); + boolean isClosed(); } diff --git a/android/src/com/mapswithme/maps/widget/menu/Factory.java b/android/src/com/mapswithme/maps/widget/menu/MenuControllerFactory.java similarity index 64% rename from android/src/com/mapswithme/maps/widget/menu/Factory.java rename to android/src/com/mapswithme/maps/widget/menu/MenuControllerFactory.java index d8f5532a98..915e7d5213 100644 --- a/android/src/com/mapswithme/maps/widget/menu/Factory.java +++ b/android/src/com/mapswithme/maps/widget/menu/MenuControllerFactory.java @@ -1,18 +1,16 @@ package com.mapswithme.maps.widget.menu; -import android.app.Activity; -import android.view.View; - import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.mapswithme.maps.R; -public class Factory +public class MenuControllerFactory { @NonNull - public static MenuController createMainMenuController(@Nullable MenuStateObserver stateObserver) + public static MenuController createMainMenuController(@Nullable MenuStateObserver stateObserver, + @NonNull MainMenuOptionListener listener) { - return new BottomSheetMenuController(R.id.main_menu_sheet, new MainMenuRenderer(), + return new BottomSheetMenuController(R.id.main_menu_sheet, new MainMenuRenderer(listener), stateObserver); } }