Niedzielski has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/268855

Change subject: Enable custom MediaWiki endpoint
......................................................................

Enable custom MediaWiki endpoint

Expose a developer option to change the MediaWiki domain and protocol
used. This is useful for testing service changes.

Bug: T120415dd
Depends-On: Ic8641e88ecd25b469e92f1af624775aefb23d892
Change-Id: Ic421239050d7c7e16147b4ad66550d2418acb362
---
M app/build.gradle
M app/src/androidTest/java/org/wikipedia/test/CreateAccountTaskTest.java
M app/src/androidTest/java/org/wikipedia/test/EditTaskTest.java
M app/src/main/java/org/wikipedia/Site.java
M app/src/main/java/org/wikipedia/WikipediaApp.java
M app/src/main/java/org/wikipedia/history/HistoryEntryDatabaseTable.java
M app/src/main/java/org/wikipedia/networking/MccMncStateHandler.java
M app/src/main/java/org/wikipedia/page/LinkHandler.java
M app/src/main/java/org/wikipedia/page/PageActivity.java
M app/src/main/java/org/wikipedia/page/PageProperties.java
M app/src/main/java/org/wikipedia/page/PageTitle.java
M app/src/main/java/org/wikipedia/page/gallery/GalleryActivity.java
M app/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
M app/src/main/java/org/wikipedia/pageimages/PageImageDatabaseTable.java
M app/src/main/java/org/wikipedia/savedpages/DownloadImageTask.java
M app/src/main/java/org/wikipedia/savedpages/SavePageTask.java
M app/src/main/java/org/wikipedia/savedpages/SavedPageDatabaseTable.java
M app/src/main/java/org/wikipedia/server/PageLead.java
M app/src/main/java/org/wikipedia/server/PageLeadProperties.java
M app/src/main/java/org/wikipedia/server/mwapi/MwPageEndpointsCache.java
M app/src/main/java/org/wikipedia/server/mwapi/MwPageLead.java
M app/src/main/java/org/wikipedia/server/restbase/RbEndpointsCache.java
M app/src/main/java/org/wikipedia/server/restbase/RbPageCombo.java
M app/src/main/java/org/wikipedia/server/restbase/RbPageLead.java
M app/src/main/java/org/wikipedia/settings/Prefs.java
M app/src/main/java/org/wikipedia/util/UriUtil.java
M app/src/main/java/org/wikipedia/wiktionary/WiktionaryDialog.java
M app/src/main/res/values/preference_keys.xml
M app/src/main/res/xml/developer_preferences.xml
29 files changed, 135 insertions(+), 77 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia 
refs/changes/55/268855/1

diff --git a/app/build.gradle b/app/build.gradle
index 622bf61..a829db7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -152,7 +152,7 @@
 }
 
 dependencies {
-    compileSubprojectOrModule ':java-mwapi:json', 
'org.mediawiki.api:json:1.3.3', 'org.json', 'json'
+    compileSubprojectOrModule ':java-mwapi:json', 
'org.mediawiki.api:json:1.3.4-SNAPSHOT', 'org.json', 'json'
 
     // To keep the Maven Central dependencies up-to-date
     // use http://gradleplease.appspot.com/ or http://search.maven.org/.
diff --git 
a/app/src/androidTest/java/org/wikipedia/test/CreateAccountTaskTest.java 
b/app/src/androidTest/java/org/wikipedia/test/CreateAccountTaskTest.java
index c3dcf45..ffaee6a 100644
--- a/app/src/androidTest/java/org/wikipedia/test/CreateAccountTaskTest.java
+++ b/app/src/androidTest/java/org/wikipedia/test/CreateAccountTaskTest.java
@@ -42,7 +42,7 @@
             assertThat(captchaResult, notNullValue());
             assertThat(captchaResult.getCaptchaId(), 
not(isEmptyOrNullString()));
 
-            String expectedCaptchaUrlPrefix = 
WikipediaApp.getInstance().getNetworkProtocol()
+            String expectedCaptchaUrlPrefix = 
WikipediaApp.getInstance().getSite().getProtocol()
                     + 
"://test.wikipedia.org/w/index.php?title=Special:Captcha/image";
             assertThat(captchaResult.getCaptchaUrl(testWiki), 
startsWith(expectedCaptchaUrlPrefix));
         }
