Merge branch 'add_ssl_warning_dialog_for_devices_without_access_to_X509Certificte_in_...
authormasensio <masensio@solidgear.es>
Fri, 7 Mar 2014 14:11:59 +0000 (15:11 +0100)
committermasensio <masensio@solidgear.es>
Fri, 7 Mar 2014 14:11:59 +0000 (15:11 +0100)
1  2 
res/layout/ssl_untrusted_cert_layout.xml
src/com/owncloud/android/authentication/AuthenticatorActivity.java
src/com/owncloud/android/authentication/SsoWebViewClient.java
src/com/owncloud/android/ui/dialog/SslUntrustedCertDialog.java
src/com/owncloud/android/ui/dialog/SslUntrustedCertDialogForEmptySslError.java

      android:orientation="vertical" >
  
        <TextView
 -              android:id="@+id/untrusted_header"
 +              android:id="@+id/header"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
+               android:layout_weight="0"
                android:text="@string/ssl_validator_header"
                android:padding="5dp"
                android:textAppearance="?android:attr/textAppearanceMedium"
                 />
      
        <TextView
 -              android:id="@+id/untrusted_reason_cert_not_trusted"
 +              android:id="@+id/reason_cert_not_trusted"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
+               android:layout_weight="0"
                android:layout_gravity="left"
                android:paddingLeft="20dp"
                android:text="@string/ssl_validator_reason_cert_not_trusted"
                android:textAppearance="?android:attr/textAppearanceSmall"
                 />
                
 +      
 +      <TextView
 +              android:id="@+id/reason_cert_expired"
 +              android:layout_width="wrap_content"
 +              android:layout_height="wrap_content"
 +              android:layout_gravity="left"
 +              android:paddingLeft="20dp"
 +              android:text="@string/ssl_validator_reason_cert_expired"
 +              android:textAppearance="?android:attr/textAppearanceSmall"
 +               />
 +      
 +      <TextView
 +              android:id="@+id/reason_cert_not_yet_valid"
 +              android:layout_width="wrap_content"
 +              android:layout_height="wrap_content"
 +              android:layout_gravity="left"
 +              android:paddingLeft="20dp"
 +              android:text="@string/ssl_validator_reason_cert_not_yet_valid"
 +              android:textAppearance="?android:attr/textAppearanceSmall"
 +               />
 +              
 +      <TextView
 +              android:id="@+id/reason_hostname_not_verified"
 +              android:layout_width="wrap_content"
 +              android:layout_height="wrap_content"
 +              android:layout_gravity="left"
 +              android:paddingLeft="20dp"
 +              android:text="@string/ssl_validator_reason_hostname_not_verified"
 +              android:textAppearance="?android:attr/textAppearanceSmall"
 +               />
 +      
      <ScrollView 
 -        android:id="@+id/untrusted_details_scroll"
 +        android:id="@+id/details_scroll"
          android:visibility="gone" 
        android:padding="20dp"
