jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/353350 )
Change subject: Warn user before setting a page appearing in multiple lists to
online-only
......................................................................
Warn user before setting a page appearing in multiple lists to online-only
Bug: T162268
Change-Id: Ief466c6c0acac951036866b79d531daac596a38c
---
M app/src/main/java/org/wikipedia/readinglist/ReadingListFragment.java
M app/src/main/res/values-qq/strings.xml
M app/src/main/res/values/strings.xml
3 files changed, 77 insertions(+), 6 deletions(-)
Approvals:
Niedzielski: Looks good to me, approved
jenkins-bot: Verified
diff --git
a/app/src/main/java/org/wikipedia/readinglist/ReadingListFragment.java
b/app/src/main/java/org/wikipedia/readinglist/ReadingListFragment.java
index 3d90bb2..6839ef0 100644
--- a/app/src/main/java/org/wikipedia/readinglist/ReadingListFragment.java
+++ b/app/src/main/java/org/wikipedia/readinglist/ReadingListFragment.java
@@ -1,5 +1,6 @@
package org.wikipedia.readinglist;
+import android.content.DialogInterface;
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.NonNull;
@@ -8,12 +9,14 @@
import android.support.design.widget.CollapsingToolbarLayout;
import android.support.design.widget.Snackbar;
import android.support.v4.app.Fragment;
+import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.view.ActionMode;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.support.v7.widget.helper.ItemTouchHelper;
+import android.text.Spanned;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.Menu;
@@ -41,6 +44,7 @@
import org.wikipedia.util.FeedbackUtil;
import org.wikipedia.util.ResourceUtil;
import org.wikipedia.util.ShareUtil;
+import org.wikipedia.util.StringUtil;
import org.wikipedia.views.DefaultViewHolder;
import org.wikipedia.views.DrawableItemDecoration;
import org.wikipedia.views.MultiSelectActionModeCallback;
@@ -419,12 +423,13 @@
@Override
public void onToggleOffline(int pageIndex) {
ReadingListPage page = readingList == null ? null :
readingList.get(pageIndex);
- if (page != null) {
- ReadingListData.instance().setPageOffline(page, !page.isOffline());
- FeedbackUtil.showMessage(getActivity(), page.isOffline()
- ? R.string.reading_list_article_offline_message
- : R.string.reading_list_article_not_offline_message);
- adapter.notifyDataSetChanged();
+ if (page == null) {
+ return;
+ }
+ if (page.isOffline()) {
+ ReadingList.DAO.anyListContainsTitleAsync(page.key(), new
PageListCountCallback(page));
+ } else {
+ toggleOffline(page);
}
}
@@ -450,6 +455,42 @@
public void onDelete(int pageIndex) {
ReadingListPage page = readingList == null ? null :
readingList.get(pageIndex);
deleteSinglePage(page);
+ }
+
+ private void toggleOffline(@NonNull ReadingListPage page) {
+ ReadingListData.instance().setPageOffline(page, !page.isOffline());
+ if (getActivity() != null) {
+ FeedbackUtil.showMessage(getActivity(), page.isOffline()
+ ? R.string.reading_list_article_offline_message
+ : R.string.reading_list_article_not_offline_message);
+ adapter.notifyDataSetChanged();
+ }
+ }
+
+ @SuppressWarnings("checkstyle:magicnumber")
+ private void showMultiListPageConfirmToggleDialog(@NonNull final
ReadingListPage page) {
+ if (getActivity() == null) {
+ return;
+ }
+ AlertDialog dialog = new AlertDialog.Builder(getContext())
+
.setTitle(R.string.reading_list_confirm_remove_article_from_offline_title)
+ .setMessage(getConfirmToggleOfflineMessage(page))
+
.setPositiveButton(R.string.reading_list_confirm_remove_article_from_offline,
+ new ConfirmRemoveFromOfflineListener(page))
+ .setNegativeButton(android.R.string.cancel, null)
+ .create();
+ dialog.show();
+ TextView text = (TextView) dialog.findViewById(android.R.id.message);
+ text.setLineSpacing(0, 1.3f);
+ }
+
+ @NonNull private Spanned getConfirmToggleOfflineMessage(@NonNull
ReadingListPage page) {
+ String result =
getString(R.string.reading_list_confirm_remove_article_from_offline_message,
+ "<b>" + page.title() + "</b>");
+ for (String key : page.listKeys()) {
+ result += "<br> <b>• " +
ReadingListDaoProxy.listName(key) + "</b>";
+ }
+ return StringUtil.fromHtml(result);
}
private class AppBarListener implements
AppBarLayout.OnOffsetChangedListener {
@@ -645,4 +686,28 @@
super.onDestroyActionMode(mode);
}
}
+
+ private final class PageListCountCallback implements
CallbackTask.Callback<ReadingListPage> {
+ private ReadingListPage page;
+ private PageListCountCallback(@NonNull ReadingListPage page) {
+ this.page = page;
+ }
+ @Override public void success(ReadingListPage fromDb) {
+ if (fromDb.listKeys().size() > 1) {
+ showMultiListPageConfirmToggleDialog(page);
+ } else {
+ toggleOffline(page);
+ }
+ }
+ }
+
+ private final class ConfirmRemoveFromOfflineListener implements
DialogInterface.OnClickListener {
+ private ReadingListPage page;
+ private ConfirmRemoveFromOfflineListener(@NonNull ReadingListPage
page) {
+ this.page = page;
+ }
+ @Override public void onClick(DialogInterface dialog, int which) {
+ toggleOffline(page);
+ }
+ }
}
diff --git a/app/src/main/res/values-qq/strings.xml
b/app/src/main/res/values-qq/strings.xml
index bf4ae07..b3768af 100644
--- a/app/src/main/res/values-qq/strings.xml
+++ b/app/src/main/res/values-qq/strings.xml
@@ -446,6 +446,9 @@
<string name="reading_list_add_to_other_list">Menu item to add an article to
another reading list (when the article already exists in one or more
lists).</string>
<string name="reading_list_remove_from_list">Menu item to remove an article
from a specific reading list. The %s symbol is replaced with the name of the
reading list.</string>
<string name="reading_list_remove_from_lists">Menu item to remove an article
from multiple reading lists to which it might belong.</string>
+ <string name="reading_list_confirm_remove_article_from_offline">Label for a
dialog button confirming that the user wants to remove the selected list from
offline availability for all reading lists.</string>
+ <string name="reading_list_confirm_remove_article_from_offline_title">Title
for a dialog warning the user that the page the user has selected to remove
from offline availability appears in multiple lists.</string>
+ <string
name="reading_list_confirm_remove_article_from_offline_message">Message for a
dialog warning the user that the page the user has selected to remove from
offline availability appears in multiple lists. The names of the lists appear
below. The \"%s\" symbol is the title of the page of the user selected to
remove.</string>
<string name="user_option_sync_label">Checkbox title for Wikimedia account
preference synchronization.
{{Identical|Preferences}}</string>
<string name="notification_button_view_user">Button label for navigating to
the talk page of the user who is the agent of the notification.</string>
diff --git a/app/src/main/res/values/strings.xml
b/app/src/main/res/values/strings.xml
index 9db3cc4..7af728d 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -330,6 +330,9 @@
<string name="reading_list_add_to_other_list">Add to another reading
list</string>
<string name="reading_list_remove_from_list">Remove from %s</string>
<string name="reading_list_remove_from_lists">Remove from reading
lists</string>
+ <string name="reading_list_confirm_remove_article_from_offline">Remove
from offline</string>
+ <string
name="reading_list_confirm_remove_article_from_offline_title">Article appears
in multiple lists</string>
+ <string name="reading_list_confirm_remove_article_from_offline_message">%s
will no longer be available offline for all reading lists:</string>
<!-- /Reading lists -->
<!-- User options -->
--
To view, visit https://gerrit.wikimedia.org/r/353350
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ief466c6c0acac951036866b79d531daac596a38c
Gerrit-PatchSet: 5
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Mholloway <[email protected]>
Gerrit-Reviewer: Dbrant <[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