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);
}
}