forked from organicmaps/organicmaps
[android] Moved/refactored main menu option click listeners to separate interface and bound it to main menu bottom sheet controller
This commit is contained in:
parent
e90471c167
commit
f7118b1696
8 changed files with 126 additions and 156 deletions
android
res/layout
src/com/mapswithme/maps
|
@ -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">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/add_place"
|
||||
style="@style/MwmTheme.Menu.Content.ListItem"
|
||||
android:drawableLeft="@drawable/ic_plus"
|
||||
android:drawableStart="@drawable/ic_plus"
|
||||
android:text="@string/placepage_add_place_button"
|
||||
tools:background="#40FF00FF"/>
|
||||
|
||||
tools:background="#40FF00FF" />
|
||||
<TextView
|
||||
android:id="@+id/download_guides"
|
||||
style="@style/MwmTheme.Menu.Content.ListItem"
|
||||
android:drawableLeft="@drawable/ic_menu_download_guides"
|
||||
android:drawableStart="@drawable/ic_menu_download_guides"
|
||||
android:drawableTint="?attr/colorAccent"
|
||||
android:textColor="?attr/colorAccent"
|
||||
android:text="@string/download_guides"
|
||||
android:textColor="?attr/colorAccent"
|
||||
tools:background="#403033FF"
|
||||
tools:targetApi="m"/>
|
||||
|
||||
tools:targetApi="m" />
|
||||
<TextView
|
||||
android:id="@+id/hotel_search"
|
||||
style="@style/MwmTheme.Menu.Content.ListItem"
|
||||
android:drawableLeft="@drawable/ic_menu_hotel_search"
|
||||
android:drawableStart="@drawable/ic_menu_hotel_search"
|
||||
android:text="@string/booking_button_toolbar"
|
||||
tools:background="#200000FF"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/search"
|
||||
style="@style/MwmTheme.Menu.Content.ListItem"
|
||||
android:drawableLeft="@drawable/ic_menu_search"
|
||||
android:drawableStart="@drawable/ic_menu_search"
|
||||
android:text="@string/search"
|
||||
tools:background="#200000FF"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/bookmarks"
|
||||
style="@style/MwmTheme.Menu.Content.ListItem"
|
||||
android:drawableLeft="@drawable/ic_menu_bookmarks"
|
||||
android:drawableStart="@drawable/ic_menu_bookmarks"
|
||||
android:text="@string/bookmarks"
|
||||
tools:background="#40FF00FF"/>
|
||||
|
||||
tools:background="#200000FF" />
|
||||
<FrameLayout
|
||||
android:id="@+id/download_maps_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
<TextView
|
||||
android:id="@+id/download_maps"
|
||||
style="@style/MwmTheme.Menu.Content.ListItem"
|
||||
android:drawableLeft="@drawable/ic_menu_download"
|
||||
android:drawableStart="@drawable/ic_menu_download"
|
||||
android:text="@string/download_maps"
|
||||
tools:background="#2000FF00"/>
|
||||
|
||||
tools:background="#2000FF00" />
|
||||
<TextView
|
||||
android:id="@+id/counter"
|
||||
style="@style/MwmWidget.Counter"
|
||||
android:layout_gravity="end|center_vertical"
|
||||
android:layout_marginRight="@dimen/margin_base"
|
||||
android:layout_marginEnd="@dimen/margin_base"
|
||||
android:visibility="gone"
|
||||
tools:text="9999"
|
||||
tools:visibility="visible"/>
|
||||
tools:visibility="visible" />
|
||||
</FrameLayout>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/settings"
|
||||
style="@style/MwmTheme.Menu.Content.ListItem"
|
||||
android:drawableLeft="@drawable/ic_menu_settings"
|
||||
android:drawableStart="@drawable/ic_menu_settings"
|
||||
android:text="@string/settings"
|
||||
tools:background="#20FF0000"/>
|
||||
|
||||
tools:background="#20FF0000" />
|
||||
<TextView
|
||||
android:id="@+id/share"
|
||||
style="@style/MwmTheme.Menu.Content.ListItem"
|
||||
android:drawableLeft="@drawable/ic_menu_share"
|
||||
android:drawableStart="@drawable/ic_menu_share"
|
||||
android:text="@string/share_my_location"
|
||||
tools:background="#400FF000"/>
|
||||
tools:background="#400FF000" />
|
||||
</LinearLayout>
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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!");
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -8,4 +8,5 @@ public interface MenuController extends Initializable<View>
|
|||
{
|
||||
void open();
|
||||
void close();
|
||||
boolean isClosed();
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue