123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284 |
- /* ownCloud Android client application
- * Copyright (C) 2012-2013 ownCloud Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
- package com.owncloud.android.ui.dialog;
- import android.annotation.SuppressLint;
- import android.app.Activity;
- import android.app.Dialog;
- import android.content.DialogInterface;
- import android.os.Bundle;
- import android.os.Handler;
- import android.support.v4.app.FragmentTransaction;
- import android.support.v4.app.FragmentManager;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.webkit.CookieManager;
- import android.webkit.CookieSyncManager;
- import android.webkit.WebBackForwardList;
- import android.webkit.WebSettings;
- import android.webkit.WebView;
- import com.actionbarsherlock.app.SherlockDialogFragment;
- import com.owncloud.android.Log_OC;
- import com.owncloud.android.R;
- import com.owncloud.android.authentication.SsoWebViewClient;
- import com.owncloud.android.authentication.SsoWebViewClient.SsoWebViewClientListener;
- import com.owncloud.android.oc_framework.network.webdav.WebdavClient;
- /**
- * Dialog to show the WebView for SAML Authentication
- *
- * @author Maria Asensio
- * @author David A. Velasco
- */
- public class SamlWebViewDialog extends SherlockDialogFragment {
- public final String SAML_DIALOG_TAG = "SamlWebViewDialog";
-
- private final static String TAG = SamlWebViewDialog.class.getSimpleName();
- private static final String ARG_INITIAL_URL = "INITIAL_URL";
- private static final String ARG_TARGET_URL = "TARGET_URL";
- private static final String KEY_WEBVIEW_STATE = "WEBVIEW_STATE";
-
- private WebView mSsoWebView;
- private SsoWebViewClient mWebViewClient;
-
- private String mInitialUrl;
- private String mTargetUrl;
-
- private Handler mHandler;
- private SsoWebViewClientListener mSsoWebViewClientListener;
- //private View mSsoRootView;
- /**
- * Public factory method to get dialog instances.
- *
- * @param handler
- * @param Url Url to open at WebView
- * @param targetURL mHostBaseUrl + AccountUtils.getWebdavPath(mDiscoveredVersion, mCurrentAuthTokenType)
- * @return New dialog instance, ready to show.
- */
- public static SamlWebViewDialog newInstance(String url, String targetUrl) {
- Log_OC.d(TAG, "New instance");
- SamlWebViewDialog fragment = new SamlWebViewDialog();
- Bundle args = new Bundle();
- args.putString(ARG_INITIAL_URL, url);
- args.putString(ARG_TARGET_URL, targetUrl);
- fragment.setArguments(args);
- return fragment;
- }
-
-
- public SamlWebViewDialog() {
- super();
- Log_OC.d(TAG, "constructor");
- }
-
-
- @Override
- public void onAttach(Activity activity) {
- Log_OC.d(TAG, "onAttach");
- super.onAttach(activity);
- try {
- mSsoWebViewClientListener = (SsoWebViewClientListener) activity;
- mHandler = new Handler();
- mWebViewClient = new SsoWebViewClient(mHandler, mSsoWebViewClientListener);
-
- } catch (ClassCastException e) {
- throw new ClassCastException(activity.toString() + " must implement " + SsoWebViewClientListener.class.getSimpleName());
- }
- }
-
- @SuppressLint("SetJavaScriptEnabled")
- @Override
- public void onCreate(Bundle savedInstanceState) {
- Log_OC.d(TAG, "onCreate");
- super.onCreate(savedInstanceState);
-
- CookieSyncManager.createInstance(getActivity());
- if (savedInstanceState == null) {
- mInitialUrl = getArguments().getString(ARG_INITIAL_URL);
- mTargetUrl = getArguments().getString(ARG_TARGET_URL);
- } else {
- mInitialUrl = savedInstanceState.getString(ARG_INITIAL_URL);
- mTargetUrl = savedInstanceState.getString(ARG_TARGET_URL);
- }
-
- setStyle(SherlockDialogFragment.STYLE_NO_TITLE, R.style.Theme_ownCloud_Dialog);
- }
-
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- Log_OC.d(TAG, "onCreateDialog");
- /*
- // build the dialog
- AlertDialog.Builder builder = new AlertDialog.Builder(getSherlockActivity());
- if (mSsoRootView.getParent() != null) {
- ((ViewGroup)(mSsoRootView.getParent())).removeView(mSsoRootView);
- }
- builder.setView(mSsoRootView);
- //builder.setView(mSsoWebView);
- Dialog dialog = builder.create();
- */
-
- return super.onCreateDialog(savedInstanceState);
- }
- @SuppressLint("SetJavaScriptEnabled")
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- Log_OC.d(TAG, "onCreateView");
-
- // Inflate layout of the dialog
- View rootView = inflater.inflate(R.layout.sso_dialog, container, false); // null parent view because it will go in the dialog layout
- mSsoWebView = (WebView) rootView.findViewById(R.id.sso_webview);
-
- mWebViewClient.setTargetUrl(mTargetUrl);
- mSsoWebView.setWebViewClient(mWebViewClient);
-
- if (savedInstanceState == null) {
- Log_OC.d(TAG, " initWebView start");
- CookieManager cookieManager = CookieManager.getInstance();
- cookieManager.setAcceptCookie(true);
- cookieManager.removeAllCookie();
- mSsoWebView.loadUrl(mInitialUrl);
-
- } else {
- Log_OC.d(TAG, " restoreWebView start");
- WebBackForwardList history = mSsoWebView.restoreState(savedInstanceState.getBundle(KEY_WEBVIEW_STATE));
- if (history == null) {
- Log_OC.e(TAG, "Error restoring WebView state ; back to starting URL");
- mSsoWebView.loadUrl(mInitialUrl);
- }
- }
- WebSettings webSettings = mSsoWebView.getSettings();
- webSettings.setJavaScriptEnabled(true);
- webSettings.setBuiltInZoomControls(true);
- webSettings.setLoadWithOverviewMode(false);
- webSettings.setSavePassword(false);
- webSettings.setUserAgentString(WebdavClient.USER_AGENT);
- webSettings.setSaveFormData(false);
-
- return rootView;
- }
- @Override
- public void onSaveInstanceState(Bundle outState) {
- Log_OC.d(SAML_DIALOG_TAG, "onSaveInstanceState being CALLED");
- super.onSaveInstanceState(outState);
-
- // save URLs
- outState.putString(ARG_INITIAL_URL, mInitialUrl);
- outState.putString(ARG_TARGET_URL, mTargetUrl);
-
- // Save the state of the WebView
- Bundle webviewState = new Bundle();
- mSsoWebView.saveState(webviewState);
- outState.putBundle(KEY_WEBVIEW_STATE, webviewState);
- }
- @Override
- public void onDestroyView() {
- Log_OC.d(TAG, "onDestroyView");
-
- mSsoWebView.setWebViewClient(null);
-
- // Work around bug: http://code.google.com/p/android/issues/detail?id=17423
- Dialog dialog = getDialog();
- if ((dialog != null)) {
- dialog.setOnDismissListener(null);
- //dialog.dismiss();
- //dialog.setDismissMessage(null);
- }
-
- super.onDestroyView();
- }
-
- @Override
- public void onDestroy() {
- Log_OC.d(TAG, "onDestroy");
- super.onDestroy();
- }
- @Override
- public void onDetach() {
- Log_OC.d(TAG, "onDetach");
- mSsoWebViewClientListener = null;
- mWebViewClient = null;
- super.onDetach();
- }
-
- @Override
- public void onCancel (DialogInterface dialog) {
- Log_OC.d(SAML_DIALOG_TAG, "onCancel");
- super.onCancel(dialog);
- }
-
- @Override
- public void onDismiss (DialogInterface dialog) {
- Log_OC.d(SAML_DIALOG_TAG, "onDismiss");
- super.onDismiss(dialog);
- }
-
- @Override
- public void onStart() {
- Log_OC.d(SAML_DIALOG_TAG, "onStart");
- super.onStart();
- }
- @Override
- public void onStop() {
- Log_OC.d(SAML_DIALOG_TAG, "onStop");
- super.onStop();
- }
- @Override
- public void onResume() {
- Log_OC.d(SAML_DIALOG_TAG, "onResume");
- super.onResume();
- }
- @Override
- public void onPause() {
- Log_OC.d(SAML_DIALOG_TAG, "onPause");
- super.onPause();
- }
-
- @Override
- public int show (FragmentTransaction transaction, String tag) {
- Log_OC.d(SAML_DIALOG_TAG, "show (transaction)");
- return super.show(transaction, tag);
- }
- @Override
- public void show (FragmentManager manager, String tag) {
- Log_OC.d(SAML_DIALOG_TAG, "show (manager)");
- super.show(manager, tag);
- }
- }
|