From b3724d5d2087e7e812c307d8bfe0d0eebc8bb878 Mon Sep 17 00:00:00 2001 From: d-kunin Date: Fri, 9 Aug 2013 13:27:04 +0300 Subject: [PATCH] [and] Fixes for mwm integration. --- android/jni/and_storage.cpp | 7 +++ .../travelguide/ArticleInfoListActivity.java | 10 +++++ .../travelguide/ArticleInfoListFragment.java | 43 ++++++++++++------- .../travelguide/article/ArticleInfo.java | 12 ++++-- .../com/example/travelguide/cpp/Storage.java | 3 +- 5 files changed, 55 insertions(+), 20 deletions(-) diff --git a/android/jni/and_storage.cpp b/android/jni/and_storage.cpp index 93b0f05..de96106 100644 --- a/android/jni/and_storage.cpp +++ b/android/jni/and_storage.cpp @@ -4,6 +4,7 @@ #include "../../storage/storage.hpp" #include "../../env/reader.hpp" +#include "../../env/latlon.hpp" #include @@ -148,6 +149,12 @@ JNIEXPORT jobject JNICALL Java_com_example_travelguide_cpp_Storage_getArticleInf return NativeArticle2JavaArticle(env, STORAGE.GetArticleInfoByUrl(JString2StdString(env, url))); } +JNIEXPORT jboolean JNICALL Java_com_example_travelguide_cpp_Storage_isValidLatLon + (JNIEnv * env, jclass clazz, jdouble lat, jdouble lon) +{ + return ll::ValidLat(lat) && ll::ValidLon(lon) ? JNI_TRUE : JNI_FALSE; +} + #ifdef __cplusplus } diff --git a/android/src/com/example/travelguide/ArticleInfoListActivity.java b/android/src/com/example/travelguide/ArticleInfoListActivity.java index 24535bd..d1a7922 100644 --- a/android/src/com/example/travelguide/ArticleInfoListActivity.java +++ b/android/src/com/example/travelguide/ArticleInfoListActivity.java @@ -67,8 +67,18 @@ public class ArticleInfoListActivity extends FragmentActivity implements Article handleIntent(getIntent()); } + @Override + protected void onNewIntent(Intent intent) + { + super.onNewIntent(intent); + handleIntent(intent); + } + private void handleIntent(Intent intent) { + if ((intent.getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0) + return; + final MWMResponse mwmResponse = MWMResponse.extractFromIntent(this, intent); final MWMPoint point = mwmResponse.getPoint(); diff --git a/android/src/com/example/travelguide/ArticleInfoListFragment.java b/android/src/com/example/travelguide/ArticleInfoListFragment.java index e0198bd..0864dd2 100644 --- a/android/src/com/example/travelguide/ArticleInfoListFragment.java +++ b/android/src/com/example/travelguide/ArticleInfoListFragment.java @@ -3,6 +3,9 @@ package com.example.travelguide; import static com.example.travelguide.util.Utils.hideIf; import static com.example.travelguide.util.Utils.hideView; import static com.example.travelguide.util.Utils.showView; + +import java.util.ArrayList; + import android.app.Activity; import android.app.PendingIntent; import android.content.Context; @@ -261,6 +264,7 @@ public class ArticleInfoListFragment extends ListFragment implements LoaderCallb return null; } + @SuppressWarnings("static-access") @Override public void onLoadFinished(Loader loader, Storage result) { @@ -315,23 +319,32 @@ public class ArticleInfoListFragment extends ListFragment implements LoaderCallb // TODO: show about dialog } else if (v.getId() == mShowMapForAll.getId()) + openInMwm(); + } + + private void openInMwm() + { + final int count = Storage.getResultSize(); + if (count < 1) + return; + + final ArrayList points = new ArrayList(); + for (int i = 0; i < count; ++i) { - final int count = Storage.getResultSize(); - MWMPoint points[] = new MWMPoint[count]; - - for (int i = 0; i < count; ++i) - { - final ArticleInfo info = Storage.getArticleInfoByIndex(i); - final String url = info.getArticleId(); - final String id = url.substring(0, url.lastIndexOf('.')); - points[i] = new MWMPoint(info.getLat(), info.getLon(), info.getName(), id); - } - - final Activity a = getActivity(); - final Intent intent = new Intent(a, ArticleInfoListActivity.class); - final PendingIntent pi = PendingIntent.getActivity(a, 0, intent, 0); - MapsWithMeApi.showPointsOnMap(a, "Hello, my articles!", pi, points); + final ArticleInfo info = Storage.getArticleInfoByIndex(i); + final String url = info.getArticleId(); + final String id = url.substring(0, url.lastIndexOf('.')); + if (info.isValidLatLon()) + points.add(new MWMPoint(info.getLat(), info.getLon(), info.getName(), id)); } + if (points.size() < 1) + return; + + final Activity a = getActivity(); + final Intent intent = new Intent(a, ArticleInfoListActivity.class); + final PendingIntent pi = PendingIntent.getActivity(a, 0, intent, 0); + MapsWithMeApi.showPointsOnMap + (a, "Hello, my articles!", pi, points.toArray(new MWMPoint[points.size()])); } private Location getLocation() diff --git a/android/src/com/example/travelguide/article/ArticleInfo.java b/android/src/com/example/travelguide/article/ArticleInfo.java index c06488f..1949e50 100644 --- a/android/src/com/example/travelguide/article/ArticleInfo.java +++ b/android/src/com/example/travelguide/article/ArticleInfo.java @@ -2,6 +2,8 @@ package com.example.travelguide.article; import java.io.Serializable; +import com.example.travelguide.cpp.Storage; + @SuppressWarnings("serial") public class ArticleInfo implements Serializable { @@ -12,7 +14,7 @@ public class ArticleInfo implements Serializable this.mArticleUrl = articleUrl; this.mIconUrl = iconUrl; this.mTitle = title; - + this.mParent = parent; this.mLat = lat; this.mLon = lon; @@ -20,16 +22,18 @@ public class ArticleInfo implements Serializable private final String mArticleUrl; private final String mIconUrl; private final String mTitle; - + private final String mParent; private final double mLat; private final double mLon; - + public String getName() { return mTitle; } public String getIconUrl() { return mIconUrl; } public String getArticleId() { return mArticleUrl; } public String getParent() { return mParent; } - + public double getLat() { return mLat; } public double getLon() { return mLon; } + + public boolean isValidLatLon() { return Storage.isValidLatLon(mLat, mLon); } } diff --git a/android/src/com/example/travelguide/cpp/Storage.java b/android/src/com/example/travelguide/cpp/Storage.java index c41ef5c..66702a9 100644 --- a/android/src/com/example/travelguide/cpp/Storage.java +++ b/android/src/com/example/travelguide/cpp/Storage.java @@ -32,6 +32,7 @@ public class Storage public native static ArticleInfo getArticleInfoByIndex(int index); - native private static void nativeInitIndex(AssetManager am); + private native static void nativeInitIndex(AssetManager am); + public native static boolean isValidLatLon(double lat, double lon); }