package com.hkm.ezwebview.webviewclients; /** * Created by hesk on 6/2/2014. */ import android.app.Activity; import android.app.AlertDialog.Builder; import android.content.Context; import android.content.DialogInterface; import android.graphics.Bitmap; import android.net.Uri; import android.net.http.SslError; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.webkit.CookieManager; import android.webkit.HttpAuthHandler; import android.webkit.JavascriptInterface; import android.webkit.SslErrorHandler; import android.webkit.WebView; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import com.hkm.ezwebview.Util.In32; import com.hkm.ezwebview.webviewleakfix.PreventLeakClient; import java.util.ArrayList; import java.util.List; public abstract class HBClient extends PreventLeakClient<Activity> { private String loginCookie; private final WebView mWebView; public static String TAG = "AppHBClient"; private final Activity appActivity; public HBClient(Activity app, WebView w) { super(app); appActivity = app; mWebView = w; mWebView.addJavascriptInterface(this, TAG); } @JavascriptInterface public void resize(final float height) { appActivity.runOnUiThread(new Runnable() { @Override public void run() { /* mWebView.setLayoutParams(new LinearLayout.LayoutParams(appActivity.getResources().getDisplayMetrics().widthPixels, (int) (height * appActivity.getResources().getDisplayMetrics().density)));*/ } }); } protected abstract void retrieveCookie(final String cookie_string); protected boolean overridedefaultHBlogic(final String url, final Activity context) { return false; } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return overridedefaultHBlogic(url, activity) ? true : In32.interceptURL_HB(url, activity); } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { CookieManager cm = CookieManager.getInstance(); String cookieString = cm.getCookie(url); // Log.d(TAG, "cookie got:" + cookieString); if (cookieString != null) { retrieveCookie(cookieString); } super.onPageStarted(view, url, favicon); } @Override public void onPageFinished(WebView view, String url) { CookieManager cookieManager = CookieManager.getInstance(); cookieManager.setCookie(url, loginCookie); view.invalidate(); // view.loadUrl("javascript:" + TAG + ".resize(document.body.getBoundingClientRect().height)"); } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { Toast.makeText(view.getContext(), "Error in here", Toast.LENGTH_LONG).show(); } @Override public void onLoadResource(WebView view, String url) { CookieManager cookieManager = CookieManager.getInstance(); loginCookie = cookieManager.getCookie(url); } // TODO: Android does not like the SSL certificate we use, because it has '*' in // it. Proceed with the errors. /* @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { handler.proceed(); } */ @Override public void onReceivedHttpAuthRequest(WebView view, final HttpAuthHandler handler, final String host, final String realm) { String userName = null; String userPass = null; if (handler.useHttpAuthUsernamePassword() && view != null) { String[] haup = view.getHttpAuthUsernamePassword(host, realm); if (haup != null && haup.length == 2) { userName = haup[0]; userPass = haup[1]; } } if (userName != null && userPass != null) { handler.proceed(userName, userPass); } else { showHttpAuthDialog(handler, host, realm, null, null, null); } } private void showHttpAuthDialog(final HttpAuthHandler handler, final String host, final String realm, final String title, final String name, final String password) { LinearLayout llayout = new LinearLayout(activity); final TextView textview1 = new TextView(activity); final EditText edittext1 = new EditText(activity); final TextView textview2 = new TextView(activity); final EditText edittext2 = new EditText(activity); llayout.setOrientation(LinearLayout.VERTICAL); textview1.setText("username:"); textview2.setText("password:"); llayout.addView(textview1); llayout.addView(edittext1); llayout.addView(textview2); llayout.addView(edittext2); final Builder mHttpAuthDialog = new Builder(activity); mHttpAuthDialog.setTitle("Basic Authentication") .setView(llayout) .setCancelable(false) .setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { EditText etUserName = edittext1; String userName = etUserName.getText().toString(); EditText etUserPass = edittext2; String userPass = etUserPass.getText().toString(); mWebView.setHttpAuthUsernamePassword(host, realm, name, password); handler.proceed(userName, userPass); } }) .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { handler.cancel(); } }) .create().show(); } public void newFeed(Context mctx, String url) { Bundle b = new Bundle(); } }