Add support for travel books in WikivoyageLocalDataHelper; add method for clearing all search history

This commit is contained in:
Alex Sytnyk 2018-04-12 16:50:53 +03:00
parent b6ac5127e6
commit e957ba5f83

View file

@ -60,6 +60,11 @@ public class WikivoyageLocalDataHelper {
return res; return res;
} }
public void clearHistory() {
historyMap.clear();
dbHelper.clearAllHistory();
}
public void addToHistory(@NonNull WikivoyageArticle article) { public void addToHistory(@NonNull WikivoyageArticle article) {
addToHistory(article.getCityId(), article.getTitle(), article.getLang(), article.getIsPartOf()); addToHistory(article.getCityId(), article.getTitle(), article.getLang(), article.getIsPartOf());
} }
@ -153,7 +158,7 @@ public class WikivoyageLocalDataHelper {
private static class WikivoyageLocalDataDbHelper { private static class WikivoyageLocalDataDbHelper {
private static final int DB_VERSION = 2; private static final int DB_VERSION = 3;
private static final String DB_NAME = "wikivoyage_local_data"; private static final String DB_NAME = "wikivoyage_local_data";
private static final String HISTORY_TABLE_NAME = "wikivoyage_search_history"; private static final String HISTORY_TABLE_NAME = "wikivoyage_search_history";
@ -162,6 +167,7 @@ public class WikivoyageLocalDataHelper {
private static final String HISTORY_COL_LANG = "lang"; private static final String HISTORY_COL_LANG = "lang";
private static final String HISTORY_COL_IS_PART_OF = "is_part_of"; private static final String HISTORY_COL_IS_PART_OF = "is_part_of";
private static final String HISTORY_COL_LAST_ACCESSED = "last_accessed"; private static final String HISTORY_COL_LAST_ACCESSED = "last_accessed";
private static final String HISTORY_COL_TRAVEL_BOOK = "travel_book";
private static final String HISTORY_TABLE_CREATE = "CREATE TABLE IF NOT EXISTS " + private static final String HISTORY_TABLE_CREATE = "CREATE TABLE IF NOT EXISTS " +
HISTORY_TABLE_NAME + " (" + HISTORY_TABLE_NAME + " (" +
@ -169,7 +175,8 @@ public class WikivoyageLocalDataHelper {
HISTORY_COL_ARTICLE_TITLE + " TEXT, " + HISTORY_COL_ARTICLE_TITLE + " TEXT, " +
HISTORY_COL_LANG + " TEXT, " + HISTORY_COL_LANG + " TEXT, " +
HISTORY_COL_IS_PART_OF + " TEXT, " + HISTORY_COL_IS_PART_OF + " TEXT, " +
HISTORY_COL_LAST_ACCESSED + " long);"; HISTORY_COL_LAST_ACCESSED + " long, " +
HISTORY_COL_TRAVEL_BOOK + " TEXT);";
private static final String HISTORY_TABLE_SELECT = "SELECT " + private static final String HISTORY_TABLE_SELECT = "SELECT " +
HISTORY_COL_CITY_ID + ", " + HISTORY_COL_CITY_ID + ", " +
@ -186,6 +193,7 @@ public class WikivoyageLocalDataHelper {
private static final String BOOKMARKS_COL_IS_PART_OF = "is_part_of"; private static final String BOOKMARKS_COL_IS_PART_OF = "is_part_of";
private static final String BOOKMARKS_COL_IMAGE_TITLE = "image_title"; private static final String BOOKMARKS_COL_IMAGE_TITLE = "image_title";
private static final String BOOKMARKS_COL_PARTIAL_CONTENT = "partial_content"; private static final String BOOKMARKS_COL_PARTIAL_CONTENT = "partial_content";
private static final String BOOKMARKS_COL_TRAVEL_BOOK = "travel_book";
private static final String BOOKMARKS_TABLE_CREATE = "CREATE TABLE IF NOT EXISTS " + private static final String BOOKMARKS_TABLE_CREATE = "CREATE TABLE IF NOT EXISTS " +
BOOKMARKS_TABLE_NAME + " (" + BOOKMARKS_TABLE_NAME + " (" +
@ -194,7 +202,8 @@ public class WikivoyageLocalDataHelper {
BOOKMARKS_COL_LANG + " TEXT, " + BOOKMARKS_COL_LANG + " TEXT, " +
BOOKMARKS_COL_IS_PART_OF + " TEXT, " + BOOKMARKS_COL_IS_PART_OF + " TEXT, " +
BOOKMARKS_COL_IMAGE_TITLE + " TEXT, " + BOOKMARKS_COL_IMAGE_TITLE + " TEXT, " +
BOOKMARKS_COL_PARTIAL_CONTENT + " TEXT);"; BOOKMARKS_COL_PARTIAL_CONTENT + " TEXT, " +
BOOKMARKS_COL_TRAVEL_BOOK + " TEXT);";
private static final String BOOKMARKS_TABLE_SELECT = "SELECT " + private static final String BOOKMARKS_TABLE_SELECT = "SELECT " +
BOOKMARKS_COL_CITY_ID + ", " + BOOKMARKS_COL_CITY_ID + ", " +
@ -240,6 +249,13 @@ public class WikivoyageLocalDataHelper {
if (oldVersion < 2) { if (oldVersion < 2) {
conn.execSQL(BOOKMARKS_TABLE_CREATE); conn.execSQL(BOOKMARKS_TABLE_CREATE);
} }
if (oldVersion < 3) {
conn.execSQL("ALTER TABLE " + HISTORY_TABLE_NAME + " ADD " + HISTORY_COL_TRAVEL_BOOK + " TEXT");
conn.execSQL("ALTER TABLE " + BOOKMARKS_TABLE_NAME + " ADD " + BOOKMARKS_COL_TRAVEL_BOOK + " TEXT");
Object[] args = new Object[]{context.getWikivoyageDbHelper().getSelectedTravelBook().getName()};
conn.execSQL("UPDATE " + HISTORY_TABLE_NAME + " SET " + HISTORY_COL_TRAVEL_BOOK + " = ?", args);
conn.execSQL("UPDATE " + BOOKMARKS_TABLE_NAME + " SET " + BOOKMARKS_COL_TRAVEL_BOOK + " = ?", args);
}
} }
@NonNull @NonNull
@ -248,7 +264,9 @@ public class WikivoyageLocalDataHelper {
SQLiteConnection conn = openConnection(true); SQLiteConnection conn = openConnection(true);
if (conn != null) { if (conn != null) {
try { try {
SQLiteCursor cursor = conn.rawQuery(HISTORY_TABLE_SELECT, null); String query = HISTORY_TABLE_SELECT + " WHERE " + HISTORY_COL_TRAVEL_BOOK + " = ?";
String travelBook = context.getSettings().SELECTED_TRAVEL_BOOK.get();
SQLiteCursor cursor = conn.rawQuery(query, new String[]{travelBook});
if (cursor.moveToFirst()) { if (cursor.moveToFirst()) {
do { do {
WikivoyageSearchHistoryItem item = readHistoryItem(cursor); WikivoyageSearchHistoryItem item = readHistoryItem(cursor);
@ -266,8 +284,10 @@ public class WikivoyageLocalDataHelper {
SQLiteConnection conn = openConnection(false); SQLiteConnection conn = openConnection(false);
if (conn != null) { if (conn != null) {
try { try {
conn.execSQL("INSERT INTO " + HISTORY_TABLE_NAME + " VALUES (?, ?, ?, ?, ?)", String travelBook = context.getSettings().SELECTED_TRAVEL_BOOK.get();
new Object[]{item.cityId, item.articleTitle, item.lang, item.isPartOf, item.lastAccessed}); conn.execSQL("INSERT INTO " + HISTORY_TABLE_NAME + " VALUES (?, ?, ?, ?, ?, ?)",
new Object[]{item.cityId, item.articleTitle, item.lang,
item.isPartOf, item.lastAccessed, travelBook});
} finally { } finally {
conn.close(); conn.close();
} }
@ -278,13 +298,16 @@ public class WikivoyageLocalDataHelper {
SQLiteConnection conn = openConnection(false); SQLiteConnection conn = openConnection(false);
if (conn != null) { if (conn != null) {
try { try {
String travelBook = context.getSettings().SELECTED_TRAVEL_BOOK.get();
conn.execSQL("UPDATE " + HISTORY_TABLE_NAME + " SET " + conn.execSQL("UPDATE " + HISTORY_TABLE_NAME + " SET " +
HISTORY_COL_ARTICLE_TITLE + " = ?, " + HISTORY_COL_ARTICLE_TITLE + " = ?, " +
HISTORY_COL_LANG + " = ?, " + HISTORY_COL_LANG + " = ?, " +
HISTORY_COL_IS_PART_OF + " = ?, " + HISTORY_COL_IS_PART_OF + " = ?, " +
HISTORY_COL_LAST_ACCESSED + " = ? " + HISTORY_COL_LAST_ACCESSED + " = ? " +
"WHERE " + HISTORY_COL_CITY_ID + " = ?", "WHERE " + HISTORY_COL_CITY_ID + " = ? " +
new Object[]{item.articleTitle, item.lang, item.isPartOf, item.lastAccessed, item.cityId}); "AND " + HISTORY_COL_TRAVEL_BOOK + " = ?",
new Object[]{item.articleTitle, item.lang, item.isPartOf,
item.lastAccessed, item.cityId, travelBook});
} finally { } finally {
conn.close(); conn.close();
} }
@ -295,8 +318,25 @@ public class WikivoyageLocalDataHelper {
SQLiteConnection conn = openConnection(false); SQLiteConnection conn = openConnection(false);
if (conn != null) { if (conn != null) {
try { try {
conn.execSQL("DELETE FROM " + HISTORY_TABLE_NAME + " WHERE " + HISTORY_COL_CITY_ID + " = ?", String travelBook = context.getSettings().SELECTED_TRAVEL_BOOK.get();
new Object[]{item.cityId}); conn.execSQL("DELETE FROM " + HISTORY_TABLE_NAME +
" WHERE " + HISTORY_COL_CITY_ID + " = ?" +
" AND " + HISTORY_COL_TRAVEL_BOOK + " = ?",
new Object[]{item.cityId, travelBook});
} finally {
conn.close();
}
}
}
void clearAllHistory() {
SQLiteConnection conn = openConnection(false);
if (conn != null) {
try {
String travelBook = context.getSettings().SELECTED_TRAVEL_BOOK.get();
conn.execSQL("DELETE FROM " + HISTORY_TABLE_NAME +
" WHERE " + HISTORY_COL_TRAVEL_BOOK + " = ?",
new Object[]{travelBook});
} finally { } finally {
conn.close(); conn.close();
} }
@ -309,7 +349,9 @@ public class WikivoyageLocalDataHelper {
SQLiteConnection conn = openConnection(true); SQLiteConnection conn = openConnection(true);
if (conn != null) { if (conn != null) {
try { try {
SQLiteCursor cursor = conn.rawQuery(BOOKMARKS_TABLE_SELECT, null); String query = BOOKMARKS_TABLE_SELECT + " WHERE " + BOOKMARKS_COL_TRAVEL_BOOK + " = ?";
String travelBook = context.getSettings().SELECTED_TRAVEL_BOOK.get();
SQLiteCursor cursor = conn.rawQuery(query, new String[]{travelBook});
if (cursor.moveToFirst()) { if (cursor.moveToFirst()) {
do { do {
res.add(readSavedArticle(cursor)); res.add(readSavedArticle(cursor));
@ -326,9 +368,10 @@ public class WikivoyageLocalDataHelper {
SQLiteConnection conn = openConnection(false); SQLiteConnection conn = openConnection(false);
if (conn != null) { if (conn != null) {
try { try {
conn.execSQL("INSERT INTO " + BOOKMARKS_TABLE_NAME + " VALUES (?, ?, ?, ?, ?, ?)", String travelBook = context.getSettings().SELECTED_TRAVEL_BOOK.get();
conn.execSQL("INSERT INTO " + BOOKMARKS_TABLE_NAME + " VALUES (?, ?, ?, ?, ?, ?, ?)",
new Object[]{article.cityId, article.title, article.lang, new Object[]{article.cityId, article.title, article.lang,
article.aggregatedPartOf, article.imageTitle, article.content}); article.aggregatedPartOf, article.imageTitle, article.content, travelBook});
} finally { } finally {
conn.close(); conn.close();
} }
@ -339,10 +382,12 @@ public class WikivoyageLocalDataHelper {
SQLiteConnection conn = openConnection(false); SQLiteConnection conn = openConnection(false);
if (conn != null) { if (conn != null) {
try { try {
String travelBook = context.getSettings().SELECTED_TRAVEL_BOOK.get();
conn.execSQL("DELETE FROM " + BOOKMARKS_TABLE_NAME + conn.execSQL("DELETE FROM " + BOOKMARKS_TABLE_NAME +
" WHERE " + BOOKMARKS_COL_CITY_ID + " = ?" + " WHERE " + BOOKMARKS_COL_CITY_ID + " = ?" +
" AND " + BOOKMARKS_COL_LANG + " = ?", " AND " + BOOKMARKS_COL_LANG + " = ?" +
new Object[]{article.cityId, article.lang}); " AND " + BOOKMARKS_COL_TRAVEL_BOOK + " = ?",
new Object[]{article.cityId, article.lang, travelBook});
} finally { } finally {
conn.close(); conn.close();
} }