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 ➛ 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