package activities; import android.app.Activity; import android.content.DialogInterface; import android.content.SharedPreferences; import android.net.http.SslError; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v7.app.AlertDialog; import android.view.KeyEvent; import android.webkit.SslErrorHandler; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Toast; import org.domogik.domodroid13.R; /** * Created by tiki on 24/12/2016. */ public class webview_domogik_admin extends Activity { private WebView webView; private SharedPreferences SP_params; private WebView myWebView; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SP_params = PreferenceManager.getDefaultSharedPreferences(this); setContentView(R.layout.domogik_admin_webview); myWebView = (WebView) findViewById(R.id.webview); WebSettings webSettings = myWebView.getSettings(); webSettings.setJavaScriptEnabled(true); myWebView.setWebViewClient(new MyWebViewClient()); if (Abstract.Connectivity.IsInternetAvailable()) { String url; String port; Boolean SSL = false; if (Abstract.Connectivity.on_prefered_Wifi) { //If connected to default SSID use local adress url = SP_params.getString("rinorIP", "1.1.1.1"); port = SP_params.getString("rinorPort", ""); SSL = SP_params.getBoolean("ssl_activate", false); } else { //If not connected to default SSID use external adress url = SP_params.getString("rinorexternal_IP", "1.1.1.1"); port = SP_params.getString("rinor_external_Port", ""); SSL = SP_params.getBoolean("ssl_external_activate", false); } if (!SSL) { myWebView.loadUrl("http://" + url + ":" + port); } else { myWebView.loadUrl("https://" + url + ":" + port); } } else { Toast.makeText(this, R.string.no_connection, Toast.LENGTH_LONG).show(); this.finish(); } } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // Check if the key event was the Back button and if there's history if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) { myWebView.goBack(); return true; } // If it wasn't the Back key or there's no web page history, bubble up to the default // system behavior (probably exit the activity) return super.onKeyDown(keyCode, event); } private class MyWebViewClient extends WebViewClient { //Allow to open webview even if untrusted SSL cert @Override public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) { if (!SP_params.getBoolean("SSL_Trusted", false)) { AlertDialog.Builder builder = new AlertDialog.Builder(myWebView.getContext()); int message; switch (error.getPrimaryError()) { case SslError.SSL_DATE_INVALID: message = R.string.notification_error_ssl_date_invalid; break; case SslError.SSL_EXPIRED: message = R.string.notification_error_ssl_expired; break; case SslError.SSL_IDMISMATCH: message = R.string.notification_error_ssl_idmismatch; break; case SslError.SSL_INVALID: message = R.string.notification_error_ssl_invalid; break; case SslError.SSL_NOTYETVALID: message = R.string.notification_error_ssl_not_yet_valid; break; case SslError.SSL_UNTRUSTED: message = R.string.notification_error_ssl_untrusted; break; default: message = R.string.notification_error_ssl_cert_invalid; } builder.setMessage(message); builder.setPositiveButton("continue", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { SharedPreferences.Editor prefeditor = SP_params.edit(); prefeditor.putBoolean("SSL_Trusted", true); prefeditor.commit(); handler.proceed(); } }); builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { handler.cancel(); } }); final AlertDialog dialog = builder.create(); dialog.show(); } else { handler.proceed(); } } } }