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 <dbr...@wikimedia.org>
Gerrit-Reviewer: Brion VIBBER <br...@wikimedia.org>
Gerrit-Reviewer: Cooltey <cf...@wikimedia.org>
Gerrit-Reviewer: Sharvaniharan <sha...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to