Yuvipanda has uploaded a new change for review.

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


Change subject: Add Site object, make it part of PageTitle
......................................................................

Add Site object, make it part of PageTitle

Change-Id: I5bc57d5a7c3e9948703f45b7ba27698237b36713
---
M 
wikipedia-it/src/main/java/org/wikimedia/wikipedia/test/PageFetchTaskTests.java
M wikipedia-it/src/main/java/org/wikimedia/wikipedia/test/PageTitleTests.java
M wikipedia/src/main/java/org/wikimedia/wikipedia/LinkHandler.java
M wikipedia/src/main/java/org/wikimedia/wikipedia/PageActivity.java
M wikipedia/src/main/java/org/wikimedia/wikipedia/PageTitle.java
A wikipedia/src/main/java/org/wikimedia/wikipedia/Site.java
M wikipedia/src/main/java/org/wikimedia/wikipedia/WikipediaApp.java
7 files changed, 107 insertions(+), 23 deletions(-)


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

diff --git 
a/wikipedia-it/src/main/java/org/wikimedia/wikipedia/test/PageFetchTaskTests.java
 
b/wikipedia-it/src/main/java/org/wikimedia/wikipedia/test/PageFetchTaskTests.java
index e5f149d..714c377 100644
--- 
a/wikipedia-it/src/main/java/org/wikimedia/wikipedia/test/PageFetchTaskTests.java
+++ 
b/wikipedia-it/src/main/java/org/wikimedia/wikipedia/test/PageFetchTaskTests.java
@@ -2,11 +2,11 @@
 
 import android.content.Intent;
 import android.test.ActivityUnitTestCase;
-import android.util.Log;
 import org.mediawiki.api.json.Api;
 import org.wikimedia.wikipedia.Page;
 import org.wikimedia.wikipedia.PageFetchTask;
 import org.wikimedia.wikipedia.PageTitle;
+import org.wikimedia.wikipedia.Site;
 
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
@@ -14,7 +14,8 @@
 public class PageFetchTaskTests extends 
