jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/402104 )
Change subject: Move logic for creating Default list to database upgrade hook.
......................................................................
Move logic for creating Default list to database upgrade hook.
*** IMPORTANTZOMG: This changes the database contract without bumping the
database version. Any existing Dev and Alpha users will need to clear the
app data, otherwise they'll see unexpected behavior. ***
A couple of additional things going on here:
- Slightly updated the database upgrade logic such that the
onUpgradeSchema() method gets called for the initial version of a table,
as well as for subsequent versions.
- Removed the "synchronized" keyword from the methods in the DbHelper,
since they're not really necessary (the DbHelper doesn't actually have
any thread-unsafe state, and thread safety is guaranteed by the
SQLiteOpenHelper anyway), and it was causing problems when trying to add
rows to the db while inside the OnCreate() method.
Change-Id: Ia8985acc0ec498602bcb2c27d7cc14144dca05df
---
M app/src/main/java/org/wikipedia/database/DatabaseTable.java
M app/src/main/java/org/wikipedia/readinglist/AddToReadingListDialog.java
M app/src/main/java/org/wikipedia/readinglist/ReadingListItemView.java
M app/src/main/java/org/wikipedia/readinglist/database/ReadingList.java
M app/src/main/java/org/wikipedia/readinglist/database/ReadingListDbHelper.java
M app/src/main/java/org/wikipedia/readinglist/database/ReadingListPageTable.java
6 files changed, 61 insertions(+), 64 deletions(-)
Approvals:
Sharvaniharan: Looks good to me, approved
jenkins-bot: Verified
diff --git a/app/src/main/java/org/wikipedia/database/DatabaseTable.java
b/app/src/main/java/org/wikipedia/database/DatabaseTable.java
index 6186ec4..c1c057a 100644
--- a/app/src/main/java/org/wikipedia/database/DatabaseTable.java
+++ b/app/src/main/java/org/wikipedia/database/DatabaseTable.java
@@ -85,6 +85,7 @@
public void upgradeSchema(@NonNull SQLiteDatabase db, int fromVersion, int
toVersion) {
if (fromVersion < getDBVersionIntroducedAt()) {
createTables(db);
+ onUpgradeSchema(db, fromVersion, getDBVersionIntroducedAt());
}
for (int ver = Math.max(getDBVersionIntroducedAt(), fromVersion) + 1;
ver <= toVersion; ++ver) {
@@ -101,7 +102,7 @@
db.execSQL(alterTableString);
}
- upgradeSchema(db, ver);
+ onUpgradeSchema(db, ver - 1, ver);
}
}
@@ -109,7 +110,7 @@
return baseContentURI;
}
- protected void upgradeSchema(@NonNull SQLiteDatabase db, int toVersion) {
+ protected void onUpgradeSchema(@NonNull SQLiteDatabase db, int
fromVersion, int toVersion) {
}
private void createTables(@NonNull SQLiteDatabase db) {
diff --git
a/app/src/main/java/org/wikipedia/readinglist/AddToReadingListDialog.java
b/app/src/main/java/org/wikipedia/readinglist/AddToReadingListDialog.java
index 81f7f43..6dce4bf 100644
--- a/app/src/main/java/org/wikipedia/readinglist/AddToReadingListDialog.java
+++ b/app/src/main/java/org/wikipedia/readinglist/AddToReadingListDialog.java
@@ -8,7 +8,6 @@
import android.support.design.widget.BottomSheetBehavior;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
-import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -218,7 +217,7 @@
message = getString(R.string.reading_list_already_exists);
} else {
message =
String.format(getString(R.string.reading_list_added_to_named),
- TextUtils.isEmpty(readingList.title()) ?
getString(R.string.default_reading_list_name) : readingList.title());
+ readingList.isDefault() ?
getString(R.string.default_reading_list_name) : readingList.title());
new
ReadingListsFunnel(title.getWikiSite()).logAddToList(readingList,
readingLists.size(), invokeSource);
ReadingListDbHelper.instance().addPageToList(readingList,
title);
@@ -244,7 +243,8 @@
if (numAdded == 0) {
message =
getString(R.string.reading_list_already_contains_selection);
} else {
- message =
String.format(getString(R.string.reading_list_added_articles_list_titled),
numAdded, TextUtils.isEmpty(readingList.title()) ?
getString(R.string.default_reading_list_name) : readingList.title());
+ message =
String.format(getString(R.string.reading_list_added_articles_list_titled),
numAdded,
+ readingList.isDefault() ?
getString(R.string.default_reading_list_name) : readingList.title());
new ReadingListsFunnel().logAddToList(readingList,
readingLists.size(), invokeSource);
}
showViewListSnackBar(readingList, message);
diff --git
a/app/src/main/java/org/wikipedia/readinglist/ReadingListItemView.java
b/app/src/main/java/org/wikipedia/readinglist/ReadingListItemView.java
index d3a9934..97d86bd 100644
--- a/app/src/main/java/org/wikipedia/readinglist/ReadingListItemView.java
+++ b/app/src/main/java/org/wikipedia/readinglist/ReadingListItemView.java
@@ -130,7 +130,7 @@
PopupMenu menu = new PopupMenu(getContext(), anchorView);
menu.getMenuInflater().inflate(R.menu.menu_reading_list_item,
menu.getMenu());
- if (TextUtils.isEmpty(readingList.title())) {
+ if (readingList.isDefault()) {
MenuItem renameItem =
menu.getMenu().findItem(R.id.menu_reading_list_rename);
renameItem.setVisible(false);
MenuItem deleteItem =
menu.getMenu().findItem(R.id.menu_reading_list_delete);
@@ -155,7 +155,7 @@
if (readingList == null) {
return;
}
- titleView.setText(TextUtils.isEmpty(readingList.title())
+ titleView.setText(readingList.isDefault()
? getString(R.string.default_reading_list_name)
: readingList.title());
if (TextUtils.isEmpty(readingList.description()) &&
showDescriptionEmptyHint) {
@@ -177,7 +177,7 @@
if (readingList == null) {
return;
}
-
defaultListEmptyView.setVisibility((TextUtils.isEmpty(readingList.title()) &&
readingList.pages().size() == 0) ? VISIBLE : GONE);
+ defaultListEmptyView.setVisibility((readingList.isDefault() &&
readingList.pages().size() == 0) ? VISIBLE : GONE);
imageContainer.setVisibility(defaultListEmptyView.getVisibility() ==
VISIBLE ? GONE : VISIBLE);
clearThumbnails();
List<String> thumbUrls = new ArrayList<>();
diff --git
a/app/src/main/java/org/wikipedia/readinglist/database/ReadingList.java
b/app/src/main/java/org/wikipedia/readinglist/database/ReadingList.java
index 343ec5d..b996c16 100644
--- a/app/src/main/java/org/wikipedia/readinglist/database/ReadingList.java
+++ b/app/src/main/java/org/wikipedia/readinglist/database/ReadingList.java
@@ -2,6 +2,7 @@
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
+import android.text.TextUtils;
import java.util.ArrayList;
import java.util.Collections;
@@ -47,6 +48,10 @@
return count;
}
+ public boolean isDefault() {
+ return TextUtils.isEmpty(title);
+ }
+
public long id() {
return id;
}
diff --git
a/app/src/main/java/org/wikipedia/readinglist/database/ReadingListDbHelper.java
b/app/src/main/java/org/wikipedia/readinglist/database/ReadingListDbHelper.java
index aa0767d..3b90199 100644
---
a/app/src/main/java/org/wikipedia/readinglist/database/ReadingListDbHelper.java
+++
b/app/src/main/java/org/wikipedia/readinglist/database/ReadingListDbHelper.java
@@ -1,14 +1,11 @@
package org.wikipedia.readinglist.database;
import android.content.ContentValues;
-import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
-import android.text.TextUtils;
-import org.wikipedia.R;
import org.wikipedia.WikipediaApp;
import org.wikipedia.database.contract.ReadingListContract;
import org.wikipedia.database.contract.ReadingListPageContract;
@@ -22,7 +19,6 @@
public class ReadingListDbHelper {
private static ReadingListDbHelper INSTANCE;
- private Context context = WikipediaApp.getInstance();
public static ReadingListDbHelper instance() {
if (INSTANCE == null) {
@@ -31,7 +27,7 @@
return INSTANCE;
}
- public synchronized List<ReadingList> getAllLists() {
+ public List<ReadingList> getAllLists() {
List<ReadingList> lists = new ArrayList<>();
SQLiteDatabase db = getReadableDatabase();
try (Cursor cursor = db.query(ReadingListContract.TABLE, null, null,
null, null, null, null)) {
@@ -40,34 +36,13 @@
lists.add(list);
}
}
- oneTimeDefaultListSyncSetUp(lists, db);
-
for (ReadingList list : lists) {
populateListPages(db, list);
}
return lists;
}
- private void oneTimeDefaultListSyncSetUp(List<ReadingList> lists,
SQLiteDatabase db) {
- checkForDefaultListAndAddIfNeeded(lists, db);
- }
-
- private void checkForDefaultListAndAddIfNeeded(List<ReadingList> lists,
SQLiteDatabase db) {
- if (lists.size() == 0 || !listCollectionContainsDefault(lists)) {
- lists.add(createList("",
context.getString(R.string.default_reading_list_description)));
- }
- }
-
- private boolean listCollectionContainsDefault(List<ReadingList> lists) {
- for (ReadingList list : lists) {
- if (TextUtils.isEmpty(list.title())) {
- return true;
- }
- }
- return false;
- }
-
- public synchronized List<ReadingList> getAllListsWithoutContents() {
+ public List<ReadingList> getAllListsWithoutContents() {
List<ReadingList> lists = new ArrayList<>();
SQLiteDatabase db = getReadableDatabase();
try (Cursor cursor = db.query(ReadingListContract.TABLE, null, null,
null, null, null, null)) {
@@ -80,13 +55,13 @@
}
@NonNull
- public synchronized ReadingList createList(@NonNull String title,
@Nullable String description) {
+ public ReadingList createList(@NonNull String title, @Nullable String
description) {
SQLiteDatabase db = getWritableDatabase();
return createList(db, title, description);
}
@NonNull
- public synchronized ReadingList createList(@NonNull SQLiteDatabase db,
@NonNull String title, @Nullable String description) {
+ public ReadingList createList(@NonNull SQLiteDatabase db, @NonNull String
title, @Nullable String description) {
db.beginTransaction();
try {
ReadingList protoList = new ReadingList(title, description);
@@ -100,7 +75,7 @@
}
}
- public synchronized void updateList(@NonNull ReadingList list) {
+ public void updateList(@NonNull ReadingList list) {
SQLiteDatabase db = getWritableDatabase();
db.beginTransaction();
try {
@@ -117,7 +92,7 @@
}
}
- public synchronized void deleteList(@NonNull ReadingList list) {
+ public void deleteList(@NonNull ReadingList list) {
SQLiteDatabase db = getWritableDatabase();
db.beginTransaction();
try {
@@ -132,7 +107,7 @@
}
}
- public synchronized void addPageToList(@NonNull ReadingList list, @NonNull
PageTitle title) {
+ public void addPageToList(@NonNull ReadingList list, @NonNull PageTitle
title) {
SQLiteDatabase db = getWritableDatabase();
db.beginTransaction();
try {
@@ -144,12 +119,12 @@
SavedPageSyncService.enqueue();
}
- public synchronized void addPagesToList(@NonNull ReadingList list,
@NonNull List<ReadingListPage> pages) {
+ public void addPagesToList(@NonNull ReadingList list, @NonNull
List<ReadingListPage> pages) {
SQLiteDatabase db = getWritableDatabase();
addPagesToList(db, list, pages);
}
- public synchronized void addPagesToList(@NonNull SQLiteDatabase db,
@NonNull ReadingList list, @NonNull List<ReadingListPage> pages) {
+ public void addPagesToList(@NonNull SQLiteDatabase db, @NonNull
ReadingList list, @NonNull List<ReadingListPage> pages) {
db.beginTransaction();
try {
for (ReadingListPage page : pages) {
@@ -162,7 +137,7 @@
SavedPageSyncService.enqueue();
}
- public synchronized int addPagesToListIfNotExist(@NonNull ReadingList
list, @NonNull List<PageTitle> titles) {
+ public int addPagesToListIfNotExist(@NonNull ReadingList list, @NonNull
List<PageTitle> titles) {
SQLiteDatabase db = getWritableDatabase();
db.beginTransaction();
int numAdded = 0;
@@ -182,7 +157,7 @@
return numAdded;
}
- public synchronized void markPageForDeletion(@NonNull ReadingListPage
page) {
+ public void markPageForDeletion(@NonNull ReadingListPage page) {
SQLiteDatabase db = getWritableDatabase();
db.beginTransaction();
try {
@@ -195,7 +170,7 @@
SavedPageSyncService.enqueue();
}
- public synchronized void markPagesForDeletion(@NonNull
List<ReadingListPage> pages) {
+ public void markPagesForDeletion(@NonNull List<ReadingListPage> pages) {
SQLiteDatabase db = getWritableDatabase();
db.beginTransaction();
try {
@@ -210,7 +185,7 @@
SavedPageSyncService.enqueue();
}
- public synchronized void markPageForOffline(@NonNull ReadingListPage page,
boolean offline) {
+ public void markPageForOffline(@NonNull ReadingListPage page, boolean
offline) {
if (page.offline() == offline) {
return;
}
@@ -226,7 +201,7 @@
SavedPageSyncService.enqueue();
}
- public synchronized void markPagesForOffline(@NonNull
List<ReadingListPage> pages, boolean offline) {
+ public void markPagesForOffline(@NonNull List<ReadingListPage> pages,
boolean offline) {
SQLiteDatabase db = getWritableDatabase();
db.beginTransaction();
try {
@@ -244,7 +219,7 @@
SavedPageSyncService.enqueue();
}
- public synchronized void updatePage(@NonNull ReadingListPage page) {
+ public void updatePage(@NonNull ReadingListPage page) {
SQLiteDatabase db = getWritableDatabase();
db.beginTransaction();
try {
@@ -279,7 +254,7 @@
}
@Nullable
- public synchronized ReadingListPage getRandomPage() {
+ public ReadingListPage getRandomPage() {
SQLiteDatabase db = getReadableDatabase();
try (Cursor cursor = db.query(ReadingListPageContract.TABLE, null,
ReadingListPageContract.Col.STATUS.getName() + " != ?",
@@ -294,7 +269,7 @@
}
@Nullable
- public synchronized ReadingListPage findPageInAnyList(@NonNull PageTitle
title) {
+ public ReadingListPage findPageInAnyList(@NonNull PageTitle title) {
SQLiteDatabase db = getReadableDatabase();
try (Cursor cursor = db.query(ReadingListPageContract.TABLE, null,
ReadingListPageContract.Col.SITE.getName() + " = ? AND "
@@ -313,13 +288,13 @@
return null;
}
- public synchronized boolean pageExistsInList(@NonNull ReadingList list,
@NonNull PageTitle title) {
+ public boolean pageExistsInList(@NonNull ReadingList list, @NonNull
PageTitle title) {
SQLiteDatabase db = getReadableDatabase();
return pageExistsInList(db, list, title);
}
@NonNull
- public synchronized List<ReadingListPage> getAllPageOccurrences(@NonNull
PageTitle title) {
+ public List<ReadingListPage> getAllPageOccurrences(@NonNull PageTitle
title) {
List<ReadingListPage> pages = new ArrayList<>();
SQLiteDatabase db = getReadableDatabase();
try (Cursor cursor = db.query(ReadingListPageContract.TABLE, null,
@@ -340,7 +315,7 @@
}
@NonNull
- public synchronized List<ReadingList> getListsFromPageOccurrences(@NonNull
List<ReadingListPage> pages) {
+ public List<ReadingList> getListsFromPageOccurrences(@NonNull
List<ReadingListPage> pages) {
List<ReadingList> lists = new ArrayList<>();
SQLiteDatabase db = getReadableDatabase();
List<Long> listIds = new ArrayList<>();
@@ -369,7 +344,7 @@
}
@NonNull
- public synchronized List<ReadingListPage> getAllPagesToBeSaved() {
+ public List<ReadingListPage> getAllPagesToBeSaved() {
List<ReadingListPage> pages = new ArrayList<>();
SQLiteDatabase db = getReadableDatabase();
try (Cursor cursor = db.query(ReadingListPageContract.TABLE, null,
@@ -384,7 +359,7 @@
return pages;
}
- public synchronized List<ReadingListPage> getAllPagesToBeUnsaved() {
+ public List<ReadingListPage> getAllPagesToBeUnsaved() {
List<ReadingListPage> pages = new ArrayList<>();
SQLiteDatabase db = getReadableDatabase();
try (Cursor cursor = db.query(ReadingListPageContract.TABLE, null,
@@ -400,7 +375,7 @@
}
@NonNull
- public synchronized List<ReadingListPage> getAllPagesToBeDeleted() {
+ public List<ReadingListPage> getAllPagesToBeDeleted() {
List<ReadingListPage> pages = new ArrayList<>();
SQLiteDatabase db = getReadableDatabase();
try (Cursor cursor = db.query(ReadingListPageContract.TABLE, null,
@@ -414,7 +389,7 @@
return pages;
}
- public synchronized void resetUnsavedPageStatus() {
+ public void resetUnsavedPageStatus() {
SQLiteDatabase db = getWritableDatabase();
db.beginTransaction();
try {
@@ -431,7 +406,7 @@
}
}
- public synchronized void purgeDeletedPages() {
+ public void purgeDeletedPages() {
SQLiteDatabase db = getWritableDatabase();
db.beginTransaction();
try {
@@ -446,7 +421,7 @@
}
@Nullable
- public synchronized ReadingList getFullListById(long id) {
+ public ReadingList getFullListById(long id) {
SQLiteDatabase db = getReadableDatabase();
ReadingList list = null;
try (Cursor cursor = db.query(ReadingListContract.TABLE, null,
diff --git
a/app/src/main/java/org/wikipedia/readinglist/database/ReadingListPageTable.java
b/app/src/main/java/org/wikipedia/readinglist/database/ReadingListPageTable.java
index 2dee453..0f4f6f7 100644
---
a/app/src/main/java/org/wikipedia/readinglist/database/ReadingListPageTable.java
+++
b/app/src/main/java/org/wikipedia/readinglist/database/ReadingListPageTable.java
@@ -6,6 +6,8 @@
import android.support.annotation.NonNull;
import android.util.Base64;
+import org.wikipedia.R;
+import org.wikipedia.WikipediaApp;
import org.wikipedia.database.DatabaseTable;
import org.wikipedia.database.column.Column;
import org.wikipedia.database.contract.OldReadingListContract;
@@ -72,10 +74,14 @@
}
@Override
- public void upgradeSchema(@NonNull SQLiteDatabase db, int fromVersion, int
toVersion) {
- super.upgradeSchema(db, fromVersion, toVersion);
+ public void onUpgradeSchema(@NonNull SQLiteDatabase db, int fromVersion,
int toVersion) {
if (toVersion == DB_VER_INTRODUCED) {
- importOldLists(db);
+ List<ReadingList> currentLists = new ArrayList<>();
+ if (fromVersion > 0) {
+ importOldLists(db, currentLists);
+ }
+ createDefaultList(db, currentLists);
+ // TODO: add other one-time conversions here.
}
}
@@ -111,10 +117,20 @@
return DB_VER_INTRODUCED;
}
+ private void createDefaultList(@NonNull SQLiteDatabase db, @NonNull
List<ReadingList> currentLists) {
+ for (ReadingList list : currentLists) {
+ if (list.isDefault()) {
+ // Already have a default list
+ return;
+ }
+ }
+ currentLists.add(ReadingListDbHelper.instance().createList(db, "",
+
WikipediaApp.getInstance().getString(R.string.default_reading_list_description)));
+ }
+
// TODO: Remove in Dec 2018
- private void importOldLists(@NonNull SQLiteDatabase db) {
+ private void importOldLists(@NonNull SQLiteDatabase db, @NonNull
List<ReadingList> lists) {
try {
- List<ReadingList> lists = new ArrayList<>();
try (Cursor cursor = db.query(OldReadingListContract.TABLE, null,
null, null, null, null, null)) {
while (cursor.moveToNext()) {
ReadingList list = new
ReadingList(OldReadingListContract.Col.TITLE.val(cursor),
--
To view, visit https://gerrit.wikimedia.org/r/402104
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ia8985acc0ec498602bcb2c27d7cc14144dca05df
Gerrit-PatchSet: 3
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Dbrant <[email protected]>
Gerrit-Reviewer: Brion VIBBER <[email protected]>
Gerrit-Reviewer: Cooltey <[email protected]>
Gerrit-Reviewer: Sharvaniharan <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits