diff --git a/android/app/src/main/java/app/organicmaps/MwmActivity.java b/android/app/src/main/java/app/organicmaps/MwmActivity.java index 4054955e5f..2fbfcb0171 100644 --- a/android/app/src/main/java/app/organicmaps/MwmActivity.java +++ b/android/app/src/main/java/app/organicmaps/MwmActivity.java @@ -300,13 +300,13 @@ public class MwmActivity extends BaseMwmFragmentActivity BookmarkCategoriesActivity.start(this); } - public void showHelp() + private void showHelp() { Intent intent = new Intent(this, HelpActivity.class); startActivity(intent); } - public void showSearch(String query) + private void showSearch(String query) { closeSearchToolbar(false, true); if (mIsTabletLayout) @@ -349,8 +349,7 @@ public class MwmActivity extends BaseMwmFragmentActivity .show(); } - @Override - public void showDownloader(boolean openDownloaded) + private void showDownloader(boolean openDownloaded) { final Bundle args = new Bundle(); args.putBoolean(DownloaderActivity.EXTRA_OPEN_DOWNLOADED, openDownloaded); @@ -678,7 +677,7 @@ public class MwmActivity extends BaseMwmFragmentActivity showBookmarks(); break; case search: - showSearch(); + showSearch(""); break; case menu: closeFloatingPanels(); @@ -1264,12 +1263,6 @@ public class MwmActivity extends BaseMwmFragmentActivity mMapFragment.updateMyPositionRoutingOffset(offsetY); } - @Override - public void showSearch() - { - showSearch(""); - } - @Override public void updateMenu() { @@ -1319,21 +1312,21 @@ public class MwmActivity extends BaseMwmFragmentActivity MapObject myPosition = LocationHelper.from(this).getMyPosition(); - if (myPosition != null && !controller.hasEndPoint()) + if (myPosition != null && controller.getEndPoint() == null) { showAddFinishFrame(); if (showFrame) showMainMenu(true); return true; } - if (!controller.hasStartPoint()) + if (controller.getStartPoint() == null) { showAddStartFrame(); if (showFrame) showMainMenu(true); return true; } - if (!controller.hasEndPoint()) + if (controller.getEndPoint() == null) { showAddFinishFrame(); if (showFrame) @@ -1610,9 +1603,11 @@ public class MwmActivity extends BaseMwmFragmentActivity .show(); } - @Override - public void onShowDisclaimer(@Nullable MapObject startPoint, @Nullable MapObject endPoint) + private boolean showRoutingDisclaimer() { + if (Config.isRoutingDisclaimerAccepted()) + return true; + final StringBuilder builder = new StringBuilder(); for (int resId : new int[]{R.string.dialog_routing_disclaimer_priority, R.string.dialog_routing_disclaimer_precision, R.string.dialog_routing_disclaimer_recommendations, R.string.dialog_routing_disclaimer_borders, @@ -1627,17 +1622,22 @@ public class MwmActivity extends BaseMwmFragmentActivity .setNegativeButton(R.string.decline, null) .setPositiveButton(R.string.accept, (dlg, which) -> { Config.acceptRoutingDisclaimer(); - RoutingController.get().prepare(startPoint, endPoint); + onRoutingStart(); }) .setOnDismissListener(dialog -> mAlertDialog = null) .show(); + + return false; } - private void onSuggestRebuildRoute() + private boolean showStartPointNotice() { final RoutingController controller = RoutingController.get(); // Starting and ending points must be non-null, see {@link #showAddStartOrFinishFrame() }. + final MapObject startPoint = Objects.requireNonNull(controller.getStartPoint()); + if (startPoint.isMyPosition()) + return true; final MapObject endPoint = Objects.requireNonNull(controller.getEndPoint()); final MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog) @@ -1645,7 +1645,7 @@ public class MwmActivity extends BaseMwmFragmentActivity .setMessage(R.string.p2p_reroute_from_current) .setCancelable(false) .setNegativeButton(R.string.cancel, null) - .setPositiveButton(R.string.ok, MapObject.isOfType(MapObject.MY_POSITION, endPoint) ? + .setPositiveButton(R.string.ok, endPoint.isMyPosition() ? (dialog, which) -> controller.swapPoints() : (dialog, which) -> { // The current location may change while this dialog is still shown on the screen. @@ -1656,6 +1656,7 @@ public class MwmActivity extends BaseMwmFragmentActivity .setOnDismissListener(dialog -> mAlertDialog = null); dismissAlertDialog(); mAlertDialog = builder.show(); + return false; } @Override @@ -2000,13 +2001,11 @@ public class MwmActivity extends BaseMwmFragmentActivity @Override public void onRoutingStart() { - final RoutingController routing = RoutingController.get(); - final MapObject my = LocationHelper.from(this).getMyPosition(); - if (my == null || !MapObject.isOfType(MapObject.MY_POSITION, routing.getStartPoint())) - { - onSuggestRebuildRoute(); + if (!showStartPointNotice()) + return; + + if (!showRoutingDisclaimer()) return; - } closeFloatingPanels(); RoutingController.get().start(); diff --git a/android/app/src/main/java/app/organicmaps/bookmarks/data/Bookmark.java b/android/app/src/main/java/app/organicmaps/bookmarks/data/Bookmark.java index 47e3c059ad..3fd8d8520b 100644 --- a/android/app/src/main/java/app/organicmaps/bookmarks/data/Bookmark.java +++ b/android/app/src/main/java/app/organicmaps/bookmarks/data/Bookmark.java @@ -96,13 +96,6 @@ public class Bookmark extends MapObject return mIcon; } - @Override - @MapObjectType - public int getMapObjectType() - { - return MapObject.BOOKMARK; - } - public String getCategoryName() { return BookmarkManager.INSTANCE.getCategoryById(mCategoryId).getName(); diff --git a/android/app/src/main/java/app/organicmaps/bookmarks/data/MapObject.java b/android/app/src/main/java/app/organicmaps/bookmarks/data/MapObject.java index b1bcc04c98..67b5f2fc17 100644 --- a/android/app/src/main/java/app/organicmaps/bookmarks/data/MapObject.java +++ b/android/app/src/main/java/app/organicmaps/bookmarks/data/MapObject.java @@ -268,12 +268,6 @@ public class MapObject implements PopularityProvider, PlacePageData return mMetadata != null && !mMetadata.isEmpty(); } - @MapObjectType - public int getMapObjectType() - { - return mMapObjectType; - } - public String getApiId() { return mApiId; @@ -315,9 +309,19 @@ public class MapObject implements PopularityProvider, PlacePageData return !TextUtils.isEmpty(getMetadata(Metadata.MetadataType.FMD_PHONE_NUMBER)); } - public static boolean isOfType(@MapObjectType int type, MapObject object) + public final boolean isMyPosition() { - return object != null && object.getMapObjectType() == type; + return mMapObjectType == MY_POSITION; + } + + public final boolean isBookmark() + { + return mMapObjectType == BOOKMARK; + } + + public final boolean isApiPoint() + { + return mMapObjectType == API_POINT; } @Nullable diff --git a/android/app/src/main/java/app/organicmaps/routing/RoutingController.java b/android/app/src/main/java/app/organicmaps/routing/RoutingController.java index 581be9a43e..b77775a70b 100644 --- a/android/app/src/main/java/app/organicmaps/routing/RoutingController.java +++ b/android/app/src/main/java/app/organicmaps/routing/RoutingController.java @@ -18,7 +18,6 @@ import app.organicmaps.bookmarks.data.FeatureId; import app.organicmaps.bookmarks.data.MapObject; import app.organicmaps.location.LocationHelper; import app.organicmaps.widget.placepage.CoordinatesFormat; -import app.organicmaps.util.Config; import app.organicmaps.util.StringUtils; import app.organicmaps.util.Utils; import app.organicmaps.util.concurrency.UiThread; @@ -50,10 +49,8 @@ public class RoutingController implements Initializable public interface Container { - default void showSearch() {} default void showRoutePlan(boolean show, @Nullable Runnable completionListener) {} default void showNavigation(boolean show) {} - default void showDownloader(boolean openDownloaded) {} default void updateMenu() {} default void onNavigationCancelled() {} default void onNavigationStarted() {} @@ -67,7 +64,6 @@ public class RoutingController implements Initializable default boolean isSubwayEnabled() { return false; } default void onCommonBuildError(int lastResultCode, @NonNull String[] lastMissingMaps) {} default void onDrivingOptionsBuildError() {} - default void onShowDisclaimer(@Nullable MapObject startPoint, @Nullable MapObject endPoint) {} /** * @param progress progress to be displayed. @@ -220,7 +216,8 @@ public class RoutingController implements Initializable Logger.d(TAG, "[B] State: " + mState + ", BuildState: " + mBuildState + " -> " + newState); mBuildState = newState; - if (mBuildState == BuildState.BUILT && !MapObject.isOfType(MapObject.MY_POSITION, getStartPoint())) + final MapObject startPoint = getStartPoint(); + if (mBuildState == BuildState.BUILT && (startPoint == null || !startPoint.isMyPosition())) Framework.nativeDisableFollowing(); if (mContainer != null) @@ -355,14 +352,6 @@ public class RoutingController implements Initializable public void prepare(@Nullable MapObject startPoint, @Nullable MapObject endPoint, boolean fromApi) { Logger.d(TAG, "prepare (" + (endPoint == null ? "route)" : "p2p)")); - - if (!Config.isRoutingDisclaimerAccepted()) - { - if (mContainer != null) - mContainer.onShowDisclaimer(startPoint, endPoint); - return; - } - initLastRouteType(startPoint, endPoint, fromApi); prepare(startPoint, endPoint, mLastRouterType); } @@ -666,16 +655,6 @@ public class RoutingController implements Initializable return null; } - public boolean hasStartPoint() - { - return getStartPoint() != null; - } - - public boolean hasEndPoint() - { - return getEndPoint() != null; - } - @Nullable public RoutingInfo getCachedRoutingInfo() { @@ -716,13 +695,6 @@ public class RoutingController implements Initializable build(); } - public boolean setStartFromMyPosition(@NonNull MapObject my) - { - Logger.d(TAG, "setStartFromMyPosition"); - - return setStartPoint(my); - } - /** * Sets starting point. *
    @@ -818,7 +790,7 @@ public class RoutingController implements Initializable Pair description = getDescriptionForPoint(point); Framework.nativeAddRoutePoint(description.first /* title */, description.second /* subtitle */, type, 0 /* intermediateIndex */, - MapObject.isOfType(MapObject.MY_POSITION, point), + point.isMyPosition(), point.getLat(), point.getLon()); } diff --git a/android/app/src/main/java/app/organicmaps/util/SharingUtils.java b/android/app/src/main/java/app/organicmaps/util/SharingUtils.java index 043679b98a..659ea17b25 100644 --- a/android/app/src/main/java/app/organicmaps/util/SharingUtils.java +++ b/android/app/src/main/java/app/organicmaps/util/SharingUtils.java @@ -48,7 +48,7 @@ public class SharingUtils Intent intent = new Intent(Intent.ACTION_SEND); intent.setType(TEXT_MIME_TYPE); - final String subject = MapObject.isOfType(MapObject.MY_POSITION, object) ? + final String subject = object.isMyPosition() ? context.getString(R.string.my_position_share_email_subject) : context.getString(R.string.bookmark_share_email_subject); intent.putExtra(Intent.EXTRA_SUBJECT, subject); diff --git a/android/app/src/main/java/app/organicmaps/widget/placepage/PlacePageController.java b/android/app/src/main/java/app/organicmaps/widget/placepage/PlacePageController.java index f6060ca5c9..b6092dc76e 100644 --- a/android/app/src/main/java/app/organicmaps/widget/placepage/PlacePageController.java +++ b/android/app/src/main/java/app/organicmaps/widget/placepage/PlacePageController.java @@ -409,7 +409,7 @@ public class PlacePageController extends Fragment implements if (mMapObject == null) return; // No need to call setMapObject here as the native methods will reopen the place page - if (MapObject.isOfType(MapObject.BOOKMARK, mMapObject)) + if (mMapObject.isBookmark()) Framework.nativeDeleteBookmarkFromMapObject(); else BookmarkManager.INSTANCE.addNewBookmark(mMapObject.getLat(), mMapObject.getLon()); @@ -565,7 +565,7 @@ public class PlacePageController extends Fragment implements if (needToShowRoutingButtons && RoutingController.get().isStopPointAllowed()) buttons.add(PlacePageButtons.ButtonType.ROUTE_ADD); else - buttons.add(mapObject.getMapObjectType() == MapObject.BOOKMARK + buttons.add(mapObject.isBookmark() ? PlacePageButtons.ButtonType.BOOKMARK_DELETE : PlacePageButtons.ButtonType.BOOKMARK_SAVE); @@ -573,7 +573,7 @@ public class PlacePageController extends Fragment implements { buttons.add(PlacePageButtons.ButtonType.ROUTE_TO); if (RoutingController.get().isStopPointAllowed()) - buttons.add(mapObject.getMapObjectType() == MapObject.BOOKMARK + buttons.add(mapObject.isBookmark() ? PlacePageButtons.ButtonType.BOOKMARK_DELETE : PlacePageButtons.ButtonType.BOOKMARK_SAVE); } @@ -595,8 +595,8 @@ public class PlacePageController extends Fragment implements createPlacePageFragments(); updateButtons( mapObject, - MapObject.isOfType(MapObject.API_POINT, mMapObject), - !MapObject.isOfType(MapObject.MY_POSITION, mMapObject)); + mMapObject.isApiPoint(), + !mMapObject.isMyPosition()); } else close(); diff --git a/android/app/src/main/java/app/organicmaps/widget/placepage/PlacePageView.java b/android/app/src/main/java/app/organicmaps/widget/placepage/PlacePageView.java index 4e4ba7e59b..b66da4ae18 100644 --- a/android/app/src/main/java/app/organicmaps/widget/placepage/PlacePageView.java +++ b/android/app/src/main/java/app/organicmaps/widget/placepage/PlacePageView.java @@ -286,7 +286,7 @@ public class PlacePageView extends Fragment implements View.OnClickListener, refreshPreview(); refreshDetails(); final Location loc = LocationHelper.from(requireContext()).getSavedLocation(); - if (mMapObject.getMapObjectType() == MapObject.MY_POSITION) + if (mMapObject.isMyPosition()) refreshMyPosition(loc); else refreshDistanceToObject(loc); @@ -331,7 +331,8 @@ public class PlacePageView extends Fragment implements View.OnClickListener, private void updateBookmarkView() { - updateViewFragment(PlacePageBookmarkFragment.class, BOOKMARK_FRAGMENT_TAG, R.id.place_page_bookmark_fragment, mMapObject.getMapObjectType() == MapObject.BOOKMARK); + updateViewFragment(PlacePageBookmarkFragment.class, BOOKMARK_FRAGMENT_TAG, R.id.place_page_bookmark_fragment, + mMapObject.isBookmark()); } private boolean hasWikipediaEntry() @@ -645,7 +646,7 @@ public class PlacePageView extends Fragment implements View.OnClickListener, { if (mMapObject == null) return; - if (MapObject.isOfType(MapObject.MY_POSITION, mMapObject)) + if (mMapObject.isMyPosition()) refreshMyPosition(location); else refreshDistanceToObject(location); @@ -654,7 +655,7 @@ public class PlacePageView extends Fragment implements View.OnClickListener, @Override public void onCompassUpdated(double north) { - if (mMapObject == null || MapObject.isOfType(MapObject.MY_POSITION, mMapObject)) + if (mMapObject == null || mMapObject.isMyPosition()) return; final Location location = LocationHelper.from(requireContext()).getSavedLocation(); diff --git a/android/app/src/main/java/app/organicmaps/widget/placepage/sections/PlacePageBookmarkFragment.java b/android/app/src/main/java/app/organicmaps/widget/placepage/sections/PlacePageBookmarkFragment.java index 4ef19042cd..35016e8d86 100644 --- a/android/app/src/main/java/app/organicmaps/widget/placepage/sections/PlacePageBookmarkFragment.java +++ b/android/app/src/main/java/app/organicmaps/widget/placepage/sections/PlacePageBookmarkFragment.java @@ -147,7 +147,7 @@ public class PlacePageBookmarkFragment extends Fragment implements View.OnClickL // MapObject could be something else than a bookmark if the user already has the place page // opened and clicks on a non-bookmarked POI. // This callback would be called before the fragment had time to be destroyed - if (mapObject != null && mapObject.getMapObjectType() == MapObject.BOOKMARK) + if (mapObject != null && mapObject.isBookmark()) { currentBookmark = (Bookmark) mapObject; updateBookmarkDetails();