android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.android.captiveportallogin.CaptivePortalLoginActivity"
- tools:ignore="MergeRootFrame">
+ tools:ignore="MergeRootFrame" >
+
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
- <TextView
- android:id="@+id/url_bar"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textSize="20sp"
- android:singleLine="true" />
+ <FrameLayout
+ android:layout_width="match_parent"
+ android:layout_height="4dp" >
- <ProgressBar
- android:id="@+id/progress_bar"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- style="?android:attr/progressBarStyleHorizontal" />
+ <!-- Eliminates ProgressBar padding by boxing it into a 4dp high container -->
+ <ProgressBar
+ android:id="@+id/progress_bar"
+ style="@android:style/Widget.Material.Light.ProgressBar.Horizontal"
+ android:indeterminate="false"
+ android:max="100"
+ android:progress="0"
+ android:layout_gravity="center"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" />
+ </FrameLayout>
- <WebView
- android:id="@+id/webview"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_alignParentBottom="false"
- android:layout_alignParentRight="false" />
+ <WebView
+ android:id="@+id/webview"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_alignParentBottom="false"
+ android:layout_alignParentRight="false" />
-</LinearLayout>
+ </LinearLayout>
</FrameLayout>
import android.util.TypedValue;
import android.view.Menu;
import android.view.MenuItem;
+import android.view.View;
import android.webkit.SslErrorHandler;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
// setContentView initializes the WebView logic which in turn reads the system properties.
setContentView(R.layout.activity_captive_portal_login);
- getActionBar().setDisplayShowHomeEnabled(false);
-
// Exit app if Network disappears.
final NetworkCapabilities networkCapabilities = mCm.getNetworkCapabilities(mNetwork);
if (networkCapabilities == null) {
}
mCm.registerNetworkCallback(builder.build(), mNetworkCallback);
- final WebView myWebView = (WebView) findViewById(R.id.webview);
- myWebView.clearCache(true);
- WebSettings webSettings = myWebView.getSettings();
+ getActionBar().setDisplayShowHomeEnabled(false);
+ getActionBar().setElevation(0); // remove shadow
+ getActionBar().setTitle(getHeaderTitle());
+ getActionBar().setSubtitle("");
+
+ final WebView webview = getWebview();
+ webview.clearCache(true);
+ WebSettings webSettings = webview.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);
mWebViewClient = new MyWebViewClient();
- myWebView.setWebViewClient(mWebViewClient);
- myWebView.setWebChromeClient(new MyWebChromeClient());
+ webview.setWebViewClient(mWebViewClient);
+ webview.setWebChromeClient(new MyWebChromeClient());
// Start initial page load so WebView finishes loading proxy settings.
// Actual load of mUrl is initiated by MyWebViewClient.
- myWebView.loadData("", "text/html", null);
+ webview.loadData("", "text/html", null);
}
// Find WebView's proxy BroadcastReceiver and prompt it to read proxy system properties.
if (url == null) {
url = mCm.getCaptivePortalServerUrl();
}
+ return makeURL(url);
+ }
+
+ private static URL makeURL(String url) {
try {
return new URL(url);
} catch (MalformedURLException e) {
- Log.e(TAG, "Invalid captive portal URL " + url);
+ Log.e(TAG, "Invalid URL " + url);
}
return null;
}
// 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);
+ getActionBar().setSubtitle(getHeaderSubtitle(url));
}
+ getProgressBar().setVisibility(View.VISIBLE);
testForCaptivePortal();
}
@Override
public void onPageFinished(WebView view, String url) {
mPagesLoaded++;
+ getProgressBar().setVisibility(View.INVISIBLE);
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.
private class MyWebChromeClient extends WebChromeClient {
@Override
public void onProgressChanged(WebView view, int newProgress) {
- final ProgressBar myProgressBar = (ProgressBar) findViewById(R.id.progress_bar);
- myProgressBar.setProgress(newProgress);
+ getProgressBar().setProgress(newProgress);
+ }
+ }
+
+ private ProgressBar getProgressBar() {
+ return (ProgressBar) findViewById(R.id.progress_bar);
+ }
+
+ private WebView getWebview() {
+ return (WebView) findViewById(R.id.webview);
+ }
+
+ private String getHeaderTitle() {
+ return getString(R.string.action_bar_label);
+ }
+
+ private String getHeaderSubtitle(String urlString) {
+ URL url = makeURL(urlString);
+ if (url == null) {
+ return urlString;
+ }
+ final String https = "https";
+ if (https.equals(url.getProtocol())) {
+ return https + "://" + url.getHost();
}
+ return url.getHost();
}
}