diff --git a/android/jni/com/mapswithme/maps/guides/GuidesManager.cpp b/android/jni/com/mapswithme/maps/guides/GuidesManager.cpp index 12283145de..0da140c9cf 100644 --- a/android/jni/com/mapswithme/maps/guides/GuidesManager.cpp +++ b/android/jni/com/mapswithme/maps/guides/GuidesManager.cpp @@ -19,7 +19,7 @@ static void GuidesStateChanged(GuidesManager::GuidesState state, JNIEXPORT void JNICALL -Java_com_mapswithme_maps_maplayer_Guides_GuidesManager_nativeAddListener(JNIEnv *env, jclass clazz, jobject listener) +Java_com_mapswithme_maps_maplayer_guides_GuidesManager_nativeAddListener(JNIEnv *env, jclass clazz, jobject listener) { CHECK(g_framework, ("Framework isn't created yet!")); g_framework->SetGuidesListener(std::bind(&GuidesStateChanged, @@ -28,7 +28,7 @@ Java_com_mapswithme_maps_maplayer_Guides_GuidesManager_nativeAddListener(JNIEnv } JNIEXPORT void JNICALL -Java_com_mapswithme_maps_maplayer_Guides_GuidesManager_nativeRemoveListener(JNIEnv * env, jclass clazz) +Java_com_mapswithme_maps_maplayer_guides_GuidesManager_nativeRemoveListener(JNIEnv * env, jclass clazz) { CHECK(g_framework, ("Framework isn't created yet!")); g_framework->SetGuidesListener(nullptr); diff --git a/android/res/layout-land/map_navigation_buttons.xml b/android/res/layout-land/map_navigation_buttons.xml index 7fedd57991..eb666c6533 100644 --- a/android/res/layout-land/map_navigation_buttons.xml +++ b/android/res/layout-land/map_navigation_buttons.xml @@ -33,6 +33,15 @@ android:background="?nav_bg_isolines" android:visibility="invisible"/> + + + + + + >> createItems( @NonNull Context context, @NonNull OnItemClickListener subwayListener, @NonNull OnItemClickListener trafficListener, - @NonNull OnItemClickListener isoLinesListener) + @NonNull OnItemClickListener isoLinesListener, + @NonNull OnItemClickListener guidesListener) { Pair> subway = new Pair<>(BottomSheetItem.Subway.makeInstance(context), subwayListener); @@ -26,6 +27,9 @@ public class LayersUtils Pair> isoLines = new Pair<>(BottomSheetItem.Isolines.makeInstance(context), isoLinesListener); + Pair> guides + = new Pair<>(BottomSheetItem.Guides.makeInstance(context), guidesListener); + return Arrays.asList(traffic, isoLines, subway); } } diff --git a/android/src/com/mapswithme/maps/maplayer/MapLayerCompositeController.java b/android/src/com/mapswithme/maps/maplayer/MapLayerCompositeController.java index dcae5047fc..cf719dffc5 100644 --- a/android/src/com/mapswithme/maps/maplayer/MapLayerCompositeController.java +++ b/android/src/com/mapswithme/maps/maplayer/MapLayerCompositeController.java @@ -29,11 +29,12 @@ public class MapLayerCompositeController implements MapLayerController private final TutorialClickListener mOpenBottomDialogClickListener; public MapLayerCompositeController(@NonNull TrafficButton traffic, @NonNull View subway, - @NonNull View isoLines, @NonNull AppCompatActivity activity) + @NonNull View isoLines, @NonNull View guides, + @NonNull AppCompatActivity activity) { mOpenBottomDialogClickListener = new OpenBottomDialogClickListener(activity); mActivity = activity; - mLayers = createLayers(traffic, subway, isoLines, activity, mOpenBottomDialogClickListener); + mLayers = createLayers(traffic, subway, isoLines, guides, activity, mOpenBottomDialogClickListener); mCurrentLayer = getCurrentLayer(); toggleMode(mCurrentLayer.getMode()); } @@ -42,6 +43,7 @@ public class MapLayerCompositeController implements MapLayerController private static List createLayers(@NonNull TrafficButton traffic, @NonNull View subway, @NonNull View isoLinesView, + @NonNull View guides, @NonNull AppCompatActivity activity, @NonNull View.OnClickListener dialogClickListener) { @@ -54,12 +56,17 @@ public class MapLayerCompositeController implements MapLayerController isoLinesView.setOnClickListener(dialogClickListener); DefaultMapLayerController isoLinesController = new DefaultMapLayerController(isoLinesView); + guides.setOnClickListener(dialogClickListener); + DefaultMapLayerController guidesController = new DefaultMapLayerController(guides); + ControllerAndMode subwayEntry = new ControllerAndMode(Mode.SUBWAY, Tutorial.SUBWAY, subwayMapLayerController); ControllerAndMode trafficEntry = new ControllerAndMode(Mode.TRAFFIC, null, trafficButtonController); ControllerAndMode isoLineEntry = new ControllerAndMode(Mode.ISOLINES, Tutorial.ISOLINES, isoLinesController); + ControllerAndMode guidesEntry = new ControllerAndMode(Mode.GUIDES, Tutorial.ISOLINES, + guidesController); List entries = new ArrayList<>(); entries.add(subwayEntry); diff --git a/android/src/com/mapswithme/maps/maplayer/Mode.java b/android/src/com/mapswithme/maps/maplayer/Mode.java index 9ef1adb971..5ca6054c67 100644 --- a/android/src/com/mapswithme/maps/maplayer/Mode.java +++ b/android/src/com/mapswithme/maps/maplayer/Mode.java @@ -3,6 +3,7 @@ package com.mapswithme.maps.maplayer; import android.content.Context; import androidx.annotation.NonNull; +import com.mapswithme.maps.maplayer.guides.GuidesManager; import com.mapswithme.maps.maplayer.isolines.IsolinesManager; import com.mapswithme.maps.maplayer.subway.SubwayManager; import com.mapswithme.maps.maplayer.traffic.TrafficManager; @@ -31,6 +32,7 @@ public enum Mode TrafficManager.INSTANCE.toggle(); SubwayManager.from(context).setEnabled(false); IsolinesManager.from(context).setEnabled(false); + GuidesManager.from(context).setEnabled(false); } }, SUBWAY @@ -53,6 +55,7 @@ public enum Mode SubwayManager.from(context).toggle(); TrafficManager.INSTANCE.setEnabled(false); IsolinesManager.from(context).setEnabled(false); + GuidesManager.from(context).setEnabled(false); } }, @@ -76,9 +79,34 @@ public enum Mode IsolinesManager.from(context).toggle(); TrafficManager.INSTANCE.setEnabled(false); SubwayManager.from(context).setEnabled(false); + GuidesManager.from(context).setEnabled(false); + } + }, + GUIDES + { + @Override + public boolean isEnabled(@NonNull Context context) + { + return GuidesManager.from(context).isEnabled(); + } + + @Override + public void setEnabled(@NonNull Context context, boolean isEnabled) + { + GuidesManager.from(context).setEnabled(isEnabled); + } + + @Override + public void toggle(@NonNull Context context) + { + GuidesManager.from(context).toggle(); + IsolinesManager.from(context).setEnabled(false); + TrafficManager.INSTANCE.setEnabled(false); + SubwayManager.from(context).setEnabled(false); } }; + public abstract boolean isEnabled(@NonNull Context context); public abstract void setEnabled(@NonNull Context context, boolean isEnabled); diff --git a/android/src/com/mapswithme/maps/maplayer/OnGuidesLayerToggleListener.java b/android/src/com/mapswithme/maps/maplayer/OnGuidesLayerToggleListener.java new file mode 100644 index 0000000000..030753286d --- /dev/null +++ b/android/src/com/mapswithme/maps/maplayer/OnGuidesLayerToggleListener.java @@ -0,0 +1,6 @@ +package com.mapswithme.maps.maplayer; + +public interface OnGuidesLayerToggleListener +{ + void onGuidesLayerSelected(); +} diff --git a/android/src/com/mapswithme/maps/maplayer/ToggleMapLayerDialog.java b/android/src/com/mapswithme/maps/maplayer/ToggleMapLayerDialog.java index cb58510603..58b91ec1c1 100644 --- a/android/src/com/mapswithme/maps/maplayer/ToggleMapLayerDialog.java +++ b/android/src/com/mapswithme/maps/maplayer/ToggleMapLayerDialog.java @@ -69,9 +69,11 @@ public class ToggleMapLayerDialog extends DialogFragment false); recycler.setLayoutManager(layoutManager); mAdapter = new LayersAdapter(); - mAdapter.setLayerModes(LayersUtils.createItems(requireContext(), new SubwayItemClickListener(), + mAdapter.setLayerModes(LayersUtils.createItems(requireContext(), + new SubwayItemClickListener(), new TrafficItemClickListener(), - new IsolinesItemClickListener())); + new IsolinesItemClickListener(), + new GuidesItemClickListener())); recycler.setAdapter(mAdapter); } @@ -133,4 +135,19 @@ public class ToggleMapLayerDialog extends DialogFragment listener.onIsolinesLayerSelected(); } } + + private class GuidesItemClickListener extends DefaultClickListener + { + private GuidesItemClickListener() + { + super(mAdapter); + } + + @Override + public void onItemClickInternal(@NonNull View v, @NonNull BottomSheetItem item) + { + OnGuidesLayerToggleListener listener = (OnGuidesLayerToggleListener) requireActivity(); + listener.onGuidesLayerSelected(); + } + } } diff --git a/android/src/com/mapswithme/maps/widget/menu/MainMenuOptionListener.java b/android/src/com/mapswithme/maps/widget/menu/MainMenuOptionListener.java index ad661a5453..766a25af35 100644 --- a/android/src/com/mapswithme/maps/widget/menu/MainMenuOptionListener.java +++ b/android/src/com/mapswithme/maps/widget/menu/MainMenuOptionListener.java @@ -11,4 +11,5 @@ public interface MainMenuOptionListener void onSubwayLayerOptionSelected(); void onTrafficLayerOptionSelected(); void onIsolinesLayerOptionSelected(); + void onGuidesLayerOptionSelected(); } diff --git a/android/src/com/mapswithme/maps/widget/menu/MainMenuRenderer.java b/android/src/com/mapswithme/maps/widget/menu/MainMenuRenderer.java index bf80c2478b..753aeaf015 100644 --- a/android/src/com/mapswithme/maps/widget/menu/MainMenuRenderer.java +++ b/android/src/com/mapswithme/maps/widget/menu/MainMenuRenderer.java @@ -98,7 +98,8 @@ public class MainMenuRenderer implements MenuRenderer mLayersAdapter.setLayerModes(LayersUtils.createItems(layersRecycler.getContext(), new SubwayItemClickListener(), new TrafficItemClickListener(), - new IsolinesItemClickListener())); + new IsolinesItemClickListener(), + new GuidesItemClickListener())); layersRecycler.setAdapter(mLayersAdapter); } @@ -163,4 +164,18 @@ public class MainMenuRenderer implements MenuRenderer mListener.onIsolinesLayerOptionSelected(); } } + + private class GuidesItemClickListener extends DefaultClickListener + { + GuidesItemClickListener() + { + super(mLayersAdapter); + } + + @Override + public void onItemClickInternal(@NonNull View v, @NonNull BottomSheetItem item) + { + mListener.onGuidesLayerOptionSelected(); + } + } }