From e836b6847af968460f36a4e6649b8cb6f6da18db Mon Sep 17 00:00:00 2001 From: Paul Jensen Date: Tue, 19 May 2015 12:30:56 -0400 Subject: Disallow going back to initial empty page in captive portal app This is a little tricky because WebView history can only be cleared after the next page load and we don't want to allow hitting back during the first page load. Bug:21147832 Change-Id: I639dfd27d4dc3af618282256ca02b9947e64a7b9 --- .../CaptivePortalLoginActivity.java | 37 +++++++++++++++------- 1 file changed, 25 insertions(+), 12 deletions(-) (limited to 'packages/CaptivePortalLogin') diff --git a/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java b/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java index 4c907a3..d876264 100644 --- a/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java +++ b/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java @@ -66,6 +66,7 @@ public class CaptivePortalLoginActivity extends Activity { private NetworkCallback mNetworkCallback; private ConnectivityManager mCm; private boolean mLaunchBrowser = false; + private MyWebViewClient mWebViewClient; @Override protected void onCreate(Bundle savedInstanceState) { @@ -115,7 +116,8 @@ public class CaptivePortalLoginActivity extends Activity { myWebView.clearCache(true); WebSettings webSettings = myWebView.getSettings(); webSettings.setJavaScriptEnabled(true); - myWebView.setWebViewClient(new MyWebViewClient()); + mWebViewClient = new MyWebViewClient(); + myWebView.setWebViewClient(mWebViewClient); myWebView.setWebChromeClient(new MyWebChromeClient()); // Start initial page load so WebView finishes loading proxy settings. // Actual load of mUrl is initiated by MyWebViewClient. @@ -174,7 +176,7 @@ public class CaptivePortalLoginActivity extends Activity { @Override public void onBackPressed() { WebView myWebView = (WebView) findViewById(R.id.webview); - if (myWebView.canGoBack()) { + if (myWebView.canGoBack() && mWebViewClient.allowBack()) { myWebView.goBack(); } else { super.onBackPressed(); @@ -255,7 +257,12 @@ public class CaptivePortalLoginActivity extends Activity { getResources().getDisplayMetrics()) / TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1, getResources().getDisplayMetrics()); - private boolean mFirstPageLoad = true; + private int mPagesLoaded; + + // If we haven't finished cleaning up the history, don't allow going back. + public boolean allowBack() { + return mPagesLoaded > 1; + } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { @@ -264,26 +271,32 @@ public class CaptivePortalLoginActivity extends Activity { done(Result.WANTED_AS_IS); return; } - if (mFirstPageLoad) return; + // The first page load is used only to cause the WebView to + // fetch the proxy settings. Don't update the URL bar, and + // don't check if the captive portal is still there. + if (mPagesLoaded == 0) return; + // For internally generated pages, leave URL bar listing prior URL as this is the URL + // the page refers to. + if (!url.startsWith(INTERNAL_ASSETS)) { + final TextView myUrlBar = (TextView) findViewById(R.id.url_bar); + myUrlBar.setText(url); + } testForCaptivePortal(); } @Override public void onPageFinished(WebView view, String url) { - if (mFirstPageLoad) { - mFirstPageLoad = false; + mPagesLoaded++; + if (mPagesLoaded == 1) { // Now that WebView has loaded at least one page we know it has read in the proxy // settings. Now prompt the WebView read the Network-specific proxy settings. setWebViewProxy(); // Load the real page. view.loadUrl(mURL.toString()); return; - } - // For internally generated pages, leave URL bar listing prior URL as this is the URL - // the page refers to. - if (!url.startsWith(INTERNAL_ASSETS)) { - final TextView myUrlBar = (TextView) findViewById(R.id.url_bar); - myUrlBar.setText(url); + } else if (mPagesLoaded == 2) { + // Prevent going back to empty first page. + view.clearHistory(); } testForCaptivePortal(); } -- cgit v1.1