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

Change subject: Inject a hint message into Main Pages of offline article packs.
......................................................................


Inject a hint message into Main Pages of offline article packs.

Bug: T179205
Change-Id: I95357651dd3249483754e85c7df523741ec75cb3
---
M app/src/main/assets/bundle.js
M app/src/main/java/org/wikipedia/offline/Compilation.java
M app/src/main/java/org/wikipedia/offline/OfflineManager.java
M app/src/main/java/org/wikipedia/page/PageFragmentLoadState.java
M app/src/main/java/org/wikipedia/page/PageProperties.java
M app/src/main/res/values-qq/strings.xml
M app/src/main/res/values/strings.xml
M www/js/sections.js
8 files changed, 78 insertions(+), 16 deletions(-)

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



diff --git a/app/src/main/assets/bundle.js b/app/src/main/assets/bundle.js
index e051ede..5dcc7d2 100644
--- a/app/src/main/assets/bundle.js
+++ b/app/src/main/assets/bundle.js
@@ -79,7 +79,7 @@
 
 module.exports = new ActionsHandler();
 
-},{"./bridge":2,"./utilities":18}],2:[function(require,module,exports){
+},{"./bridge":2,"./utilities":19}],2:[function(require,module,exports){
 function Bridge() {
 }
 
@@ -134,7 +134,7 @@
 bridge.registerListener( 'toggleDimImages', function( payload ) {
     pagelib.DimImagesTransform.dim( window, payload.dimImages );
 } );
-},{"./bridge":2,"wikimedia-page-library":19}],4:[function(require,module,exports){
+},{"./bridge":2,"wikimedia-page-library":20}],4:[function(require,module,exports){
 var actions = require('./actions');
 var bridge = require('./bridge');
 
@@ -224,7 +224,7 @@
         pagelib.ThemeTransform.classifyElements( content );
     }
 } );
-},{"./bridge":2,"wikimedia-page-library":19}],9:[function(require,module,exports){
+},{"./bridge":2,"wikimedia-page-library":20}],9:[function(require,module,exports){
 var bridge = require("./bridge");
 
 bridge.registerListener( "setDirectionality", function( payload ) {
@@ -525,10 +525,19 @@
     clearContents();
     setWindowAttributes(payload);
     window.isOffline = true;
+    window.mainPageHint = payload.mainPageHint;
     window.offlineContentProvider = payload.offlineContentProvider;
 
     var contentElem = document.getElementById( "content" );
     setTitleElement(contentElem);
+
+    if (window.isMainPage) {
+        // TODO: remove this when the actual Main Pages in ZIM files contain 
more descriptive content.
+        var helperDiv = document.createElement( "div" );
+        helperDiv.innerHTML = window.mainPageHint;
+        helperDiv.style = "font-size: 85%; margin: 12px 0 20px 0; padding: 
12px; line-height: 120%; background-color: rgba(0, 0, 0, 0.04); border: 1px 
solid rgba(0, 0, 0, 0.08); border-radius: 2px;";
+        contentElem.appendChild( helperDiv );
+    }
 
     var issuesContainer = setIssuesElement(contentElem);
 
@@ -718,7 +727,7 @@
     bridge.sendMessage( "currentSectionResponse", { sectionID: 
getCurrentSection() } );
 } );
 
-},{"./bridge":2,"./onclick":7,"./transformer":11,"wikimedia-page-library":19}],11:[function(require,module,exports){
+},{"./bridge":2,"./onclick":7,"./transformer":11,"wikimedia-page-library":20}],11:[function(require,module,exports){
 function Transformer() {
 }
 
@@ -772,7 +781,24 @@
     handleTableCollapseOrExpandClick: toggleCollapseClickCallback
 };
 
-},{"../transformer":11,"wikimedia-page-library":19}],13:[function(require,module,exports){
+},{"../transformer":11,"wikimedia-page-library":20}],13:[function(require,module,exports){
+var transformer = require("../transformer");
+
+transformer.register( "hideImages", function( content ) {
+    var minImageSize = 64;
+    var images = content.querySelectorAll( 'img' );
+    for (var i = 0; i < images.length; i++) {
+        var img = images[i];
+        if (img.width < minImageSize && img.height < minImageSize) {
+            continue;
+        }
+        // Just replace the src of the image with a placeholder image from our 
assets.
+        img.src = "file:///android_asset/checkerboard.png";
+        img.srcset = "";
+    }
+} );
+
+},{"../transformer":11}],14:[function(require,module,exports){
 var transformer = require("../transformer");
 
 transformer.register( "hideRefs", function( content ) {
@@ -794,7 +820,7 @@
         td.appendChild(refLists[i]);
     }
 } );
-},{"../transformer":11}],14:[function(require,module,exports){
+},{"../transformer":11}],15:[function(require,module,exports){
 var transformer = require("../../transformer");
 
 transformer.register( "anchorPopUpMediaTransforms", function( content ) {
@@ -827,7 +853,7 @@
     }
 } );
 
-},{"../../transformer":11}],15:[function(require,module,exports){
+},{"../../transformer":11}],16:[function(require,module,exports){
 var transformer = require("../../transformer");
 var bridge = require("../../bridge");
 
@@ -876,7 +902,7 @@
         containerSpan.onclick = ipaClickHandler;
     }
 } );
