From: masensio Date: Mon, 17 Mar 2014 12:39:03 +0000 (+0100) Subject: OC-3261: Fix a problem when trying to detect the kind of authentication. Add new... X-Git-Tag: oc-android-1.5.5~5^2~1^2~18 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/d01e065586ef9df7735e8ceab342a79ea634f6a4?ds=inline OC-3261: Fix a problem when trying to detect the kind of authentication. Add new AlertMessageDialog. Show an alert message if it is necessary a different authentication method --- diff --git a/res/values/strings.xml b/res/values/strings.xml index 6967fd0c..de1c9690 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -260,4 +260,6 @@ Copy link Copied to clipboard + + Attention! diff --git a/src/com/owncloud/android/authentication/AuthenticatorActivity.java b/src/com/owncloud/android/authentication/AuthenticatorActivity.java index 73bbaecb..955dc547 100644 --- a/src/com/owncloud/android/authentication/AuthenticatorActivity.java +++ b/src/com/owncloud/android/authentication/AuthenticatorActivity.java @@ -35,6 +35,7 @@ import android.net.http.SslError; import android.os.Bundle; import android.os.Handler; import android.preference.PreferenceManager; +import android.support.v4.app.DialogFragment; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; @@ -74,6 +75,7 @@ import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCo import com.owncloud.android.lib.resources.files.ExistenceCheckRemoteOperation; import com.owncloud.android.lib.resources.users.GetRemoteUserNameOperation; +import com.owncloud.android.ui.dialog.AlertMessageDialog; import com.owncloud.android.ui.dialog.SamlWebViewDialog; import com.owncloud.android.ui.dialog.SslUntrustedCertDialog; import com.owncloud.android.ui.dialog.SslUntrustedCertDialog.OnSslUntrustedCertListener; @@ -128,6 +130,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity public static final byte ACTION_UPDATE_TOKEN = 1; private static final String TAG_SAML_DIALOG = "samlWebViewDialog"; + private static final String TAG_ALERT_MESSAGE_DIALOG = "alertMessagewDialog"; private String mHostBaseUrl; private OwnCloudVersion mDiscoveredVersion; @@ -892,10 +895,16 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity mIsSslConn = (result.getCode() == ResultCode.OK_SSL); mOcServerChkOperation = null; + + /// retrieve discovered version and normalize server URL + mDiscoveredVersion = operation.getDiscoveredVersion(); + mHostBaseUrl = normalizeUrl(mHostUrlInput.getText().toString()); + /// update status icon and text if (mServerIsValid) { hideRefreshButton(); // Try to create an account with user and pass "", to know if it is a regular server + // Update connect button in the answer of this method tryEmptyAuthorization(); } else { showRefreshButton(); @@ -908,12 +917,6 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity showUntrustedCertDialog(result); } - /// retrieve discovered version and normalize server URL - mDiscoveredVersion = operation.getDiscoveredVersion(); - mHostBaseUrl = normalizeUrl(mHostUrlInput.getText().toString()); - -// /// allow or not the user try to access the server -// mOkButton.setEnabled(mServerIsValid); } // else nothing ; only the last check operation is considered; // multiple can be triggered if the user amends a URL before a previous check can be triggered @@ -1201,8 +1204,11 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity if (mTryEmptyAuthorization) { //allow or not the user try to access the server - mOkButton.setEnabled(mServerIsValid); + mOkButton.setEnabled(false); mTryEmptyAuthorization = false; + mServerIsValid = false; + //show an alert message + showAlertMessageDialog(R.string.common_alert_title, R.string.auth_unsupported_auth_method); } else { Log_OC.d(TAG, "Successful access - time to save the account"); @@ -1221,35 +1227,41 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity } } - } else if (result.isServerFail() || result.isException()) { - /// if server fail or exception in authorization, the UI is updated as when a server check failed - mServerIsChecked = true; - mServerIsValid = false; - mIsSslConn = false; - mOcServerChkOperation = null; - mDiscoveredVersion = null; - mHostBaseUrl = normalizeUrl(mHostUrlInput.getText().toString()); + } else { + if (mTryEmptyAuthorization) { + mTryEmptyAuthorization = false; + mOkButton.setEnabled(true); + + } else if (result.isServerFail() || result.isException()) { + /// if server fail or exception in authorization, the UI is updated as when a server check failed + mServerIsChecked = true; + mServerIsValid = false; + mIsSslConn = false; + mOcServerChkOperation = null; + mDiscoveredVersion = null; + mHostBaseUrl = normalizeUrl(mHostUrlInput.getText().toString()); + + // update status icon and text + updateServerStatusIconAndText(result); + showServerStatus(); + mAuthStatusIcon = 0; + mAuthStatusText = 0; + showAuthStatus(); + + // update input controls state + showRefreshButton(); + mOkButton.setEnabled(false); - // update status icon and text - updateServerStatusIconAndText(result); - showServerStatus(); - mAuthStatusIcon = 0; - mAuthStatusText = 0; - showAuthStatus(); - - // update input controls state - showRefreshButton(); - mOkButton.setEnabled(false); + // very special case (TODO: move to a common place for all the remote operations) (dangerous here?) + if (result.getCode() == ResultCode.SSL_RECOVERABLE_PEER_UNVERIFIED) { + showUntrustedCertDialog(result); + } - // very special case (TODO: move to a common place for all the remote operations) (dangerous here?) - if (result.getCode() == ResultCode.SSL_RECOVERABLE_PEER_UNVERIFIED) { - showUntrustedCertDialog(result); + } else { // authorization fail due to client side - probably wrong credentials + updateAuthStatusIconAndText(result); + showAuthStatus(); + Log_OC.d(TAG, "Access failed: " + result.getLogMessage()); } - - } else { // authorization fail due to client side - probably wrong credentials - updateAuthStatusIconAndText(result); - showAuthStatus(); - Log_OC.d(TAG, "Access failed: " + result.getLogMessage()); } } @@ -1769,5 +1781,10 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity } } + + private void showAlertMessageDialog(int tittle, int message) { + DialogFragment newAlertMessage = AlertMessageDialog.newInstance(tittle, message); + newAlertMessage.show(getSupportFragmentManager(), TAG_ALERT_MESSAGE_DIALOG); + } } diff --git a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java index 4593e3f0..633c0e7a 100644 --- a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -79,7 +79,6 @@ import com.owncloud.android.operations.SynchronizeFolderOperation; import com.owncloud.android.operations.UnshareLinkOperation; import com.owncloud.android.services.OperationsService; import com.owncloud.android.syncadapter.FileSyncAdapter; -import com.owncloud.android.ui.adapter.SslErrorViewAdapter; import com.owncloud.android.ui.dialog.EditNameDialog; import com.owncloud.android.ui.dialog.SslUntrustedCertDialog; import com.owncloud.android.ui.dialog.EditNameDialog.EditNameDialogListener; diff --git a/src/com/owncloud/android/ui/dialog/AlertMessageDialog.java b/src/com/owncloud/android/ui/dialog/AlertMessageDialog.java new file mode 100644 index 00000000..82164c33 --- /dev/null +++ b/src/com/owncloud/android/ui/dialog/AlertMessageDialog.java @@ -0,0 +1,63 @@ +/* ownCloud Android client application + * Copyright (C) 2012-2014 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 . + * + */ + +package com.owncloud.android.ui.dialog; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.DialogInterface; +import android.os.Bundle; + +import com.actionbarsherlock.app.SherlockDialogFragment; +import com.owncloud.android.R; + +public class AlertMessageDialog extends SherlockDialogFragment { + + private static final String ARG_TITLE_ID = AlertMessageDialog.class.getCanonicalName() + ".ARG_TITLE_ID"; + private static final String ARG_MESSAGE_ID = AlertMessageDialog.class.getCanonicalName() + ".ARG_MESSAGE_ID"; + + + public static AlertMessageDialog newInstance(int title, int message) { + AlertMessageDialog frag = new AlertMessageDialog(); + Bundle args = new Bundle(); + args.putInt(ARG_TITLE_ID, title); + args.putInt(ARG_MESSAGE_ID, message); + frag.setArguments(args); + return frag; + } + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getSherlockActivity()); + + int title = getArguments().getInt(ARG_TITLE_ID); + int message = getArguments().getInt(ARG_MESSAGE_ID); + + dialogBuilder.setIcon(R.drawable.common_error) + .setTitle(title) + .setMessage(message) + .setCancelable(true) + .setPositiveButton(R.string.common_ok, + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int whichButton) { + dialog.dismiss(); + } + }); + return dialogBuilder.create(); + } + +}