summaryrefslogtreecommitdiffstats
path: root/packages/CaptivePortalLogin
diff options
context:
space:
mode:
authorPaul Jensen <pauljensen@google.com>2015-06-03 13:29:37 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2015-06-03 13:29:37 +0000
commit002f8c6cbc057426da17ff9d560c756e5d652ae2 (patch)
treeb2d0b14c2124ec7db250af49510ca2d74bc827ac /packages/CaptivePortalLogin
parent6ac63c7d7ba1bc0177d22650e6e2f7d8e412daa2 (diff)
parente247cdec6db549035b67bb21fa08a4c6c73897d3 (diff)
downloadframeworks_base-002f8c6cbc057426da17ff9d560c756e5d652ae2.zip
frameworks_base-002f8c6cbc057426da17ff9d560c756e5d652ae2.tar.gz
frameworks_base-002f8c6cbc057426da17ff9d560c756e5d652ae2.tar.bz2
am e247cdec: Merge "Update captive portal sign-in app SSL error page UI." into mnc-dev
* commit 'e247cdec6db549035b67bb21fa08a4c6c73897d3': Update captive portal sign-in app SSL error page UI.
Diffstat (limited to 'packages/CaptivePortalLogin')
-rw-r--r--packages/CaptivePortalLogin/assets/locked_page.pngbin7864 -> 0 bytes
-rw-r--r--packages/CaptivePortalLogin/assets/quantum_ic_warning_amber_96.pngbin0 -> 682 bytes
-rw-r--r--packages/CaptivePortalLogin/res/values/strings.xml3
-rw-r--r--packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java77
4 files changed, 70 insertions, 10 deletions
diff --git a/packages/CaptivePortalLogin/assets/locked_page.png b/packages/CaptivePortalLogin/assets/locked_page.png
deleted file mode 100644
index 91e1291..0000000
--- a/packages/CaptivePortalLogin/assets/locked_page.png
+++ /dev/null
Binary files differ
diff --git a/packages/CaptivePortalLogin/assets/quantum_ic_warning_amber_96.png b/packages/CaptivePortalLogin/assets/quantum_ic_warning_amber_96.png
new file mode 100644
index 0000000..08294ce
--- /dev/null
+++ b/packages/CaptivePortalLogin/assets/quantum_ic_warning_amber_96.png
Binary files differ
diff --git a/packages/CaptivePortalLogin/res/values/strings.xml b/packages/CaptivePortalLogin/res/values/strings.xml
index 8348be9..b1a3852 100644
--- a/packages/CaptivePortalLogin/res/values/strings.xml
+++ b/packages/CaptivePortalLogin/res/values/strings.xml
@@ -5,5 +5,8 @@
<string name="action_use_network">Use this network as is</string>
<string name="action_do_not_use_network">Do not use this network</string>
<string name="action_bar_label">Sign in to network</string>
+ <string name="ssl_error_warning">The network you&#8217;re trying to join has security issues.</string>
+ <string name="ssl_error_example">For example, the login page may not belong to the organization shown.</string>
+ <string name="ssl_error_continue">Continue anyway via browser</string>
</resources>
diff --git a/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java b/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java
index c7b7e6a..4c907a3 100644
--- a/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java
+++ b/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java
@@ -33,6 +33,7 @@ import android.os.Bundle;
import android.provider.Settings;
import android.util.ArrayMap;
import android.util.Log;
+import android.util.TypedValue;
import android.view.Menu;
import android.view.MenuItem;
import android.webkit.SslErrorHandler;
@@ -50,6 +51,7 @@ import java.net.URL;
import java.lang.InterruptedException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
+import java.util.Random;
public class CaptivePortalLoginActivity extends Activity {
private static final String TAG = "CaptivePortalLogin";
@@ -63,6 +65,7 @@ public class CaptivePortalLoginActivity extends Activity {
private String mResponseToken;
private NetworkCallback mNetworkCallback;
private ConnectivityManager mCm;
+ private boolean mLaunchBrowser = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -200,6 +203,18 @@ public class CaptivePortalLoginActivity extends Activity {
mCm.unregisterNetworkCallback(mNetworkCallback);
mNetworkCallback = null;
}
+ if (mLaunchBrowser) {
+ // Give time for this network to become default. After 500ms just proceed.
+ for (int i = 0; i < 5; i++) {
+ // TODO: This misses when mNetwork underlies a VPN.
+ if (mNetwork.equals(mCm.getActiveNetwork())) break;
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException e) {
+ }
+ }
+ startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(mURL.toString())));
+ }
}
private void testForCaptivePortal() {
@@ -233,18 +248,30 @@ public class CaptivePortalLoginActivity extends Activity {
private class MyWebViewClient extends WebViewClient {
private static final String INTERNAL_ASSETS = "file:///android_asset/";
- private boolean firstPageLoad = true;
+ private final String mBrowserBailOutToken = Long.toString(new Random().nextLong());
+ // How many Android device-independent-pixels per scaled-pixel
+ // dp/sp = (px/sp) / (px/dp) = (1/sp) / (1/dp)
+ private final float mDpPerSp = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 1,
+ getResources().getDisplayMetrics()) /
+ TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1,
+ getResources().getDisplayMetrics());
+ private boolean mFirstPageLoad = true;
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
- if (firstPageLoad) return;
+ if (url.contains(mBrowserBailOutToken)) {
+ mLaunchBrowser = true;
+ done(Result.WANTED_AS_IS);
+ return;
+ }
+ if (mFirstPageLoad) return;
testForCaptivePortal();
}
@Override
public void onPageFinished(WebView view, String url) {
- if (firstPageLoad) {
- firstPageLoad = false;
+ if (mFirstPageLoad) {
+ mFirstPageLoad = false;
// 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();
@@ -261,16 +288,46 @@ public class CaptivePortalLoginActivity extends Activity {
testForCaptivePortal();
}
+ // Convert Android device-independent-pixels (dp) to HTML size.
+ private String dp(int dp) {
+ // HTML px's are scaled just like dp's, so just add "px" suffix.
+ return Integer.toString(dp) + "px";
+ }
+
+ // Convert Android scaled-pixels (sp) to HTML size.
+ private String sp(int sp) {
+ // Convert sp to dp's.
+ float dp = sp * mDpPerSp;
+ // Apply a scale factor to make things look right.
+ dp *= 1.3;
+ // Convert dp's to HTML size.
+ return dp((int)dp);
+ }
+
// A web page consisting of a large broken lock icon to indicate SSL failure.
- final static String SSL_ERROR_HTML = "<!DOCTYPE html><html><head><style>" +
- "html { width:100%; height:100%; " +
- " background:url(locked_page.png) center center no-repeat; }" +
- "</style></head><body></body></html>";
+ private final String SSL_ERROR_HTML = "<html><head><style>" +
+ "body { margin-left:" + dp(48) + "; margin-right:" + dp(48) + "; " +
+ "margin-top:" + dp(96) + "; background-color:#fafafa; }" +
+ "img { width:" + dp(48) + "; height:" + dp(48) + "; }" +
+ "div.warn { font-size:" + sp(16) + "; margin-top:" + dp(16) + "; " +
+ " opacity:0.87; line-height:1.28; }" +
+ "div.example { font-size:" + sp(14) + "; margin-top:" + dp(16) + "; " +
+ " opacity:0.54; line-height:1.21905; }" +
+ "a { font-size:" + sp(14) + "; text-decoration:none; text-transform:uppercase; " +
+ " margin-top:" + dp(24) + "; display:inline-block; color:#4285F4; " +
+ " height:" + dp(48) + "; font-weight:bold; }" +
+ "</style></head><body><p><img src=quantum_ic_warning_amber_96.png><br>" +
+ "<div class=warn>%s</div>" +
+ "<div class=example>%s</div>" +
+ "<a href=%s>%s</a></body></html>";
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
- Log.w(TAG, "SSL error; displaying broken lock icon.");
- view.loadDataWithBaseURL(INTERNAL_ASSETS, SSL_ERROR_HTML, "text/HTML", "UTF-8", null);
+ Log.w(TAG, "SSL error; displaying SSL warning.");
+ final String html = String.format(SSL_ERROR_HTML, getString(R.string.ssl_error_warning),
+ getString(R.string.ssl_error_example), mBrowserBailOutToken,
+ getString(R.string.ssl_error_continue));
+ view.loadDataWithBaseURL(INTERNAL_ASSETS, html, "text/HTML", "UTF-8", null);
}
}