From ee6f2140234201c5280c5acb4669fc6349540304 Mon Sep 17 00:00:00 2001 From: mhutti1 Date: Fri, 29 Jul 2016 17:45:26 +0100 Subject: [PATCH] Android Bookmarks can be loaded by either Title or URL #255 I may have also made a migration path but am not too sure as very difficult to test. --- CHANGELOG | 1 + .../kiwix/kiwixmobile/BookmarksActivity.java | 6 ++++- .../kiwixmobile/KiwixMobileActivity.java | 23 +++++++++++++++---- .../kiwixmobile/database/BookmarksDao.java | 6 ++++- .../kiwixmobile/database/KiwixDatabase.java | 17 ++++++++++++++ 5 files changed, 46 insertions(+), 7 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index e1a802bf2..1f2e2be0e 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -5,6 +5,7 @@ NEW: Kiwix search home screen widget NEW: Download manager NEW: Improved ZIM management NEW: Build against newer version of Android NDK/SDK +NEW: Bookmarks for multiple articles with the same title can be created FIXED: Opening problem with ZIM filenames with special characters FIXED: Useless "w820dp" language FIXED: Failing he, id, yi locales diff --git a/src/org/kiwix/kiwixmobile/BookmarksActivity.java b/src/org/kiwix/kiwixmobile/BookmarksActivity.java index 168a3d0e4..0b026f90b 100644 --- a/src/org/kiwix/kiwixmobile/BookmarksActivity.java +++ b/src/org/kiwix/kiwixmobile/BookmarksActivity.java @@ -200,7 +200,11 @@ public class BookmarksActivity extends AppCompatActivity @Override public void onItemClick(AdapterView parent, View view, int position, long id) { Intent intent = new Intent(); - intent.putExtra("choseX", bookmarks.get(position)); + if (!bookmarkUrls.get(position).equals("null")) { + intent.putExtra("choseXURL", bookmarkUrls.get(position)); + } else { + intent.putExtra("choseXTitle", bookmarks.get(position)); + } intent.putExtra("bookmarkClicked", true); setResult(RESULT_OK, intent); finish(); diff --git a/src/org/kiwix/kiwixmobile/KiwixMobileActivity.java b/src/org/kiwix/kiwixmobile/KiwixMobileActivity.java index 42d5f7550..24078f81e 100644 --- a/src/org/kiwix/kiwixmobile/KiwixMobileActivity.java +++ b/src/org/kiwix/kiwixmobile/KiwixMobileActivity.java @@ -713,7 +713,7 @@ public class KiwixMobileActivity extends AppCompatActivity { .setAction(ShortcutUtils.stringsGetter(R.string.undo, this), v -> { if (mWebViews.size() == 1 && prevSize == 1) { - openArticleFromBookmark(tempForUndo.getTitle()); + openArticleFromBookmarkURL(tempForUndo.getUrl()); } else { restoreTabAtIndex(tempForUndo.getUrl(), index); selectTab(index); @@ -1151,11 +1151,16 @@ public class KiwixMobileActivity extends AppCompatActivity { refreshBookmarks(); } - public boolean openArticleFromBookmark(String bookmarkTitle) { + public boolean openArticleFromBookmarkTitle(String bookmarkTitle) { // Log.d(TAG_KIWIX, "openArticleFromBookmark: " + articleSearchtextView.getText()); return openArticle(ZimContentProvider.getPageUrlFromTitle(bookmarkTitle)); } + public boolean openArticleFromBookmarkURL(String bookmarkURL) { + // Log.d(TAG_KIWIX, "openArticleFromBookmark: " + articleSearchtextView.getText()); + return openArticle(bookmarkURL); + } + private void contentsDrawerHint() { mLeftDrawerLayout.postDelayed(new Runnable() { @Override @@ -1391,9 +1396,17 @@ public class KiwixMobileActivity extends AppCompatActivity { bookmarks = bookmarksDao.getBookmarks(); if (itemClicked) { - String bookmarkChosen = data.getStringExtra("choseX"); - newTab(); - openArticleFromBookmark(bookmarkChosen); + String bookmarkChosen; + if (data.getStringExtra("choseXURL") != null) { + bookmarkChosen = data.getStringExtra("choseXURL"); + newTab(); + getCurrentWebView().loadUrl(bookmarkChosen); + } else { + newTab(); + bookmarkChosen = data.getStringExtra("choseXTitle"); + openArticleFromBookmarkTitle(bookmarkChosen); + } + } refreshBookmarkSymbol(menu); diff --git a/src/org/kiwix/kiwixmobile/database/BookmarksDao.java b/src/org/kiwix/kiwixmobile/database/BookmarksDao.java index 455ca566d..f3a7c6a35 100644 --- a/src/org/kiwix/kiwixmobile/database/BookmarksDao.java +++ b/src/org/kiwix/kiwixmobile/database/BookmarksDao.java @@ -59,7 +59,11 @@ public class BookmarksDao { * Save {@code searchString} as the most recent search. */ public void saveBookmark(String articleUrl, String articleTitle) { - mDb.persist(new Bookmarks().setBookmarkUrl(articleUrl).setBookmarkTitle(articleTitle)); + if (articleUrl != null) { + mDb.persist(new Bookmarks().setBookmarkUrl(articleUrl).setBookmarkTitle(articleTitle)); + } else { + mDb.persist(new Bookmarks().setBookmarkUrl("null").setBookmarkTitle(articleTitle)); + } } /** diff --git a/src/org/kiwix/kiwixmobile/database/KiwixDatabase.java b/src/org/kiwix/kiwixmobile/database/KiwixDatabase.java index 8f7e67386..4f8118890 100644 --- a/src/org/kiwix/kiwixmobile/database/KiwixDatabase.java +++ b/src/org/kiwix/kiwixmobile/database/KiwixDatabase.java @@ -92,6 +92,23 @@ public class KiwixDatabase extends SquidDatabase { db.execSQL("DROP TABLE IF EXISTS Bookmarks"); tryCreateTable(Bookmarks.TABLE); BookmarksDao bookmarksDao = new BookmarksDao(this); + if (ZimContentProvider.getId() != null) { + try { + InputStream stream = context.openFileInput(ZimContentProvider.getId() + ".txt"); + String in; + if (stream != null) { + BufferedReader read = new BufferedReader(new InputStreamReader(stream)); + while ((in = read.readLine()) != null) { + bookmarksDao.saveBookmark(null,in); + } + Log.d(KiwixMobileActivity.TAG_KIWIX, "Switched to bookmarkfile " + ZimContentProvider.getId()); + } + } catch (FileNotFoundException e) { + Log.e(KiwixMobileActivity.TAG_KIWIX, "File not found: " + e.toString()); + } catch (IOException e) { + Log.e(KiwixMobileActivity.TAG_KIWIX, "Can not read file: " + e.toString()); + } + } } return true; }