Merge "Prettify the captive portal sign-in activity" into oc-dev

This commit is contained in:
Hugo Benichi
2017-06-01 09:32:24 +00:00
committed by Android (Google) Code Review
3 changed files with 69 additions and 36 deletions

View File

@@ -4,31 +4,35 @@
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>

View File

@@ -4,7 +4,7 @@
Base application theme, dependent on API level. This theme is replaced
by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
-->
<style name="AppBaseTheme" parent="@android:style/Theme.Material.Settings">
<style name="AppBaseTheme" parent="@android:style/Theme.DeviceDefault.Settings">
<!--
Theme customizations available in newer API levels can go in
res/values-vXX/styles.xml, while customizations related to
@@ -15,8 +15,5 @@
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
<!-- Setting's theme's accent color makes ProgressBar useless, reset back. -->
<item name="android:colorAccent">@*android:color/material_deep_teal_500</item>
</style>
</resources>

View File

@@ -37,6 +37,7 @@ import android.util.Log;
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;
@@ -97,8 +98,6 @@ public class CaptivePortalLoginActivity extends Activity {
// 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) {
@@ -117,9 +116,14 @@ public class CaptivePortalLoginActivity extends Activity {
}
mCm.registerNetworkCallback(builder.build(), mNetworkCallback);
final WebView myWebView = 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);
webSettings.setUseWideViewPort(true);
@@ -128,11 +132,11 @@ public class CaptivePortalLoginActivity extends Activity {
webSettings.setBuiltInZoomControls(true);
webSettings.setDisplayZoomControls(false);
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.
@@ -251,10 +255,14 @@ public class CaptivePortalLoginActivity extends Activity {
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;
}
@@ -331,15 +339,16 @@ public class CaptivePortalLoginActivity extends Activity {
// 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 = 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.
@@ -412,8 +421,31 @@ public class CaptivePortalLoginActivity extends Activity {
private class MyWebChromeClient extends WebChromeClient {
@Override
public void onProgressChanged(WebView view, int newProgress) {
final ProgressBar myProgressBar = findViewById(R.id.progress_bar);
myProgressBar.setProgress(newProgress);
getProgressBar().setProgress(newProgress);
}
}
private ProgressBar getProgressBar() {
return findViewById(R.id.progress_bar);
}
private WebView getWebview() {
return 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();
}
}