Yuvipanda has submitted this change and it was merged.

Change subject: Bounce Special pages to external browser.
......................................................................


Bounce Special pages to external browser.

Change-Id: I4372b73bbeb51187f96038ca66407dc21cf4e62e
---
M wikipedia/src/main/java/org/wikipedia/PageTitle.java
M wikipedia/src/main/java/org/wikipedia/Utils.java
M wikipedia/src/main/java/org/wikipedia/page/PageActivity.java
M wikipedia/src/main/java/org/wikipedia/search/SearchArticlesTask.java
4 files changed, 55 insertions(+), 3 deletions(-)

Approvals:
  Yuvipanda: Verified; Looks good to me, approved



diff --git a/wikipedia/src/main/java/org/wikipedia/PageTitle.java 
b/wikipedia/src/main/java/org/wikipedia/PageTitle.java
index 85912ff..fab691b 100644
--- a/wikipedia/src/main/java/org/wikipedia/PageTitle.java
+++ b/wikipedia/src/main/java/org/wikipedia/PageTitle.java
@@ -102,12 +102,12 @@
         this.text = json.optString("text", null);
     }
 
-    public String getCanonicalUri() {
+    private String getUriForDomain(String domain) {
         try {
             return String.format(
                     "%1$s://%2$s/wiki/%3$s%4$s",
                     WikipediaApp.PROTOCOL,
-                    getSite().getDomain(),
+                    domain,
                     URLEncoder.encode(getPrefixedText().replace(" ", "_"), 
"utf-8"),
                     (this.fragment != null && this.fragment.length() > 0) ? 
("#" + this.fragment) : ""
             );
@@ -117,6 +117,14 @@
         }
     }
 
+    public String getCanonicalUri() {
+        return getUriForDomain(getSite().getDomain());
+    }
+
+    public String getMobileUri() {
+        return getUriForDomain(getSite().getApiDomain());
+    }
+
     public String getUriForAction(String action) {
         try {
             return String.format(
diff --git a/wikipedia/src/main/java/org/wikipedia/Utils.java 
b/wikipedia/src/main/java/org/wikipedia/Utils.java
index 56144ee..8a99f69 100644
--- a/wikipedia/src/main/java/org/wikipedia/Utils.java
+++ b/wikipedia/src/main/java/org/wikipedia/Utils.java
@@ -2,6 +2,8 @@
 
 import android.app.*;
 import android.content.*;
+import android.content.pm.*;
+import android.net.Uri;
 import android.os.*;
 import android.text.*;
 import android.text.format.*;
@@ -398,4 +400,42 @@
     public static String getDBNameForSite(Site site) {
         return site.getLanguage() + "wiki";
     }
+
+    /**
+     * Open the specified URI in an external browser (even if our app's intent 
filter
+     * matches the given URI)
+     *
+     * @param context Context of the calling app
+     * @param uri URI to open in an external browser
+     */
+    public static void visitInExternalBrowser(final Context context, Uri uri){
+        Intent intent = new Intent();
+        intent.setAction(Intent.ACTION_VIEW);
+        intent.setData(uri);
+        List<ResolveInfo> resInfo = 
context.getPackageManager().queryIntentActivities(intent, 0);
+        if (!resInfo.isEmpty()){
+            List<Intent> browserIntents = new ArrayList<Intent>();
+            for (ResolveInfo resolveInfo : resInfo) {
+                String packageName = resolveInfo.activityInfo.packageName;
+                // remove our app from the selection!
+                if(packageName.equals(context.getPackageName()))
+                    continue;
+                Intent newIntent = new Intent(Intent.ACTION_VIEW);
+                newIntent.setData(uri);
+                newIntent.setPackage(packageName);
+                browserIntents.add(newIntent);
+            }
+            if (browserIntents.size() > 0) {
+                // initialize the chooser intent with one of the 
browserIntents, and remove that
+                // intent from the list, since the chooser already has it, and 
we don't need to
+                // add it again in putExtra. (initialize with the last item in 
the list, to preserve order)
+                Intent chooserIntent = 
Intent.createChooser(browserIntents.remove(browserIntents.size() - 1), null);
+                chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, 
browserIntents.toArray(new Parcelable[]{}));
+                context.startActivity(chooserIntent);
+                return;
+            }
+        }
+        context.startActivity(intent);
+    }
+
 }
diff --git a/wikipedia/src/main/java/org/wikipedia/page/PageActivity.java 
b/wikipedia/src/main/java/org/wikipedia/page/PageActivity.java
index 503a1dc..42419a7 100644
--- a/wikipedia/src/main/java/org/wikipedia/page/PageActivity.java
+++ b/wikipedia/src/main/java/org/wikipedia/page/PageActivity.java
@@ -87,6 +87,10 @@
     }
 
     private void displayNewPage(PageTitle title, HistoryEntry entry) {
+        if(title.isSpecial()) {
+            Utils.visitInExternalBrowser(this, 
Uri.parse(title.getMobileUri()));
+            return;
+        }
         PageViewFragment pageFragment = new PageViewFragment(title, entry, 
R.id.search_fragment);
         getSupportFragmentManager().beginTransaction()
                 .setCustomAnimations(R.anim.slide_in_right, 
R.anim.slide_out_left, R.anim.slide_in_left, R.anim.slide_out_right)
diff --git 
a/wikipedia/src/main/java/org/wikipedia/search/SearchArticlesTask.java 
b/wikipedia/src/main/java/org/wikipedia/search/SearchArticlesTask.java
index f224811..4544429 100644
--- a/wikipedia/src/main/java/org/wikipedia/search/SearchArticlesTask.java
+++ b/wikipedia/src/main/java/org/wikipedia/search/SearchArticlesTask.java
@@ -31,7 +31,7 @@
 
         ArrayList<PageTitle> pageTitles = new ArrayList<PageTitle>();
         for (int i = 0; i < searchResults.length(); i++) {
-            pageTitles.add(new PageTitle(null, searchResults.optString(i), 
site));
+            pageTitles.add(new PageTitle(searchResults.optString(i), site));
         }
 
         if (WikipediaApp.isWikipediaZeroDevmodeOn()) {

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I4372b73bbeb51187f96038ca66407dc21cf4e62e
Gerrit-PatchSet: 3
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Dbrant <dbr...@wikimedia.org>
Gerrit-Reviewer: Yuvipanda <yuvipa...@gmail.com>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to