Skip to content

Commit

Permalink
Fixed wiki link freeze when internal browser was disabled
Browse files Browse the repository at this point in the history
(cherry picked from commit 0ec2e62)

Conflicts:
	src/main/java/org/quantumbadger/redreader/common/LinkHandler.java
  • Loading branch information
QuantumBadger committed Apr 2, 2016
1 parent f641910 commit fe47954
Show file tree
Hide file tree
Showing 5 changed files with 88 additions and 21 deletions.
3 changes: 3 additions & 0 deletions assets/changelog.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
69/1.9.3.3
Fixed wiki link freeze when internal browser was disabled

68/1.9.3.2
Use updated imgur API

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -426,7 +426,7 @@ public void run() {
AndroidApi.UI_THREAD_HANDLER.post(new Runnable() {
@Override
public void run() {
LinkHandler.openWebBrowser(ImageViewActivity.this, Uri.parse(mUrl));
LinkHandler.openWebBrowser(ImageViewActivity.this, Uri.parse(mUrl), false);
finish();
}
});
Expand Down Expand Up @@ -524,7 +524,7 @@ public boolean onError(final MediaPlayer mediaPlayer, final int i, final int i1)
AndroidApi.UI_THREAD_HANDLER.post(new Runnable() {
@Override
public void run() {
LinkHandler.openWebBrowser(ImageViewActivity.this, Uri.parse(mUrl));
LinkHandler.openWebBrowser(ImageViewActivity.this, Uri.parse(mUrl), false);
finish();
}
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ protected void onCreate(final Bundle savedInstanceState) {
return;
}

LinkHandler.onLinkClicked(this, data.toString());
LinkHandler.onLinkClicked(this, data.toString(), false, null, null, 0, true);
finish();
}
}
97 changes: 79 additions & 18 deletions src/main/java/org/quantumbadger/redreader/common/LinkHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,18 +20,22 @@
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.os.Handler;
import android.os.Parcelable;
import android.preference.PreferenceManager;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import org.quantumbadger.redreader.R;
import org.quantumbadger.redreader.activities.*;
import org.quantumbadger.redreader.cache.RequestFailureType;
import org.quantumbadger.redreader.fragments.UserProfileDialog;
import org.quantumbadger.redreader.image.*;
import org.quantumbadger.redreader.reddit.things.RedditPost;
import org.quantumbadger.redreader.reddit.url.RedditURLParser;

import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
Expand Down Expand Up @@ -68,6 +72,17 @@ public static void onLinkClicked(
final RedditPost post,
final ImgurAPI.AlbumInfo albumInfo,
final int albumImageIndex) {
onLinkClicked(activity, url, forceNoImage, post, null, 0, false);
}

public static void onLinkClicked(
final AppCompatActivity activity,
String url,
final boolean forceNoImage,
final RedditPost post,
final ImgurAPI.AlbumInfo albumInfo,
final int albumImageIndex,
final boolean fromExternalIntent) {

if(url.startsWith("rr://")) {

Expand Down Expand Up @@ -154,40 +169,86 @@ public void run() {
// Use a browser

if(!PrefsUtility.pref_behaviour_useinternalbrowser(activity, PreferenceManager.getDefaultSharedPreferences(activity))) {
openWebBrowser(activity, Uri.parse(url));
return;
if(openWebBrowser(activity, Uri.parse(url), fromExternalIntent)) {
return;
}
}

if(youtubeDotComPattern.matcher(url).matches()
|| vimeoPattern.matcher(url).matches()
|| googlePlayPattern.matcher(url).matches()) {
openWebBrowser(activity, Uri.parse(url));
return;
if(openWebBrowser(activity, Uri.parse(url), fromExternalIntent)) {
return;
}
}

final Matcher youtuDotBeMatcher = youtuDotBePattern.matcher(url);

if(youtuDotBeMatcher.find() && youtuDotBeMatcher.group(1) != null) {
final String youtuBeUrl = "http://youtube.com/watch?v=" + youtuDotBeMatcher.group(1)
+ (youtuDotBeMatcher.group(2).length() > 0 ? "&" + youtuDotBeMatcher.group(2).substring(1) : "");
openWebBrowser(activity, Uri.parse(youtuBeUrl));

} else {
final Intent intent = new Intent(activity, WebViewActivity.class);
intent.putExtra("url", url);
intent.putExtra("post", post);
activity.startActivity(intent);
if(openWebBrowser(activity, Uri.parse(youtuBeUrl), fromExternalIntent)) {
return;
}
}

final Intent intent = new Intent(activity, WebViewActivity.class);
intent.putExtra("url", url);
intent.putExtra("post", post);
activity.startActivity(intent);
}

public static void openWebBrowser(AppCompatActivity activity, Uri uri) {
try {
final Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(uri);
activity.startActivity(intent);
} catch(Exception e) {
General.quickToast(activity, "Failed to open url \"" + uri.toString() + "\" in external browser");
public static boolean openWebBrowser(AppCompatActivity activity, Uri uri, final boolean fromExternalIntent) {

if(!fromExternalIntent) {
try {
final Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(uri);
activity.startActivity(intent);
return true;

} catch(Exception e) {
General.quickToast(activity, "Failed to open url \"" + uri.toString() + "\" in external browser");
}

} else {

// We want to make sure we don't just pass this back to ourselves

final Intent baseIntent = new Intent(Intent.ACTION_VIEW);
baseIntent.setData(uri);

final ArrayList<Intent> targetIntents = new ArrayList<>();

for (final ResolveInfo info : activity.getPackageManager().queryIntentActivities(baseIntent, 0)) {

final String packageName = info.activityInfo.packageName;
Log.i("RRDEBUG", "Considering " + packageName);

if (packageName != null && !packageName.startsWith("org.quantumbadger.redreader")) {
final Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(uri);
intent.setPackage(packageName);
targetIntents.add(intent);
}
}

if(!targetIntents.isEmpty()) {

final Intent chooserIntent = Intent.createChooser(
targetIntents.remove(0),
activity.getString(R.string.open_with));

if(!targetIntents.isEmpty()) {
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetIntents.toArray(new Parcelable[]{}));
}
activity.startActivity(chooserIntent);

return true;
}
}

return false;
}

public static final Pattern imgurPattern = Pattern.compile(".*[^A-Za-z]imgur\\.com/(\\w+).*"),
Expand Down
3 changes: 3 additions & 0 deletions src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -753,4 +753,7 @@
<!-- 2016-03-20 -->
<string name="lang_se">Swedish</string>

<!-- 2016-04-02 -->
<string name="open_with">Open with</string>

</resources>

0 comments on commit fe47954

Please sign in to comment.