Grant that notifications of finished downloads can be removed from notification are...
[pub/Android/ownCloud.git] / src / com / owncloud / android / authentication / AuthenticatorActivity.java
index f18ff2a..9dcddce 100644 (file)
@@ -48,6 +48,7 @@ import android.view.View.OnFocusChangeListener;
 import android.view.View.OnTouchListener;\r
 import android.view.Window;\r
 import android.view.inputmethod.EditorInfo;\r
+import android.webkit.SslErrorHandler;\r
 import android.widget.Button;\r
 import android.widget.CheckBox;\r
 import android.widget.EditText;\r
@@ -64,6 +65,7 @@ import com.owncloud.android.lib.common.OwnCloudClientFactory;
 import com.owncloud.android.lib.common.OwnCloudClient;\r
 import com.owncloud.android.operations.OAuth2GetAccessToken;\r
 
+import com.owncloud.android.lib.common.network.CertificateCombinedException;\r
 import com.owncloud.android.lib.common.operations.OnRemoteOperationListener;\r
 import com.owncloud.android.lib.resources.status.GetRemoteStatusOperation;\r
 import com.owncloud.android.lib.common.operations.RemoteOperation;\r
@@ -75,7 +77,6 @@ import com.owncloud.android.lib.resources.users.GetRemoteUserNameOperation;
 import com.owncloud.android.ui.dialog.SamlWebViewDialog;\r
 import com.owncloud.android.ui.dialog.SslUntrustedCertDialog;\r
 import com.owncloud.android.ui.dialog.SslUntrustedCertDialog.OnSslUntrustedCertListener;\r
-import com.owncloud.android.ui.dialog.SslValidatorDialog.OnSslValidatorListener;\r
 import com.owncloud.android.utils.Log_OC;\r
 import com.owncloud.android.lib.resources.status.OwnCloudVersion;\r
 \r
@@ -86,7 +87,7 @@ import com.owncloud.android.lib.resources.status.OwnCloudVersion;
  * @author David A. Velasco\r
  */\r
 public class AuthenticatorActivity extends AccountAuthenticatorActivity\r
-    implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeListener, OnEditorActionListener, \r
+    implements  OnRemoteOperationListener, OnFocusChangeListener, OnEditorActionListener, \r
     SsoWebViewClientListener, OnSslUntrustedCertListener {\r
 \r
     private static final String TAG = AuthenticatorActivity.class.getSimpleName();\r
@@ -814,6 +815,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
     }\r
 \r
     private void onGetUserNameFinish(GetRemoteUserNameOperation operation, RemoteOperationResult result) {\r
+        \r
         if (result.isSuccess()) {\r
             boolean success = false;\r
             String username = operation.getUserName();\r
@@ -838,7 +840,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
             if (success)\r
                 finish();\r
         } else {\r
-            updateAuthStatusIconAndText(result);\r
+            updateStatusIconFailUserName();\r
             showAuthStatus();\r
             Log_OC.e(TAG, "Access to user name failed: " + result.getLogMessage());\r
         }\r
@@ -1110,6 +1112,11 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
     }\r
 \r
 \r
+    private void updateStatusIconFailUserName(){\r
+        mAuthStatusIcon = android.R.drawable.ic_secure;\r
+        mAuthStatusText = R.string.auth_fail_get_user_name;\r
+    }\r
+    \r
     /**\r
      * Processes the result of the request for and access token send \r
      * to an OAuth authorization server.\r
@@ -1530,26 +1537,6 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
     }\r
     \r
     /**\r
-     * Called from SslValidatorDialog when a new server certificate was correctly saved.\r
-     */\r
-    public void onSavedCertificate() {\r
-        checkOcServer();\r
-        reloadWebView();\r
-        \r
-    }\r
-\r
-    /**\r
-     * Called from SslValidatorDialog when a new server certificate could not be saved \r
-     * when the user requested it.\r
-     */\r
-    @Override\r
-    public void onFailedSavingCertificate() {\r
-        showDialog(DIALOG_CERT_NOT_SAVED);\r
-        cancelWebView();\r
-    }\r
-\r
-\r
-    /**\r
      *  Called when the 'action' button in an IME is pressed ('enter' in software keyboard).\r
      * \r
      *  Used to trigger the authentication check when the user presses 'enter' after writing the password, \r
@@ -1665,40 +1652,21 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
     }\r
 \r
 \r
-\r
-    public void cancelWebView() {\r
-        Fragment fd = getSupportFragmentManager().findFragmentByTag(TAG_SAML_DIALOG);\r
-        if (fd != null && fd instanceof SherlockDialogFragment) {\r
-            Dialog d = ((SherlockDialogFragment)fd).getDialog();\r
-            if (d != null && d.isShowing()) {\r
-                d.dismiss();\r
-            }\r
-        }\r
-        \r
-    }\r
-\r
-    public void reloadWebView() {\r
-        Fragment fd = getSupportFragmentManager().findFragmentByTag(TAG_SAML_DIALOG);\r
-        if (fd != null && fd instanceof SamlWebViewDialog) {\r
-                ((SamlWebViewDialog) fd).reloadWebView();\r
-        }\r
-    }\r
-\r
-    @Override\r
-    public void onCancelCertificate() {\r
-        cancelWebView();\r
-    }\r
-    \r
     /**\r
      * Show untrusted cert dialog \r
      */\r
-    public void showUntrustedCertDialog(X509Certificate x509Certificate, SslError error) {\r
+    public void showUntrustedCertDialog(X509Certificate x509Certificate, SslError error, SslErrorHandler handler) {\r
         // Show a dialog with the certificate info\r
-        SslUntrustedCertDialog dialog = SslUntrustedCertDialog.newInstance(x509Certificate, error);\r
+        SslUntrustedCertDialog dialog = null;\r
+        if (x509Certificate == null) {\r
+            dialog = SslUntrustedCertDialog.newInstanceForEmptySslError(error, handler);\r
+        } else {\r
+            dialog = SslUntrustedCertDialog.newInstanceForFullSslError(x509Certificate, error, handler);\r
+        }\r
         FragmentManager fm = getSupportFragmentManager();\r
         FragmentTransaction ft = fm.beginTransaction();\r
+        ft.addToBackStack(null);\r
         dialog.show(ft, DIALOG_UNTRUSTED_CERT);\r
-        \r
     }\r
     \r
     /**\r
@@ -1706,9 +1674,10 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
      */\r
     public void showUntrustedCertDialog(RemoteOperationResult result) {\r
         // Show a dialog with the certificate info\r
-        SslUntrustedCertDialog dialog = SslUntrustedCertDialog.newInstance(result, this);\r
+        SslUntrustedCertDialog dialog = SslUntrustedCertDialog.newInstanceForFullSslError((CertificateCombinedException)result.getException());\r
         FragmentManager fm = getSupportFragmentManager();\r
         FragmentTransaction ft = fm.beginTransaction();\r
+        ft.addToBackStack(null);\r
         dialog.show(ft, DIALOG_UNTRUSTED_CERT);\r
         \r
     }\r
@@ -1717,11 +1686,50 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
      * Dismiss untrusted cert dialog\r
      */\r
     public void dismissUntrustedCertDialog(){\r
-        Fragment frag = getSupportFragmentManager().findFragmentByTag(DIALOG_UNTRUSTED_CERT);\r
+        /*Fragment frag = getSupportFragmentManager().findFragmentByTag(DIALOG_UNTRUSTED_CERT);\r
         if (frag != null) {\r
-            SslUntrustedCertDialog dialog = (SslUntrustedCertDialog) frag;\r
+            SslErrorViewAdapter dialog = (SslErrorViewAdapter) frag;\r
             dialog.dismiss();\r
         }\r
+        */\r
     }\r
     \r
+    /**\r
+     * Called from SslValidatorDialog when a new server certificate was correctly saved.\r
+     */\r
+    public void onSavedCertificate() {\r
+        Fragment fd = getSupportFragmentManager().findFragmentByTag(TAG_SAML_DIALOG);\r
+        if (fd == null) {\r
+            // if SAML dialog is not shown, the SslDialog was shown due to an SSL error in the server check\r
+            checkOcServer();\r
+        }\r
+    }\r
+\r
+    /**\r
+     * Called from SslValidatorDialog when a new server certificate could not be saved \r
+     * when the user requested it.\r
+     */\r
+    @Override\r
+    public void onFailedSavingCertificate() {\r
+        showDialog(DIALOG_CERT_NOT_SAVED);\r
+        cancelWebView();\r
+    }\r
+\r
+    @Override\r
+    public void onCancelCertificate() {\r
+        cancelWebView();\r
+    }\r
+    \r
+\r
+    public void cancelWebView() {\r
+        Fragment fd = getSupportFragmentManager().findFragmentByTag(TAG_SAML_DIALOG);\r
+        if (fd != null && fd instanceof SherlockDialogFragment) {\r
+            Dialog d = ((SherlockDialogFragment)fd).getDialog();\r
+            if (d != null && d.isShowing()) {\r
+                d.dismiss();\r
+            }\r
+        }\r
+        \r
+    }\r
+\r
 }\r