diff --git a/app/src/androidTest/java/org/wikipedia/test/EditTaskTest.java 
b/app/src/androidTest/java/org/wikipedia/test/EditTaskTest.java
index 3f8cb36..4aef950 100644
--- a/app/src/androidTest/java/org/wikipedia/test/EditTaskTest.java
+++ b/app/src/androidTest/java/org/wikipedia/test/EditTaskTest.java
@@ -131,7 +131,7 @@
     }
 
     private String getNetworkProtocol() {
-        return app().getNetworkProtocol();
+        return app().getSite().getProtocol();
     }
 
     private WikipediaApp app() {
diff --git a/app/src/main/java/org/wikipedia/Site.java 
b/app/src/main/java/org/wikipedia/Site.java
index 18f6e93..179d2fa 100644
--- a/app/src/main/java/org/wikipedia/Site.java
+++ b/app/src/main/java/org/wikipedia/Site.java
@@ -3,10 +3,12 @@
 import android.net.Uri;
 import android.os.Parcel;
 import android.os.Parcelable;
+import android.support.annotation.NonNull;
 import android.text.TextUtils;
 
 import org.wikipedia.interlanguage.AppLanguageLookUpTable;
 import org.wikipedia.page.PageTitle;
+import org.wikipedia.settings.Prefs;
 
 import java.util.Locale;
 
@@ -14,25 +16,38 @@
  * Represents a particular wiki.
  */
 public class Site implements Parcelable {
+    private static final int FALSE = 0;
+
+    private final boolean https;
     private final String domain;
 
     private final String languageCode;
 
-    public Site(String domain) {
-        this(domain, urlToLanguage(domain));
+    public Site(@NonNull Uri uri) {
+        this(!isUrlHttp(uri.getScheme()), uri.getAuthority());
     }
 
-    public Site(String domain, String languageCode) {
+    public Site(String domain) {
+        this(!isUrlHttp(domain), domain, urlToLanguage(domain));
+    }
+
+    public Site(boolean https, String domain) {
+        this(https, domain, urlToLanguage(domain));
+    }
+
+    public Site(boolean https, String domain, String languageCode) {
+        this.https = https;
         this.domain = urlToDesktopSite(domain);
         this.languageCode = languageCode;
     }
 
     public Site(Parcel in) {
-        this(in.readString(), in.readString());
+        this(in.readInt() != FALSE, in.readString(), in.readString());
     }
 
     @Override
     public void writeToParcel(Parcel dest, int flags) {
+        dest.writeInt(https ? ~FALSE : FALSE);
         dest.writeString(domain);
         dest.writeString(languageCode);
     }
@@ -42,11 +57,25 @@
     }
 
     public boolean getUseSecure() {
-        return true;
+        return https;
+    }
+
+    public String getProtocol() {
+        return https ? "https" : "http";
     }
 
     public String getDomain() {
         return domain;
+    }
+
+    /**
+     * Resolves a potentially protocol relative URL to a 'full' URL
+     *
+     * @param url Url to check for (and fix) protocol relativeness
+     * @return A fully qualified, protocol specified URL
+     */
+    public String resolveProtocolRelativeUrl(String url) {
+        return url.startsWith("//") ? getProtocol() + ":" + url : url;
     }
 
     @Override
@@ -77,17 +106,20 @@
 
         Site site = (Site) o;
 
+        if (https != site.https) {
+            return false;
+        }
         if (domain != null ? !domain.equals(site.domain) : site.domain != 
null) {
             return false;
         }
-        return !(languageCode != null ? 
!languageCode.equals(site.languageCode) : site.languageCode != null);
-
+        return languageCode != null ? languageCode.equals(site.languageCode) : 
site.languageCode == null;
     }
 
     // Auto-generated
     @Override
     public int hashCode() {
-        int result = domain != null ? domain.hashCode() : 0;
+        int result = https ? 1 : 0;
+        result = 31 * result + (domain != null ? domain.hashCode() : 0);
         result = 31 * result + (languageCode != null ? languageCode.hashCode() 
: 0);
         return result;
     }
@@ -96,13 +128,14 @@
     @Override
     public String toString() {
         return "Site{"
-                + "domain='" + domain + '\''
+                + "https=" + https
+                + ", domain='" + domain + '\''
                 + ", languageCode='" + languageCode + '\''
                 + '}';
     }
 
     public String getFullUrl(String script) {
-        return WikipediaApp.getInstance().getNetworkProtocol() + "://" + 
getDomain() + getScriptPath(script);
+        return getProtocol() + "://" + getDomain() + getScriptPath(script);
     }
 
     /**
@@ -136,7 +169,7 @@
     }
 
     public static Site forLanguage(String language) {
-        return new Site(languageToWikiSubdomain(language) + ".wikipedia.org", 
language);
+        return new Site(getAppHttps(), languageToWikiSubdomain(language) + "." 
+ getAppHost(), language);
     }
 
     /**
@@ -145,7 +178,7 @@
      * @return boolean
      */
     public static boolean isSupportedSite(String domain) {
-        return domain.matches("[a-z\\-]+\\.(m\\.)?wikipedia\\.org");
+        return domain.matches("[a-z\\-]+\\.(m\\.)?" + getAppHost());
     }
 
     private static String urlToLanguage(String url) {
@@ -165,4 +198,17 @@
                 return language;
         }
     }
+
+    private static String getAppHost() {
+        Uri uri = Uri.parse(Prefs.getMediaWikiBaseUri());
+        return uri.getHost() + (uri.getPort() < 0 ? "" : ":" + uri.getPort());
+    }
+
+    private static boolean getAppHttps() {
+        return !isUrlHttp(Uri.parse(Prefs.getMediaWikiBaseUri()).getScheme());
+    }
+
+    private static boolean isUrlHttp(@NonNull String domain) {
+        return !domain.startsWith("https") && domain.startsWith("http");
+    }
 }
