jenkins-bot has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/343755 )

Change subject: Allow toggling reading list articles for on/offline.
......................................................................


Allow toggling reading list articles for on/offline.

- Remove any remaining logic pertaining to list-wide offline state.
- Hook up the "action" button in each reading list page item that toggles
  the page's offline state.
- Add long-press hints and snackbar messages for offline and online state.

TODO: Although this basically implements variant A of the design mocks, we
eventually want to work towards building variant C. This patch is simply
an intermediate step towards that final implementation (and is acceptable
for a maintenance release).

Bug: T160431
Bug: T160705
Change-Id: I361391bde576dcd0d34222d1c0116818a8addafe
---
M app/src/main/java/org/wikipedia/page/PageFragment.java
M app/src/main/java/org/wikipedia/readinglist/ReadingList.java
M app/src/main/java/org/wikipedia/readinglist/ReadingListData.java
M app/src/main/java/org/wikipedia/readinglist/ReadingListFragment.java
M app/src/main/java/org/wikipedia/readinglist/page/ReadingListPage.java
M 
app/src/main/java/org/wikipedia/readinglist/page/database/ReadingListDaoProxy.java
M app/src/main/java/org/wikipedia/views/PageItemView.java
A app/src/main/res/drawable/ic_download_circle_black_24px.xml
M app/src/main/res/values-qq/strings.xml
M app/src/main/res/values/strings.xml
10 files changed, 48 insertions(+), 32 deletions(-)

Approvals:
  jenkins-bot: Verified
  Mholloway: Looks good to me, approved



diff --git a/app/src/main/java/org/wikipedia/page/PageFragment.java 
b/app/src/main/java/org/wikipedia/page/PageFragment.java
index 2a728cb..a2ff730 100755
--- a/app/src/main/java/org/wikipedia/page/PageFragment.java
+++ b/app/src/main/java/org/wikipedia/page/PageFragment.java
@@ -659,7 +659,7 @@
                             pageActionTabsCallback.updateBookmark(true);
                             page.touch();
                             ReadingListPageDao.instance().upsert(page);