ActivityUnitTestCase<TestDummyActivity> {
     private static final int TASK_COMPLETION_TIMEOUT = 20000;
 
-    private Api enwiki;
+    private Api enwikiAPI;
+    private Site enwiki;
 
     public PageFetchTaskTests() {
         super(TestDummyActivity.class);
@@ -23,7 +24,9 @@
     @Override
     public void setUp() throws Exception {
         super.setUp();
-        enwiki = new Api("en.wikipedia.org");
+        enwiki = new Site("en.wikipedia.org");
+        enwikiAPI = new Api("en.wikipedia.org");
+
         startActivity(new Intent(), null, null);
     }
 
@@ -32,7 +35,7 @@
         runTestOnUiThread(new Runnable() {
             @Override
             public void run() {
-                new PageFetchTask(enwiki, new PageTitle(null, "India")) {
+                new PageFetchTask(enwikiAPI, new PageTitle(null, "India", 
enwiki)) {
                     @Override
                     public void onFinish(Page result) {
                         assertNotNull(result);
diff --git 
a/wikipedia-it/src/main/java/org/wikimedia/wikipedia/test/PageTitleTests.java 
b/wikipedia-it/src/main/java/org/wikimedia/wikipedia/test/PageTitleTests.java
index 8583d59..c2425d6 100644
--- 
a/wikipedia-it/src/main/java/org/wikimedia/wikipedia/test/PageTitleTests.java
+++ 
b/wikipedia-it/src/main/java/org/wikimedia/wikipedia/test/PageTitleTests.java
@@ -2,23 +2,35 @@
 
 import junit.framework.TestCase;
 import org.wikimedia.wikipedia.PageTitle;
+import org.wikimedia.wikipedia.Site;
 
 public class PageTitleTests extends TestCase {
     public void testPrefixedText() throws Exception {
-        assertEquals(new PageTitle(null, "Test  title").getPrefixedText(), 
"Test  title");
-        assertEquals(new PageTitle(null, "Test title").getPrefixedText(), 
"Test title");
-        assertEquals(new PageTitle("Talk", "Test title").getPrefixedText(), 
"Talk:Test title");
-        assertEquals(new PageTitle(null, "Test   title").getText(), "Test   
title");
+        Site enwiki = new Site("en.wikipedia.org");
+
+        assertEquals(new PageTitle(null, "Test  title", 
enwiki).getPrefixedText(), "Test  title");
+        assertEquals(new PageTitle(null, "Test title", 
enwiki).getPrefixedText(), "Test title");
+        assertEquals(new PageTitle("Talk", "Test title", 
enwiki).getPrefixedText(), "Talk:Test title");
+        assertEquals(new PageTitle(null, "Test   title", enwiki).getText(), 
"Test   title");
     }
 
     public void testFromInternalLink() throws Exception {
-        
assertEquals(PageTitle.fromInternalLink("/wiki/India").getPrefixedText(), 
"India");
-        assertNull(PageTitle.fromInternalLink("/wiki/India").getNamespace());
+        Site enwiki = new Site("en.wikipedia.org");
 
-        
assertEquals(PageTitle.fromInternalLink("/wiki/Talk:India").getNamespace(), 
"Talk");
-        assertEquals(PageTitle.fromInternalLink("/wiki/Talk:India").getText(), 
"India");
+        assertEquals(PageTitle.fromInternalLink("/wiki/India", 
enwiki).getPrefixedText(), "India");
+        assertNull(PageTitle.fromInternalLink("/wiki/India", 
enwiki).getNamespace());
 
-        
assertEquals(PageTitle.fromInternalLink("/wiki/Talk:India#History").getNamespace(),
 "Talk");
-        
assertEquals(PageTitle.fromInternalLink("/wiki/Talk:India#History").getText(), 
"India");
+        assertEquals(PageTitle.fromInternalLink("/wiki/Talk:India", 
enwiki).getNamespace(), "Talk");
+        assertEquals(PageTitle.fromInternalLink("/wiki/Talk:India", 
enwiki).getText(), "India");
+
+        assertEquals(PageTitle.fromInternalLink("/wiki/Talk:India#History", 
enwiki).getNamespace(), "Talk");
+        assertEquals(PageTitle.fromInternalLink("/wiki/Talk:India#History", 
enwiki).getText(), "India");
+    }
+
+    public void testSite() throws Exception {
+        Site enwiki = new Site("en.wikipedia.org");
+
+        assertEquals(enwiki, new PageTitle(null, "Test", enwiki).getSite());
+        assertEquals(enwiki, new Site("en.wikipedia.org"));
     }
 }
diff --git a/wikipedia/src/main/java/org/wikimedia/wikipedia/LinkHandler.java 
b/wikipedia/src/main/java/org/wikimedia/wikipedia/LinkHandler.java
index fb5cbd3..b968f88 100644
--- a/wikipedia/src/main/java/org/wikimedia/wikipedia/LinkHandler.java
+++ b/wikipedia/src/main/java/org/wikimedia/wikipedia/LinkHandler.java
@@ -15,6 +15,7 @@
     private final Context context;
     private final CommunicationBridge bridge;
     private final Bus bus;
+    private final WikipediaApp app;
 
     public static class NewWikiPageNavigationEvent {
         private final PageTitle title;
@@ -31,7 +32,8 @@
     public LinkHandler(Context context, CommunicationBridge bridge) {
         this.context = context;
         this.bridge = bridge;
-        this.bus = ((WikipediaApp)context.getApplicationContext()).getBus();
+        this.app = ((WikipediaApp)context.getApplicationContext());
+        this.bus = app.getBus();
 
         this.bridge.addListener("linkClicked", this);
     }
@@ -54,7 +56,7 @@
             Log.d("Wikipedia", "Link clicked was " + href);
             if (href.startsWith("/wiki/")) {
                 // TODO: Handle fragments
-                bus.post(new 
NewWikiPageNavigationEvent(PageTitle.fromInternalLink(href)));
+                bus.post(new 
NewWikiPageNavigationEvent(PageTitle.fromInternalLink(href, 
app.getPrimarySite())));
             } else {
                 // Assume everything else is an external link... for now!
                 handleExternalLink(href);
diff --git a/wikipedia/src/main/java/org/wikimedia/wikipedia/PageActivity.java 
b/wikipedia/src/main/java/org/wikimedia/wikipedia/PageActivity.java
index e08a5bf..9f30cd8 100644
--- a/wikipedia/src/main/java/org/wikimedia/wikipedia/PageActivity.java
+++ b/wikipedia/src/main/java/org/wikimedia/wikipedia/PageActivity.java
@@ -13,13 +13,15 @@
     EditText pageNameText;
 
     private Bus bus;
+    private WikipediaApp app;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
 
-        bus = ((WikipediaApp)getApplicationContext()).getBus();
+        app = ((WikipediaApp)getApplicationContext());
+        bus = app.getBus();
         bus.register(this);
 
         pageGoButton = (Button) findViewById(R.id.pageGoButton);
@@ -28,7 +30,7 @@
         pageGoButton.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
-                PageTitle title = new PageTitle(null, 
pageNameText.getText().toString());
+                PageTitle title = new PageTitle(null, 
pageNameText.getText().toString(), app.getPrimarySite());
                 displayNewPage(title);
             }
         });
diff --git a/wikipedia/src/main/java/org/wikimedia/wikipedia/PageTitle.java 
b/wikipedia/src/main/java/org/wikimedia/wikipedia/PageTitle.java
index 83e8313..55e0fe7 100644
--- a/wikipedia/src/main/java/org/wikimedia/wikipedia/PageTitle.java
+++ b/wikipedia/src/main/java/org/wikimedia/wikipedia/PageTitle.java
@@ -15,14 +15,20 @@
 public class PageTitle implements Parcelable {
     private final String namespace;
     private final String text;
+    private final Site site;
 
-    public PageTitle(final String namespace, final String text) {
+    public PageTitle(final String namespace, final String text, final Site 
site) {
         this.namespace = namespace;
         this.text = text;
+        this.site = site;
     }
 
     public String getNamespace() {
         return namespace;
+    }
+
+    public Site getSite() {
+        return site;
     }
 
     public String getText() {
@@ -52,12 +58,14 @@
     private PageTitle(Parcel in) {
         namespace = in.readString();
         text = in.readString();
+        site = in.readParcelable(Site.class.getClassLoader());
     }
 
     @Override
     public void writeToParcel(Parcel parcel, int flags) {
         parcel.writeString(namespace);
         parcel.writeString(text);
+        parcel.writeParcelable(site, flags);
     }
 
     /**
@@ -75,14 +83,14 @@
      *                     Should be URL decoded before passing in
      * @return A {@link PageTitle} object representing the internalLink passed 
in.
      */
-    public static PageTitle fromInternalLink(String internalLink) {
+    public static PageTitle fromInternalLink(String internalLink, Site site) {
         //TODO: Do better validation of internal links!
         //TODO: Handle fragments better!
         Matcher matches = internalLinkMatchPattern.matcher(internalLink);
         if (matches.matches()) {
             String namespace = matches.group(1);
             String pageText = matches.group(2);
-            return new PageTitle(namespace, pageText);
+            return new PageTitle(namespace, pageText, site);
         } else {
             throw new RuntimeException("Did not  match internalLinkPattern: " 
+ internalLink);
         }
diff --git a/wikipedia/src/main/java/org/wikimedia/wikipedia/Site.java 
b/wikipedia/src/main/java/org/wikimedia/wikipedia/Site.java
new file mode 100644
index 0000000..264a620
--- /dev/null
+++ b/wikipedia/src/main/java/org/wikimedia/wikipedia/Site.java
@@ -0,0 +1,49 @@
+package org.wikimedia.wikipedia;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * Represents a particular Wikimedia project.
+ */
+public class Site implements Parcelable {
+    private final String domain;
+
+    public Site(String domain) {
+        this.domain = domain;
+    }
+
+    public Site(Parcel in) {
+        domain = in.readString();
+    }
+
+    public String getDomain() {
+        return domain;
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeString(domain);
+    }
+
+    public static final Parcelable.Creator<Site> CREATOR
+            = new Parcelable.Creator<Site>() {
+        public Site createFromParcel(Parcel in) {
+            return new Site(in);
+        }
+
+        public Site[] newArray(int size) {
+            return new Site[size];
+        }
+    };
+
+    @Override
+    public boolean equals(Object o) {
+        return ((Site)o).getDomain().equals(domain);
+    }
+}
diff --git a/wikipedia/src/main/java/org/wikimedia/wikipedia/WikipediaApp.java 
b/wikipedia/src/main/java/org/wikimedia/wikipedia/WikipediaApp.java
index c7da481..8d396a6 100644
--- a/wikipedia/src/main/java/org/wikimedia/wikipedia/WikipediaApp.java
+++ b/wikipedia/src/main/java/org/wikimedia/wikipedia/WikipediaApp.java
@@ -20,9 +20,17 @@
     Api primarySiteAPI;
     public Api getPrimarySiteAPI() {
         if (primarySiteAPI == null) {
-            //TODO: Make this configurable
-            primarySiteAPI =  new Api("en.wikipedia.org");
+            primarySiteAPI =  new Api(getPrimarySite().getDomain());
         }
         return primarySiteAPI;
     }
+
+    private Site primarySite;
+    public Site getPrimarySite() {
+        if (primarySite == null) {
+            // FIXME: Actually read from SharedPreferences or something
+            primarySite = new Site("en.wikipedia.org");
+        }
+        return primarySite;
+    }
 }

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

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

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

Reply via email to