diff --git a/app/src/main/java/org/wikipedia/WikipediaApp.java 
b/app/src/main/java/org/wikipedia/WikipediaApp.java
index edf25c6..ac10ad8 100644
--- a/app/src/main/java/org/wikipedia/WikipediaApp.java
+++ b/app/src/main/java/org/wikipedia/WikipediaApp.java
@@ -64,17 +64,11 @@
 import static org.wikipedia.util.StringUtil.emptyIfNull;
 
 public class WikipediaApp extends Application {
-    private static final String HTTPS_PROTOCOL = "https";
     private static final int EVENT_LOG_TESTING_ID = new 
Random().nextInt(Integer.MAX_VALUE);
 
     private float screenDensity;
     public float getScreenDensity() {
         return screenDensity;
-    }
-
-    // Reload in onCreate to override
-    public String getNetworkProtocol() {
-        return HTTPS_PROTOCOL;
     }
 
     public static final int FONT_SIZE_MULTIPLIER_MIN = -5;
diff --git 
a/app/src/main/java/org/wikipedia/history/HistoryEntryDatabaseTable.java 
b/app/src/main/java/org/wikipedia/history/HistoryEntryDatabaseTable.java
index 9d98167..d7a5c8a 100644
--- a/app/src/main/java/org/wikipedia/history/HistoryEntryDatabaseTable.java
+++ b/app/src/main/java/org/wikipedia/history/HistoryEntryDatabaseTable.java
@@ -40,7 +40,7 @@
     @Override
     protected ContentValues toContentValues(HistoryEntry obj) {
         ContentValues contentValues = new ContentValues();
-        contentValues.put(COL_SITE, obj.getTitle().getSite().getDomain());
+        contentValues.put(COL_SITE, obj.getTitle().getSite().getProtocol() + 
"://" + obj.getTitle().getSite().getDomain());
         contentValues.put(COL_TITLE, obj.getTitle().getText());
         contentValues.put(COL_NAMESPACE, obj.getTitle().getNamespace());
         contentValues.put(COL_TIMESTAMP, obj.getTimestamp().getTime());
diff --git a/app/src/main/java/org/wikipedia/networking/MccMncStateHandler.java 
b/app/src/main/java/org/wikipedia/networking/MccMncStateHandler.java
index 08123c0..ad27674 100644
--- a/app/src/main/java/org/wikipedia/networking/MccMncStateHandler.java
+++ b/app/src/main/java/org/wikipedia/networking/MccMncStateHandler.java
@@ -29,7 +29,7 @@
             if (mccMnc != null) {
                 customHeaders.put("X-MCCMNC", mccMnc);
                 this.mccMncSent = true;
-                return new Api(site.getDomain(), customHeaders);
+                return new Api(site.getDomain(), site.getUseSecure(), 
customHeaders);
             }
         }
         return null;
diff --git a/app/src/main/java/org/wikipedia/page/LinkHandler.java 
b/app/src/main/java/org/wikipedia/page/LinkHandler.java
index db28e51..a4cc44d 100644
--- a/app/src/main/java/org/wikipedia/page/LinkHandler.java
+++ b/app/src/main/java/org/wikipedia/page/LinkHandler.java
@@ -6,7 +6,6 @@
 import org.json.JSONException;
 import org.json.JSONObject;
 import org.wikipedia.Site;
-import org.wikipedia.WikipediaApp;
 import org.wikipedia.bridge.CommunicationBridge;
 
 import static org.wikipedia.util.UriUtil.decodeURL;
@@ -49,8 +48,8 @@
     @Override
     public void onUrlClick(String href) {
         if (href.startsWith("//")) {
-            // That's a protocol specific link! Make it https!
-            href = "https:" + href;
+            // That's a protocol specific link!
+            href = getSite().getProtocol() + ":" + href;
         }
         Log.d("Wikipedia", "Link clicked was " + href);
         if (href.startsWith("/wiki/")) {
@@ -63,13 +62,13 @@
             String authority = uri.getAuthority();
             // FIXME: Make this more complete, only to not handle URIs that 
contain unsupported actions
             if (authority != null && Site.isSupportedSite(authority) && 
uri.getPath().startsWith("/wiki/")) {
-                Site site = new Site(authority);
+                Site site = new Site(uri);
                 PageTitle title = site.titleForUri(uri);
                 onInternalLinkClicked(title);
             } else {
                 // if it's a /w/ URI, turn it into a full URI and go external
                 if (href.startsWith("/w/")) {
-                    href = String.format("%1$s://%2$s", 
WikipediaApp.getInstance().getNetworkProtocol(), getSite().getDomain()) + href;
+                    href = String.format("%1$s://%2$s", 
getSite().getProtocol(), getSite().getDomain()) + href;
                 }
                 handleExternalLink(context, Uri.parse(href));
             }
diff --git a/app/src/main/java/org/wikipedia/page/PageActivity.java 
b/app/src/main/java/org/wikipedia/page/PageActivity.java
index 7416131..e788705 100644
--- a/app/src/main/java/org/wikipedia/page/PageActivity.java
+++ b/app/src/main/java/org/wikipedia/page/PageActivity.java
@@ -411,7 +411,7 @@
 
     private void handleIntent(Intent intent) {
         if (Intent.ACTION_VIEW.equals(intent.getAction()) && intent.getData() 
!= null) {
-            Site site = new Site(intent.getData().getAuthority());
+            Site site = new Site(intent.getData());
             PageTitle title = site.titleForUri(intent.getData());
             HistoryEntry historyEntry = new HistoryEntry(title, 
HistoryEntry.SOURCE_EXTERNAL_LINK);
             loadPageInForegroundTab(title, historyEntry);
diff --git a/app/src/main/java/org/wikipedia/page/PageProperties.java 
b/app/src/main/java/org/wikipedia/page/PageProperties.java
index 67d9025..3824055 100644
--- a/app/src/main/java/org/wikipedia/page/PageProperties.java
+++ b/app/src/main/java/org/wikipedia/page/PageProperties.java
@@ -3,12 +3,14 @@
 import android.location.Location;
 import android.os.Parcel;
 import android.os.Parcelable;
+import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.text.TextUtils;
 import android.util.Log;
 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
+import org.wikipedia.Site;
 import org.wikipedia.WikipediaApp;
 import org.wikipedia.server.PageLeadProperties;
 import org.wikipedia.util.StringUtil;
@@ -47,11 +49,11 @@
      * Side note: Should later be moved out of this class but I like the 
similarities with
      * PageProperties(JSONObject).
      */
-    public PageProperties(PageLeadProperties core) {
+    public PageProperties(@NonNull Site site, PageLeadProperties core) {
         pageId = core.getId();
         revisionId = core.getRevision();
         displayTitleText = StringUtil.emptyIfNull(core.getDisplayTitle());
-        titlePronunciationUrl = core.getTitlePronunciationUrl();
+        titlePronunciationUrl = core.getTitlePronunciationUrl(site);
         geo = core.getGeo();
         editProtectionStatus = core.getFirstAllowedEditorRole();
         languageCount = core.getLanguageCount();
diff --git a/app/src/main/java/org/wikipedia/page/PageTitle.java 
b/app/src/main/java/org/wikipedia/page/PageTitle.java
index e275092..ad394a5 100644
--- a/app/src/main/java/org/wikipedia/page/PageTitle.java
+++ b/app/src/main/java/org/wikipedia/page/PageTitle.java
@@ -7,7 +7,6 @@
 import org.json.JSONException;
 import org.json.JSONObject;
 import org.wikipedia.Site;
-import org.wikipedia.WikipediaApp;
 import org.wikipedia.staticdata.FileAliasData;
 import org.wikipedia.staticdata.MainPageNameData;
 import org.wikipedia.staticdata.SpecialAliasData;
@@ -174,6 +173,7 @@
             json.put("namespace", getNamespace());
             json.put("text", getText());
             json.put("fragment", getFragment());
+            json.put("https", site.getUseSecure());
             json.put("site", site.getDomain());
             return json;
         } catch (JSONException e) {
@@ -199,7 +199,7 @@
         this.namespace = json.optString("namespace", null);
         this.text = json.optString("text", null);
         this.fragment = json.optString("fragment", null);
-        this.site = json.has("site") ? new Site(json.optString("site")) : null;
+        this.site = json.has("site") ? new Site(json.optBoolean("https", 
true), json.optString("site")) : null;
         this.properties = json.has("properties") ? new 
PageProperties(json.optJSONObject("properties")) : null;
         this.thumbUrl = json.optString("thumbUrl", null);
         this.description = json.optString("description", null);
@@ -209,7 +209,7 @@
         try {
             return String.format(
                     "%1$s://%2$s/wiki/%3$s%4$s",
-                    WikipediaApp.getInstance().getNetworkProtocol(),
+                    getSite().getProtocol(),
                     domain,
                     URLEncoder.encode(getPrefixedText(), "utf-8"),
                     (this.fragment != null && this.fragment.length() > 0) ? 
("#" + this.fragment) : ""
@@ -231,7 +231,7 @@
         try {
             return String.format(
                     "%1$s://%2$s/w/index.php?title=%3$s&action=%4$s",
-                    WikipediaApp.getInstance().getNetworkProtocol(),
+                    getSite().getProtocol(),
                     getSite().getDomain(),
                     URLEncoder.encode(getPrefixedText(), "utf-8"),
                     action
diff --git a/app/src/main/java/org/wikipedia/page/gallery/GalleryActivity.java 
b/app/src/main/java/org/wikipedia/page/gallery/GalleryActivity.java
index d5b1ca5..f8f4157 100644
--- a/app/src/main/java/org/wikipedia/page/gallery/GalleryActivity.java
+++ b/app/src/main/java/org/wikipedia/page/gallery/GalleryActivity.java
@@ -43,7 +43,6 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import static org.wikipedia.util.UriUtil.resolveProtocolRelativeUrl;
 import static org.wikipedia.util.UriUtil.handleExternalLink;
 import static org.wikipedia.util.StringUtil.trim;
 
@@ -112,7 +111,7 @@
         public boolean onLongClick(View v) {
             String licenseUrl = (String) v.getTag();
             if (!TextUtils.isEmpty(licenseUrl)) {
-                handleExternalLink(GalleryActivity.this, 
Uri.parse(resolveProtocolRelativeUrl(licenseUrl)));
+                handleExternalLink(GalleryActivity.this, 
Uri.parse(pageTitle.getSite().resolveProtocolRelativeUrl(licenseUrl)));
             }
             return true;
         }
@@ -340,8 +339,8 @@
         @Override
         public void onUrlClick(String url) {
             Log.v(TAG, "Link clicked was " + url);
-            url = resolveProtocolRelativeUrl(url);
             Site site = app.getSite();
+            url = site.resolveProtocolRelativeUrl(url);
             if (url.startsWith("/wiki/")) {
                 PageTitle title = site.titleForInternalLink(url);
                 finishWithPageResult(title);
@@ -355,7 +354,8 @@
                 } else {
                     // if it's a /w/ URI, turn it into a full URI and go 
external
                     if (url.startsWith("/w/")) {
-                        url = String.format("%1$s://%2$s", 
WikipediaApp.getInstance().getNetworkProtocol(), site.getDomain()) + url;
+                        // TODO: move
+                        url = String.format("%1$s://%2$s", site.getProtocol(), 
site.getDomain()) + url;
                     }
                     handleExternalLink(GalleryActivity.this, Uri.parse(url));
                 }
diff --git 
a/app/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java 
b/app/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
index 7d88f7f..24f67a5 100755
--- a/app/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
+++ b/app/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
@@ -325,7 +325,7 @@
      */
     private void loadLeadImage(@Nullable String url) {
         if (!isMainPage() && !TextUtils.isEmpty(url) && isLeadImageEnabled()) {
-            String fullUrl = WikipediaApp.getInstance().getNetworkProtocol() + 
":" + url;
+            String fullUrl = getTitle().getSite().getProtocol() + ":" + url;
             articleHeaderView.setImageYScalar(0);
             articleHeaderView.loadImage(fullUrl);
         } else {
diff --git 
a/app/src/main/java/org/wikipedia/pageimages/PageImageDatabaseTable.java 
b/app/src/main/java/org/wikipedia/pageimages/PageImageDatabaseTable.java
index 3f89f61..6be5604 100644
--- a/app/src/main/java/org/wikipedia/pageimages/PageImageDatabaseTable.java
+++ b/app/src/main/java/org/wikipedia/pageimages/PageImageDatabaseTable.java
@@ -37,7 +37,7 @@
     @Override
     protected ContentValues toContentValues(PageImage obj) {
         ContentValues contentValues = new ContentValues();
-        contentValues.put(COL_SITE, obj.getTitle().getSite().getDomain());
+        contentValues.put(COL_SITE, obj.getTitle().getSite().getProtocol() + 
"://" + obj.getTitle().getSite().getDomain());
         contentValues.put(COL_NAMESPACE, obj.getTitle().getNamespace());
         contentValues.put(COL_TITLE, obj.getTitle().getPrefixedText());
         contentValues.put(COL_IMAGE_NAME, obj.getImageName());
diff --git a/app/src/main/java/org/wikipedia/savedpages/DownloadImageTask.java 
b/app/src/main/java/org/wikipedia/savedpages/DownloadImageTask.java
index cffa02d..25236e6 100644
--- a/app/src/main/java/org/wikipedia/savedpages/DownloadImageTask.java
+++ b/app/src/main/java/org/wikipedia/savedpages/DownloadImageTask.java
@@ -1,10 +1,13 @@
 package org.wikipedia.savedpages;
 
+import android.support.annotation.NonNull;
 import android.util.Log;
+
 import com.github.kevinsawicki.http.HttpRequest;
+
+import org.wikipedia.Site;
 import org.wikipedia.WikipediaApp;
 import org.wikipedia.concurrency.SaneAsyncTask;
-import org.wikipedia.util.UriUtil;
 
 import java.io.File;
 import java.io.FileOutputStream;
@@ -21,9 +24,9 @@
     private final String imageUrl;
     private final File file;
 
-    public DownloadImageTask(WikipediaApp app, String imageUrl, File file) {
+    public DownloadImageTask(WikipediaApp app, @NonNull Site site, String 
imageUrl, File file) {
         this.app = app;
-        this.imageUrl = UriUtil.resolveProtocolRelativeUrl(imageUrl);
+        this.imageUrl = site.resolveProtocolRelativeUrl(imageUrl);
         this.file = file;
     }
 
diff --git a/app/src/main/java/org/wikipedia/savedpages/SavePageTask.java 
b/app/src/main/java/org/wikipedia/savedpages/SavePageTask.java
index 817d694..9d3bfc6 100644
--- a/app/src/main/java/org/wikipedia/savedpages/SavePageTask.java
+++ b/app/src/main/java/org/wikipedia/savedpages/SavePageTask.java
@@ -57,7 +57,7 @@
         for (Map.Entry<String, String> entry : imageUrlMap.entrySet()) {
             final String url = entry.getKey();
             final File file = new File(entry.getValue());
-            tasks.add(new DownloadImageTask(app, url, file) {
+            tasks.add(new DownloadImageTask(app, title.getSite(), url, file) {
                 @Override
                 public void onFinish(Boolean result) {
                     imagesDownloadedLatch.countDown();
diff --git 
a/app/src/main/java/org/wikipedia/savedpages/SavedPageDatabaseTable.java 
b/app/src/main/java/org/wikipedia/savedpages/SavedPageDatabaseTable.java
index 9a27358..c053177 100644
--- a/app/src/main/java/org/wikipedia/savedpages/SavedPageDatabaseTable.java
+++ b/app/src/main/java/org/wikipedia/savedpages/SavedPageDatabaseTable.java
@@ -125,7 +125,7 @@
             json.put("namespace", page.getTitle().getNamespace());
             json.put("text", originalTitleText);
             json.put("fragment", page.getTitle().getFragment());
-            json.put("site", page.getTitle().getSite().getDomain());
+            json.put("site", page.getTitle().getSite().getProtocol() + "://" + 
page.getTitle().getSite().getDomain());
             return StringUtil.md5string(json.toString());
         } catch (JSONException e) {
             throw new RuntimeException(e);
diff --git a/app/src/main/java/org/wikipedia/server/PageLead.java 
b/app/src/main/java/org/wikipedia/server/PageLead.java
index 2ba915e..69d007c 100644
--- a/app/src/main/java/org/wikipedia/server/PageLead.java
+++ b/app/src/main/java/org/wikipedia/server/PageLead.java
@@ -1,8 +1,10 @@
 package org.wikipedia.server;
 
 import android.location.Location;
+import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 
+import org.wikipedia.Site;
 import org.wikipedia.page.Page;
 import org.wikipedia.page.PageTitle;
 
@@ -26,7 +28,7 @@
     String getLeadSectionContent();
 
     @Nullable
-    String getTitlePronunciationUrl();
+    String getTitlePronunciationUrl(@NonNull Site site);
 
     @Nullable
     Location getGeo();
diff --git a/app/src/main/java/org/wikipedia/server/PageLeadProperties.java 
b/app/src/main/java/org/wikipedia/server/PageLeadProperties.java
index 49076f2..a627e61 100644
--- a/app/src/main/java/org/wikipedia/server/PageLeadProperties.java
+++ b/app/src/main/java/org/wikipedia/server/PageLeadProperties.java
@@ -1,8 +1,10 @@
 package org.wikipedia.server;
 
+import org.wikipedia.Site;
 import org.wikipedia.page.Section;
 
 import android.location.Location;
+import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.annotation.VisibleForTesting;
 
@@ -26,7 +28,7 @@
     String getDisplayTitle();
 
     @Nullable
-    String getTitlePronunciationUrl();
+    String getTitlePronunciationUrl(@NonNull Site site);
 
     @Nullable
     Location getGeo();
diff --git 
a/app/src/main/java/org/wikipedia/server/mwapi/MwPageEndpointsCache.java 
b/app/src/main/java/org/wikipedia/server/mwapi/MwPageEndpointsCache.java
index 56e5cb0..37f19f6 100644
--- a/app/src/main/java/org/wikipedia/server/mwapi/MwPageEndpointsCache.java
+++ b/app/src/main/java/org/wikipedia/server/mwapi/MwPageEndpointsCache.java
@@ -51,7 +51,7 @@
                     }
                 })
 
-                .setEndpoint(WikipediaApp.getInstance().getNetworkProtocol() + 
"://" + domain)
+                .setEndpoint(site.getProtocol() + "://" + domain)
 
                         // following is only needed for the hacky 
PageLead.Protection deserialization
                         // remove once 
https://phabricator.wikimedia.org/T69054 is resolved
diff --git a/app/src/main/java/org/wikipedia/server/mwapi/MwPageLead.java 
b/app/src/main/java/org/wikipedia/server/mwapi/MwPageLead.java
index 5d3bfc7..a1f5f1f 100644
--- a/app/src/main/java/org/wikipedia/server/mwapi/MwPageLead.java
+++ b/app/src/main/java/org/wikipedia/server/mwapi/MwPageLead.java
@@ -5,6 +5,7 @@
 import android.support.annotation.Nullable;
 import android.support.annotation.VisibleForTesting;
 
+import org.wikipedia.Site;
 import org.wikipedia.page.Page;
 import org.wikipedia.page.PageProperties;
 import org.wikipedia.page.PageTitle;
@@ -48,7 +49,7 @@
     public Page toPage(@NonNull PageTitle title) {
         return new Page(adjustPageTitle(title),
                 mobileview.getSections(),
-                mobileview.toPageProperties());
+                mobileview.toPageProperties(title.getSite()));
     }
 
     private PageTitle adjustPageTitle(@NonNull PageTitle title) {
@@ -75,7 +76,7 @@
 
     @Nullable
     @Override
-    public String getTitlePronunciationUrl() {
+    public String getTitlePronunciationUrl(@NonNull Site site) {
         return null;
     }
 
@@ -112,8 +113,8 @@
         @Nullable private List<Section> sections;
 
         /** Converter */
-        public PageProperties toPageProperties() {
-            return new PageProperties(this);
+        public PageProperties toPageProperties(@NonNull Site site) {
+            return new PageProperties(site, this);
         }
 
         public int getId() {
@@ -140,7 +141,7 @@
 
         @Override
         @Nullable
-        public String getTitlePronunciationUrl() {
+        public String getTitlePronunciationUrl(@NonNull Site site) {
             return null;
         }
 
diff --git 
a/app/src/main/java/org/wikipedia/server/restbase/RbEndpointsCache.java 
b/app/src/main/java/org/wikipedia/server/restbase/RbEndpointsCache.java
index 9c70786..150b672 100644
--- a/app/src/main/java/org/wikipedia/server/restbase/RbEndpointsCache.java
+++ b/app/src/main/java/org/wikipedia/server/restbase/RbEndpointsCache.java
@@ -54,7 +54,7 @@
                 })
 
                 .setEndpoint(String.format(Locale.ROOT, 
Prefs.getRestbaseUriFormat(),
-                        WikipediaApp.getInstance().getNetworkProtocol(), 
domain))
+                        site.getProtocol(), domain))
 
                         // following is only needed for the hacky 
PageLead.Protection deserialization
                         // remove once our service handles this better (see 
T111131)
diff --git a/app/src/main/java/org/wikipedia/server/restbase/RbPageCombo.java 
b/app/src/main/java/org/wikipedia/server/restbase/RbPageCombo.java
index ab99ce0..b94f038 100644
--- a/app/src/main/java/org/wikipedia/server/restbase/RbPageCombo.java
+++ b/app/src/main/java/org/wikipedia/server/restbase/RbPageCombo.java
@@ -1,5 +1,6 @@
 package org.wikipedia.server.restbase;
 
+import org.wikipedia.Site;
 import org.wikipedia.page.Page;
 import org.wikipedia.page.PageProperties;
 import org.wikipedia.page.PageTitle;
@@ -7,6 +8,7 @@
 import org.wikipedia.util.log.L;
 
 import android.location.Location;
+import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 
 
@@ -46,7 +48,7 @@
         if (lead == null) {
             throw new RuntimeException("lead is null. Check for errors before 
use!");
         }
-        Page page = new Page(lead.adjustPageTitle(title), lead.getSections(), 
toPageProperties());
+        Page page = new Page(lead.adjustPageTitle(title), lead.getSections(), 
toPageProperties(title.getSite()));
         if (remaining != null) {
             page.augmentRemainingSections(remaining.getSections());
         }
@@ -60,8 +62,8 @@
 
     @Override
     @Nullable
-    public String getTitlePronunciationUrl() {
-        return lead == null ? null : lead.getTitlePronunciationUrl();
+    public String getTitlePronunciationUrl(@NonNull Site site) {
+        return lead == null ? null : lead.getTitlePronunciationUrl(site);
     }
 
     @Nullable
@@ -71,7 +73,7 @@
     }
 
     /** Converter */
-    public PageProperties toPageProperties() {
-        return new PageProperties(lead);
+    public PageProperties toPageProperties(@NonNull Site site) {
+        return new PageProperties(site, lead);
     }
 }
diff --git a/app/src/main/java/org/wikipedia/server/restbase/RbPageLead.java 
b/app/src/main/java/org/wikipedia/server/restbase/RbPageLead.java
index 9cef862..49460ec 100644
--- a/app/src/main/java/org/wikipedia/server/restbase/RbPageLead.java
+++ b/app/src/main/java/org/wikipedia/server/restbase/RbPageLead.java
@@ -7,6 +7,7 @@
 import com.google.gson.annotations.JsonAdapter;
 import com.google.gson.annotations.SerializedName;
 
+import org.wikipedia.Site;
 import org.wikipedia.page.GeoTypeAdapter;
 import org.wikipedia.page.Page;
 import org.wikipedia.page.PageProperties;
@@ -15,7 +16,6 @@
 import org.wikipedia.server.PageLead;
 import org.wikipedia.server.PageLeadProperties;
 import org.wikipedia.server.Protection;
-import org.wikipedia.util.UriUtil;
 import org.wikipedia.util.log.L;
 
 import java.util.List;
@@ -68,7 +68,7 @@
     public Page toPage(PageTitle title) {
         return new Page(adjustPageTitle(title),
                 getSections(),
-                toPageProperties());
+                toPageProperties(title.getSite()));
     }
 
     /* package */ PageTitle adjustPageTitle(PageTitle title) {
@@ -92,8 +92,8 @@
     }
 
     /** Converter */
-    public PageProperties toPageProperties() {
-        return new PageProperties(this);
+    public PageProperties toPageProperties(@NonNull Site site) {
+        return new PageProperties(site, this);
     }
 
     public int getId() {
@@ -111,10 +111,10 @@
 
     @Override
     @Nullable
-    public String getTitlePronunciationUrl() {
+    public String getTitlePronunciationUrl(@NonNull Site site) {
         return titlePronunciation == null
                 ? null
-                : 
UriUtil.resolveProtocolRelativeUrl(titlePronunciation.getUrl());
+                : site.resolveProtocolRelativeUrl(titlePronunciation.getUrl());
     }
 
     @Override
diff --git a/app/src/main/java/org/wikipedia/settings/Prefs.java 
b/app/src/main/java/org/wikipedia/settings/Prefs.java
index 55544fc..44eb0e6 100644
--- a/app/src/main/java/org/wikipedia/settings/Prefs.java
+++ b/app/src/main/java/org/wikipedia/settings/Prefs.java
@@ -306,6 +306,12 @@
                 "%1$s://%2$s/api/rest_v1");
     }
 
+    @NonNull
+    public static String getMediaWikiBaseUri() {
+        return 
StringUtil.defaultIfBlank(getString(R.string.preference_key_mediawiki_base_uri, 
null),
+                "https://wikipedia.org";);
+    }
+
     public static long getLastRunTime(@NonNull String task) {
         return getLong(getLastRunTimeKey(task), 0);
     }
diff --git a/app/src/main/java/org/wikipedia/util/UriUtil.java 
b/app/src/main/java/org/wikipedia/util/UriUtil.java
index 6316827..0cf4b12 100644
--- a/app/src/main/java/org/wikipedia/util/UriUtil.java
+++ b/app/src/main/java/org/wikipedia/util/UriUtil.java
@@ -57,16 +57,6 @@
         }
     }
 
-    /**
-     * Resolves a potentially protocol relative URL to a 'full' URL
-     *
-     * @param url Url to check for (and fix) protocol relativeness
-     * @return A fully qualified, protocol specified URL
-     */
-    public static String resolveProtocolRelativeUrl(String url) {
-        return (url.startsWith("//") ? 
WikipediaApp.getInstance().getNetworkProtocol() + ":" + url : url);
-    }
-
     public static boolean isValidPageLink(Uri uri) {
         return ("wikipedia.org".equals(uri.getAuthority()) && 
!TextUtils.isEmpty(uri.getPath())
                 && uri.getPath().startsWith("/wiki"));
diff --git a/app/src/main/java/org/wikipedia/wiktionary/WiktionaryDialog.java 
b/app/src/main/java/org/wikipedia/wiktionary/WiktionaryDialog.java
index 2eca049..0d5d314 100644
--- a/app/src/main/java/org/wikipedia/wiktionary/WiktionaryDialog.java
+++ b/app/src/main/java/org/wikipedia/wiktionary/WiktionaryDialog.java
@@ -105,7 +105,7 @@
             return;
         }
 
-        PageService contentService = ContentServiceFactory.create(new 
Site(pageTitle.getSite().getLanguageCode() + WIKTIONARY_DOMAIN));
+        PageService contentService = ContentServiceFactory.create(new 
Site(pageTitle.getSite().getUseSecure(), pageTitle.getSite().getLanguageCode() 
+ WIKTIONARY_DOMAIN));
         if (contentService instanceof RbContentService) {
             ((RbContentService) contentService).define(
                     addUnderscores(selectedText),
diff --git a/app/src/main/res/values/preference_keys.xml 
b/app/src/main/res/values/preference_keys.xml
index 2118f60..da2f873 100644
--- a/app/src/main/res/values/preference_keys.xml
+++ b/app/src/main/res/values/preference_keys.xml
@@ -20,6 +20,7 @@
     <string name="preference_key_show_images">showImages</string>
     <string name="preference_key_use_restbase">useRestbase</string>
     <string 
name="preference_key_use_restbase_manual">useRestbase_setManually</string>
+    <string name="preference_key_mediawiki_base_uri">mediaWikiBaseUri</string>
     <string name="preference_key_restbase_ticket">restbaseTicket</string>
     <string name="preference_key_request_successes">requestSuccesses</string>
     <string 
name="preference_key_restbase_uri_format">RESTBaseUriFormat</string>
diff --git a/app/src/main/res/xml/developer_preferences.xml 
b/app/src/main/res/xml/developer_preferences.xml
index 1f22cd3..0d984c4 100644
--- a/app/src/main/res/xml/developer_preferences.xml
+++ b/app/src/main/res/xml/developer_preferences.xml
@@ -42,6 +42,16 @@
             \n%2$s &#10139; WP domain
             \nNote: change requires restart." />
 
+        <!--suppress AndroidUnknownAttribute -->
+        <org.wikipedia.settings.EditTextAutoSummarizePreference
+            style="@style/DataStringPreference"
+            android:key="@string/preference_key_mediawiki_base_uri"
+            android:title="@string/preference_key_mediawiki_base_uri"
+            android:dialogMessage="Prod (default if blank): 
https://wikipedia.org
+            \nDev: http://host:8080
+            \nBeta cluster: http://wikipedia.beta.wmflabs.org
+            \nNote: change requires restart." />
+
     </PreferenceCategory>
 
     <PreferenceCategory 
android:title="@string/preferences_developer_onboarding_heading">

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic421239050d7c7e16147b4ad66550d2418acb362
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Niedzielski <[email protected]>

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

Reply via email to