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>&nbsp;&nbsp;<b>&#8226; " + 
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

Reply via email to