Dbrant has uploaded a new change for review. (
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(-)
git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia
refs/changes/55/343755/1
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: newchange
Gerrit-Change-Id: I361391bde576dcd0d34222d1c0116818a8addafe
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Dbrant <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits