From: masensio Date: Tue, 13 Aug 2013 11:28:45 +0000 (+0200) Subject: Move Shibboleth WebView to a big Dialog X-Git-Tag: oc-android-1.4.6~18^2~12 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/55f2bd23e6e0464ec68f3bd6beb43ae72b30b717?hp=9dacdbec0b54e2255700747c7f6076024f7b5717 Move Shibboleth WebView to a big Dialog --- diff --git a/src/com/owncloud/android/authentication/AuthenticatorActivity.java b/src/com/owncloud/android/authentication/AuthenticatorActivity.java index 852f1d52..d844011e 100644 --- a/src/com/owncloud/android/authentication/AuthenticatorActivity.java +++ b/src/com/owncloud/android/authentication/AuthenticatorActivity.java @@ -33,7 +33,6 @@ import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.preference.PreferenceManager; -import android.support.v4.app.FragmentManager; import android.text.Editable; import android.text.InputType; import android.text.TextWatcher; @@ -53,6 +52,7 @@ import android.widget.Toast; import com.owncloud.android.Log_OC; import com.owncloud.android.R; +import com.owncloud.android.authentication.SsoWebViewClient.SsoWebViewClientListener; import com.owncloud.android.network.OwnCloudClientUtils; import com.owncloud.android.operations.ExistenceCheckOperation; import com.owncloud.android.operations.OAuth2GetAccessToken; @@ -75,7 +75,7 @@ import eu.alefzero.webdav.WebdavClient; * @author David A. Velasco */ public class AuthenticatorActivity extends AccountAuthenticatorActivity -implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeListener, OnEditorActionListener { +implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeListener, OnEditorActionListener, SsoWebViewClientListener{ private static final String TAG = AuthenticatorActivity.class.getSimpleName(); @@ -226,7 +226,6 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList mHostUrlInput.setText(mHostBaseUrl); } initAuthorizationMethod(); // checks intent and setup.xml to determine mCurrentAuthorizationMethod - mOAuth2Check.setChecked(mCurrentAuthTokenType == AccountAuthenticator.AUTH_TOKEN_TYPE_ACCESS_TOKEN); mJustCreated = true; if (mAction == ACTION_UPDATE_TOKEN || !mHostUrlInputEnabled) { @@ -258,6 +257,7 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList mCurrentAuthTokenType = savedInstanceState.getString(AccountAuthenticator.KEY_AUTH_TOKEN_TYPE); if (mCurrentAuthTokenType == null) { mCurrentAuthTokenType = AccountAuthenticator.AUTH_TOKEN_TYPE_PASSWORD; + } // check if server check was interrupted by a configuration change @@ -288,7 +288,7 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList if (mServerIsChecked && !mServerIsValid && refreshButtonEnabled) showRefreshButton(); mOkButton.setEnabled(mServerIsValid); // state not automatically recovered in configuration changes - if (mCurrentAuthTokenType == AccountAuthenticator.AUTH_TOKEN_TYPE_SAML_WEB_SSO_SESSION_COOKIE || + if (AccountAuthenticator.AUTH_TOKEN_TYPE_SAML_WEB_SSO_SESSION_COOKIE.equals(mCurrentAuthTokenType) || !AUTH_OPTIONAL.equals(getString(R.string.auth_method_oauth2))) { mOAuth2Check.setVisibility(View.GONE); } @@ -326,17 +326,9 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList } }); -// FragmentManager fm = getSupportFragmentManager(); -// -// // try to find searching by tag name -// mSamlDialog = (SamlWebViewDialog) fm.findFragmentByTag(TAG_SAML_DIALOG); -// -// if (mSamlDialog != null) { -// mSamlDialog.show(fm, TAG_SAML_DIALOG); -// Log_OC.d(TAG_SAML_DIALOG, "mSamlDialog not null"); -// } } + private void initAuthorizationMethod() { boolean oAuthRequired = false; @@ -371,6 +363,9 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList String userName = mAccount.name.substring(0, mAccount.name.lastIndexOf('@')); mUsernameInput.setText(userName); } + + mOAuth2Check.setChecked(AccountAuthenticator.AUTH_TOKEN_TYPE_ACCESS_TOKEN.equals(mCurrentAuthTokenType)); + } /** @@ -452,15 +447,6 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList mJustCreated = false; - - // try to find searching by tag name -// FragmentManager fm = getSupportFragmentManager(); -// mSamlDialog = (SamlWebViewDialog) fm.findFragmentByTag(TAG_SAML_DIALOG); -// -// if (mSamlDialog != null) { -// // mSamlDialog.show(fm, TAG_SAML_DIALOG); -// mSamlDialog.setRetainInstance(true); -// } } @@ -763,7 +749,7 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList String targetUrl = mHostBaseUrl + AccountUtils.getWebdavPath(mDiscoveredVersion, mCurrentAuthTokenType); // Show dialog - mSamlDialog = SamlWebViewDialog.newInstance(mHandler, url, targetUrl); + mSamlDialog = SamlWebViewDialog.newInstance(url, targetUrl); mSamlDialog.show(getSupportFragmentManager(), TAG_SAML_DIALOG); mAuthStatusIcon = android.R.drawable.ic_secure; @@ -1419,7 +1405,6 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList mUsernameInput.setVisibility(View.GONE); mPasswordInput.setVisibility(View.GONE); mAccountNameInput.setVisibility(View.VISIBLE); - } else { // basic HTTP authorization mOAuthAuthEndpointText.setVisibility(View.GONE); @@ -1515,4 +1500,23 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList } } + + + @Override + public void onSsoFinished(String sessionCookie) { + //Toast.makeText(this, "got cookies: " + sessionCookie, Toast.LENGTH_LONG).show(); + + if (sessionCookie != null && sessionCookie.length() > 0) { + Log_OC.d(TAG, "Successful SSO - time to save the account"); + onSamlDialogSuccess(sessionCookie); + finish(); + + } else { + // TODO - show fail + Log_OC.d(TAG, "SSO failed"); + } + } + + + } diff --git a/src/com/owncloud/android/ui/dialog/SamlWebViewDialog.java b/src/com/owncloud/android/ui/dialog/SamlWebViewDialog.java index 2d0ac94a..17a1e13f 100644 --- a/src/com/owncloud/android/ui/dialog/SamlWebViewDialog.java +++ b/src/com/owncloud/android/ui/dialog/SamlWebViewDialog.java @@ -1,6 +1,7 @@ package com.owncloud.android.ui.dialog; import android.annotation.SuppressLint; +import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.os.Bundle; @@ -11,7 +12,6 @@ import android.webkit.WebSettings; import android.webkit.WebView; import com.owncloud.android.Log_OC; -import com.owncloud.android.authentication.AuthenticatorActivity; import com.owncloud.android.authentication.SsoWebViewClient; import com.owncloud.android.authentication.SsoWebViewClient.SsoWebViewClientListener; @@ -23,7 +23,7 @@ import eu.alefzero.webdav.WebdavClient; * @author Maria Asensio */ public class SamlWebViewDialog extends DialogFragment - implements SsoWebViewClientListener{ + { public final String SAML_DIALOG_TAG = "SamlWebViewDialog"; @@ -35,7 +35,9 @@ public class SamlWebViewDialog extends DialogFragment private static String mUrl; private static String mTargetUrl; - private static Handler mHandler; + private Handler mHandler; + + private SsoWebViewClientListener mSsoWebViewClientListener; /** @@ -46,9 +48,9 @@ public class SamlWebViewDialog extends DialogFragment * @param targetURL mHostBaseUrl + AccountUtils.getWebdavPath(mDiscoveredVersion, mCurrentAuthTokenType) * @return New dialog instance, ready to show. */ - public static SamlWebViewDialog newInstance(Handler handler,String url, String targetUrl) { + public static SamlWebViewDialog newInstance(String url, String targetUrl) { SamlWebViewDialog fragment = new SamlWebViewDialog(); - mHandler = handler; + mUrl = url; mTargetUrl = targetUrl; return fragment; @@ -63,63 +65,69 @@ public class SamlWebViewDialog extends DialogFragment mSsoWebView.saveState(outState); } - - @Override + @SuppressLint("SetJavaScriptEnabled") + @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Log_OC.d(TAG, "On Create Dialog"); - /// load the dialog - initWebView(savedInstanceState); - setRetainInstance(true); - /// build the dialog - AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + mHandler = new Handler(); + + mSsoWebView = new WebView(getActivity()) { + @Override + public boolean onCheckIsTextEditor() { + return true; + } + }; + + + mWebViewClient = new SsoWebViewClient(mHandler, mSsoWebViewClientListener); + mSsoWebView.setWebViewClient(mWebViewClient); + mWebViewClient.setTargetUrl(mTargetUrl); + + mSsoWebView.setFocusable(true); + mSsoWebView.setFocusableInTouchMode(true); + mSsoWebView.setClickable(true); + + WebSettings webSettings = mSsoWebView.getSettings(); + webSettings.setJavaScriptEnabled(true); + webSettings.setBuiltInZoomControls(true); + webSettings.setLoadWithOverviewMode(false); + webSettings.setSavePassword(false); + webSettings.setUserAgentString(WebdavClient.USER_AGENT); + + // load the dialog + if (savedInstanceState == null) { + initWebView(); + } + else { + restoreWebView(savedInstanceState); + } + // build the dialog + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); Dialog dialog = builder.setView(mSsoWebView).create(); return dialog; } - @SuppressLint("SetJavaScriptEnabled") - private void initWebView(Bundle savedInstanceState) { + private void initWebView() { CookieManager cookieManager = CookieManager.getInstance(); cookieManager.setAcceptCookie(true); - //cookieManager.removeSessionCookie(); + cookieManager.removeAllCookie(); - mWebViewClient = new SsoWebViewClient(mHandler, this); - mWebViewClient.setTargetUrl(mTargetUrl); - if (savedInstanceState == null) { - - Log_OC.d(TAG, "Saved Instance State NULL"); - mSsoWebView = new WebView(getActivity()) { - @Override - public boolean onCheckIsTextEditor() { - return true; - } - }; - - mSsoWebView.setWebViewClient(mWebViewClient); - mSsoWebView.setFocusable(true); - mSsoWebView.setFocusableInTouchMode(true); - mSsoWebView.setClickable(true); - - WebSettings webSettings = mSsoWebView.getSettings(); - webSettings.setJavaScriptEnabled(true); - webSettings.setBuiltInZoomControls(true); - webSettings.setLoadWithOverviewMode(false); - webSettings.setSavePassword(false); - webSettings.setUserAgentString(WebdavClient.USER_AGENT); - - mSsoWebView.loadUrl(mUrl); - } - else { - Log_OC.d(TAG, "Saved Instance State NOT NULL"); - - mSsoWebView.restoreState(savedInstanceState); - } - + mSsoWebView.loadUrl(mUrl); } + @SuppressLint("SetJavaScriptEnabled") + private void restoreWebView(Bundle savedInstanceState) { + mSsoWebView.restoreState(savedInstanceState); + + CookieManager cookieManager = CookieManager.getInstance(); + Log_OC.e(TAG, "Accept Cookie: " + cookieManager.acceptCookie()); + } + + @Override public void onDestroyView() { Dialog dialog = getDialog(); @@ -133,18 +141,13 @@ public class SamlWebViewDialog extends DialogFragment @Override - public void onSsoFinished(String sessionCookie) { - //Toast.makeText(this, "got cookies: " + sessionCookie, Toast.LENGTH_LONG).show(); - - if (sessionCookie != null && sessionCookie.length() > 0) { - Log_OC.d(TAG, "Successful SSO - time to save the account"); - ((AuthenticatorActivity) getActivity()).onSamlDialogSuccess(sessionCookie); - dismiss(); - - } else { - // TODO - show fail - Log_OC.d(TAG, "SSO failed"); + public void onAttach(Activity activity) { + super.onAttach(activity); + Log_OC.e(TAG, "onAttach"); + try { + mSsoWebViewClientListener = (SsoWebViewClientListener) activity; + } catch (ClassCastException e) { + throw new ClassCastException(activity.toString() + " must implement " + SsoWebViewClientListener.class.getSimpleName()); } } - } \ No newline at end of file