Merge branch 'fixed_contradicted_messages_in_login_view' into develop
authorDavid A. Velasco <dvelasco@solidgear.es>
Wed, 19 Jun 2013 10:17:16 +0000 (12:17 +0200)
committerDavid A. Velasco <dvelasco@solidgear.es>
Wed, 19 Jun 2013 10:17:16 +0000 (12:17 +0200)
1  2 
src/com/owncloud/android/authentication/AuthenticatorActivity.java

@@@ -97,7 -97,6 +97,7 @@@ implements  OnRemoteOperationListener, 
      private static final String KEY_PASSWORD_VISIBLE = "PASSWORD_VISIBLE";\r
      private static final String KEY_AUTH_STATUS_TEXT = "AUTH_STATUS_TEXT";\r
      private static final String KEY_AUTH_STATUS_ICON = "AUTH_STATUS_ICON";\r
 +    private static final String KEY_REFRESH_BUTTON_ENABLED = "KEY_REFRESH_BUTTON_ENABLED";\r
  \r
      private static final String OAUTH_MODE_ON = "on";\r
      private static final String OAUTH_MODE_OFF = "off";\r
  \r
      public static final byte ACTION_CREATE = 0;\r
      public static final byte ACTION_UPDATE_TOKEN = 1;\r
 -\r
 -\r
 +    \r
      private String mHostBaseUrl;\r
      private OwnCloudVersion mDiscoveredVersion;\r
  \r
  \r
      private TextView mOAuthAuthEndpointText;\r
      private TextView mOAuthTokenEndpointText;\r
 +    \r
 +    private boolean mRefreshButtonEnabled;\r
  \r
  \r
      /**\r
              // check if server check was interrupted by a configuration change\r
              if (savedInstanceState.getBoolean(KEY_SERVER_CHECK_IN_PROGRESS, false)) {\r
                  checkOcServer();\r
 -            }\r
 +            }            \r
 +            \r
 +            // refresh button enabled\r
 +            mRefreshButtonEnabled = savedInstanceState.getBoolean(KEY_REFRESH_BUTTON_ENABLED);\r
  \r
          }\r
  \r
          showServerStatus();\r
          showAuthStatus();\r
 -        if (mServerIsChecked && !mServerIsValid) showRefreshButton();\r
 +        if (mServerIsChecked && !mServerIsValid && mRefreshButtonEnabled) showRefreshButton();\r
          mOkButton.setEnabled(mServerIsValid); // state not automatically recovered in configuration changes\r
  \r
          if (!OAUTH_MODE_OPTIONAL.equals(getString(R.string.oauth2_mode))) {\r
          });\r
          mPasswordInput.setOnFocusChangeListener(this);\r
          mPasswordInput.setImeOptions(EditorInfo.IME_ACTION_DONE);\r
 -        mPasswordInput.setOnEditorActionListener(this);\r
 +        mPasswordInput.setOnEditorActionListener(this);
          mPasswordInput.setOnTouchListener(new RightDrawableOnTouchListener() {\r
              @Override\r
              public boolean onDrawableTouch(final MotionEvent event) {\r
                  }\r
                  return true;\r
              }\r
 -        });\r
 +        });
      }\r
  \r
      /**\r
          if (mAccount != null) {\r
              outState.putParcelable(KEY_ACCOUNT, mAccount);\r
          }\r
 +        \r
 +        // refresh button enabled\r
 +        outState.putBoolean(KEY_REFRESH_BUTTON_ENABLED, mRefreshButtonEnabled);\r
  \r
      }\r
  \r
          if (view.getId() == R.id.hostUrlInput) {   \r
              if (!hasFocus) {\r
                  onUrlInputFocusLost((TextView) view);\r
 +                if (!mServerIsValid) {\r
 +                    showRefreshButton();\r
 +                }\r
              }\r
              else {\r
                  hideRefreshButton();\r
  \r
  \r
      private void checkOcServer() {\r
 -        String uri = mHostUrlInput.getText().toString().trim();\r
 +        String uri = trimUrlWebdav(mHostUrlInput.getText().toString().trim());\r
          mServerIsValid = false;\r
          mServerIsChecked = false;\r
          mOkButton.setEnabled(false);\r
                  } else {\r
                      url = "http://" + url;\r
                  }\r
 -\r
              }\r
 +\r
 +            // OC-208: Add suffix remote.php/webdav to normalize (OC-34)            \r
 +            url = trimUrlWebdav(url);\r
 +\r
              if (url.endsWith("/")) {\r
                  url = url.substring(0, url.length() - 1);\r
              }\r
 +\r
          }\r
 +        Log_OC.d(TAG, "URL Normalize " + url);\r
          return (url != null ? url : "");\r
      }\r
  \r
 +\r
 +    private String trimUrlWebdav(String url){       \r
 +        if(url.toLowerCase().endsWith(AccountUtils.WEBDAV_PATH_4_0)){\r
 +            url = url.substring(0, url.length() - AccountUtils.WEBDAV_PATH_4_0.length());             \r
 +        } else if(url.toLowerCase().endsWith(AccountUtils.WEBDAV_PATH_2_0)){\r
 +            url = url.substring(0, url.length() - AccountUtils.WEBDAV_PATH_2_0.length());             \r
 +        } else if (url.toLowerCase().endsWith(AccountUtils.WEBDAV_PATH_1_2)){\r
 +            url = url.substring(0, url.length() - AccountUtils.WEBDAV_PATH_1_2.length());             \r
 +        } \r
 +        return (url != null ? url : "");\r
 +    }\r
 +    \r
 +    \r
      /**\r
       * Chooses the right icon and text to show to the user for the received operation result.\r
       * \r
  \r
              finish();\r
  \r
-         } else {\r
+         } else if (result.isServerFail() || result.isException()) {\r
+             /// if server fail or exception in authorization, the UI is updated as when a server check failed\r
+             mServerIsChecked = true;\r
+             mServerIsValid = false;\r
+             mIsSslConn = false;\r
+             mOcServerChkOperation = null;\r
+             mDiscoveredVersion = null;\r
+             mHostBaseUrl = normalizeUrl(mHostUrlInput.getText().toString());\r
\r
+             // update status icon and text\r
+             updateServerStatusIconAndText(result);\r
+             showServerStatus();\r
+             mAuthStatusIcon = 0;\r
+             mAuthStatusText = 0;\r
+             showAuthStatus();\r
+             \r
+             // update input controls state\r
+             showRefreshButton();\r
+             mOkButton.setEnabled(false);\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
+             }\r
\r
+         } else {    // authorization fail due to client side - probably wrong credentials\r
              updateAuthStatusIconAndText(result);\r
              showAuthStatus();\r
              Log_OC.d(TAG, "Access failed: " + result.getLogMessage());\r
  \r
      private void showRefreshButton() {\r
          mHostUrlInput.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_action_refresh_black, 0);\r
 +        mRefreshButtonEnabled = true;\r
      }\r
  \r
      private void hideRefreshButton() {\r
          mHostUrlInput.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);\r
 +        mRefreshButtonEnabled = false;\r
      }\r
  \r
      /**\r