Skip to content

Commit

Permalink
Fixing subreddit sidebar link issue
Browse files Browse the repository at this point in the history
  • Loading branch information
QuantumBadger committed Aug 5, 2016
1 parent 978e9c8 commit 66c2847
Showing 1 changed file with 78 additions and 72 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,12 @@
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.*;
import android.webkit.CookieManager;
import android.webkit.CookieSyncManager;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.FrameLayout;
import android.widget.ProgressBar;
import android.widget.Toast;
Expand All @@ -51,7 +56,7 @@ public class WebViewFragment extends Fragment implements RedditPostView.PostSele

private AppCompatActivity mActivity;

private String url, html;
private String mUrl, html;
private volatile String currentUrl;
private volatile boolean goingBack;
private volatile int lastBackDepthAttempt;
Expand Down Expand Up @@ -87,7 +92,7 @@ public static WebViewFragment newInstanceHtml(final String html) {
public void onCreate(final Bundle savedInstanceState) {
// TODO load position/etc?
super.onCreate(savedInstanceState);
url = getArguments().getString("url");
mUrl = getArguments().getString("url");
html = getArguments().getString("html");
}

Expand Down Expand Up @@ -160,105 +165,106 @@ public void run() {
});


if(url != null) {

webView.loadUrl(url);

webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(final WebView view, final String url) {
if(mUrl != null) {
webView.loadUrl(mUrl);
} else {
webView.loadDataWithBaseURL("https://reddit.com/", html, "text/html; charset=UTF-8", null, null);
}

if(url == null) return false;
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(final WebView view, final String url) {

if(url.startsWith("data:")) {
// Prevent imgur bug where we're directed to some random data URI
return true;
}
if(url == null) return false;

// Go back if loading same page to prevent redirect loops.
if(goingBack && currentUrl != null && url.equals(currentUrl)) {
if(url.startsWith("data:")) {
// Prevent imgur bug where we're directed to some random data URI
return true;
}

General.quickToast(mActivity,
String.format("Handling redirect loop (level %d)", -lastBackDepthAttempt), Toast.LENGTH_SHORT);
// Go back if loading same page to prevent redirect loops.
if(goingBack && currentUrl != null && url.equals(currentUrl)) {

lastBackDepthAttempt--;
General.quickToast(mActivity,
String.format("Handling redirect loop (level %d)", -lastBackDepthAttempt), Toast.LENGTH_SHORT);

if (webView.canGoBackOrForward(lastBackDepthAttempt)) {
webView.goBackOrForward(lastBackDepthAttempt);
} else {
mActivity.finish();
}
} else {
lastBackDepthAttempt--;

if(RedditURLParser.parse(Uri.parse(url)) != null) {
LinkHandler.onLinkClicked(mActivity, url, false);
} else {
webView.loadUrl(url);
currentUrl = url;
}
if (webView.canGoBackOrForward(lastBackDepthAttempt)) {
webView.goBackOrForward(lastBackDepthAttempt);
} else {
mActivity.finish();
}
} else {

return true;
if(RedditURLParser.parse(Uri.parse(url)) != null) {
LinkHandler.onLinkClicked(mActivity, url, false);
} else {
webView.loadUrl(url);
currentUrl = url;
}
}

@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
return true;
}

@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);

if(mUrl != null && url != null) {

final AppCompatActivity activity = mActivity;

if(activity != null) {
activity.setTitle(url);
}
}
}

@Override
public void onPageFinished(final WebView view, final String url) {
super.onPageFinished(view, url);

new Timer().schedule(new TimerTask() {
@Override
public void run() {
@Override
public void onPageFinished(final WebView view, final String url) {
super.onPageFinished(view, url);

AndroidApi.UI_THREAD_HANDLER.post(new Runnable() {
@Override
public void run() {
new Timer().schedule(new TimerTask() {
@Override
public void run() {

if(currentUrl == null || url == null) return;
AndroidApi.UI_THREAD_HANDLER.post(new Runnable() {
@Override
public void run() {

if(!url.equals(view.getUrl())) return;
if(currentUrl == null || url == null) return;

if(goingBack && url.equals(currentUrl)) {
if(!url.equals(view.getUrl())) return;

General.quickToast(mActivity,
String.format("Handling redirect loop (level %d)", -lastBackDepthAttempt));
if(goingBack && url.equals(currentUrl)) {

lastBackDepthAttempt--;
General.quickToast(mActivity,
String.format("Handling redirect loop (level %d)", -lastBackDepthAttempt));

if(webView.canGoBackOrForward(lastBackDepthAttempt)) {
webView.goBackOrForward(lastBackDepthAttempt);
} else {
mActivity.finish();
}
lastBackDepthAttempt--;

if(webView.canGoBackOrForward(lastBackDepthAttempt)) {
webView.goBackOrForward(lastBackDepthAttempt);
} else {
goingBack = false;
mActivity.finish();
}
}
});
}
}, 1000);
}

@Override
public void doUpdateVisitedHistory(WebView view, String url, boolean isReload) {
super.doUpdateVisitedHistory(view, url, isReload);
}
});
} else {
goingBack = false;
}
}
});
}
}, 1000);
}

} else {
webView.loadData(html, "text/html; charset=UTF-8", null);
}
@Override
public void doUpdateVisitedHistory(WebView view, String url, boolean isReload) {
super.doUpdateVisitedHistory(view, url, isReload);
}
});

final FrameLayout outerFrame = new FrameLayout(mActivity);
outerFrame.addView(outer);
Expand Down Expand Up @@ -339,7 +345,7 @@ public void onPostCommentsSelected(final RedditPreparedPost post) {
}

public String getCurrentUrl() {
return (currentUrl != null) ? currentUrl : url;
return (currentUrl != null) ? currentUrl : mUrl;
}

@Override
Expand Down

0 comments on commit 66c2847

Please sign in to comment.