jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/403756 )
Change subject: Split large reading lists
......................................................................
Split large reading lists
- Split existing lists > 1000 on version update
- Split lists when articles are added, if they exceed 1000 counts
- Show UI feedback before splitting
Bug: T180229
Change-Id: I898ed21d884cce0474cee706b762b3e4d23267c4
---
A app/src/main/java/org/wikipedia/events/SplitLargeListsEvent.java
M app/src/main/java/org/wikipedia/main/MainActivity.java
M app/src/main/java/org/wikipedia/readinglist/database/ReadingListPageTable.java
M app/src/main/res/values-qq/strings.xml
M app/src/main/res/values/strings.xml
5 files changed, 79 insertions(+), 0 deletions(-)
Approvals:
Dbrant: Looks good to me, approved
jenkins-bot: Verified
diff --git a/app/src/main/java/org/wikipedia/events/SplitLargeListsEvent.java
b/app/src/main/java/org/wikipedia/events/SplitLargeListsEvent.java
new file mode 100644
index 0000000..f779056
--- /dev/null
+++ b/app/src/main/java/org/wikipedia/events/SplitLargeListsEvent.java
@@ -0,0 +1,4 @@
+package org.wikipedia.events;
+
+public class SplitLargeListsEvent {
+}
diff --git a/app/src/main/java/org/wikipedia/main/MainActivity.java
b/app/src/main/java/org/wikipedia/main/MainActivity.java
index 2454a32..6ed0e4a 100644
--- a/app/src/main/java/org/wikipedia/main/MainActivity.java
+++ b/app/src/main/java/org/wikipedia/main/MainActivity.java
@@ -1,16 +1,22 @@
package org.wikipedia.main;
import android.content.Context;
+import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
+import android.support.v7.app.AlertDialog;
import android.support.v7.view.ActionMode;
import android.view.View;
+import com.squareup.otto.Subscribe;
+
import org.wikipedia.R;
+import org.wikipedia.WikipediaApp;
import org.wikipedia.activity.SingleFragmentToolbarActivity;
import org.wikipedia.appshortcuts.AppShortcuts;
+import org.wikipedia.events.SplitLargeListsEvent;
import org.wikipedia.navtab.NavTab;
import org.wikipedia.onboarding.InitialOnboardingActivity;
import org.wikipedia.settings.Prefs;
@@ -23,6 +29,8 @@
return new Intent(context, MainActivity.class);
}
+ private EventBusMethods busMethods;
+
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -32,6 +40,14 @@
if (Prefs.isInitialOnboardingEnabled() && savedInstanceState == null) {
startActivity(InitialOnboardingActivity.newIntent(this));
}
+ busMethods = new EventBusMethods();
+ registerBus();
+ }
+
+ @Override
+ public void onDestroy() {
+ unregisterBus();
+ super.onDestroy();
}
@Override protected MainFragment createFragment() {
@@ -117,4 +133,29 @@
}
finish();
}
+
+ private void registerBus() {
+ WikipediaApp.getInstance().getBus().register(busMethods);
+ }
+
+ private void unregisterBus() {
+ if (WikipediaApp.getInstance().getBus() != null) {
+ WikipediaApp.getInstance().getBus().unregister(busMethods);
+ }
+ }
+
+ private class EventBusMethods {
+ @Subscribe
+ public void on(SplitLargeListsEvent event) {
+ showLargeListSplitMessage();
+ }
+ }
+
+ private void showLargeListSplitMessage() {
+ new AlertDialog.Builder(this)
+ .setMessage(R.string.split_reading_list_message)
+ .setPositiveButton(R.string.ok,
+ (DialogInterface dialogInterface, int i) ->
dialogInterface.dismiss())
+ .show();
+ }
}
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 262a842..5a1eccb 100644
---
a/app/src/main/java/org/wikipedia/readinglist/database/ReadingListPageTable.java
+++
b/app/src/main/java/org/wikipedia/readinglist/database/ReadingListPageTable.java
@@ -14,6 +14,7 @@
import org.wikipedia.database.contract.OldReadingListPageContract;
import org.wikipedia.database.contract.ReadingListPageContract;
import org.wikipedia.dataclient.WikiSite;
+import org.wikipedia.events.SplitLargeListsEvent;
import org.wikipedia.page.PageTitle;
import org.wikipedia.util.log.L;
@@ -23,6 +24,8 @@
public class ReadingListPageTable extends DatabaseTable<ReadingListPage> {
private static final int DB_VER_INTRODUCED = 18;
+ private static final int MAX_ARTICLE_LIMIT = 1000;
+ private boolean userLargeListsMessageShown = false;
public ReadingListPageTable() {
super(ReadingListPageContract.TABLE, ReadingListPageContract.URI);
@@ -190,6 +193,13 @@
}
}
}
+
+ for (ReadingList list : lists) {
+ if (list.pages().size() > MAX_ARTICLE_LIMIT) {
+ spiltLargeList(db, list, lists);
+ }
+ }
+
for (ReadingList list : lists) {
ReadingListDbHelper.instance().addPagesToList(db, list,
list.pages());
}
@@ -208,4 +218,24 @@
@NonNull private static String getListKey(@NonNull String title) {
return Base64.encodeToString(title.getBytes(), Base64.NO_WRAP);
}
+
+ private void spiltLargeList(SQLiteDatabase db, ReadingList readingList,
List<ReadingList> lists) {
+ if (!userLargeListsMessageShown) {
+ WikipediaApp.getInstance().getBus().post(new
SplitLargeListsEvent());
+ userLargeListsMessageShown = true;
+ }
+ int index = readingList.title().split("_").length == 1 ? 1 :
Integer.valueOf(readingList.title().split("_")[1]) + 1;
+ List<ReadingListPage> toBeAddedList = new ArrayList<>();
+ if (readingList.pages().size() <= MAX_ARTICLE_LIMIT) {
+ return;
+ }
+ for (int j = MAX_ARTICLE_LIMIT; j < readingList.pages().size(); j++) {
+ toBeAddedList.add(readingList.pages().get(j));
+ }
+ readingList.pages().removeAll(toBeAddedList);
+ ReadingList newList = ReadingListDbHelper.instance().createList(db,
String.format(WikipediaApp.getInstance().getString(R.string.split_list_name),
readingList.title().split("_")[0], index), readingList.description());
+ newList.pages().addAll(toBeAddedList);
+ lists.add(newList);
+ spiltLargeList(db, newList, lists);
+ }
}
diff --git a/app/src/main/res/values-qq/strings.xml
b/app/src/main/res/values-qq/strings.xml
index 5b5c33a..dfdb9a5 100644
--- a/app/src/main/res/values-qq/strings.xml
+++ b/app/src/main/res/values-qq/strings.xml
@@ -367,6 +367,8 @@
<string name="no_user_lists_title">Suggestion string for users to Organize
articles into lists</string>
<string name="no_user_lists_msg">Text explaining the advantages of creating
reading lists, to users</string>
<string name="reading_list_saved_list_rename">\"%1$s\" _[string indicating
that the list was created by user]</string>
+ <string name="split_list_name">Name string for the newly created lists from
the original large list that will be split. \"%1$s\" is the name of the
original list followed by _ and \"%2$d\" being the postfix number</string>
+ <string name="split_reading_list_message">Message shown to users with large
reading lists, informing them that this update will enforce an upper limit of
1000 articles per list and hence will be splitting already existing lists that
contain more than 1000 articles</string>
<plurals name="reading_list_article_offline_message">
<item quantity="one">Message shown when a single reading list article is
made available for offline use.</item>
<item quantity="other">Message shown when more than one reading list
article is made available for offline use.</item>
diff --git a/app/src/main/res/values/strings.xml
b/app/src/main/res/values/strings.xml
index 7f87d6c..8e5c3a4 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -392,6 +392,8 @@
<string name="no_user_lists_title">Organize articles into lists</string>
<string name="no_user_lists_msg">Create lists for places to travel to,
favorite topics, and much more</string>
<string name="reading_list_saved_list_rename">%1$s (user created)</string>
+ <string name="split_list_name">%1$s_%2$d</string>
+ <string name="split_reading_list_message">There is a limit of 1000
articles per synced reading list. Existing lists with more than this limit have
been split into multiple lists.</string>
<plurals name="reading_list_article_offline_message">
<item quantity="one">This article will now be available offline.</item>
<item quantity="other">These articles will now be available
offline.</item>
--
To view, visit https://gerrit.wikimedia.org/r/403756
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I898ed21d884cce0474cee706b762b3e4d23267c4
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Sharvaniharan <[email protected]>
Gerrit-Reviewer: Brion VIBBER <[email protected]>
Gerrit-Reviewer: Cooltey <[email protected]>
Gerrit-Reviewer: Dbrant <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits