浏览代码

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

masensio 11 年之前
父节点
当前提交
d01e065586

+ 2 - 0
res/values/strings.xml

@@ -260,4 +260,6 @@
 
 	<string name="copy_link">Copy link</string>	
 	<string name="clipboard_text_copied">Copied to clipboard</string>
+	
+	<string name="common_alert_title">Attention!</string>
 </resources>

+ 50 - 33
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);
+    }
 
 }

+ 0 - 1
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;

+ 63 - 0
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 <http://www.gnu.org/licenses/>.
+ *
+ */
+
+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();
+    }
+
+}