added webSettings.setSaveFormData(false) on Saml Dialog
[pub/Android/ownCloud.git] / src / com / owncloud / android / ui / dialog / SamlWebViewDialog.java
1 package com.owncloud.android.ui.dialog;
2
3 import android.annotation.SuppressLint;
4 import android.app.Activity;
5 import android.app.AlertDialog;
6 import android.app.Dialog;
7 import android.os.Bundle;
8 import android.os.Handler;
9 import android.support.v4.app.DialogFragment;
10 import android.webkit.CookieManager;
11 import android.webkit.WebSettings;
12 import android.webkit.WebView;
13
14 import com.owncloud.android.Log_OC;
15 import com.owncloud.android.authentication.SsoWebViewClient;
16 import com.owncloud.android.authentication.SsoWebViewClient.SsoWebViewClientListener;
17
18 import eu.alefzero.webdav.WebdavClient;
19
20 /**
21 * Dialog to show the WebView for SAML Authentication
22 *
23 * @author Maria Asensio
24 */
25 public class SamlWebViewDialog extends DialogFragment
26 {
27
28 public final String SAML_DIALOG_TAG = "SamlWebViewDialog";
29
30 private final static String TAG = SamlWebViewDialog.class.getSimpleName();
31
32 private WebView mSsoWebView;
33 private SsoWebViewClient mWebViewClient;
34
35 private static String mUrl;
36 private static String mTargetUrl;
37
38 private Handler mHandler;
39
40 private SsoWebViewClientListener mSsoWebViewClientListener;
41
42
43 /**
44 * Public factory method to get dialog instances.
45 *
46 * @param handler
47 * @param Url Url to open at WebView
48 * @param targetURL mHostBaseUrl + AccountUtils.getWebdavPath(mDiscoveredVersion, mCurrentAuthTokenType)
49 * @return New dialog instance, ready to show.
50 */
51 public static SamlWebViewDialog newInstance(String url, String targetUrl) {
52 SamlWebViewDialog fragment = new SamlWebViewDialog();
53
54 mUrl = url;
55 mTargetUrl = targetUrl;
56 return fragment;
57 }
58
59
60 @Override
61 public void onSaveInstanceState(Bundle outState) {
62 super.onSaveInstanceState(outState);
63
64 // Save the state of the WebView
65 mSsoWebView.saveState(outState);
66 }
67
68 @SuppressLint("SetJavaScriptEnabled")
69 @Override
70 public Dialog onCreateDialog(Bundle savedInstanceState) {
71 Log_OC.d(TAG, "On Create Dialog");
72
73 mHandler = new Handler();
74
75 mSsoWebView = new WebView(getActivity()) {
76 @Override
77 public boolean onCheckIsTextEditor() {
78 return true;
79 }
80 };
81
82
83 mWebViewClient = new SsoWebViewClient(mHandler, mSsoWebViewClientListener);
84 mSsoWebView.setWebViewClient(mWebViewClient);
85 mWebViewClient.setTargetUrl(mTargetUrl);
86
87 mSsoWebView.setFocusable(true);
88 mSsoWebView.setFocusableInTouchMode(true);
89 mSsoWebView.setClickable(true);
90
91 WebSettings webSettings = mSsoWebView.getSettings();
92 webSettings.setJavaScriptEnabled(true);
93 webSettings.setBuiltInZoomControls(true);
94 webSettings.setLoadWithOverviewMode(false);
95 webSettings.setSavePassword(false);
96 webSettings.setUserAgentString(WebdavClient.USER_AGENT);
97 webSettings.setSaveFormData(false);
98
99 // load the dialog
100 if (savedInstanceState == null) {
101 initWebView();
102 }
103 else {
104 restoreWebView(savedInstanceState);
105 }
106
107 // build the dialog
108 AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
109 Dialog dialog = builder.setView(mSsoWebView).create();
110
111 return dialog;
112 }
113
114 @SuppressLint("SetJavaScriptEnabled")
115 private void initWebView() {
116 CookieManager cookieManager = CookieManager.getInstance();
117 cookieManager.setAcceptCookie(true);
118 cookieManager.removeAllCookie();
119
120 mSsoWebView.loadUrl(mUrl);
121 }
122
123 @SuppressLint("SetJavaScriptEnabled")
124 private void restoreWebView(Bundle savedInstanceState) {
125 mSsoWebView.restoreState(savedInstanceState);
126
127 CookieManager cookieManager = CookieManager.getInstance();
128 Log_OC.e(TAG, "Accept Cookie: " + cookieManager.acceptCookie());
129 }
130
131
132 @Override
133 public void onDestroyView() {
134 Dialog dialog = getDialog();
135 Log_OC.d(TAG, "On Destroy");
136 // Work around bug: http://code.google.com/p/android/issues/detail?id=17423
137 if ((dialog != null) && getRetainInstance())
138 getDialog().setOnDismissListener(null);
139
140 super.onDestroyView();
141 }
142
143
144 @Override
145 public void onAttach(Activity activity) {
146 super.onAttach(activity);
147 Log_OC.e(TAG, "onAttach");
148 try {
149 mSsoWebViewClientListener = (SsoWebViewClientListener) activity;
150 } catch (ClassCastException e) {
151 throw new ClassCastException(activity.toString() + " must implement " + SsoWebViewClientListener.class.getSimpleName());
152 }
153 }
154 }