diff --git a/res/values/strings.xml b/res/values/strings.xml
index 296a8e0e27..1ad9d8d383 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -193,6 +193,7 @@
Your server is not returning a correct user id, please contact an administrator
Cannot authenticate against this server
+ Account does not exist in the device yet
Keep file up to date
Rename
diff --git a/src/com/owncloud/android/authentication/AuthenticatorActivity.java b/src/com/owncloud/android/authentication/AuthenticatorActivity.java
index 6d092a2a10..e2c3c033dd 100644
--- a/src/com/owncloud/android/authentication/AuthenticatorActivity.java
+++ b/src/com/owncloud/android/authentication/AuthenticatorActivity.java
@@ -65,7 +65,10 @@ import com.actionbarsherlock.app.SherlockDialogFragment;
import com.owncloud.android.MainApp;
import com.owncloud.android.R;
import com.owncloud.android.authentication.SsoWebViewClient.SsoWebViewClientListener;
+import com.owncloud.android.lib.common.OwnCloudAccount;
+import com.owncloud.android.lib.common.OwnCloudClientManagerFactory;
import com.owncloud.android.lib.common.accounts.AccountTypeUtils;
+import com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundException;
import com.owncloud.android.lib.common.accounts.AccountUtils.Constants;
import com.owncloud.android.lib.common.network.CertificateCombinedException;
import com.owncloud.android.lib.common.operations.OnRemoteOperationListener;
@@ -1020,20 +1023,20 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
if (!mUsernameInput.getText().toString().equals(username)) {
// fail - not a new account, but an existing one; disallow
result = new RemoteOperationResult(ResultCode.ACCOUNT_NOT_THE_SAME);
- /*
- OwnCloudClientManagerFactory.getDefaultSingleton().removeClientFor(
- new OwnCloudAccount(
- Uri.parse(mServerInfo.mBaseUrl),
- OwnCloudCredentialsFactory.newSamlSsoCredentials(mAuthToken))
- );
- */
mAuthToken = "";
updateAuthStatusIconAndText(result);
showAuthStatus();
Log_OC.d(TAG, result.getLogMessage());
} else {
- updateToken();
- success = true;
+ try {
+ updateAccountAuthentication();
+ success = true;
+
+ } catch (AccountNotFoundException e) {
+ Log_OC.e(TAG, "Account " + mAccount + " was removed!", e);
+ Toast.makeText(this, R.string.auth_account_does_not_exist, Toast.LENGTH_SHORT).show();
+ finish();
+ }
}
}
@@ -1399,8 +1402,15 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
success = createAccount();
} else {
- updateToken();
- success = true;
+ try {
+ updateAccountAuthentication();
+ success = true;
+
+ } catch (AccountNotFoundException e) {
+ Log_OC.e(TAG, "Account " + mAccount + " was removed!", e);
+ Toast.makeText(this, R.string.auth_account_does_not_exist, Toast.LENGTH_SHORT).show();
+ finish();
+ }
}
if (success) {
@@ -1441,10 +1451,23 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
/**
- * Sets the proper response to get that the Account Authenticator that started this activity
+ * Updates the authentication token.
+ *
+ * Sets the proper response so that the AccountAuthenticator that started this activity
* saves a new authorization token for mAccount.
+ *
+ * Kills the session kept by OwnCloudClientManager so that a new one will created with
+ * the new credentials when needed.
*/
- private void updateToken() {
+ private void updateAccountAuthentication() throws AccountNotFoundException {
+ try {
+ OwnCloudClientManagerFactory.getDefaultSingleton().removeClientFor(
+ new OwnCloudAccount(mAccount, this)
+ );
+ } catch (Exception e) {
+ Log_OC.e(TAG, "Exception", e);
+ }
+
Bundle response = new Bundle();
response.putString(AccountManager.KEY_ACCOUNT_NAME, mAccount.name);
response.putString(AccountManager.KEY_ACCOUNT_TYPE, mAccount.type);
diff --git a/src/com/owncloud/android/authentication/AuthenticatorAsyncTask.java b/src/com/owncloud/android/authentication/AuthenticatorAsyncTask.java
index bf2355c81f..6e2153426d 100644
--- a/src/com/owncloud/android/authentication/AuthenticatorAsyncTask.java
+++ b/src/com/owncloud/android/authentication/AuthenticatorAsyncTask.java
@@ -49,7 +49,7 @@ public class AuthenticatorAsyncTask extends AsyncTask((OnAuthenticatorTaskListener)activity);
+ mListener = new WeakReference((OnAuthenticatorTaskListener)activity);
mActivity = activity;
}
diff --git a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java
index ef9de9eadc..18b87caed5 100644
--- a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java
+++ b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java
@@ -1110,40 +1110,34 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener {
(synchResult.isException() && synchResult.getException()
instanceof AuthenticatorException))) {
- OwnCloudClient client = null;
+
try {
- OwnCloudAccount ocAccount =
+ OwnCloudClient client;
+ OwnCloudAccount ocAccount =
new OwnCloudAccount(getAccount(), context);
client = (OwnCloudClientManagerFactory.getDefaultSingleton().
removeClientFor(ocAccount));
- // TODO get rid of these exceptions
- } catch (AccountNotFoundException e) {
- e.printStackTrace();
- } catch (AuthenticatorException e) {
- e.printStackTrace();
- } catch (OperationCanceledException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- if (client != null) {
- OwnCloudCredentials cred = client.getCredentials();
- if (cred != null) {
- AccountManager am = AccountManager.get(context);
- if (cred.authTokenExpires()) {
- am.invalidateAuthToken(
- getAccount().type,
- cred.getAuthToken()
- );
- } else {
- am.clearPassword(getAccount());
+
+ if (client != null) {
+ OwnCloudCredentials cred = client.getCredentials();
+ if (cred != null) {
+ AccountManager am = AccountManager.get(context);
+ if (cred.authTokenExpires()) {
+ am.invalidateAuthToken(
+ getAccount().type,
+ cred.getAuthToken()
+ );
+ } else {
+ am.clearPassword(getAccount());
+ }
}
}
+ requestCredentialsUpdate();
+
+ } catch (AccountNotFoundException e) {
+ Log_OC.e(TAG, "Account " + getAccount() + " was removed!", e);
}
-
- requestCredentialsUpdate();
-
+
}
}
removeStickyBroadcast(intent);
diff --git a/src/com/owncloud/android/ui/activity/FolderPickerActivity.java b/src/com/owncloud/android/ui/activity/FolderPickerActivity.java
index e4b1886c00..1c295377c0 100644
--- a/src/com/owncloud/android/ui/activity/FolderPickerActivity.java
+++ b/src/com/owncloud/android/ui/activity/FolderPickerActivity.java
@@ -489,40 +489,33 @@ public class FolderPickerActivity extends FileActivity implements FileFragment.C
(synchResult.isException() && synchResult.getException()
instanceof AuthenticatorException))) {
- OwnCloudClient client = null;
try {
- OwnCloudAccount ocAccount =
+ OwnCloudClient client;
+ OwnCloudAccount ocAccount =
new OwnCloudAccount(getAccount(), context);
client = (OwnCloudClientManagerFactory.getDefaultSingleton().
removeClientFor(ocAccount));
- // TODO get rid of these exceptions
- } catch (AccountNotFoundException e) {
- e.printStackTrace();
- } catch (AuthenticatorException e) {
- e.printStackTrace();
- } catch (OperationCanceledException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- if (client != null) {
- OwnCloudCredentials cred = client.getCredentials();
- if (cred != null) {
- AccountManager am = AccountManager.get(context);
- if (cred.authTokenExpires()) {
- am.invalidateAuthToken(
- getAccount().type,
- cred.getAuthToken()
- );
- } else {
- am.clearPassword(getAccount());
+
+ if (client != null) {
+ OwnCloudCredentials cred = client.getCredentials();
+ if (cred != null) {
+ AccountManager am = AccountManager.get(context);
+ if (cred.authTokenExpires()) {
+ am.invalidateAuthToken(
+ getAccount().type,
+ cred.getAuthToken()
+ );
+ } else {
+ am.clearPassword(getAccount());
+ }
}
}
+ requestCredentialsUpdate();
+
+ } catch (AccountNotFoundException e) {
+ Log_OC.e(TAG, "Account " + getAccount() + " was removed!", e);
}
-
- requestCredentialsUpdate();
-
+
}
}
removeStickyBroadcast(intent);