-         android:layout_width="wrap_content"
-         android:layout_height="180dp">
+         android:layout_width="match_parent"
+         android:layout_height="0dp"
+         android:layout_weight="1"
+         >
          
                <LinearLayout 
 -              android:id="@+id/untrusted_details_view"
 +              android:id="@+id/details_view"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="left"
                android:orientation="vertical" >
                        
                    <TextView
 -                      android:id="@+id/untrusted_null_cert"
 +                      android:id="@+id/null_cert"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="left"
                        android:textAppearance="?android:attr/textAppearanceSmall" />
  
                                <TextView
 -                              android:id="@+id/untrusted_label_subject"
 +                              android:id="@+id/label_subject"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                        android:paddingBottom="5dp"
                        />
                                
                                <TextView
 -                                  android:id="@+id/untrusted_label_subject_CN"
 +                                  android:id="@+id/label_subject_CN"
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:text="@string/ssl_validator_label_CN"
                                />
                            
                                <TextView
 -                                  android:id="@+id/untrusted_value_subject_CN"
 +                                  android:id="@+id/value_subject_CN"
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:paddingBottom="5dp"
                                />
                                
                                <TextView
 -                                  android:id="@+id/untrusted_label_subject_O"
 +                                  android:id="@+id/label_subject_O"
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:text="@string/ssl_validator_label_O"
                                />
                            
                                <TextView
 -                                  android:id="@+id/untrusted_value_subject_O"
 +                                  android:id="@+id/value_subject_O"
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:paddingBottom="5dp"
                                />
                                
                                <TextView
 -                                  android:id="@+id/untrusted_label_subject_OU"
 +                                  android:id="@+id/label_subject_OU"
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:text="@string/ssl_validator_label_OU"
                                />
                            
                                <TextView
 -                                  android:id="@+id/untrusted_value_subject_OU"
 +                                  android:id="@+id/value_subject_OU"
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:paddingBottom="5dp"
                                />
                                
                                <TextView
 -                                  android:id="@+id/untrusted_label_subject_ST"
 +                                  android:id="@+id/label_subject_ST"
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:text="@string/ssl_validator_label_ST"
                                />
                            
                                <TextView
 -                                  android:id="@+id/untrusted_value_subject_ST"
 +                                  android:id="@+id/value_subject_ST"
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:paddingBottom="5dp"
                                />
  
                                <TextView
 -                                  android:id="@+id/untrusted_label_subject_C"
 +                                  android:id="@+id/label_subject_C"
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:text="@string/ssl_validator_label_C"
                                />
                                
                                <TextView
 -                                  android:id="@+id/untrusted_value_subject_C"
 +                                  android:id="@+id/value_subject_C"
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:paddingBottom="5dp"
                                />
                                
                                <TextView
 -                                  android:id="@+id/untrusted_label_subject_L"
 +                                  android:id="@+id/label_subject_L"
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:text="@string/ssl_validator_label_L"
                                />
                            
                                <TextView
 -                                  android:id="@+id/untrusted_value_subject_L"
 +                                  android:id="@+id/value_subject_L"
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:paddingBottom="5dp"
                            
  
                                <TextView
 -                              android:id="@+id/untrusted_label_issuer"
 +                              android:id="@+id/label_issuer"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                        android:paddingBottom="5dp"
                        />
                                
                                <TextView
 -                                  android:id="@+id/untrusted_label_issuer_CN"
 +                                  android:id="@+id/label_issuer_CN"
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:text="@string/ssl_validator_label_CN"
                                />
                            
                                <TextView
 -                                  android:id="@+id/untrusted_value_issuer_CN"
 +                                  android:id="@+id/value_issuer_CN"
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:paddingBottom="5dp"
                                />
                                
                                <TextView
 -                                  android:id="@+id/untrusted_label_issuer_O"
 +                                  android:id="@+id/label_issuer_O"
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:text="@string/ssl_validator_label_O"
                                />
                            
                                <TextView
 -                                  android:id="@+id/untrusted_value_issuer_O"
 +                                  android:id="@+id/value_issuer_O"
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:paddingBottom="5dp"
                                />
                                
                                <TextView
 -                                  android:id="@+id/untrusted_label_issuer_OU"
 +                                  android:id="@+id/label_issuer_OU"
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:text="@string/ssl_validator_label_OU"
                                />
                            
                                <TextView
 -                                  android:id="@+id/untrusted_value_issuer_OU"
 +                                  android:id="@+id/value_issuer_OU"
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:paddingBottom="5dp"
                                />
                                
                                <TextView
 -                                  android:id="@+id/untrusted_label_issuer_ST"
 +                                  android:id="@+id/label_issuer_ST"
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:text="@string/ssl_validator_label_ST"
                                />
                            
                                <TextView
 -                                  android:id="@+id/untrusted_value_issuer_ST"
 +                                  android:id="@+id/value_issuer_ST"
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:paddingBottom="5dp"
                                />
  
                                <TextView
 -                                  android:id="@+id/untrusted_label_issuer_C"
 +                                  android:id="@+id/label_issuer_C"
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:text="@string/ssl_validator_label_C"
                                />
                                
                                <TextView
 -                                  android:id="@+id/untrusted_value_issuer_C"
 +                                  android:id="@+id/value_issuer_C"
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:paddingBottom="5dp"
                                />
                                
                                <TextView
 -                                  android:id="@+id/untrusted_label_issuer_L"
 +                                  android:id="@+id/label_issuer_L"
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:text="@string/ssl_validator_label_L"
                                />
                            
                                <TextView
 -                                  android:id="@+id/untrusted_value_issuer_L"
 +                                  android:id="@+id/value_issuer_L"
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:paddingBottom="5dp"
                                />
                            
                                <TextView
 -                              android:id="@+id/untrusted_label_validity"
 +                              android:id="@+id/label_validity"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                        android:paddingBottom="5dp"
                        />
                                
                                <TextView
 -                                  android:id="@+id/untrusted_label_validity_from"
 +                                  android:id="@+id/label_validity_from"
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:text="@string/ssl_validator_label_validity_from"
                                />
                            
                                <TextView
 -                                  android:id="@+id/untrusted_value_validity_from"
 +                                  android:id="@+id/value_validity_from"
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:paddingBottom="5dp"
                                />
                                
                                <TextView
 -                                  android:id="@+id/untrusted_label_validity_to"
 +                                  android:id="@+id/label_validity_to"
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:text="@string/ssl_validator_label_validity_to"
                                />
                            
                                <TextView
 -                                  android:id="@+id/untrusted_value_validity_to"
 +                                  android:id="@+id/value_validity_to"
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:paddingBottom="5dp"
                                
  
                                <TextView
 -                              android:id="@+id/untrusted_label_signature"
 +                              android:id="@+id/label_signature"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                        android:paddingBottom="5dp"
                        />
                                
                                <TextView
 -                              android:id="@+id/untrusted_label_signature_algorithm"
 +                              android:id="@+id/label_signature_algorithm"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:text="@string/ssl_validator_label_signature_algorithm"
                        />
                                
                                <TextView
 -                              android:id="@+id/untrusted_value_signature_algorithm"
 +                              android:id="@+id/value_signature_algorithm"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                        android:paddingBottom="5dp"
                                                                                                                                                                                                
                                                                
                                <TextView
 -                              android:id="@+id/untrusted_value_signature"
 +                              android:id="@+id/value_signature"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                        android:paddingBottom="5dp"
      </ScrollView>
        
        <TextView
 -        android:id="@+id/untrusted_question"
 +        android:id="@+id/question"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
+               android:layout_weight="0"
                android:padding="5dp"
          android:text="@string/ssl_validator_question"
          android:textAppearance="?android:attr/textAppearanceMedium"
        <LinearLayout
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
+               android:layout_weight="0"
          android:gravity="center" >
  
          <Button
 -            android:id="@+id/untrusted_cancel"
 +            android:id="@+id/cancel"
              android:layout_width="0dp"
              android:layout_height="wrap_content"
              android:layout_weight="1"
              android:text="@string/common_cancel" />
  
          <Button
 -            android:id="@+id/untrusted_details_btn"
 +            android:id="@+id/details_btn"
              android:layout_width="0dp"
              android:layout_height="wrap_content"
              android:layout_weight="1"
              android:text="@string/ssl_validator_btn_details_see" />
  
          <Button
 -            android:id="@+id/untrusted_ok"
 +            android:id="@+id/ok"
              android:layout_width="0dp"
              android:layout_height="wrap_content"
              android:layout_weight="1"
@@@ -18,8 -18,6 +18,8 @@@
  \r
  package com.owncloud.android.authentication;\r
  \r
 +import java.security.cert.X509Certificate;\r
 +\r
  import android.accounts.Account;\r
  import android.accounts.AccountManager;\r
  import android.app.AlertDialog;\r
@@@ -31,13 -29,10 +31,13 @@@ import android.content.SharedPreference
  import android.graphics.Rect;\r
  import android.graphics.drawable.Drawable;\r
  import android.net.Uri;\r
 +import android.net.http.SslError;\r
  import android.os.Bundle;\r
  import android.os.Handler;\r
  import android.preference.PreferenceManager;\r
  import android.support.v4.app.Fragment;\r
 +import android.support.v4.app.FragmentManager;\r
 +import android.support.v4.app.FragmentTransaction;\r
  import android.text.Editable;\r
  import android.text.InputType;\r
  import android.text.TextWatcher;\r
