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