-                            if (page.savedOrSaving()) {
+                            if (page.isOffline()) {
                                 // TODO: mark the page outdated only if the 
revision ID from the server
                                 // is newer than the one on disk.
                                 
ReadingListPageDao.instance().markOutdated(page);
diff --git a/app/src/main/java/org/wikipedia/readinglist/ReadingList.java 
b/app/src/main/java/org/wikipedia/readinglist/ReadingList.java
index 2373213..d09799c 100644
--- a/app/src/main/java/org/wikipedia/readinglist/ReadingList.java
+++ b/app/src/main/java/org/wikipedia/readinglist/ReadingList.java
@@ -20,7 +20,6 @@
 
 public final class ReadingList extends ReadingListRow {
     @NonNull private final List<ReadingListPage> pages;
-    private boolean emptyListSavePagesState = true;
 
     public static ReadingList fromCursor(@NonNull Cursor cursor) {
         ReadingListRow list = ReadingList.DATABASE_TABLE.fromCursor(cursor);
@@ -80,27 +79,6 @@
 
     public void setDescription(@NonNull String description) {
         description(description);
-    }
-
-    public void setSaveOffline(boolean saved) {
-        emptyListSavePagesState = saved;
-
-        for (ReadingListPage page : pages) {
-            page.savedOrSaving(saved);
-        }
-    }
-
-    public boolean getSaveOffline() {
-        if (pages.isEmpty()) {
-            return emptyListSavePagesState;
-        }
-
-        for (ReadingListPage page : pages) {
-            if (!page.savedOrSaving()) {
-                return false;
-            }
-        }
-        return true;
     }
 
     public void sort(int sortMode) {
diff --git a/app/src/main/java/org/wikipedia/readinglist/ReadingListData.java 
b/app/src/main/java/org/wikipedia/readinglist/ReadingListData.java
index a10dde5..3a456f6 100644
--- a/app/src/main/java/org/wikipedia/readinglist/ReadingListData.java
+++ b/app/src/main/java/org/wikipedia/readinglist/ReadingListData.java
@@ -156,6 +156,11 @@
         }
     }
 
+    public synchronized void setPageOffline(@NonNull ReadingListPage page, 
boolean offline) {
+        page.setOffline(offline);
+        ReadingListPageDao.instance().upsert(page);
+    }
+
     public synchronized void removeList(@NonNull ReadingList list) {
         listClient().delete(list, 
listClient().getPrimaryKeySelectionArgs(list));
         for (ReadingListPage page : list.getPages()) {
diff --git 
a/app/src/main/java/org/wikipedia/readinglist/ReadingListFragment.java 
b/app/src/main/java/org/wikipedia/readinglist/ReadingListFragment.java
index 455af8b..0c2385c 100644
--- a/app/src/main/java/org/wikipedia/readinglist/ReadingListFragment.java
+++ b/app/src/main/java/org/wikipedia/readinglist/ReadingListFragment.java
@@ -391,6 +391,13 @@
         }
     }
 
+    private void setPageItemViewState(@NonNull PageItemView view, @NonNull 
ReadingListPage page) {
+        view.setActionIcon(page.isOffline() ? 
R.drawable.ic_offline_pin_black_24dp
+                : R.drawable.ic_download_circle_black_24px);
+        view.setActionHint(page.isOffline() ? 
R.string.reading_list_article_remove_offline
+                : R.string.reading_list_article_make_offline);
+    }
+
     private class AppBarListener implements 
AppBarLayout.OnOffsetChangedListener {
         @Override
         public void onOffsetChanged(AppBarLayout appBarLayout, int 
verticalOffset) {
@@ -438,11 +445,11 @@
         void bindItem(ReadingListPage page) {
             this.page = page;
             getView().setItem(page);
-            getView().setActionIcon(R.drawable.ic_offline_pin_black_24dp);
             getView().setTitle(page.title());
             getView().setDescription(page.description());
             getView().setImageUrl(page.thumbnailUrl());
             getView().setSelected(page.isSelected());
+            setPageItemViewState(getView(), page);
         }
 
         @Override
@@ -532,8 +539,14 @@
         }
 
         @Override
-        public void onActionClick(@Nullable ReadingListPage item) {
-            // TODO
+        public void onActionClick(@Nullable ReadingListPage page, @NonNull 
PageItemView view) {
+            if (page != null) {
+                ReadingListData.instance().setPageOffline(page, 
!page.isOffline());
+                setPageItemViewState(view, page);
+                FeedbackUtil.showMessage(getActivity(), page.isOffline()
+                        ? R.string.reading_list_article_offline_message
+                        : R.string.reading_list_article_not_offline_message);
+            }
         }
     }
 
diff --git 
a/app/src/main/java/org/wikipedia/readinglist/page/ReadingListPage.java 
b/app/src/main/java/org/wikipedia/readinglist/page/ReadingListPage.java
index 8de2228..5f56309 100644
--- a/app/src/main/java/org/wikipedia/readinglist/page/ReadingListPage.java
+++ b/app/src/main/java/org/wikipedia/readinglist/page/ReadingListPage.java
@@ -37,12 +37,12 @@
         return filename;
     }
 
-    public boolean savedOrSaving() {
+    public boolean isOffline() {
         return diskStatus.savedOrSaving();
     }
 
-    public void savedOrSaving(boolean saved) {
-        if (saved) {
+    public void setOffline(boolean offline) {
+        if (offline) {
             diskStatus = diskStatus == DiskStatus.SAVED ? DiskStatus.SAVED : 
DiskStatus.OUTDATED;
         } else {
             diskStatus = diskStatus == DiskStatus.ONLINE ? DiskStatus.ONLINE : 
DiskStatus.UNSAVED;
diff --git 
a/app/src/main/java/org/wikipedia/readinglist/page/database/ReadingListDaoProxy.java
 
b/app/src/main/java/org/wikipedia/readinglist/page/database/ReadingListDaoProxy.java
index dacf690..5932e26 100644
--- 
a/app/src/main/java/org/wikipedia/readinglist/page/database/ReadingListDaoProxy.java
+++ 
b/app/src/main/java/org/wikipedia/readinglist/page/database/ReadingListDaoProxy.java
@@ -30,7 +30,7 @@
         long now = System.currentTimeMillis();
         return ReadingListPage
                 .builder()
-                .diskStatus(list.getSaveOffline() ? DiskStatus.OUTDATED : 
DiskStatus.ONLINE)
+                .diskStatus(DiskStatus.OUTDATED)
                 .key(key(title))
                 .listKeys(listKey(list))
                 .site(title.getWikiSite())
diff --git a/app/src/main/java/org/wikipedia/views/PageItemView.java 
b/app/src/main/java/org/wikipedia/views/PageItemView.java
index 939c0dd..ae12c8f 100644
--- a/app/src/main/java/org/wikipedia/views/PageItemView.java
+++ b/app/src/main/java/org/wikipedia/views/PageItemView.java
@@ -33,7 +33,7 @@
         void onClick(@Nullable T item);
         boolean onLongClick(@Nullable T item);
         void onThumbClick(@Nullable T item);
-        void onActionClick(@Nullable T item);
+        void onActionClick(@Nullable T item, @NonNull PageItemView view);
     }
 
     @BindView(R.id.page_list_item_title) TextView titleView;
@@ -108,7 +108,7 @@
 
     @OnClick(R.id.page_list_item_action_button) void onActionClick() {
         if (callback != null) {
-            callback.onActionClick(item);
+            callback.onActionClick(item, this);
         }
     }
 
diff --git a/app/src/main/res/drawable/ic_download_circle_black_24px.xml 
b/app/src/main/res/drawable/ic_download_circle_black_24px.xml
new file mode 100644
index 0000000..ddfb9e3
--- /dev/null
+++ b/app/src/main/res/drawable/ic_download_circle_black_24px.xml
@@ -0,0 +1,12 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android";
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:pathData="m16.976,10.149 l-2.852,0 0,-4.278 -4.278,0 0,4.278 
-2.852,0 4.99,4.99zM6.995,16.224 L6.995,17.65 16.976,17.65 16.976,16.224z"
+        android:fillColor="#000000"/>
+    <path
+        android:pathData="m11.943,2.029c-5.52,0 -10,4.48 -10,10 0,5.52 4.48,10 
10,10 5.52,0 10,-4.48 10,-10 0,-5.52 -4.48,-10 -10,-10zM11.943,20.029c-4.42,0 
-8,-3.58 -8,-8 0,-4.42 3.58,-8 8,-8 4.42,0 8,3.58 8,8 0,4.42 -3.58,8 -8,8z"
+        android:fillColor="#000000"/>
+</vector>
diff --git a/app/src/main/res/values-qq/strings.xml 
b/app/src/main/res/values-qq/strings.xml
index d8cf254..53c5e17 100644
--- a/app/src/main/res/values-qq/strings.xml
+++ b/app/src/main/res/values-qq/strings.xml
@@ -439,6 +439,10 @@
   <string name="reading_lists_onboarding_page_delete">Message for a tooltip 
that gives the user a hint that they can remove an page from a reading list by 
swiping it left or right.</string>
   <string name="reading_list_no_description">Text to show when the reading 
list does not have a description.</string>
   <string name="reading_list_empty">Message shown when a reading list does not 
contain any articles.</string>
+  <string name="reading_list_article_make_offline">Hint for button that makes 
a reading list article available for offline use.</string>
+  <string name="reading_list_article_remove_offline">Hint for button that 
removes a reading list article from offline availability.</string>
+  <string name="reading_list_article_offline_message">Message shown when a 
reading list article is made available for offline use.</string>
+  <string name="reading_list_article_not_offline_message">Message shown when a 
reading list article is removed from offline availability.</string>
   <string name="user_option_sync_label">Checkbox title for Wikimedia account 
preference synchronization.
 {{Identical|Preferences}}</string>
   <string name="notification_button_view_page">Button label for navigating to 
the page that is the subject of the notification.</string>
diff --git a/app/src/main/res/values/strings.xml 
b/app/src/main/res/values/strings.xml
index 216ad6f..091ea68 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -321,6 +321,10 @@
     <string name="reading_lists_onboarding_page_delete">Tip: Swipe any page 
left or right to remove it from this reading list.</string>
     <string name="reading_list_no_description">No description…</string>
     <string name="reading_list_empty">You have no articles added to this 
list.</string>
+    <string name="reading_list_article_make_offline">Make this article 
available offline</string>
+    <string name="reading_list_article_remove_offline">Don\'t make this 
article available offline</string>
+    <string name="reading_list_article_offline_message">This article will now 
be available offline.</string>
+    <string name="reading_list_article_not_offline_message">This article will 
no longer be available offline.</string>
     <!-- /Reading lists -->
 
     <!-- User options -->

-- 
To view, visit https://gerrit.wikimedia.org/r/343755
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I361391bde576dcd0d34222d1c0116818a8addafe
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Dbrant <[email protected]>
Gerrit-Reviewer: Brion VIBBER <[email protected]>
Gerrit-Reviewer: Mholloway <[email protected]>
Gerrit-Reviewer: Niedzielski <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to