@@@ -73,8 -68,7 +73,8 @@@ import com.owncloud.android.lib.resourc
  import com.owncloud.android.lib.resources.users.GetRemoteUserNameOperation;\r
  
  import com.owncloud.android.ui.dialog.SamlWebViewDialog;\r
 -import com.owncloud.android.ui.dialog.SslValidatorDialog;\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
@@@ -86,8 -80,7 +86,8 @@@
   * @author David A. Velasco\r
   */\r
  public class AuthenticatorActivity extends AccountAuthenticatorActivity\r
 -implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeListener, OnEditorActionListener, SsoWebViewClientListener{\r
 +    implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeListener, OnEditorActionListener, \r
 +    SsoWebViewClientListener, OnSslUntrustedCertListener {\r
  \r
      private static final String TAG = AuthenticatorActivity.class.getSimpleName();\r
  \r
      private static final String AUTH_OPTIONAL = "optional";\r
      \r
      private static final int DIALOG_LOGIN_PROGRESS = 0;\r
 -    private static final int DIALOG_SSL_VALIDATOR = 1;\r
 -    private static final int DIALOG_CERT_NOT_SAVED = 2;\r
 -    private static final int DIALOG_OAUTH2_LOGIN_PROGRESS = 3;\r
 +    private static final int DIALOG_CERT_NOT_SAVED = 1;\r
 +    private static final int DIALOG_OAUTH2_LOGIN_PROGRESS = 2;\r
  \r
      public static final byte ACTION_CREATE = 0;\r
      public static final byte ACTION_UPDATE_TOKEN = 1;\r
      private Thread mOperationThread;\r
      private GetRemoteStatusOperation mOcServerChkOperation;\r
      private ExistenceCheckRemoteOperation mAuthCheckOperation;\r
 -    private RemoteOperationResult mLastSslUntrustedServerResult;\r
  \r
      private Uri mNewCapturedUriFromOAuth2Redirection;\r
  \r
      \r
      private boolean mResumed; // Control if activity is resumed\r
  \r
-     private String DIALOG_UNTRUSTED_CERT = "DIALOG_UNTRUSTED_CERT";\r
++    public static String DIALOG_UNTRUSTED_CERT = "DIALOG_UNTRUSTED_CERT";\r
 +\r
  \r
      /**\r
       * {@inheritDoc}\r
  \r
              /// very special case (TODO: move to a common place for all the remote operations)\r
              if (result.getCode() == ResultCode.SSL_RECOVERABLE_PEER_UNVERIFIED) {\r
 -                mLastSslUntrustedServerResult = result;\r
 -                showDialog(DIALOG_SSL_VALIDATOR); \r
 +                showUntrustedCertDialog(result);\r
              }\r
  \r
              /// retrieve discovered version and normalize server URL\r
  \r
              // very special case (TODO: move to a common place for all the remote operations) (dangerous here?)\r
              if (result.getCode() == ResultCode.SSL_RECOVERABLE_PEER_UNVERIFIED) {\r
 -                mLastSslUntrustedServerResult = result;\r
 -                showDialog(DIALOG_SSL_VALIDATOR); \r
 +                showUntrustedCertDialog(result);\r
              }\r
  \r
          } else {    // authorization fail due to client side - probably wrong credentials\r
          case DIALOG_CERT_NOT_SAVED:\r
          case DIALOG_OAUTH2_LOGIN_PROGRESS:\r
              break;\r
 -        case DIALOG_SSL_VALIDATOR: {\r
 -            ((SslValidatorDialog)dialog).updateResult(mLastSslUntrustedServerResult);\r
 -            break;\r
 -        }\r
          default:\r
              Log_OC.e(TAG, "Incorrect dialog called with id = " + id);\r
          }\r
              dialog = working_dialog;\r
              break;\r
          }\r
 -        case DIALOG_SSL_VALIDATOR: {\r
 -            /// TODO start to use new dialog interface, at least for this (it is a FragmentDialog already)\r
 -            dialog = SslValidatorDialog.newInstance(this, mLastSslUntrustedServerResult, this);\r
 -            break;\r
 -        }\r
          case DIALOG_CERT_NOT_SAVED: {\r
              AlertDialog.Builder builder = new AlertDialog.Builder(this);\r
              builder.setMessage(getResources().getString(R.string.ssl_validator_not_saved));\r
       */\r
      public void onSavedCertificate() {\r
          checkOcServer();\r
 +        reloadWebView();\r
 +        \r
      }\r
  \r
      /**\r
      @Override\r
      public void onFailedSavingCertificate() {\r
          showDialog(DIALOG_CERT_NOT_SAVED);\r
 +        cancelWebView();\r
      }\r
  \r
  \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
 +        // Show a dialog with the certificate info\r
 +        SslUntrustedCertDialog dialog = SslUntrustedCertDialog.newInstance(x509Certificate, error);\r
 +        FragmentManager fm = getSupportFragmentManager();\r
 +        FragmentTransaction ft = fm.beginTransaction();\r
 +        dialog.show(ft, DIALOG_UNTRUSTED_CERT);\r
 +        \r
 +    }\r
 +    \r
 +    /**\r
 +     * Show untrusted cert dialog \r
 +     */\r
 +    public void showUntrustedCertDialog(RemoteOperationResult result) {\r
 +        // Show a dialog with the certificate info\r
 +        SslUntrustedCertDialog dialog = SslUntrustedCertDialog.newInstance(result, this);\r
 +        FragmentManager fm = getSupportFragmentManager();\r
 +        FragmentTransaction ft = fm.beginTransaction();\r
 +        dialog.show(ft, DIALOG_UNTRUSTED_CERT);\r
 +        \r
 +    }\r
 +    \r
 +    /**\r
 +     * Dismiss untrusted cert dialog\r
 +     */\r
 +    public void dismissUntrustedCertDialog(){\r
 +        Fragment frag = getSupportFragmentManager().findFragmentByTag(DIALOG_UNTRUSTED_CERT);\r
 +        if (frag != null) {\r
 +            SslUntrustedCertDialog dialog = (SslUntrustedCertDialog) frag;\r
 +            dialog.dismiss();\r
 +        }\r
 +    }\r
      \r
  }\r
@@@ -24,16 -24,26 +24,23 @@@ import java.security.cert.CertificateEx
  import java.security.cert.CertificateFactory;
  import java.security.cert.X509Certificate;
  
 -import com.owncloud.android.lib.common.network.NetworkUtils;
 +import com.owncloud.android.lib.common.network.NetworkUtils;
+ import com.actionbarsherlock.app.SherlockFragmentActivity;
+ import com.owncloud.android.R;
+ import com.owncloud.android.ui.dialog.SslUntrustedCertDialog;
+ import com.owncloud.android.ui.dialog.SslUntrustedCertDialogABSTRACT;
+ import com.owncloud.android.ui.dialog.SslUntrustedCertDialog.OnSslUntrustedCertListener;
  import com.owncloud.android.utils.Log_OC;
  
 -import android.app.AlertDialog;
  import android.content.Context;
 -import android.content.DialogInterface;
  import android.graphics.Bitmap;
  import android.net.http.SslCertificate;
  import android.net.http.SslError;
  import android.os.Bundle;
  import android.os.Handler;
  import android.os.Message;
 -import android.support.v4.app.FragmentActivity;
+ import android.support.v4.app.FragmentManager;
+ import android.support.v4.app.FragmentTransaction;
  import android.view.KeyEvent;
  import android.view.View;
  import android.webkit.CookieManager;
@@@ -53,9 -63,11 +60,9 @@@ import android.webkit.WebViewClient
   *   
   * @author David A. Velasco
   */
 -public class SsoWebViewClient extends WebViewClient implements OnSslUntrustedCertListener {
 +public class SsoWebViewClient extends WebViewClient {
          
      private static final String TAG = SsoWebViewClient.class.getSimpleName();
 -
 -    public final static String DIALOG_UNTRUSTED_CERT = "UNTRUSTED CERT";
      
      public interface SsoWebViewClientListener {
          public void onSsoFinished(String sessionCookie);
          Log_OC.d(TAG, "onReceivedSslError : " + error);
          // Test 1
          X509Certificate x509Certificate = getX509CertificateFromError(error);
-         boolean isKnowServer = false;
+         boolean isKnownServer = false;
          
          if (x509Certificate != null) {
              Log_OC.d(TAG, "------>>>>> x509Certificate " + x509Certificate.toString());
              
              try {
-                 isKnowServer = NetworkUtils.isCertInKnownServersStore((Certificate) x509Certificate, mContext);
+                 isKnownServer = NetworkUtils.isCertInKnownServersStore((Certificate) x509Certificate, mContext);
              } catch (Exception e) {
                  Log_OC.e(TAG, "Exception: " + e.getMessage());
              }
          }
          
-          if (isKnowServer) {
+          if (isKnownServer) {
               handler.proceed();
-          } else {
+          } else if (x509Certificate != null) {
 -             // Show a dialog with all the certificate info
 -             SslUntrustedCertDialog dialog = SslUntrustedCertDialog.newInstance(mContext, x509Certificate, this, handler);
 -             FragmentManager fm = ((SherlockFragmentActivity)mContext).getSupportFragmentManager();
 -             FragmentTransaction ft = fm.beginTransaction();
 -             dialog.show(ft, DIALOG_UNTRUSTED_CERT);
 +             // Show a dialog with the certificate info
 +             ((AuthenticatorActivity)mContext).showUntrustedCertDialog(x509Certificate, error);
- //             SslUntrustedCertDialog dialog = SslUntrustedCertDialog.newInstance(mContext, x509Certificate, error);
- //             FragmentManager fm = ((FragmentActivity)mContext).getSupportFragmentManager();
- //             FragmentTransaction ft = fm.beginTransaction();
- //             dialog.show(ft, DIALOG_UNTRUSTED_CERT);
               handler.cancel();
 -             dialog.show(ft, DIALOG_UNTRUSTED_CERT);
+          } else {
+              // Show a dialog with the certificate information available in SslError (not full)
+              SslUntrustedCertDialogABSTRACT dialog = SslUntrustedCertDialogABSTRACT.newInstanceForEmptySslError(error, handler);
+              FragmentManager fm = ((SherlockFragmentActivity)mContext).getSupportFragmentManager();
+              FragmentTransaction ft = fm.beginTransaction();
++             dialog.show(ft, AuthenticatorActivity.DIALOG_UNTRUSTED_CERT);
+              // let's forward the handler, and see what happens...
           }
      }
      
          return false;
      }
  
 -    @Override
 -    public void onFailedSavingCertificate() {
 -        AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
 -        builder.setMessage(mContext.getString(R.string.ssl_validator_not_saved));
 -        builder.setCancelable(false);
 -        builder.setPositiveButton(R.string.common_ok, new DialogInterface.OnClickListener() {
 -            @Override
 -            public void onClick(DialogInterface dialog, int which) {
 -                dialog.dismiss();
 -            };
 -        });
 -        builder.create().show();
 -        
 -    }
 -
  }
@@@ -28,23 -28,21 +28,22 @@@ import java.util.Map
  
  import javax.security.auth.x500.X500Principal;
  
- import com.actionbarsherlock.app.SherlockDialogFragment;
 +import com.actionbarsherlock.app.SherlockActivity;
  import com.owncloud.android.R;
 -import com.owncloud.android.authentication.AuthenticatorActivity;
 +import com.owncloud.android.lib.common.network.CertificateCombinedException;
  import com.owncloud.android.lib.common.network.NetworkUtils;
 +import com.owncloud.android.lib.common.operations.RemoteOperationResult;
  import com.owncloud.android.utils.Log_OC;
  
  import android.app.Activity;
  import android.app.Dialog;
 -import android.content.Context;
 +import android.net.http.SslError;
  import android.os.Bundle;
  import android.view.LayoutInflater;
  import android.view.View;
  import android.view.View.OnClickListener;
  import android.view.ViewGroup;
  import android.view.Window;
 -import android.webkit.SslErrorHandler;
  import android.widget.Button;
  import android.widget.TextView;
  
   * Dialog to show an Untrusted Certificate
   * 
   * @author masensio
 + * @author David A. Velasco
   *
   */
- public class SslUntrustedCertDialog extends SherlockDialogFragment{
+ public class SslUntrustedCertDialog extends SslUntrustedCertDialogABSTRACT {
      
      private final static String TAG = SslUntrustedCertDialog.class.getSimpleName();
      
      private X509Certificate mCertificate;
      private View mView;
 -    private SslErrorHandler mHandler;
 -    
      private OnSslUntrustedCertListener mListener;
 +    private SslError mError;
 +    private CertificateCombinedException mException = null;
      
      public SslUntrustedCertDialog() {
      }
      
 -    public SslUntrustedCertDialog(X509Certificate cert, OnSslUntrustedCertListener listener, SslErrorHandler handler) {
 +    public SslUntrustedCertDialog(X509Certificate cert, SslError error) {
          mCertificate = cert;
 +        mError = error;
 +    }
 +    
 +    /**
 +     * Private constructor. 
 +     * 
 +     * Instances have to be created through static {@link SslUntrustedCertDialog#newInstance}.
 +     * 
 +     * @param context       Android context where the dialog will live
 +     * @param e             Exception causing the need of prompt the user about the server certificate.
 +     * @param listener      Object to notice when the server certificate was added to the local certificates store.
 +     */
 +    private SslUntrustedCertDialog(RemoteOperationResult result, OnSslUntrustedCertListener listener) {
          mListener = listener;
 -        mHandler = handler;
 +        if (result.isSslRecoverableException()) {
 +            mException = (CertificateCombinedException) result.getException();
 +            mCertificate = mException.getServerCertificate();
 +        }
      }
 +    
  
 -    public static SslUntrustedCertDialog newInstance(Context context, X509Certificate cert, OnSslUntrustedCertListener listener, 
 -            SslErrorHandler handler) {
 +    public static SslUntrustedCertDialog newInstance(X509Certificate cert, SslError error) {
          if (cert != null){
 -            SslUntrustedCertDialog dialog = new SslUntrustedCertDialog(cert, listener, handler);
 +            SslUntrustedCertDialog dialog = new SslUntrustedCertDialog(cert, error);
 +            return dialog;
 +        } else  { // TODO Review this case
 +            SslUntrustedCertDialog dialog = new  SslUntrustedCertDialog();
 +            return  dialog;
 +        }
 +    }
 +    
 +    
 +    
 +    /**
 +     * Creates a new SslUntrustedCertDialog to ask the user if an untrusted certificate from a server should
 +     * be trusted.
 +     * 
 +     * @param context       Android context where the dialog will live.
 +     * @param result        Result of a failed remote operation.
 +     * @param listener      Object to notice when the server certificate was added to the local certificates store.
 +     * @return              A new SslUntrustedCertDialog instance. NULL if the operation can not be recovered
 +     *                      by setting the certificate as reliable.
 +     */
 +    public static SslUntrustedCertDialog newInstance(RemoteOperationResult result, OnSslUntrustedCertListener listener) {
 +        if (result != null && result.isSslRecoverableException()) {
 +            SslUntrustedCertDialog dialog = new SslUntrustedCertDialog(result, listener);
              return dialog;
          } else {
              return null;
          }
      }
-     
-     
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
      }
      
      @Override
 +    public void onAttach(Activity activity) {
 +        super.onAttach(activity);
 +        if (activity instanceof SherlockActivity) {
 +            mListener = (OnSslUntrustedCertListener) activity;
 +        }
 +    }
 +    
 +    @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
          // Create a view by inflating desired layout
          mView = inflater.inflate(R.layout.ssl_untrusted_cert_layout, container,  false);
          
 -        Button ok = (Button) mView.findViewById(R.id.untrusted_ok);
 +        updateException(mException);
 +        
 +        Button ok = (Button) mView.findViewById(R.id.ok);
          ok.setOnClickListener(new OnClickListener() {
              
              @Override
                    saveServerCert();
                    dismiss();
                    if (mListener != null) {
 -                      ((AuthenticatorActivity)getSherlockActivity()).reloadWebView();
 -                      
 +                      mListener.onSavedCertificate();
                    }
                    else
                        Log_OC.d(TAG, "Nobody there to notify the certificate was saved");
                } catch (GeneralSecurityException e) {
                    dismiss();
                    if (mListener != null) {
 -                      ((AuthenticatorActivity)getSherlockActivity()).cancelWebView();
                        mListener.onFailedSavingCertificate();
                    }
                    Log_OC.e(TAG, "Server certificate could not be saved in the known servers trust store ", e);
                } catch (IOException e) {
                    dismiss();
                    if (mListener != null) {
 -                      ((AuthenticatorActivity)getSherlockActivity()).cancelWebView();
                        mListener.onFailedSavingCertificate();
                    }
                    Log_OC.e(TAG, "Server certificate could not be saved in the known servers trust store ", e);
              }
          });
          
 -        Button cancel = (Button) mView.findViewById(R.id.untrusted_cancel);
 +        Button cancel = (Button) mView.findViewById(R.id.cancel);
          cancel.setOnClickListener(new OnClickListener() {
              
              @Override
              public void onClick(View v) {
                  getDialog().cancel();
 -                ((AuthenticatorActivity)getSherlockActivity()).cancelWebView();
 +                mListener.onCancelCertificate();
              }
          });
          
 -        Button details = (Button) mView.findViewById(R.id.untrusted_details_btn);
 +        Button details = (Button) mView.findViewById(R.id.details_btn);
          details.setOnClickListener(new OnClickListener() {
              
              @Override
              public void onClick(View v) {
 -                View detailsScroll = mView.findViewById(R.id.untrusted_details_scroll);
 +                View detailsScroll = mView.findViewById(R.id.details_scroll);
                  if (detailsScroll.getVisibility() == View.VISIBLE) {
                      detailsScroll.setVisibility(View.GONE);
                      ((Button) v).setText(R.string.ssl_validator_btn_details_see);
              super.onDestroyView();
      }
      
 +    
 +    private void updateException(CertificateCombinedException exception) {
 +        
 +        /// clean
 +        mView.findViewById(R.id.reason_cert_not_trusted).setVisibility(View.GONE);
 +        mView.findViewById(R.id.reason_cert_expired).setVisibility(View.GONE);
 +        mView.findViewById(R.id.reason_cert_not_yet_valid).setVisibility(View.GONE);
 +        mView.findViewById(R.id.reason_hostname_not_verified).setVisibility(View.GONE);
 +        mView.findViewById(R.id.details_scroll).setVisibility(View.GONE);
 +        
 +        
 +        if (mException != null) {
 +            
 +            /// refresh
 +            if (mException.getCertPathValidatorException() != null) {
 +                ((TextView)mView.findViewById(R.id.reason_cert_not_trusted)).setVisibility(View.VISIBLE);
 +            }
 +            
 +            if (mException.getCertificateExpiredException() != null) {
 +                ((TextView)mView.findViewById(R.id.reason_cert_expired)).setVisibility(View.VISIBLE);
 +            }
 +            
 +            if (mException.getCertificateNotYetValidException() != null) {
 +                ((TextView)mView.findViewById(R.id.reason_cert_not_yet_valid)).setVisibility(View.VISIBLE);
 +            } 
 +
 +            if (mException.getSslPeerUnverifiedException() != null ) {
 +                ((TextView)mView.findViewById(R.id.reason_hostname_not_verified)).setVisibility(View.VISIBLE);
 +            }
 +            
 +        }
 +        
 +    }
 +    
      private void showCertificateData(X509Certificate cert) {
  
 -        TextView nullCerView = (TextView) mView.findViewById(R.id.untrusted_null_cert);
 +        TextView nullCerView = (TextView) mView.findViewById(R.id.null_cert);
          
          if (cert != null) {
              nullCerView.setVisibility(View.GONE);
      }
  
      private void showSignature(X509Certificate cert) {
 -        TextView sigView = ((TextView)mView.findViewById(R.id.untrusted_value_signature));
 -        TextView algorithmView = ((TextView)mView.findViewById(R.id.untrusted_value_signature_algorithm));
 +        TextView sigView = ((TextView)mView.findViewById(R.id.value_signature));
 +        TextView algorithmView = ((TextView)mView.findViewById(R.id.value_signature_algorithm));
          sigView.setText(getHex(cert.getSignature()));
          algorithmView.setText(cert.getSigAlgName());
      }
  
      @SuppressWarnings("deprecation")
      private void showValidity(Date notBefore, Date notAfter) {
 -        TextView fromView = ((TextView)mView.findViewById(R.id.untrusted_value_validity_from));
 -        TextView toView = ((TextView)mView.findViewById(R.id.untrusted_value_validity_to));
 +        TextView fromView = ((TextView)mView.findViewById(R.id.value_validity_from));
 +        TextView toView = ((TextView)mView.findViewById(R.id.value_validity_to));
          fromView.setText(notBefore.toLocaleString());
          toView.setText(notAfter.toLocaleString());
      }
  
      private void showSubject(X500Principal subject) {
          Map<String, String> s = parsePrincipal(subject);
 -        TextView cnView = ((TextView)mView.findViewById(R.id.untrusted_value_subject_CN));
 -        TextView oView = ((TextView)mView.findViewById(R.id.untrusted_value_subject_O));
 -        TextView ouView = ((TextView)mView.findViewById(R.id.untrusted_value_subject_OU));
 -        TextView cView = ((TextView)mView.findViewById(R.id.untrusted_value_subject_C));
 -        TextView stView = ((TextView)mView.findViewById(R.id.untrusted_value_subject_ST));
 -        TextView lView = ((TextView)mView.findViewById(R.id.untrusted_value_subject_L));
 +        TextView cnView = ((TextView)mView.findViewById(R.id.value_subject_CN));
 +        TextView oView = ((TextView)mView.findViewById(R.id.value_subject_O));
 +        TextView ouView = ((TextView)mView.findViewById(R.id.value_subject_OU));
 +        TextView cView = ((TextView)mView.findViewById(R.id.value_subject_C));
 +        TextView stView = ((TextView)mView.findViewById(R.id.value_subject_ST));
 +        TextView lView = ((TextView)mView.findViewById(R.id.value_subject_L));
          
          if (s.get("CN") != null) {
              cnView.setText(s.get("CN"));
      
      private void showIssuer(X500Principal issuer) {
          Map<String, String> s = parsePrincipal(issuer);
 -        TextView cnView = ((TextView)mView.findViewById(R.id.untrusted_value_issuer_CN));
 -        TextView oView = ((TextView)mView.findViewById(R.id.untrusted_value_issuer_O));
 -        TextView ouView = ((TextView)mView.findViewById(R.id.untrusted_value_issuer_OU));
 -        TextView cView = ((TextView)mView.findViewById(R.id.untrusted_value_issuer_C));
 -        TextView stView = ((TextView)mView.findViewById(R.id.untrusted_value_issuer_ST));
 -        TextView lView = ((TextView)mView.findViewById(R.id.untrusted_value_issuer_L));
 +        TextView cnView = ((TextView)mView.findViewById(R.id.value_issuer_CN));
 +        TextView oView = ((TextView)mView.findViewById(R.id.value_issuer_O));
 +        TextView ouView = ((TextView)mView.findViewById(R.id.value_issuer_OU));
 +        TextView cView = ((TextView)mView.findViewById(R.id.value_issuer_C));
 +        TextView stView = ((TextView)mView.findViewById(R.id.value_issuer_ST));
 +        TextView lView = ((TextView)mView.findViewById(R.id.value_issuer_L));
          
          if (s.get("CN") != null) {
              cnView.setText(s.get("CN"));
          }
      }
  
-     
      public interface OnSslUntrustedCertListener {
 +        public void onSavedCertificate();
 +        public void onCancelCertificate();
          public void onFailedSavingCertificate();
      }
-    
 -    
  }
index 0000000,3bc2897..7495ba5
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,250 +1,250 @@@
 -        Button ok = (Button) mView.findViewById(R.id.untrusted_ok);
+ /* 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 java.text.DateFormat;
+ import java.util.Date;
+ import com.owncloud.android.R;
+ import com.owncloud.android.authentication.AuthenticatorActivity;
+ import android.app.Activity;
+ import android.app.Dialog;
+ import android.net.http.SslCertificate;
+ import android.net.http.SslError;
+ import android.os.Bundle;
+ import android.view.LayoutInflater;
+ import android.view.View;
+ import android.view.View.OnClickListener;
+ import android.view.ViewGroup;
+ import android.view.Window;
+ import android.webkit.SslErrorHandler;
+ import android.webkit.WebView;
+ import android.widget.Button;
+ import android.widget.TextView;
+ /**
+  * Dialog to show an Untrusted Certificate
+  * 
+  * @author masensio
+  * @author David A. Velasco
+  */
+ public class SslUntrustedCertDialogForEmptySslError extends SslUntrustedCertDialogABSTRACT {
+     
+     //private final static String TAG = SslUntrustedCertDialogForEmptySslError.class.getSimpleName();
+     
+     private SslError mError;
+     private SslErrorHandler mHandler;
+     private View mView;
+     
+     /**
+      * Factory method.
+      * 
+      * @param error     Error occurred; details about it will be shown in the dialog.
+      * @param handler   Handler to indicate to the {@link WebView} where the error was found what to do next.
+      * @return          New dialog.
+      */
+     public static SslUntrustedCertDialogForEmptySslError newInstance(SslError error, SslErrorHandler handler) {
+         return new SslUntrustedCertDialogForEmptySslError(error, handler);
+     }
+     
+     
+     /**
+      * Empty constructor.
+      * 
+      * Required by Android framework. Never used, since the state is retained; see {@link #onCreate(Bundle)}  
+      */
+     public SslUntrustedCertDialogForEmptySslError() {}
+     
+     /**
+      * Private constructor.
+      * 
+      * Used by the factory method {@link #newInstance(SslError, SslErrorHandler)}.
+      * 
+      * @param error     Error occurred; details about it will be shown in the dialog.
+      * @param handler   Handler to indicate to the {@link WebView} where the error was found what to do next.
+      */
+     private SslUntrustedCertDialogForEmptySslError(SslError error, SslErrorHandler handler) {
+         mError = error;
+         mHandler = handler;
+     }
+     
+     @Override
+     public void onAttach(Activity activity) {
+         super.onAttach(activity);
+         /*if (!(activity instanceof OnSslUntrustedCertListener)) {
+             throw new IllegalArgumentException("Trying to attach to an Activity not implementing " + OnSslUntrustedCertListener.class.getCanonicalName());
+         }*/
+     }
+     
+     
+     // TODO try to move to the parent class ?
+     @Override
+     public void onCreate(Bundle savedInstanceState) {
+         super.onCreate(savedInstanceState);
+         setRetainInstance(true);    // force to keep the state of the fragment on configuration changes (such as device rotations)
+         setCancelable(false);
+         mView = null;
+     }
+     
+     // try to move to the parent class ?
+     @Override
+     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+         // Create a view by inflating desired layout
+         if (mView == null) {
+             mView = inflater.inflate(R.layout.ssl_untrusted_cert_layout, container,  false);
+         } else {
+             ((ViewGroup)mView.getParent()).removeView(mView);
+         }
+         
 -        Button cancel = (Button) mView.findViewById(R.id.untrusted_cancel);
++        Button ok = (Button) mView.findViewById(R.id.ok);
+         ok.setOnClickListener(new OnClickListener() {
+             
+             @Override
+             public void onClick(View v) {
+                 //AuthenticatorActivity act = ((AuthenticatorActivity)getSherlockActivity());
+                 mHandler.proceed();
+                 dismiss();
+             }
+         });
+         
 -        Button details = (Button) mView.findViewById(R.id.untrusted_details_btn);
++        Button cancel = (Button) mView.findViewById(R.id.cancel);
+         cancel.setOnClickListener(new OnClickListener() {
+             
+             @Override
+             public void onClick(View v) {
+                 AuthenticatorActivity act = ((AuthenticatorActivity)getSherlockActivity());
+                 getDialog().cancel();
+                 mHandler.cancel();
+                 act.cancelWebView();
+             }
+         });
+         
 -                View detailsScroll = mView.findViewById(R.id.untrusted_details_scroll);
++        Button details = (Button) mView.findViewById(R.id.details_btn);
+         details.setOnClickListener(new OnClickListener() {
+             @Override
+             public void onClick(View v) {
 -        TextView nullCerView = (TextView) mView.findViewById(R.id.untrusted_null_cert);
++                View detailsScroll = mView.findViewById(R.id.details_scroll);
+                 if (detailsScroll.getVisibility() == View.VISIBLE) {
+                     detailsScroll.setVisibility(View.GONE);
+                     ((Button) v).setText(R.string.ssl_validator_btn_details_see);
+                 } else {
+                     detailsScroll.setVisibility(View.VISIBLE);
+                     ((Button) v).setText(R.string.ssl_validator_btn_details_hide);
+                     showCertificateData();
+                 }
+             }
+         });
+         
+         return mView;
+     }
+     @Override
+     public Dialog onCreateDialog(Bundle savedInstanceState) {
+         final Dialog dialog = super.onCreateDialog(savedInstanceState);
+         dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
+         return dialog;
+     }
+     @Override
+     public void onDestroyView() {
+         if (getDialog() != null && getRetainInstance())
+             getDialog().setDismissMessage(null);
+         super.onDestroyView();
+     }
+     
+     private void showCertificateData() {
 -        TextView fromView = ((TextView)mView.findViewById(R.id.untrusted_value_validity_from));
 -        TextView toView = ((TextView)mView.findViewById(R.id.untrusted_value_validity_to));
++        TextView nullCerView = (TextView) mView.findViewById(R.id.null_cert);
+         SslCertificate cert = mError.getCertificate();
+         if (cert != null) {
+             nullCerView.setVisibility(View.GONE);
+             showSubject(cert.getIssuedTo());
+             showIssuer(cert.getIssuedBy());
+             showValidity(cert.getValidNotBeforeDate(), cert.getValidNotAfterDate());
+             hideSignature();
+             
+         } else {
+             nullCerView.setVisibility(View.VISIBLE);
+         }
+     }
+     
+     private void showValidity(Date notBefore, Date notAfter) {
 -        TextView cnView = ((TextView)mView.findViewById(R.id.untrusted_value_subject_CN));
++        TextView fromView = ((TextView)mView.findViewById(R.id.value_validity_from));
++        TextView toView = ((TextView)mView.findViewById(R.id.value_validity_to));
+         DateFormat dateFormat = DateFormat.getDateInstance();
+         fromView.setText(dateFormat.format(notBefore));
+         toView.setText(dateFormat.format(notAfter));
+     }
+     
+     private void showSubject(SslCertificate.DName subject) {
 -        TextView oView = ((TextView)mView.findViewById(R.id.untrusted_value_subject_O));
++        TextView cnView = ((TextView)mView.findViewById(R.id.value_subject_CN));
+         cnView.setText(subject.getCName());
+         cnView.setVisibility(View.VISIBLE);
+         
 -        TextView ouView = ((TextView)mView.findViewById(R.id.untrusted_value_subject_OU));
++        TextView oView = ((TextView)mView.findViewById(R.id.value_subject_O));
+         oView.setText(subject.getOName());
+         oView.setVisibility(View.VISIBLE);
+         
 -        ((TextView)mView.findViewById(R.id.untrusted_value_subject_C)).setVisibility(View.GONE);
 -        ((TextView)mView.findViewById(R.id.untrusted_value_subject_ST)).setVisibility(View.GONE);
 -        ((TextView)mView.findViewById(R.id.untrusted_value_subject_L)).setVisibility(View.GONE);
 -        ((TextView)mView.findViewById(R.id.untrusted_label_subject_C)).setVisibility(View.GONE);
 -        ((TextView)mView.findViewById(R.id.untrusted_label_subject_ST)).setVisibility(View.GONE);
 -        ((TextView)mView.findViewById(R.id.untrusted_label_subject_L)).setVisibility(View.GONE);
++        TextView ouView = ((TextView)mView.findViewById(R.id.value_subject_OU));
+         ouView.setText(subject.getUName());
+         ouView.setVisibility(View.VISIBLE);
+         // SslCertificates don't offer this information
 -        TextView cnView = ((TextView)mView.findViewById(R.id.untrusted_value_issuer_CN));
++        ((TextView)mView.findViewById(R.id.value_subject_C)).setVisibility(View.GONE);
++        ((TextView)mView.findViewById(R.id.value_subject_ST)).setVisibility(View.GONE);
++        ((TextView)mView.findViewById(R.id.value_subject_L)).setVisibility(View.GONE);
++        ((TextView)mView.findViewById(R.id.label_subject_C)).setVisibility(View.GONE);
++        ((TextView)mView.findViewById(R.id.label_subject_ST)).setVisibility(View.GONE);
++        ((TextView)mView.findViewById(R.id.label_subject_L)).setVisibility(View.GONE);
+     }
+     
+     
+     private void showIssuer(SslCertificate.DName issuer) {
 -        TextView oView = ((TextView)mView.findViewById(R.id.untrusted_value_issuer_O));
++        TextView cnView = ((TextView)mView.findViewById(R.id.value_issuer_CN));
+         cnView.setText(issuer.getCName());
+         cnView.setVisibility(View.VISIBLE);
+         
 -        TextView ouView = ((TextView)mView.findViewById(R.id.untrusted_value_issuer_OU));
++        TextView oView = ((TextView)mView.findViewById(R.id.value_issuer_O));
+         oView.setText(issuer.getOName());
+         oView.setVisibility(View.VISIBLE);
 -        ((TextView)mView.findViewById(R.id.untrusted_value_issuer_C)).setVisibility(View.GONE);
 -        ((TextView)mView.findViewById(R.id.untrusted_value_issuer_ST)).setVisibility(View.GONE);
 -        ((TextView)mView.findViewById(R.id.untrusted_value_issuer_L)).setVisibility(View.GONE);
 -        ((TextView)mView.findViewById(R.id.untrusted_label_issuer_C)).setVisibility(View.GONE);
 -        ((TextView)mView.findViewById(R.id.untrusted_label_issuer_ST)).setVisibility(View.GONE);
 -        ((TextView)mView.findViewById(R.id.untrusted_label_issuer_L)).setVisibility(View.GONE);
++        TextView ouView = ((TextView)mView.findViewById(R.id.value_issuer_OU));
+         ouView.setText(issuer.getUName());
+         ouView.setVisibility(View.VISIBLE);
+         
+         // SslCertificates don't offer this information
 -        ((TextView)mView.findViewById(R.id.untrusted_label_signature)).setVisibility(View.GONE);
 -        ((TextView)mView.findViewById(R.id.untrusted_label_signature_algorithm)).setVisibility(View.GONE);
 -        ((TextView)mView.findViewById(R.id.untrusted_value_signature_algorithm)).setVisibility(View.GONE);
 -        ((TextView)mView.findViewById(R.id.untrusted_value_signature)).setVisibility(View.GONE);
++        ((TextView)mView.findViewById(R.id.value_issuer_C)).setVisibility(View.GONE);
++        ((TextView)mView.findViewById(R.id.value_issuer_ST)).setVisibility(View.GONE);
++        ((TextView)mView.findViewById(R.id.value_issuer_L)).setVisibility(View.GONE);
++        ((TextView)mView.findViewById(R.id.label_issuer_C)).setVisibility(View.GONE);
++        ((TextView)mView.findViewById(R.id.label_issuer_ST)).setVisibility(View.GONE);
++        ((TextView)mView.findViewById(R.id.label_issuer_L)).setVisibility(View.GONE);
+     }
+     
+     private void hideSignature() {
++        ((TextView)mView.findViewById(R.id.label_signature)).setVisibility(View.GONE);
++        ((TextView)mView.findViewById(R.id.label_signature_algorithm)).setVisibility(View.GONE);
++        ((TextView)mView.findViewById(R.id.value_signature_algorithm)).setVisibility(View.GONE);
++        ((TextView)mView.findViewById(R.id.value_signature)).setVisibility(View.GONE);
+     }
+ }