From e502fd04ddcac69e6352cf952d02488a44c12dfe Mon Sep 17 00:00:00 2001 From: vng Date: Mon, 18 Feb 2013 20:15:09 +0300 Subject: [PATCH] [android] [bookmarks] Always keep category name unique. --- .../maps/bookmarks/data/BookmarkManager.cpp | 39 +++++++-------- .../bookmarks/BookmarkCategoriesActivity.java | 4 +- .../maps/bookmarks/BookmarkListActivity.java | 9 ++-- .../ChooseBookmarkCategoryActivity.java | 13 +++-- .../maps/bookmarks/data/Bookmark.java | 47 ++++++++++--------- .../maps/bookmarks/data/BookmarkManager.java | 37 ++++++++------- 6 files changed, 74 insertions(+), 75 deletions(-) diff --git a/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkManager.cpp b/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkManager.cpp index e48832300e..3de2150e3a 100644 --- a/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkManager.cpp +++ b/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkManager.cpp @@ -10,7 +10,8 @@ namespace extern "C" { JNIEXPORT jobject JNICALL - Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nGetPOI(JNIEnv * env, jobject thiz, jdouble px, jdouble py) + Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nGetPOI( + JNIEnv * env, jobject thiz, jdouble px, jdouble py) { Framework::AddressInfo adInfo; m2::PointD pxPivot; @@ -25,7 +26,8 @@ extern "C" } JNIEXPORT jobject JNICALL - Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nGetAddressInfo(JNIEnv * env, jobject thiz, jdouble px, jdouble py) + Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nGetAddressInfo( + JNIEnv * env, jobject thiz, jdouble px, jdouble py) { m2::PointD point(px, py); Framework::AddressInfo adInfo; @@ -34,42 +36,31 @@ extern "C" } JNIEXPORT void JNICALL - Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nShowBookmark(JNIEnv * env, jobject thiz, jint c, jint b) + Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nShowBookmark( + JNIEnv * env, jobject thiz, jint c, jint b) { frm()->ShowBookmark(*(frm()->GetBmCategory(c)->GetBookmark(b))); frm()->SaveState(); } JNIEXPORT void JNICALL - Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_putBookmark( - JNIEnv * env, jobject thiz, jint px, jint py, jstring bookmarkName, jstring categoryName) - { - Bookmark bm(frm()->PtoG(m2::PointD(px, py)), jni::ToNativeString(env, bookmarkName), "placemark-red"); - frm()->AddBookmark(jni::ToNativeString(env, categoryName), bm)->SaveToKMLFile(); - } - - JNIEXPORT void JNICALL - Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nLoadBookmarks( - JNIEnv * env, jobject thiz) + Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nLoadBookmarks(JNIEnv * env, jobject thiz) { frm()->LoadBookmarks(); } - JNIEXPORT jint JNICALL - Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_getCategoriesCount( - JNIEnv * env, jobject thiz) + Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_getCategoriesCount(JNIEnv * env, jobject thiz) { return frm()->GetBmCategoriesCount(); } - //TODO rename JNIEXPORT jboolean JNICALL - Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nGetCategoryByName( + Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nIsCategoryExist( JNIEnv * env, jobject thiz, jstring name) - { - return frm()->IsCategoryExist(jni::ToNativeString(env, name)); - } + { + return frm()->IsCategoryExist(jni::ToNativeString(env, name)); + } JNIEXPORT jboolean JNICALL Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nDeleteCategory( @@ -79,7 +70,8 @@ extern "C" } JNIEXPORT void JNICALL - Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nDeleteBookmark(JNIEnv * env, jobject thiz, jint cat, jint bmk) + Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nDeleteBookmark( + JNIEnv * env, jobject thiz, jint cat, jint bmk) { BookmarkCategory * pCat = frm()->GetBmCategory(cat); if (pCat) @@ -90,7 +82,8 @@ extern "C" } JNIEXPORT jobject JNICALL - Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nGetBookmark(JNIEnv * env, jobject thiz, jdouble px, jdouble py) + Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nGetBookmark( + JNIEnv * env, jobject thiz, jdouble px, jdouble py) { BookmarkAndCategory bac = frm()->GetBookmark(m2::PointD(px, py)); diff --git a/android/src/com/mapswithme/maps/bookmarks/BookmarkCategoriesActivity.java b/android/src/com/mapswithme/maps/bookmarks/BookmarkCategoriesActivity.java index 1bf6a8b52a..efebe92dbb 100644 --- a/android/src/com/mapswithme/maps/bookmarks/BookmarkCategoriesActivity.java +++ b/android/src/com/mapswithme/maps/bookmarks/BookmarkCategoriesActivity.java @@ -35,8 +35,8 @@ public class BookmarkCategoriesActivity extends AbstractBookmarkCategoryActivity @Override public void onItemClick(AdapterView parent, View view, int position, long id) { - startActivity(new Intent(BookmarkCategoriesActivity.this, BookmarkListActivity.class).putExtra(BookmarkActivity.PIN_SET, - position)); + startActivity(new Intent(BookmarkCategoriesActivity.this, BookmarkListActivity.class) + .putExtra(BookmarkActivity.PIN_SET, position)); } }); registerForContextMenu(getListView()); diff --git a/android/src/com/mapswithme/maps/bookmarks/BookmarkListActivity.java b/android/src/com/mapswithme/maps/bookmarks/BookmarkListActivity.java index b5a17f7c2e..ab1073da92 100644 --- a/android/src/com/mapswithme/maps/bookmarks/BookmarkListActivity.java +++ b/android/src/com/mapswithme/maps/bookmarks/BookmarkListActivity.java @@ -90,8 +90,9 @@ public class BookmarkListActivity extends AbstractBookmarkListActivity @Override public void onTextChanged(CharSequence s, int start, int before, int count) { - mEditedSet.setName(s.toString()); - setTitle(s.toString()); + final String name = s.toString(); + mManager.setCategoryName(mEditedSet, name); + setTitle(name); } @Override @@ -138,8 +139,8 @@ public class BookmarkListActivity extends AbstractBookmarkListActivity private void startPinActivity(int cat, int bmk) { - startActivity(new Intent(this, BookmarkActivity.class). - putExtra(BookmarkActivity.PIN, new ParcelablePoint(cat, bmk))); + startActivity(new Intent(this, BookmarkActivity.class) + .putExtra(BookmarkActivity.PIN, new ParcelablePoint(cat, bmk))); } @Override diff --git a/android/src/com/mapswithme/maps/bookmarks/ChooseBookmarkCategoryActivity.java b/android/src/com/mapswithme/maps/bookmarks/ChooseBookmarkCategoryActivity.java index 35d3c7804e..a88b6f0875 100644 --- a/android/src/com/mapswithme/maps/bookmarks/ChooseBookmarkCategoryActivity.java +++ b/android/src/com/mapswithme/maps/bookmarks/ChooseBookmarkCategoryActivity.java @@ -159,12 +159,15 @@ public class ChooseBookmarkCategoryActivity extends AbstractBookmarkCategoryActi private void createNewCategory(String name) { - Point cab = ((ParcelablePoint)getIntent().getParcelableExtra(BookmarkActivity.PIN)).getPoint(); - mManager.createCategory(mManager.getBookmark(cab.x, cab.y), name); - getIntent().putExtra(BookmarkActivity.PIN_SET, mManager.getCategoriesCount()-1). - putExtra(BookmarkActivity.PIN, new ParcelablePoint(mManager.getCategoriesCount()-1, 0)); + final Point cab = ((ParcelablePoint)getIntent().getParcelableExtra(BookmarkActivity.PIN)).getPoint(); + final int index = mManager.createCategory(mManager.getBookmark(cab.x, cab.y), name); + + getIntent().putExtra(BookmarkActivity.PIN_SET, index) + .putExtra(BookmarkActivity.PIN, new ParcelablePoint(index, 0)); + switchToAddButton(); - getAdapter().chooseItem(mManager.getCategoriesCount()-1); + + getAdapter().chooseItem(index); } private void switchToAddButton() diff --git a/android/src/com/mapswithme/maps/bookmarks/data/Bookmark.java b/android/src/com/mapswithme/maps/bookmarks/data/Bookmark.java index 951596be19..43d45554cc 100644 --- a/android/src/com/mapswithme/maps/bookmarks/data/Bookmark.java +++ b/android/src/com/mapswithme/maps/bookmarks/data/Bookmark.java @@ -4,6 +4,8 @@ import android.content.Context; import android.graphics.Point; import android.util.Log; +import com.mapswithme.maps.R; + public class Bookmark { private Icon mIcon; @@ -13,9 +15,11 @@ public class Bookmark private int mBookmark; private double mMercatorX = Double.NaN; private double mMercatorY = Double.NaN; - private String mPreviewString = ""; - private final boolean mIsPreviewBookmark; + //private String mPreviewString = ""; + //private final boolean mIsPreviewBookmark; + + /* // For bookmark preview Bookmark(Context context, ParcelablePointD pos, String name) { @@ -25,10 +29,11 @@ public class Bookmark mPreviewString = name; getXY(mPosition); } + */ Bookmark(Context context, ParcelablePointD position, int nextCat, int b) { - mIsPreviewBookmark = false; + //mIsPreviewBookmark = false; mContext = context.getApplicationContext(); mPosition = position; getXY(position); @@ -45,7 +50,7 @@ public class Bookmark Bookmark(Context context, int c, int b) { - mIsPreviewBookmark = false; + //mIsPreviewBookmark = false; mContext = context.getApplicationContext(); mCategoryId = c; mBookmark = b; @@ -129,14 +134,15 @@ public class Bookmark return mIcon; } - public String getName(){ + public String getName() + { if (mCategoryId > -1 && BookmarkManager.getBookmarkManager(mContext).getCategoryById(mCategoryId).getSize() > mBookmark) { return nGetName(mCategoryId, mBookmark); } else { - return mPreviewString; + return ""; } } @@ -148,9 +154,8 @@ public class Bookmark } else { - //TODO change string resources - mCategoryId++; - return "My Places"; + mCategoryId = 0; + return mContext.getString(R.string.my_places); } } @@ -173,6 +178,8 @@ public class Bookmark public void setCategory(String category, int catId) { changeBookmark(category, getName(), mIcon.getType()); + + /// @todo This is not correct, but acceptable in current usage (object is not using later). mCategoryId = catId; mBookmark = BookmarkManager.getBookmarkManager(mContext).getCategoryById(mCategoryId).getSize() - 1; } @@ -194,24 +201,18 @@ public class Bookmark public String getBookmarkDescription() { - if (!mIsPreviewBookmark) - { - return nGetBookmarkDescription(mCategoryId, mBookmark); - } - else - { - return mPreviewString; - } + //if (!mIsPreviewBookmark) + //{ + return nGetBookmarkDescription(mCategoryId, mBookmark); + //} + //else + //{ + // return mPreviewString; + //} } public void setDescription(String n) { nSetBookmarkDescription(mCategoryId, mBookmark, n); } - - //TODO stub - public boolean isPreviewBookmark() - { - return mIsPreviewBookmark; - } } diff --git a/android/src/com/mapswithme/maps/bookmarks/data/BookmarkManager.java b/android/src/com/mapswithme/maps/bookmarks/data/BookmarkManager.java index e2ebe55dc6..8fcb647c0f 100644 --- a/android/src/com/mapswithme/maps/bookmarks/data/BookmarkManager.java +++ b/android/src/com/mapswithme/maps/bookmarks/data/BookmarkManager.java @@ -5,10 +5,7 @@ import java.util.List; import android.content.Context; import android.graphics.Point; -import android.text.TextUtils; -import com.mapswithme.maps.MWMActivity; -import com.mapswithme.maps.R; import com.mapswithme.util.Utils; public class BookmarkManager @@ -114,36 +111,40 @@ public class BookmarkManager public Bookmark getBookmark(int cat, int bmk) { - return new Bookmark(mContext, cat, bmk); } - public BookmarkCategory createCategory(Bookmark bookmark, String newName) + private String getUniqueName(String newName) { - String pattern; - String name = pattern = newName; + String name = newName; + + /// @todo Probably adding "-copy" suffix is better here (Mac OS style). int i = 0; - while (getCategoryByName(name)) - { - name = pattern + " " + (++i); - } - bookmark.setCategory(name, getCategoriesCount()); - BookmarkCategory cat = new BookmarkCategory(mContext, getCategoriesCount()-1); - return cat; + while (nIsCategoryExist(name)) + name = newName + " " + (++i); + + return name; } - //TODO - public boolean getCategoryByName(String name) + public int createCategory(Bookmark bookmark, String newName) { - return nGetCategoryByName(name); + bookmark.setCategory(getUniqueName(newName), getCategoriesCount()); + return getCategoriesCount() - 1; } - private native boolean nGetCategoryByName(String name); + public void setCategoryName(BookmarkCategory cat, String newName) + { + cat.setName(getUniqueName(newName)); + } + private native boolean nIsCategoryExist(String name); + + /* public Bookmark previewBookmark(AddressInfo info) { return new Bookmark(mContext, info.getPosition(), info.getBookmarkName(mContext)); } + */ private native void nShowBookmark(int c, int b);