-},{"../../bridge":2,"../../transformer":11}],16:[function(require,module,exports){
+},{"../../bridge":2,"../../transformer":11}],17:[function(require,module,exports){
 var transformer = require("../../transformer");
 
 // Move the first non-empty paragraph (and related elements) to the top of the 
section.
@@ -960,7 +986,7 @@
     }
 }
 
-},{"../../transformer":11}],17:[function(require,module,exports){
+},{"../../transformer":11}],18:[function(require,module,exports){
 var maybeWidenImage = 
require('wikimedia-page-library').WidenImage.maybeWidenImage;
 var transformer = require("../transformer");
 
@@ -982,7 +1008,7 @@
     }
 } );
 
-},{"../transformer":11,"wikimedia-page-library":19}],18:[function(require,module,exports){
+},{"../transformer":11,"wikimedia-page-library":20}],19:[function(require,module,exports){
 function ancestorContainsClass( element, className ) {
     var contains = false;
     var curNode = element;
@@ -1031,7 +1057,7 @@
     firstDivAncestor: firstDivAncestor
 };
 
-},{}],19:[function(require,module,exports){
+},{}],20:[function(require,module,exports){
 (function (global, factory) {
        typeof exports === 'object' && typeof module !== 'undefined' ? 
module.exports = factory() :
        typeof define === 'function' && define.amd ? define(factory) :
@@ -3300,4 +3326,4 @@
 })));
 
 
-},{}]},{},[2,6,18,11,12,13,17,14,15,16,1,4,5,3,8,9,10]);
+},{}]},{},[2,6,19,11,12,13,14,18,15,16,17,1,4,5,3,8,9,10]);
diff --git a/app/src/main/java/org/wikipedia/offline/Compilation.java 
b/app/src/main/java/org/wikipedia/offline/Compilation.java
index 39cb8bc..300aa5e 100644
--- a/app/src/main/java/org/wikipedia/offline/Compilation.java
+++ b/app/src/main/java/org/wikipedia/offline/Compilation.java
@@ -43,6 +43,7 @@
     @Nullable private String path;
     @Nullable private transient ZimFile file;
     @Nullable private transient ZimReader reader;
