diff --git a/android/jni/com/mapswithme/maps/Framework.cpp b/android/jni/com/mapswithme/maps/Framework.cpp index acd641f187..9b9d40e8f1 100644 --- a/android/jni/com/mapswithme/maps/Framework.cpp +++ b/android/jni/com/mapswithme/maps/Framework.cpp @@ -62,6 +62,7 @@ Framework::Framework() : m_lastCompass(0.0) , m_currentMode(location::MODE_UNKNOWN_POSITION) , m_isCurrentModeInitialized(false) + , m_activeUserMark(nullptr) { ASSERT_EQUAL ( g_framework, 0, () ); g_framework = this; @@ -643,7 +644,7 @@ extern "C" /// @name JNI EXPORTS //@{ JNIEXPORT jstring JNICALL - Java_com_mapswithme_maps_Framework_nativeGetNameAndAddress4Point(JNIEnv * env, jclass clazz, jdouble lat, jdouble lon) + Java_com_mapswithme_maps_Framework_nativeGetNameAndAddress(JNIEnv * env, jclass clazz, jdouble lat, jdouble lon) { search::AddressInfo const info = frm()->GetMercatorAddressInfo(MercatorBounds::FromLatLon(lat, lon)); return jni::ToJavaString(env, info.FormatNameAndAddress()); @@ -768,13 +769,13 @@ extern "C" } JNIEXPORT jint JNICALL - Java_com_mapswithme_maps_Framework_getDrawScale(JNIEnv * env, jclass clazz) + Java_com_mapswithme_maps_Framework_nativeGetDrawScale(JNIEnv * env, jclass clazz) { return static_cast(frm()->GetDrawScale()); } JNIEXPORT jdoubleArray JNICALL - Java_com_mapswithme_maps_Framework_getScreenRectCenter(JNIEnv * env, jclass clazz) + Java_com_mapswithme_maps_Framework_nativeGetScreenRectCenter(JNIEnv * env, jclass clazz) { const m2::PointD center = frm()->GetViewportCenter(); @@ -982,12 +983,6 @@ extern "C" return result; } - JNIEXPORT jobject JNICALL - Java_com_mapswithme_maps_Framework_nativeGetMapObjectForPoint(JNIEnv * env, jclass clazz, jdouble lat, jdouble lon) - { - return usermark_helper::CreateMapObject(frm()->GetAddressMark(MercatorBounds::FromLatLon(lat, lon))); - } - JNIEXPORT jstring JNICALL Java_com_mapswithme_maps_Framework_nativeGetCountryNameIfAbsent(JNIEnv * env, jobject thiz, jdouble lat, jdouble lon) @@ -1036,19 +1031,19 @@ extern "C" } JNIEXPORT void JNICALL - Java_com_mapswithme_maps_Framework_downloadCountry(JNIEnv * env, jobject thiz, jobject idx) + Java_com_mapswithme_maps_Framework_nativeDownloadCountry(JNIEnv * env, jobject thiz, jobject idx) { storage_utils::GetMapLayout().DownloadMap(storage::ToNative(idx), MapOptions::Map); } JNIEXPORT void JNICALL - Java_com_mapswithme_maps_Framework_deactivatePopup(JNIEnv * env, jobject thiz) + Java_com_mapswithme_maps_Framework_nativeDeactivatePopup(JNIEnv * env, jobject thiz) { return g_framework->DeactivatePopup(); } JNIEXPORT jdoubleArray JNICALL - Java_com_mapswithme_maps_Framework_predictLocation(JNIEnv * env, jobject thiz, jdouble lat, jdouble lon, jdouble accuracy, + Java_com_mapswithme_maps_Framework_nativePredictLocation(JNIEnv * env, jobject thiz, jdouble lat, jdouble lon, jdouble accuracy, jdouble bearing, jdouble speed, jdouble elapsedSeconds) { double latitude = lat; @@ -1169,4 +1164,12 @@ extern "C" return nullptr; return usermark_helper::CreateMapObject(mark); } + + JNIEXPORT jobject JNICALL + Java_com_mapswithme_maps_Framework_nativeActivateMapObject(JNIEnv * env, jclass clazz, jdouble lat, jdouble lon) + { + UserMark const * mark = frm()->GetAddressMark(MercatorBounds::FromLatLon(lat, lon)); + g_framework->SetActiveUserMark(mark); + return usermark_helper::CreateMapObject(mark); + } } // extern "C" diff --git a/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkManager.cpp b/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkManager.cpp index e74269e60a..5e13be0bfa 100644 --- a/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkManager.cpp +++ b/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkManager.cpp @@ -96,12 +96,16 @@ JNIEXPORT jobject JNICALL Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nativeAddBookmarkToLastEditedCategory( JNIEnv * env, jobject thiz, jstring name, double lat, double lon) { - const m2::PointD glbPoint(MercatorBounds::FromLatLon(lat, lon)); + m2::PointD const glbPoint(MercatorBounds::FromLatLon(lat, lon)); ::Framework * f = frm(); - BookmarkData bmk(ToNativeString(env, name), f->LastEditedBMType()); - BookmarkAndCategory const bmkAndCat = g_framework->AddBookmark(f->LastEditedBMCategory(), glbPoint, bmk); - BookmarkCategory const * category = f->GetBookmarkManager().GetBmCategory(bmkAndCat.first); - return usermark_helper::CreateMapObject(category->GetUserMark(bmkAndCat.second)); + BookmarkData bmkData(ToNativeString(env, name), f->LastEditedBMType()); + BookmarkAndCategory const bmkAndCat = g_framework->AddBookmark(f->LastEditedBMCategory(), glbPoint, bmkData); + BookmarkCategory::Guard guard(*f->GetBookmarkManager().GetBmCategory(bmkAndCat.first)); + UserMark * newBookmark = guard.m_controller.GetUserMarkForEdit(bmkAndCat.second); + // TODO @deathbaba or @yunikkk - remove that hack after BookmarkManager will correctly set features for bookmarks. + newBookmark->SetFeature(f->GetFeatureAtMercatorPoint(glbPoint)); + g_framework->SetActiveUserMark(newBookmark); + return usermark_helper::CreateMapObject(newBookmark); } JNIEXPORT jint JNICALL diff --git a/android/src/com/mapswithme/maps/DownloadResourcesActivity.java b/android/src/com/mapswithme/maps/DownloadResourcesActivity.java index 202f4cab19..410a9e9d97 100644 --- a/android/src/com/mapswithme/maps/DownloadResourcesActivity.java +++ b/android/src/com/mapswithme/maps/DownloadResourcesActivity.java @@ -433,7 +433,7 @@ public class DownloadResourcesActivity extends BaseMwmFragmentActivity mProgress.setMax((int) MapStorage.INSTANCE.countryRemoteSizeInBytes(mCountryIndex, StorageOptions.MAP_OPTION_MAP_ONLY)); mProgress.setProgress(0); - Framework.downloadCountry(mCountryIndex); + Framework.nativeDownloadCountry(mCountryIndex); setAction(PROCEED_TO_MAP); } diff --git a/android/src/com/mapswithme/maps/Framework.java b/android/src/com/mapswithme/maps/Framework.java index e5622b4173..28dfaad733 100644 --- a/android/src/com/mapswithme/maps/Framework.java +++ b/android/src/com/mapswithme/maps/Framework.java @@ -1,5 +1,6 @@ package com.mapswithme.maps; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import com.mapswithme.maps.MapStorage.Index; @@ -57,17 +58,17 @@ public class Framework public static native void nativeShowTrackRect(int category, int track); - public static native int getDrawScale(); + public static native int nativeGetDrawScale(); - public static native double[] getScreenRectCenter(); + public static native double[] nativeGetScreenRectCenter(); public static native DistanceAndAzimut nativeGetDistanceAndAzimut(double dstMerX, double dstMerY, double srcLat, double srcLon, double north); public static native DistanceAndAzimut nativeGetDistanceAndAzimutFromLatLon(double dstLat, double dstLon, double srcLat, double srcLon, double north); - public static native String nativeFormatLatLon(double lat, double lon, boolean useDMSFormat); + public static native String nativeFormatLatLon(double lat, double lon, boolean useDmsFormat); - public static native String[] nativeFormatLatLonToArr(double lat, double lon, boolean useDMSFormat); + public static native String[] nativeFormatLatLonToArr(double lat, double lon, boolean useDmsFormat); public static native String nativeFormatAltitude(double alt); @@ -75,9 +76,7 @@ public class Framework public static native String nativeGetGe0Url(double lat, double lon, double zoomLevel, String name); - public static native String nativeGetNameAndAddress4Point(double lat, double lon); - - public static native MapObject nativeGetMapObjectForPoint(double lat, double lon); + public static native String nativeGetNameAndAddress(double lat, double lon); public static native void nativeSetMapObjectListener(MapObjectListener listener); @@ -93,7 +92,7 @@ public class Framework public static native void nativeClearApiPoints(); - public static native void deactivatePopup(); + public static native void nativeDeactivatePopup(); public static native String[] nativeGetMovableFilesExts(); @@ -147,9 +146,9 @@ public class Framework public static native void nativeShowCountry(Index idx, boolean zoomToDownloadButton); // TODO consider removal of that methods - public static native void downloadCountry(Index idx); + public static native void nativeDownloadCountry(Index idx); - public static native double[] predictLocation(double lat, double lon, double accuracy, double bearing, double speed, double elapsedSeconds); + public static native double[] nativePredictLocation(double lat, double lon, double accuracy, double bearing, double speed, double elapsedSeconds); public static native void nativeSetMapStyle(int mapStyle); @@ -197,4 +196,7 @@ public class Framework @Nullable public static native MapObject nativeGetActiveMapObject(); + + @NonNull + public static native MapObject nativeActivateMapObject(double lat, double lon); } diff --git a/android/src/com/mapswithme/maps/MwmActivity.java b/android/src/com/mapswithme/maps/MwmActivity.java index 417f51cb3a..ca123ecf87 100644 --- a/android/src/com/mapswithme/maps/MwmActivity.java +++ b/android/src/com/mapswithme/maps/MwmActivity.java @@ -268,8 +268,8 @@ public class MwmActivity extends BaseMwmFragmentActivity final Location loc = LocationHelper.INSTANCE.getLastLocation(); if (loc != null) { - final String geoUrl = Framework.nativeGetGe0Url(loc.getLatitude(), loc.getLongitude(), Framework.getDrawScale(), ""); - final String httpUrl = Framework.getHttpGe0Url(loc.getLatitude(), loc.getLongitude(), Framework.getDrawScale(), ""); + final String geoUrl = Framework.nativeGetGe0Url(loc.getLatitude(), loc.getLongitude(), Framework.nativeGetDrawScale(), ""); + final String httpUrl = Framework.getHttpGe0Url(loc.getLatitude(), loc.getLongitude(), Framework.nativeGetDrawScale(), ""); final String body = getString(R.string.my_position_share_sms, geoUrl, httpUrl); ShareOption.ANY.share(this, body); return; @@ -438,7 +438,7 @@ public class MwmActivity extends BaseMwmFragmentActivity return false; mPlacePage.hide(); - Framework.deactivatePopup(); + Framework.nativeDeactivatePopup(); return true; } @@ -1130,7 +1130,7 @@ public class MwmActivity extends BaseMwmFragmentActivity } else { - Framework.deactivatePopup(); + Framework.nativeDeactivatePopup(); mPlacePage.setMapObject(null, false); mMainMenu.show(true); } @@ -1222,7 +1222,7 @@ public class MwmActivity extends BaseMwmFragmentActivity public boolean run(MwmActivity target) { if (mDoAutoDownload) - Framework.downloadCountry(mIndex); + Framework.nativeDownloadCountry(mIndex); Framework.nativeShowCountry(mIndex, mDoAutoDownload); return true; } diff --git a/android/src/com/mapswithme/maps/api/ParsedMwmRequest.java b/android/src/com/mapswithme/maps/api/ParsedMwmRequest.java index c6e0d77413..8545ab85a4 100644 --- a/android/src/com/mapswithme/maps/api/ParsedMwmRequest.java +++ b/android/src/com/mapswithme/maps/api/ParsedMwmRequest.java @@ -119,7 +119,7 @@ public class ParsedMwmRequest { if (hasPendingIntent()) { - mZoomLevel = Framework.getDrawScale(); + mZoomLevel = Framework.nativeGetDrawScale(); final Intent i = new Intent(); if (success) { diff --git a/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java b/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java index 45ac109d57..f55e00ba42 100644 --- a/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java +++ b/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java @@ -61,7 +61,6 @@ import com.mapswithme.maps.widget.ObservableScrollView; import com.mapswithme.maps.widget.ScrollViewShadowController; import com.mapswithme.util.Graphics; import com.mapswithme.util.InputUtils; -import com.mapswithme.util.LocationUtils; import com.mapswithme.util.StringUtils; import com.mapswithme.util.UiUtils; import com.mapswithme.util.Utils; @@ -127,8 +126,6 @@ public class PlacePageView extends RelativeLayout implements View.OnClickListene private MwmActivity.LeftAnimationTrackListener mLeftAnimationTrackListener; // Data private MapObject mMapObject; - - private MapObject mBookmarkedMapObject; private boolean mIsLatLonDms; @@ -427,8 +424,7 @@ public class PlacePageView extends RelativeLayout implements View.OnClickListene refreshMetadataOrHide(mMapObject.getMetadata(Metadata.MetadataType.FMD_EMAIL), mEmail, mTvEmail); refreshMetadataOrHide(mMapObject.getMetadata(Metadata.MetadataType.FMD_OPERATOR), mOperator, mTvOperator); refreshMetadataOrHide(mMapObject.getFormattedCuisine(), mCuisine, mTvCuisine); - // TODO @yunikkk uncomment wiki display when data with correct wiki representation(urlencoded once) will be ready - // refreshMetadataOrHide(mMapObject.getMetadata(Metadata.MetadataType.FMD_WIKIPEDIA), mWiki, null); + refreshMetadataOrHide(mMapObject.getMetadata(Metadata.MetadataType.FMD_WIKIPEDIA), mWiki, null); refreshMetadataOrHide(mMapObject.getMetadata(Metadata.MetadataType.FMD_INTERNET), mWifi, null); refreshMetadataOrHide(mMapObject.getMetadata(Metadata.MetadataType.FMD_FLATS), mEntrance, mTvEntrance); // TODO throw away parsing hack when data will be parsed correctly in core @@ -759,22 +755,13 @@ public class PlacePageView extends RelativeLayout implements View.OnClickListene if (MapObject.isOfType(MapObject.BOOKMARK, mMapObject)) { final Bookmark currentBookmark = (Bookmark) mMapObject; - MapObject p; - if (mBookmarkedMapObject != null && LocationUtils.areLatLonEqual(mMapObject, mBookmarkedMapObject)) - // use cached POI of bookmark, if it corresponds to current object - p = mBookmarkedMapObject; - else - p = Framework.nativeGetMapObjectForPoint(mMapObject.getLat(), mMapObject.getLon()); - - setMapObject(p, false); + setMapObject(Framework.nativeActivateMapObject(mMapObject.getLat(), mMapObject.getLon()), false); setState(State.DETAILS); BookmarkManager.INSTANCE.deleteBookmark(currentBookmark); } else { - mBookmarkedMapObject = mMapObject; - final Bookmark newBmk = BookmarkManager.INSTANCE.addNewBookmark(mMapObject.getName(), mMapObject.getLat(), mMapObject.getLon()); - setMapObject(newBmk, false); + setMapObject(BookmarkManager.INSTANCE.addNewBookmark(mMapObject.getName(), mMapObject.getLat(), mMapObject.getLon()), false); // FIXME this hack is necessary to get correct views height in animation controller. remove after further investigation. post(new Runnable() { diff --git a/android/src/com/mapswithme/util/LocationUtils.java b/android/src/com/mapswithme/util/LocationUtils.java index fddbb91197..9996173317 100644 --- a/android/src/com/mapswithme/util/LocationUtils.java +++ b/android/src/com/mapswithme/util/LocationUtils.java @@ -105,6 +105,6 @@ public class LocationUtils public static boolean areLatLonEqual(MapObject first, MapObject second) { return Math.abs(first.getLat() - second.getLat()) < LocationUtils.LAT_LON_EPSILON && - Math.abs(first.getLon() - second.getLon()) < LocationUtils.LAT_LON_EPSILON; + Math.abs(first.getLon() - second.getLon()) < LocationUtils.LAT_LON_EPSILON; } } diff --git a/android/src/com/mapswithme/util/sharing/MapObjectShareable.java b/android/src/com/mapswithme/util/sharing/MapObjectShareable.java index 93c9ea1995..a50adb3641 100644 --- a/android/src/com/mapswithme/util/sharing/MapObjectShareable.java +++ b/android/src/com/mapswithme/util/sharing/MapObjectShareable.java @@ -19,7 +19,7 @@ public class MapObjectShareable extends BaseShareable final Activity activity = getActivity(); final String ge0Url = Framework.nativeGetGe0Url(mMapObject.getLat(), mMapObject.getLon(), mMapObject.getScale(), mMapObject.getName()); final String httpUrl = Framework.getHttpGe0Url(mMapObject.getLat(), mMapObject.getLon(), mMapObject.getScale(), mMapObject.getName()); - final String address = Framework.nativeGetNameAndAddress4Point(mMapObject.getLat(), mMapObject.getLon()); + final String address = Framework.nativeGetNameAndAddress(mMapObject.getLat(), mMapObject.getLon()); final int textId = MapObject.isOfType(MapObject.MY_POSITION, mMapObject) ? R.string.my_position_share_email : R.string.bookmark_share_email; final int subjectId = MapObject.isOfType(MapObject.MY_POSITION, mMapObject) ? R.string.my_position_share_email_subject