Merge pull request #172 from owncloud/login_view_layout_improvements

OC-65, OC-216: Hide Refresh Button.
This commit is contained in:
David A. Velasco 2013-06-03 23:59:23 -07:00
commit 8a4a9f02bb
6 changed files with 150 additions and 128 deletions

View file

@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<classpath> <classpath>
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/> <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/> <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
<classpathentry kind="src" path="src"/> <classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="gen"/> <classpathentry kind="src" path="gen"/>
<classpathentry kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
<classpathentry kind="output" path="bin/classes"/> <classpathentry kind="output" path="bin/classes"/>
</classpath> </classpath>

View file

@ -1,4 +1,7 @@
eclipse.preferences.version=1 eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
org.eclipse.jdt.core.compiler.compliance=1.6
org.eclipse.jdt.core.compiler.source=1.6
org.eclipse.jdt.core.formatter.align_type_members_on_columns=false org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0

View file

@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<classpath> <classpath>
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/> <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/> <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
<classpathentry kind="src" path="src"/> <classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="gen"/> <classpathentry kind="src" path="gen"/>
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
<classpathentry kind="output" path="bin/classes"/> <classpathentry kind="output" path="bin/classes"/>
</classpath> </classpath>

View file

@ -77,7 +77,7 @@ import eu.alefzero.webdav.WebdavClient;
* @author David A. Velasco * @author David A. Velasco
*/ */
public class AuthenticatorActivity extends AccountAuthenticatorActivity public class AuthenticatorActivity extends AccountAuthenticatorActivity
implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeListener, OnEditorActionListener { implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeListener, OnEditorActionListener {
private static final String TAG = AuthenticatorActivity.class.getSimpleName(); private static final String TAG = AuthenticatorActivity.class.getSimpleName();
@ -85,7 +85,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
public static final String EXTRA_USER_NAME = "USER_NAME"; public static final String EXTRA_USER_NAME = "USER_NAME";
public static final String EXTRA_HOST_NAME = "HOST_NAME"; public static final String EXTRA_HOST_NAME = "HOST_NAME";
public static final String EXTRA_ACTION = "ACTION"; public static final String EXTRA_ACTION = "ACTION";
private static final String KEY_HOST_URL_TEXT = "HOST_URL_TEXT"; private static final String KEY_HOST_URL_TEXT = "HOST_URL_TEXT";
private static final String KEY_OC_VERSION = "OC_VERSION"; private static final String KEY_OC_VERSION = "OC_VERSION";
private static final String KEY_ACCOUNT = "ACCOUNT"; private static final String KEY_ACCOUNT = "ACCOUNT";
@ -97,7 +97,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
private static final String KEY_IS_SSL_CONN = "IS_SSL_CONN"; private static final String KEY_IS_SSL_CONN = "IS_SSL_CONN";
private static final String KEY_AUTH_STATUS_TEXT = "AUTH_STATUS_TEXT"; private static final String KEY_AUTH_STATUS_TEXT = "AUTH_STATUS_TEXT";
private static final String KEY_AUTH_STATUS_ICON = "AUTH_STATUS_ICON"; private static final String KEY_AUTH_STATUS_ICON = "AUTH_STATUS_ICON";
private static final String OAUTH_MODE_ON = "on"; private static final String OAUTH_MODE_ON = "on";
private static final String OAUTH_MODE_OFF = "off"; private static final String OAUTH_MODE_OFF = "off";
private static final String OAUTH_MODE_OPTIONAL = "optional"; private static final String OAUTH_MODE_OPTIONAL = "optional";
@ -110,14 +110,14 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
public static final byte ACTION_CREATE = 0; public static final byte ACTION_CREATE = 0;
public static final byte ACTION_UPDATE_TOKEN = 1; public static final byte ACTION_UPDATE_TOKEN = 1;
private String mHostBaseUrl; private String mHostBaseUrl;
private OwnCloudVersion mDiscoveredVersion; private OwnCloudVersion mDiscoveredVersion;
private int mServerStatusText, mServerStatusIcon; private int mServerStatusText, mServerStatusIcon;
private boolean mServerIsChecked, mServerIsValid, mIsSslConn; private boolean mServerIsChecked, mServerIsValid, mIsSslConn;
private int mAuthStatusText, mAuthStatusIcon; private int mAuthStatusText, mAuthStatusIcon;
private final Handler mHandler = new Handler(); private final Handler mHandler = new Handler();
private Thread mOperationThread; private Thread mOperationThread;
private OwnCloudServerCheckOperation mOcServerChkOperation; private OwnCloudServerCheckOperation mOcServerChkOperation;
@ -125,12 +125,12 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
private RemoteOperationResult mLastSslUntrustedServerResult; private RemoteOperationResult mLastSslUntrustedServerResult;
private Uri mNewCapturedUriFromOAuth2Redirection; private Uri mNewCapturedUriFromOAuth2Redirection;
private AccountManager mAccountMgr; private AccountManager mAccountMgr;
private boolean mJustCreated; private boolean mJustCreated;
private byte mAction; private byte mAction;
private Account mAccount; private Account mAccount;
private ImageView mViewPasswordButton; private ImageView mViewPasswordButton;
private EditText mHostUrlInput; private EditText mHostUrlInput;
private EditText mUsernameInput; private EditText mUsernameInput;
@ -139,11 +139,11 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
private String mOAuthAccessToken; private String mOAuthAccessToken;
private View mOkButton; private View mOkButton;
private TextView mAuthStatusLayout; private TextView mAuthStatusLayout;
private TextView mOAuthAuthEndpointText; private TextView mOAuthAuthEndpointText;
private TextView mOAuthTokenEndpointText; private TextView mOAuthTokenEndpointText;
/** /**
* {@inheritDoc} * {@inheritDoc}
* *
@ -153,7 +153,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
getWindow().requestFeature(Window.FEATURE_NO_TITLE); getWindow().requestFeature(Window.FEATURE_NO_TITLE);
/// set view and get references to view elements /// set view and get references to view elements
setContentView(R.layout.account_setup); setContentView(R.layout.account_setup);
mViewPasswordButton = (ImageView) findViewById(R.id.viewPasswordButton); mViewPasswordButton = (ImageView) findViewById(R.id.viewPasswordButton);
@ -165,7 +165,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
mOAuth2Check = (CheckBox) findViewById(R.id.oauth_onOff_check); mOAuth2Check = (CheckBox) findViewById(R.id.oauth_onOff_check);
mOkButton = findViewById(R.id.buttonOK); mOkButton = findViewById(R.id.buttonOK);
mAuthStatusLayout = (TextView) findViewById(R.id.auth_status_text); mAuthStatusLayout = (TextView) findViewById(R.id.auth_status_text);
/// complete label for 'register account' button /// complete label for 'register account' button
Button b = (Button) findViewById(R.id.account_register); Button b = (Button) findViewById(R.id.account_register);
if (b != null) { if (b != null) {
@ -186,11 +186,11 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
mServerIsChecked = false; mServerIsChecked = false;
mIsSslConn = false; mIsSslConn = false;
mAuthStatusText = mAuthStatusIcon = 0; mAuthStatusText = mAuthStatusIcon = 0;
/// retrieve extras from intent /// retrieve extras from intent
String tokenType = getIntent().getExtras().getString(AccountAuthenticator.KEY_AUTH_TOKEN_TYPE); String tokenType = getIntent().getExtras().getString(AccountAuthenticator.KEY_AUTH_TOKEN_TYPE);
boolean oAuthRequired = AccountAuthenticator.AUTH_TOKEN_TYPE_ACCESS_TOKEN.equals(tokenType) || OAUTH_MODE_ON.equals(getString(R.string.oauth2_mode)); boolean oAuthRequired = AccountAuthenticator.AUTH_TOKEN_TYPE_ACCESS_TOKEN.equals(tokenType) || OAUTH_MODE_ON.equals(getString(R.string.oauth2_mode));
mAccount = getIntent().getExtras().getParcelable(EXTRA_ACCOUNT); mAccount = getIntent().getExtras().getParcelable(EXTRA_ACCOUNT);
if (mAccount != null) { if (mAccount != null) {
String ocVersion = mAccountMgr.getUserData(mAccount, AccountAuthenticator.KEY_OC_VERSION); String ocVersion = mAccountMgr.getUserData(mAccount, AccountAuthenticator.KEY_OC_VERSION);
@ -205,7 +205,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
} }
mOAuth2Check.setChecked(oAuthRequired); mOAuth2Check.setChecked(oAuthRequired);
changeViewByOAuth2Check(oAuthRequired); changeViewByOAuth2Check(oAuthRequired);
} else { } else {
/// connection state and info /// connection state and info
@ -216,33 +216,33 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
mIsSslConn = savedInstanceState.getBoolean(KEY_IS_SSL_CONN); mIsSslConn = savedInstanceState.getBoolean(KEY_IS_SSL_CONN);
mAuthStatusText = savedInstanceState.getInt(KEY_AUTH_STATUS_TEXT); mAuthStatusText = savedInstanceState.getInt(KEY_AUTH_STATUS_TEXT);
mAuthStatusIcon = savedInstanceState.getInt(KEY_AUTH_STATUS_ICON); mAuthStatusIcon = savedInstanceState.getInt(KEY_AUTH_STATUS_ICON);
/// server data /// server data
String ocVersion = savedInstanceState.getString(KEY_OC_VERSION); String ocVersion = savedInstanceState.getString(KEY_OC_VERSION);
if (ocVersion != null) { if (ocVersion != null) {
mDiscoveredVersion = new OwnCloudVersion(ocVersion); mDiscoveredVersion = new OwnCloudVersion(ocVersion);
} }
mHostBaseUrl = savedInstanceState.getString(KEY_HOST_URL_TEXT); mHostBaseUrl = savedInstanceState.getString(KEY_HOST_URL_TEXT);
// account data, if updating // account data, if updating
mAccount = savedInstanceState.getParcelable(KEY_ACCOUNT); mAccount = savedInstanceState.getParcelable(KEY_ACCOUNT);
// check if server check was interrupted by a configuration change // check if server check was interrupted by a configuration change
if (savedInstanceState.getBoolean(KEY_SERVER_CHECK_IN_PROGRESS, false)) { if (savedInstanceState.getBoolean(KEY_SERVER_CHECK_IN_PROGRESS, false)) {
checkOcServer(); checkOcServer();
} }
} }
showServerStatus(); showServerStatus();
showAuthStatus(); showAuthStatus();
if (mServerIsChecked && !mServerIsValid) showRefreshButton(); if (mServerIsChecked && !mServerIsValid) showRefreshButton();
mOkButton.setEnabled(mServerIsValid); // state not automatically recovered in configuration changes mOkButton.setEnabled(mServerIsValid); // state not automatically recovered in configuration changes
if (!OAUTH_MODE_OPTIONAL.equals(getString(R.string.oauth2_mode))) { if (!OAUTH_MODE_OPTIONAL.equals(getString(R.string.oauth2_mode))) {
mOAuth2Check.setVisibility(View.GONE); mOAuth2Check.setVisibility(View.GONE);
} }
if (mAction == ACTION_UPDATE_TOKEN) { if (mAction == ACTION_UPDATE_TOKEN) {
/// lock things that should not change /// lock things that should not change
mHostUrlInput.setEnabled(false); mHostUrlInput.setEnabled(false);
@ -252,10 +252,10 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
checkOcServer(); checkOcServer();
} }
} }
mPasswordInput.setText(""); // clean password to avoid social hacking (disadvantage: password in removed if the device is turned aside) mPasswordInput.setText(""); // clean password to avoid social hacking (disadvantage: password in removed if the device is turned aside)
mJustCreated = true; mJustCreated = true;
/// bind view elements to listeners /// bind view elements to listeners
mHostUrlInput.setOnFocusChangeListener(this); mHostUrlInput.setOnFocusChangeListener(this);
mHostUrlInput.setOnTouchListener(new RightDrawableOnTouchListener() { mHostUrlInput.setOnTouchListener(new RightDrawableOnTouchListener() {
@ -279,13 +279,13 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
@Override @Override
public void onTextChanged(CharSequence s, int start, int before, int count) {} public void onTextChanged(CharSequence s, int start, int before, int count) {}
}); });
mPasswordInput.setOnFocusChangeListener(this); mPasswordInput.setOnFocusChangeListener(this);
mPasswordInput.setImeOptions(EditorInfo.IME_ACTION_DONE); mPasswordInput.setImeOptions(EditorInfo.IME_ACTION_DONE);
mPasswordInput.setOnEditorActionListener(this); mPasswordInput.setOnEditorActionListener(this);
} }
/** /**
* Saves relevant state before {@link #onPause()} * Saves relevant state before {@link #onPause()}
* *
@ -297,7 +297,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
@Override @Override
protected void onSaveInstanceState(Bundle outState) { protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState); super.onSaveInstanceState(outState);
/// connection state and info /// connection state and info
outState.putInt(KEY_SERVER_STATUS_TEXT, mServerStatusText); outState.putInt(KEY_SERVER_STATUS_TEXT, mServerStatusText);
outState.putInt(KEY_SERVER_STATUS_ICON, mServerStatusIcon); outState.putInt(KEY_SERVER_STATUS_ICON, mServerStatusIcon);
@ -307,18 +307,18 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
outState.putBoolean(KEY_IS_SSL_CONN, mIsSslConn); outState.putBoolean(KEY_IS_SSL_CONN, mIsSslConn);
outState.putInt(KEY_AUTH_STATUS_ICON, mAuthStatusIcon); outState.putInt(KEY_AUTH_STATUS_ICON, mAuthStatusIcon);
outState.putInt(KEY_AUTH_STATUS_TEXT, mAuthStatusText); outState.putInt(KEY_AUTH_STATUS_TEXT, mAuthStatusText);
/// server data /// server data
if (mDiscoveredVersion != null) { if (mDiscoveredVersion != null) {
outState.putString(KEY_OC_VERSION, mDiscoveredVersion.toString()); outState.putString(KEY_OC_VERSION, mDiscoveredVersion.toString());
} }
outState.putString(KEY_HOST_URL_TEXT, mHostBaseUrl); outState.putString(KEY_HOST_URL_TEXT, mHostBaseUrl);
/// account data, if updating /// account data, if updating
if (mAccount != null) { if (mAccount != null) {
outState.putParcelable(KEY_ACCOUNT, mAccount); outState.putParcelable(KEY_ACCOUNT, mAccount);
} }
} }
@ -338,7 +338,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
} }
} }
/** /**
* The redirection triggered by the OAuth authentication server as response to the GET AUTHORIZATION, and * The redirection triggered by the OAuth authentication server as response to the GET AUTHORIZATION, and
* deferred in {@link #onNewIntent(Intent)}, is processed here. * deferred in {@link #onNewIntent(Intent)}, is processed here.
@ -354,15 +354,15 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
else else
Toast.makeText(this, R.string.auth_expired_basic_auth_toast, Toast.LENGTH_LONG).show(); Toast.makeText(this, R.string.auth_expired_basic_auth_toast, Toast.LENGTH_LONG).show();
} }
if (mNewCapturedUriFromOAuth2Redirection != null) { if (mNewCapturedUriFromOAuth2Redirection != null) {
getOAuth2AccessTokenFromCapturedRedirection(); getOAuth2AccessTokenFromCapturedRedirection();
} }
mJustCreated = false; mJustCreated = false;
} }
/** /**
* Parses the redirection with the response to the GET AUTHORIZATION request to the * Parses the redirection with the response to the GET AUTHORIZATION request to the
* oAuth server and requests for the access token (GET ACCESS TOKEN) * oAuth server and requests for the access token (GET ACCESS TOKEN)
@ -371,34 +371,39 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
/// Parse data from OAuth redirection /// Parse data from OAuth redirection
String queryParameters = mNewCapturedUriFromOAuth2Redirection.getQuery(); String queryParameters = mNewCapturedUriFromOAuth2Redirection.getQuery();
mNewCapturedUriFromOAuth2Redirection = null; mNewCapturedUriFromOAuth2Redirection = null;
/// Showing the dialog with instructions for the user. /// Showing the dialog with instructions for the user.
showDialog(DIALOG_OAUTH2_LOGIN_PROGRESS); showDialog(DIALOG_OAUTH2_LOGIN_PROGRESS);
/// GET ACCESS TOKEN to the oAuth server /// GET ACCESS TOKEN to the oAuth server
RemoteOperation operation = new OAuth2GetAccessToken( getString(R.string.oauth2_client_id), RemoteOperation operation = new OAuth2GetAccessToken( getString(R.string.oauth2_client_id),
getString(R.string.oauth2_redirect_uri), getString(R.string.oauth2_redirect_uri),
getString(R.string.oauth2_grant_type), getString(R.string.oauth2_grant_type),
queryParameters); queryParameters);
//WebdavClient client = OwnCloudClientUtils.createOwnCloudClient(Uri.parse(getString(R.string.oauth2_url_endpoint_access)), getApplicationContext()); //WebdavClient client = OwnCloudClientUtils.createOwnCloudClient(Uri.parse(getString(R.string.oauth2_url_endpoint_access)), getApplicationContext());
WebdavClient client = OwnCloudClientUtils.createOwnCloudClient(Uri.parse(mOAuthTokenEndpointText.getText().toString().trim()), getApplicationContext()); WebdavClient client = OwnCloudClientUtils.createOwnCloudClient(Uri.parse(mOAuthTokenEndpointText.getText().toString().trim()), getApplicationContext());
operation.execute(client, this, mHandler); operation.execute(client, this, mHandler);
} }
/** /**
* Handles the change of focus on the text inputs for the server URL and the password * Handles the change of focus on the text inputs for the server URL and the password
*/ */
public void onFocusChange(View view, boolean hasFocus) { public void onFocusChange(View view, boolean hasFocus) {
if (view.getId() == R.id.hostUrlInput && !hasFocus) { if (view.getId() == R.id.hostUrlInput) {
onUrlInputFocusLost((TextView) view); if (!hasFocus) {
onUrlInputFocusLost((TextView) view);
}
else {
hideRefreshButton();
}
} else if (view.getId() == R.id.account_password) { } else if (view.getId() == R.id.account_password) {
onPasswordFocusChanged((TextView) view, hasFocus); onPasswordFocusChanged((TextView) view, hasFocus);
} }
} }
/** /**
* Handles changes in focus on the text input for the server URL. * Handles changes in focus on the text input for the server URL.
@ -463,7 +468,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
} }
/** /**
* Cancels the authenticator activity * Cancels the authenticator activity
* *
@ -477,9 +482,9 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
setResult(RESULT_CANCELED); // TODO review how is this related to AccountAuthenticator (debugging) setResult(RESULT_CANCELED); // TODO review how is this related to AccountAuthenticator (debugging)
finish(); finish();
} }
/** /**
* Checks the credentials of the user in the root of the ownCloud server * Checks the credentials of the user in the root of the ownCloud server
* before creating a new local account. * before creating a new local account.
@ -504,16 +509,16 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
Log_OC.wtf(TAG, "The user was allowed to click 'connect' to an unchecked server!!"); Log_OC.wtf(TAG, "The user was allowed to click 'connect' to an unchecked server!!");
return; return;
} }
if (mOAuth2Check.isChecked()) { if (mOAuth2Check.isChecked()) {
startOauthorization(); startOauthorization();
} else { } else {
checkBasicAuthorization(); checkBasicAuthorization();
} }
} }
/** /**
* Tests the credentials entered by the user performing a check of existence on * Tests the credentials entered by the user performing a check of existence on
* the root folder of the ownCloud server. * the root folder of the ownCloud server.
@ -521,14 +526,14 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
private void checkBasicAuthorization() { private void checkBasicAuthorization() {
/// get the path to the root folder through WebDAV from the version server /// get the path to the root folder through WebDAV from the version server
String webdav_path = AccountUtils.getWebdavPath(mDiscoveredVersion, false); String webdav_path = AccountUtils.getWebdavPath(mDiscoveredVersion, false);
/// get basic credentials entered by user /// get basic credentials entered by user
String username = mUsernameInput.getText().toString(); String username = mUsernameInput.getText().toString();
String password = mPasswordInput.getText().toString(); String password = mPasswordInput.getText().toString();
/// be gentle with the user /// be gentle with the user
showDialog(DIALOG_LOGIN_PROGRESS); showDialog(DIALOG_LOGIN_PROGRESS);
/// test credentials accessing the root folder /// test credentials accessing the root folder
mAuthCheckOperation = new ExistenceCheckOperation("", this, false); mAuthCheckOperation = new ExistenceCheckOperation("", this, false);
WebdavClient client = OwnCloudClientUtils.createOwnCloudClient(Uri.parse(mHostBaseUrl + webdav_path), this); WebdavClient client = OwnCloudClientUtils.createOwnCloudClient(Uri.parse(mHostBaseUrl + webdav_path), this);
@ -546,7 +551,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
mAuthStatusIcon = R.drawable.progress_small; mAuthStatusIcon = R.drawable.progress_small;
mAuthStatusText = R.string.oauth_login_connection; mAuthStatusText = R.string.oauth_login_connection;
showAuthStatus(); showAuthStatus();
// GET AUTHORIZATION request // GET AUTHORIZATION request
//Uri uri = Uri.parse(getString(R.string.oauth2_url_endpoint_auth)); //Uri uri = Uri.parse(getString(R.string.oauth2_url_endpoint_auth));
Uri uri = Uri.parse(mOAuthAuthEndpointText.getText().toString().trim()); Uri uri = Uri.parse(mOAuthAuthEndpointText.getText().toString().trim());
@ -562,7 +567,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
startActivity(i); startActivity(i);
} }
/** /**
* Callback method invoked when a RemoteOperation executed by this Activity finishes. * Callback method invoked when a RemoteOperation executed by this Activity finishes.
* *
@ -573,16 +578,16 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
if (operation instanceof OwnCloudServerCheckOperation) { if (operation instanceof OwnCloudServerCheckOperation) {
onOcServerCheckFinish((OwnCloudServerCheckOperation) operation, result); onOcServerCheckFinish((OwnCloudServerCheckOperation) operation, result);
} else if (operation instanceof OAuth2GetAccessToken) { } else if (operation instanceof OAuth2GetAccessToken) {
onGetOAuthAccessTokenFinish((OAuth2GetAccessToken)operation, result); onGetOAuthAccessTokenFinish((OAuth2GetAccessToken)operation, result);
} else if (operation instanceof ExistenceCheckOperation) { } else if (operation instanceof ExistenceCheckOperation) {
onAuthorizationCheckFinish((ExistenceCheckOperation)operation, result); onAuthorizationCheckFinish((ExistenceCheckOperation)operation, result);
} }
} }
/** /**
* Processes the result of the server check performed when the user finishes the enter of the * Processes the result of the server check performed when the user finishes the enter of the
@ -598,7 +603,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
mServerIsValid = result.isSuccess(); mServerIsValid = result.isSuccess();
mIsSslConn = (result.getCode() == ResultCode.OK_SSL); mIsSslConn = (result.getCode() == ResultCode.OK_SSL);
mOcServerChkOperation = null; mOcServerChkOperation = null;
/// update status icon and text /// update status icon and text
if (mServerIsValid) { if (mServerIsValid) {
hideRefreshButton(); hideRefreshButton();
@ -607,22 +612,22 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
} }
updateServerStatusIconAndText(result); updateServerStatusIconAndText(result);
showServerStatus(); showServerStatus();
/// very special case (TODO: move to a common place for all the remote operations) /// very special case (TODO: move to a common place for all the remote operations)
if (result.getCode() == ResultCode.SSL_RECOVERABLE_PEER_UNVERIFIED) { if (result.getCode() == ResultCode.SSL_RECOVERABLE_PEER_UNVERIFIED) {
mLastSslUntrustedServerResult = result; mLastSslUntrustedServerResult = result;
showDialog(DIALOG_SSL_VALIDATOR); showDialog(DIALOG_SSL_VALIDATOR);
} }
/// retrieve discovered version and normalize server URL /// retrieve discovered version and normalize server URL
mDiscoveredVersion = operation.getDiscoveredVersion(); mDiscoveredVersion = operation.getDiscoveredVersion();
mHostBaseUrl = normalizeUrl(mHostUrlInput.getText().toString()); mHostBaseUrl = normalizeUrl(mHostUrlInput.getText().toString());
/// allow or not the user try to access the server /// allow or not the user try to access the server
mOkButton.setEnabled(mServerIsValid); mOkButton.setEnabled(mServerIsValid);
} // else nothing ; only the last check operation is considered; } // 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 // multiple can be triggered if the user amends a URL before a previous check can be triggered
} }
@ -636,7 +641,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
} else { } else {
url = "http://" + url; url = "http://" + url;
} }
} }
if (url.endsWith("/")) { if (url.endsWith("/")) {
url = url.substring(0, url.length() - 1); url = url.substring(0, url.length() - 1);
@ -658,7 +663,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
mServerStatusIcon = android.R.drawable.ic_secure; mServerStatusIcon = android.R.drawable.ic_secure;
mServerStatusText = R.string.auth_secure_connection; mServerStatusText = R.string.auth_secure_connection;
break; break;
case OK_NO_SSL: case OK_NO_SSL:
case OK: case OK:
if (mHostUrlInput.getText().toString().trim().toLowerCase().startsWith("http://") ) { if (mHostUrlInput.getText().toString().trim().toLowerCase().startsWith("http://") ) {
@ -669,12 +674,12 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
mServerStatusIcon = android.R.drawable.ic_partial_secure; mServerStatusIcon = android.R.drawable.ic_partial_secure;
} }
break; break;
case NO_NETWORK_CONNECTION: case NO_NETWORK_CONNECTION:
mServerStatusIcon = R.drawable.no_network; mServerStatusIcon = R.drawable.no_network;
mServerStatusText = R.string.auth_no_net_conn_title; mServerStatusText = R.string.auth_no_net_conn_title;
break; break;
case SSL_RECOVERABLE_PEER_UNVERIFIED: case SSL_RECOVERABLE_PEER_UNVERIFIED:
mServerStatusText = R.string.auth_ssl_unverified_server_title; mServerStatusText = R.string.auth_ssl_unverified_server_title;
break; break;
@ -735,7 +740,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
mAuthStatusIcon = android.R.drawable.ic_secure; mAuthStatusIcon = android.R.drawable.ic_secure;
mAuthStatusText = R.string.auth_secure_connection; mAuthStatusText = R.string.auth_secure_connection;
break; break;
case OK_NO_SSL: case OK_NO_SSL:
case OK: case OK:
if (mHostUrlInput.getText().toString().trim().toLowerCase().startsWith("http://") ) { if (mHostUrlInput.getText().toString().trim().toLowerCase().startsWith("http://") ) {
@ -746,12 +751,12 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
mAuthStatusIcon = android.R.drawable.ic_partial_secure; mAuthStatusIcon = android.R.drawable.ic_partial_secure;
} }
break; break;
case NO_NETWORK_CONNECTION: case NO_NETWORK_CONNECTION:
mAuthStatusIcon = R.drawable.no_network; mAuthStatusIcon = R.drawable.no_network;
mAuthStatusText = R.string.auth_no_net_conn_title; mAuthStatusText = R.string.auth_no_net_conn_title;
break; break;
case SSL_RECOVERABLE_PEER_UNVERIFIED: case SSL_RECOVERABLE_PEER_UNVERIFIED:
mAuthStatusText = R.string.auth_ssl_unverified_server_title; mAuthStatusText = R.string.auth_ssl_unverified_server_title;
break; break;
@ -817,7 +822,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
if (result.isSuccess() && webdav_path != null) { if (result.isSuccess() && webdav_path != null) {
/// be gentle with the user /// be gentle with the user
showDialog(DIALOG_LOGIN_PROGRESS); showDialog(DIALOG_LOGIN_PROGRESS);
/// time to test the retrieved access token on the ownCloud server /// time to test the retrieved access token on the ownCloud server
mOAuthAccessToken = ((OAuth2GetAccessToken)operation).getResultTokenMap().get(OAuth2Constants.KEY_ACCESS_TOKEN); mOAuthAccessToken = ((OAuth2GetAccessToken)operation).getResultTokenMap().get(OAuth2Constants.KEY_ACCESS_TOKEN);
Log_OC.d(TAG, "Got ACCESS TOKEN: " + mOAuthAccessToken); Log_OC.d(TAG, "Got ACCESS TOKEN: " + mOAuthAccessToken);
@ -825,7 +830,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
WebdavClient client = OwnCloudClientUtils.createOwnCloudClient(Uri.parse(mHostBaseUrl + webdav_path), this); WebdavClient client = OwnCloudClientUtils.createOwnCloudClient(Uri.parse(mHostBaseUrl + webdav_path), this);
client.setBearerCredentials(mOAuthAccessToken); client.setBearerCredentials(mOAuthAccessToken);
mAuthCheckOperation.execute(client, this, mHandler); mAuthCheckOperation.execute(client, this, mHandler);
} else { } else {
updateAuthStatusIconAndText(result); updateAuthStatusIconAndText(result);
showAuthStatus(); showAuthStatus();
@ -833,7 +838,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
} }
} }
/** /**
* Processes the result of the access check performed to try the user credentials. * Processes the result of the access check performed to try the user credentials.
* *
@ -848,19 +853,19 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {
// NOTHING TO DO ; can't find out what situation that leads to the exception in this code, but user logs signal that it happens // NOTHING TO DO ; can't find out what situation that leads to the exception in this code, but user logs signal that it happens
} }
if (result.isSuccess()) { if (result.isSuccess()) {
Log_OC.d(TAG, "Successful access - time to save the account"); Log_OC.d(TAG, "Successful access - time to save the account");
if (mAction == ACTION_CREATE) { if (mAction == ACTION_CREATE) {
createAccount(); createAccount();
} else { } else {
updateToken(); updateToken();
} }
finish(); finish();
} else { } else {
updateAuthStatusIconAndText(result); updateAuthStatusIconAndText(result);
showAuthStatus(); showAuthStatus();
@ -868,7 +873,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
} }
} }
/** /**
* Sets the proper response to get that the Account Authenticator that started this activity saves * Sets the proper response to get that the Account Authenticator that started this activity saves
* a new authorization token for mAccount. * a new authorization token for mAccount.
@ -900,7 +905,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
private void createAccount() { private void createAccount() {
/// create and save new ownCloud account /// create and save new ownCloud account
boolean isOAuth = mOAuth2Check.isChecked(); boolean isOAuth = mOAuth2Check.isChecked();
Uri uri = Uri.parse(mHostBaseUrl); Uri uri = Uri.parse(mHostBaseUrl);
String username = mUsernameInput.getText().toString().trim(); String username = mUsernameInput.getText().toString().trim();
if (isOAuth) { if (isOAuth) {
@ -942,10 +947,10 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
mAccountMgr.setUserData(mAccount, AccountAuthenticator.KEY_OC_BASE_URL, mHostBaseUrl); mAccountMgr.setUserData(mAccount, AccountAuthenticator.KEY_OC_BASE_URL, mHostBaseUrl);
if (isOAuth) if (isOAuth)
mAccountMgr.setUserData(mAccount, AccountAuthenticator.KEY_SUPPORTS_OAUTH2, "TRUE"); // TODO this flag should be unnecessary mAccountMgr.setUserData(mAccount, AccountAuthenticator.KEY_SUPPORTS_OAUTH2, "TRUE"); // TODO this flag should be unnecessary
setAccountAuthenticatorResult(intent.getExtras()); setAccountAuthenticatorResult(intent.getExtras());
setResult(RESULT_OK, intent); setResult(RESULT_OK, intent);
/// immediately request for the synchronization of the new account /// immediately request for the synchronization of the new account
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true); bundle.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);
@ -976,7 +981,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
} }
} }
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
@ -991,17 +996,17 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
working_dialog.setIndeterminate(true); working_dialog.setIndeterminate(true);
working_dialog.setCancelable(true); working_dialog.setCancelable(true);
working_dialog working_dialog
.setOnCancelListener(new DialogInterface.OnCancelListener() { .setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override @Override
public void onCancel(DialogInterface dialog) { public void onCancel(DialogInterface dialog) {
/// TODO study if this is enough /// TODO study if this is enough
Log_OC.i(TAG, "Login canceled"); Log_OC.i(TAG, "Login canceled");
if (mOperationThread != null) { if (mOperationThread != null) {
mOperationThread.interrupt(); mOperationThread.interrupt();
finish(); finish();
} }
} }
}); });
dialog = working_dialog; dialog = working_dialog;
break; break;
} }
@ -1031,11 +1036,11 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
builder.setMessage(getResources().getString(R.string.ssl_validator_not_saved)); builder.setMessage(getResources().getString(R.string.ssl_validator_not_saved));
builder.setCancelable(false); builder.setCancelable(false);
builder.setPositiveButton(R.string.common_ok, new DialogInterface.OnClickListener() { builder.setPositiveButton(R.string.common_ok, new DialogInterface.OnClickListener() {
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
dialog.dismiss(); dialog.dismiss();
}; };
}); });
dialog = builder.create(); dialog = builder.create();
break; break;
} }
@ -1045,7 +1050,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
return dialog; return dialog;
} }
/** /**
* Starts and activity to open the 'new account' page in the ownCloud web site * Starts and activity to open the 'new account' page in the ownCloud web site
* *
@ -1057,7 +1062,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
startActivity(register); startActivity(register);
} }
/** /**
* Updates the content and visibility state of the icon and text associated * Updates the content and visibility state of the icon and text associated
* to the last check on the ownCloud server. * to the last check on the ownCloud server.
@ -1067,16 +1072,16 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
if (mServerStatusIcon == 0 && mServerStatusText == 0) { if (mServerStatusIcon == 0 && mServerStatusText == 0) {
tv.setVisibility(View.INVISIBLE); tv.setVisibility(View.INVISIBLE);
} else { } else {
tv.setText(mServerStatusText); tv.setText(mServerStatusText);
tv.setCompoundDrawablesWithIntrinsicBounds(mServerStatusIcon, 0, 0, 0); tv.setCompoundDrawablesWithIntrinsicBounds(mServerStatusIcon, 0, 0, 0);
tv.setVisibility(View.VISIBLE); tv.setVisibility(View.VISIBLE);
} }
} }
/** /**
* Updates the content and visibility state of the icon and text associated * Updates the content and visibility state of the icon and text associated
* to the interactions with the OAuth authorization server. * to the interactions with the OAuth authorization server.
@ -1084,7 +1089,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
private void showAuthStatus() { private void showAuthStatus() {
if (mAuthStatusIcon == 0 && mAuthStatusText == 0) { if (mAuthStatusIcon == 0 && mAuthStatusText == 0) {
mAuthStatusLayout.setVisibility(View.INVISIBLE); mAuthStatusLayout.setVisibility(View.INVISIBLE);
} else { } else {
mAuthStatusLayout.setText(mAuthStatusText); mAuthStatusLayout.setText(mAuthStatusText);
mAuthStatusLayout.setCompoundDrawablesWithIntrinsicBounds(mAuthStatusIcon, 0, 0, 0); mAuthStatusLayout.setCompoundDrawablesWithIntrinsicBounds(mAuthStatusIcon, 0, 0, 0);
@ -1092,15 +1097,15 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
} }
} }
private void showRefreshButton() { private void showRefreshButton() {
mHostUrlInput.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_action_refresh_black, 0); mHostUrlInput.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_action_refresh_black, 0);
} }
private void hideRefreshButton() { private void hideRefreshButton() {
mHostUrlInput.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0); mHostUrlInput.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
} }
/** /**
* Called when the refresh button in the input field for ownCloud host is clicked. * Called when the refresh button in the input field for ownCloud host is clicked.
* *
@ -1111,8 +1116,8 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
public void onRefreshClick(View view) { public void onRefreshClick(View view) {
checkOcServer(); checkOcServer();
} }
/** /**
* Called when the eye icon in the password field is clicked. * Called when the eye icon in the password field is clicked.
* *
@ -1134,8 +1139,8 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
mPasswordInput.setInputType(input_type); mPasswordInput.setInputType(input_type);
mPasswordInput.setSelection(selectionStart, selectionEnd); mPasswordInput.setSelection(selectionStart, selectionEnd);
} }
/** /**
* Called when the checkbox for OAuth authorization is clicked. * Called when the checkbox for OAuth authorization is clicked.
* *
@ -1148,7 +1153,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
changeViewByOAuth2Check(oAuth2Check.isChecked()); changeViewByOAuth2Check(oAuth2Check.isChecked());
} }
/** /**
* Changes the visibility of input elements depending upon the kind of authorization * Changes the visibility of input elements depending upon the kind of authorization
* chosen by the user: basic or OAuth * chosen by the user: basic or OAuth
@ -1156,7 +1161,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
* @param checked 'True' when OAuth is selected. * @param checked 'True' when OAuth is selected.
*/ */
public void changeViewByOAuth2Check(Boolean checked) { public void changeViewByOAuth2Check(Boolean checked) {
if (checked) { if (checked) {
mOAuthAuthEndpointText.setVisibility(View.VISIBLE); mOAuthAuthEndpointText.setVisibility(View.VISIBLE);
mOAuthTokenEndpointText.setVisibility(View.VISIBLE); mOAuthTokenEndpointText.setVisibility(View.VISIBLE);
@ -1172,7 +1177,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
} }
} }
/** /**
* Called from SslValidatorDialog when a new server certificate was correctly saved. * Called from SslValidatorDialog when a new server certificate was correctly saved.
*/ */
@ -1206,11 +1211,11 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
return false; // always return false to grant that the software keyboard is hidden anyway return false; // always return false to grant that the software keyboard is hidden anyway
} }
private abstract static class RightDrawableOnTouchListener implements OnTouchListener { private abstract static class RightDrawableOnTouchListener implements OnTouchListener {
private int fuzz = 10; private int fuzz = 10;
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
@ -1229,16 +1234,16 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
final int y = (int) event.getY(); final int y = (int) event.getY();
final Rect bounds = rightDrawable.getBounds(); final Rect bounds = rightDrawable.getBounds();
if (x >= (view.getRight() - bounds.width() - fuzz) && x <= (view.getRight() - view.getPaddingRight() + fuzz) if (x >= (view.getRight() - bounds.width() - fuzz) && x <= (view.getRight() - view.getPaddingRight() + fuzz)
&& y >= (view.getPaddingTop() - fuzz) && y <= (view.getHeight() - view.getPaddingBottom()) + fuzz) { && y >= (view.getPaddingTop() - fuzz) && y <= (view.getHeight() - view.getPaddingBottom()) + fuzz) {
return onDrawableTouch(event); return onDrawableTouch(event);
} }
} }
} }
return false; return false;
} }
public abstract boolean onDrawableTouch(final MotionEvent event); public abstract boolean onDrawableTouch(final MotionEvent event);
} }
} }

View file

@ -6,5 +6,6 @@
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/> <classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
<classpathentry kind="src" path="src"/> <classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="gen"/> <classpathentry kind="src" path="gen"/>
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
<classpathentry kind="output" path="bin/classes"/> <classpathentry kind="output" path="bin/classes"/>
</classpath> </classpath>

View file

@ -0,0 +1,11 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.6
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.6