+    @Nullable private transient String mainPageTitle;
 
     public enum MediaContent {
         ALL, NOVID, NOPIC
@@ -251,7 +252,10 @@
 
     @NonNull
     String getMainPageTitle() throws IOException {
-        return reader.getMainPageTitle();
+        if (mainPageTitle == null) {
+            mainPageTitle = reader.getMainPageTitle();
+        }
+        return mainPageTitle;
     }
 
     public static class Image {
diff --git a/app/src/main/java/org/wikipedia/offline/OfflineManager.java 
b/app/src/main/java/org/wikipedia/offline/OfflineManager.java
index a1ef9a6..78bffe3 100644
--- a/app/src/main/java/org/wikipedia/offline/OfflineManager.java
+++ b/app/src/main/java/org/wikipedia/offline/OfflineManager.java
@@ -4,6 +4,7 @@
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.annotation.VisibleForTesting;
+import android.text.TextUtils;
 
 import org.wikipedia.settings.Prefs;
 import org.wikipedia.util.log.L;
@@ -186,6 +187,22 @@
         return compilations.get(compIndex).getMainPageTitle();
     }
 
+    public boolean isMainPage(@Nullable String title) {
+        if (TextUtils.isEmpty(title)) {
+            return false;
+        }
+        try {
+            for (Compilation c : compilations) {
+                if (title.equals(c.getMainPageTitle())) {
+                    return true;
+                }
+            }
+        } catch (IOException e) {
+            // ignore
+        }
+        return false;
+    }
+
     @NonNull public String getMainPageTitle(@NonNull Compilation compilation) 
throws IOException {
         // The compilation parameter can be a "remote" compilation (i.e. 
nonempty URI but empty
         // path, or a local compilation unmarshalled from an Intent (i.e. 
empty URI but nonempty
diff --git a/app/src/main/java/org/wikipedia/page/PageFragmentLoadState.java 
b/app/src/main/java/org/wikipedia/page/PageFragmentLoadState.java
index 350f2d7..d5dd39b 100644
--- a/app/src/main/java/org/wikipedia/page/PageFragmentLoadState.java
+++ b/app/src/main/java/org/wikipedia/page/PageFragmentLoadState.java
@@ -439,7 +439,8 @@
         PageTitle newTitle = TextUtils.isEmpty(normalizedTitle) ? 
model.getTitle()
                 : new PageTitle(normalizedTitle, 
model.getTitle().getWikiSite());
 
-        Page page = new Page(newTitle, new ArrayList<>(), new 
PageProperties(newTitle));
+        Page page = new Page(newTitle, new ArrayList<>(),
+                new PageProperties(newTitle, 
OfflineManager.instance().isMainPage(newTitle.getDisplayText())));
 
         model.setPage(page);
         editHandler.setPage(model.getPage());
@@ -476,6 +477,9 @@
                     .put("zimhtml", result.html())
                     .put("fromRestBase", false)
                     .put("offlineContentProvider", 
OfflineContentProvider.getBaseUrl());
+            if (page.isMainPage()) {
+                zimPayload.put("mainPageHint", 
fragment.getString(R.string.offline_library_main_page_hint_html));
+            }
 
             if (sectionTargetFromTitle != null) {
                 //if we have a section to scroll to (from our PageTitle):
diff --git a/app/src/main/java/org/wikipedia/page/PageProperties.java 
b/app/src/main/java/org/wikipedia/page/PageProperties.java
index 0caf0f1..52a3f9c 100644
--- a/app/src/main/java/org/wikipedia/page/PageProperties.java
+++ b/app/src/main/java/org/wikipedia/page/PageProperties.java
@@ -91,7 +91,7 @@
      * namespace fields, and explicitly disables editing. All other fields 
initialized to defaults.
      * @param title Title to which these properties apply.
      */
-    public PageProperties(@NonNull PageTitle title) {
+    public PageProperties(@NonNull PageTitle title, boolean isMainPage) {
         pageId = 0;
         namespace = title.namespace();
         revisionId = 0;
@@ -104,7 +104,7 @@
         leadImageName = "";
         lastModified = new Date();
         canEdit = false;
-        isMainPage = false;
+        this.isMainPage = isMainPage;
         isDisambiguationPage = false;
         wikiBaseItem = null;
     }
diff --git a/app/src/main/res/values-qq/strings.xml 
b/app/src/main/res/values-qq/strings.xml
index 755b5fc..ec32591 100644
--- a/app/src/main/res/values-qq/strings.xml
+++ b/app/src/main/res/values-qq/strings.xml
@@ -486,6 +486,7 @@
   <string 
name="offline_library_onboarding_uninterrupted_reading_subtitle">{{Doc-mobileapp-internet}}\nShort
 explanatory text about the Offline Library feature.</string>
   <string name="offline_library_onboarding_store_knowledge_title">Title for a 
tutorial screen about the Offline Library feature.</string>
   <string name="offline_library_onboarding_store_knowledge_subtitle">Short 
explanatory text about the Offline Library feature.</string>
+  <string name="offline_library_main_page_hint_html">Message to be shown at 
the top of Main Pages of offline article packs, providing additional guidance 
to the user about usage of the Main Page.</string>
   <string name="onboarding_skip">Button label to skip the current onboarding 
or tutorial screen.\n{{Identical|Skip}}</string>
   <string name="onboarding_continue">Button label to continue to the next 
onboarding or tutorial screen.\n{{Identical|Continue}}</string>
   <string name="onboarding_get_started">Button label to finish the current 
onboarding or tutorial workflow.\n{{Identical|Get started}}</string>
diff --git a/app/src/main/res/values/strings.xml 
b/app/src/main/res/values/strings.xml
index 8fd8c41..95fc4f7 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -539,6 +539,7 @@
     <string 
name="offline_library_onboarding_uninterrupted_reading_subtitle">Keep on 
reading and searching for articles within your Offline Library when you don\'t 
have access to internet.</string>
     <string name="offline_library_onboarding_store_knowledge_title">Store more 
knowledge</string>
     <string 
name="offline_library_onboarding_store_knowledge_subtitle">Download as much 
Wikipedia as your device can handle. Offline Library can also access article 
packs on external storage.</string>
+    <string name="offline_library_main_page_hint_html"><![CDATA[This Main Page 
provides an overview of the contents of this article pack.<br /><br />You may 
also explore the contents of any article pack in your Offline Library by 
searching for available articles while you are offline.]]></string>
     <!-- /Offline -->
 
     <!-- Onboarding -->
diff --git a/www/js/sections.js b/www/js/sections.js
index 1513298..2066af6 100644
--- a/www/js/sections.js
+++ b/www/js/sections.js
@@ -282,11 +282,20 @@
     clearContents();
     setWindowAttributes(payload);
     window.isOffline = true;
+    window.mainPageHint = payload.mainPageHint;
     window.offlineContentProvider = payload.offlineContentProvider;
 
     var contentElem = document.getElementById( "content" );
     setTitleElement(contentElem);
 
+    if (window.isMainPage) {
+        // TODO: remove this when the actual Main Pages in ZIM files contain 
more descriptive content.
+        var helperDiv = document.createElement( "div" );
+        helperDiv.innerHTML = window.mainPageHint;
+        helperDiv.style = "font-size: 85%; margin: 12px 0 20px 0; padding: 
12px; line-height: 120%; background-color: rgba(0, 0, 0, 0.04); border: 1px 
solid rgba(0, 0, 0, 0.08); border-radius: 2px;";
+        contentElem.appendChild( helperDiv );
+    }
+
     var issuesContainer = setIssuesElement(contentElem);
 
     var parser = new DOMParser();

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

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

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

Reply via email to