1
0
mirror of https://github.com/owncloud/android-library.git synced 2025-06-08 16:36:13 +00:00

Load of credentials from AccountManager is refactored out from constructor

This commit is contained in:
David A. Velasco 2015-02-09 15:27:44 +01:00
parent 2f178c9c34
commit f5fe254c09
4 changed files with 88 additions and 38 deletions

View File

@ -41,9 +41,43 @@ public class OwnCloudAccount {
private OwnCloudCredentials mCredentials; private OwnCloudCredentials mCredentials;
private String mSavedAccountName; private String mSavedAccountName;
private Account mSavedAccount;
public OwnCloudAccount(Account savedAccount, Context context)
/**
* Constructor for already saved OC accounts.
*
* Do not use for anonymous credentials.
*/
public OwnCloudAccount(Account savedAccount, Context context) throws AccountNotFoundException {
if (savedAccount == null) {
throw new IllegalArgumentException("Parameter 'savedAccount' cannot be null");
}
mSavedAccount = savedAccount;
mSavedAccountName = savedAccount.name;
mBaseUri = Uri.parse(AccountUtils.getBaseUrlForAccount(context, mSavedAccount));
mCredentials = null;
}
/**
* Method for deferred load of account attributes from AccountManager
*
* @param context
* @throws AccountNotFoundException
* @throws AuthenticatorException
* @throws IOException
* @throws OperationCanceledException
*/
public void loadCredentials(Context context)
throws AccountNotFoundException, AuthenticatorException,
IOException, OperationCanceledException {
mCredentials = AccountUtils.getCredentialsForAccount(context, mSavedAccount);
}
/*
public OwnCloudAccount(Account savedAccount, Context context)
throws AccountNotFoundException, AuthenticatorException, throws AccountNotFoundException, AuthenticatorException,
IOException, OperationCanceledException { IOException, OperationCanceledException {
@ -61,12 +95,19 @@ public class OwnCloudAccount {
mCredentials = OwnCloudCredentialsFactory.getAnonymousCredentials(); mCredentials = OwnCloudCredentialsFactory.getAnonymousCredentials();
} }
} }
*/
/**
* Constructor for non yet saved OC accounts.
*
* @param baseUri URI to the OC server to get access to.
* @param credentials Credentials to authenticate in the server. NULL is valid for anonymous credentials.
*/
public OwnCloudAccount(Uri baseUri, OwnCloudCredentials credentials) { public OwnCloudAccount(Uri baseUri, OwnCloudCredentials credentials) {
if (baseUri == null) { if (baseUri == null) {
throw new IllegalArgumentException("Parameter 'baseUri' cannot be null"); throw new IllegalArgumentException("Parameter 'baseUri' cannot be null");
} }
mSavedAccount = null;
mSavedAccountName = null; mSavedAccountName = null;
mBaseUri = baseUri; mBaseUri = baseUri;
mCredentials = credentials != null ? mCredentials = credentials != null ?
@ -80,7 +121,7 @@ public class OwnCloudAccount {
public boolean isAnonymous() { public boolean isAnonymous() {
return (mCredentials == null); return (mCredentials == null);
} } // TODO no more
public Uri getBaseUri() { public Uri getBaseUri() {
return mBaseUri; return mBaseUri;

View File

@ -42,7 +42,8 @@ import com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundExce
public interface OwnCloudClientManager { public interface OwnCloudClientManager {
public OwnCloudClient getClientFor(OwnCloudAccount account, Context context); public OwnCloudClient getClientFor(OwnCloudAccount account, Context context)
throws AccountNotFoundException, OperationCanceledException, AuthenticatorException, IOException;
public OwnCloudClient removeClientFor(OwnCloudAccount account); public OwnCloudClient removeClientFor(OwnCloudAccount account);

View File

@ -25,32 +25,42 @@
package com.owncloud.android.lib.common; package com.owncloud.android.lib.common;
import android.accounts.AuthenticatorException;
import android.accounts.OperationCanceledException;
import android.content.Context; import android.content.Context;
import com.owncloud.android.lib.common.accounts.AccountUtils; import com.owncloud.android.lib.common.accounts.AccountUtils;
import com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundException;
import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.lib.common.utils.Log_OC;
import java.io.IOException;
public class SimpleFactoryManager implements OwnCloudClientManager { public class SimpleFactoryManager implements OwnCloudClientManager {
private static final String TAG = SimpleFactoryManager.class.getSimpleName(); private static final String TAG = SimpleFactoryManager.class.getSimpleName();
@Override @Override
public OwnCloudClient getClientFor(OwnCloudAccount account, Context context) { public OwnCloudClient getClientFor(OwnCloudAccount account, Context context)
throws AccountNotFoundException, OperationCanceledException, AuthenticatorException, IOException {
Log_OC.d(TAG, "getClientFor(OwnCloudAccount ... : "); Log_OC.d(TAG, "getClientFor(OwnCloudAccount ... : ");
OwnCloudClient client = OwnCloudClientFactory.createOwnCloudClient( OwnCloudClient client = OwnCloudClientFactory.createOwnCloudClient(
account.getBaseUri(), account.getBaseUri(),
context.getApplicationContext(), context.getApplicationContext(),
true); true);
Log_OC.d(TAG, " new client {" + Log_OC.v(TAG, " new client {" +
(account.getName() != null ? (account.getName() != null ?
account.getName() : account.getName() :
AccountUtils.buildAccountName( AccountUtils.buildAccountName(account.getBaseUri(), "")
account.getBaseUri(),
account.getCredentials().getAuthToken())) + ) + ", " + client.hashCode() + "}");
", " + client.hashCode() + "}");
if (account.getCredentials() == null) {
client.setCredentials(account.getCredentials()); account.loadCredentials(context);
}
client.setCredentials(account.getCredentials());
return client; return client;
} }

View File

@ -62,7 +62,9 @@ public class SingleSessionManager implements OwnCloudClientManager {
@Override @Override
public synchronized OwnCloudClient getClientFor(OwnCloudAccount account, Context context) { public synchronized OwnCloudClient getClientFor(OwnCloudAccount account, Context context)
throws AccountNotFoundException, OperationCanceledException, AuthenticatorException, IOException {
Log_OC.d(TAG, "getClientFor(OwnCloudAccount ... : "); Log_OC.d(TAG, "getClientFor(OwnCloudAccount ... : ");
if (account == null) { if (account == null) {
throw new IllegalArgumentException("Cannot get an OwnCloudClient for a null account"); throw new IllegalArgumentException("Cannot get an OwnCloudClient for a null account");
@ -70,10 +72,13 @@ public class SingleSessionManager implements OwnCloudClientManager {
OwnCloudClient client = null; OwnCloudClient client = null;
String accountName = account.getName(); String accountName = account.getName();
String sessionName = AccountUtils.buildAccountName( String sessionName = account.getCredentials() == null ? "" :
account.getBaseUri(), AccountUtils.buildAccountName (
account.getCredentials().getAuthToken()); account.getBaseUri(),
account.getCredentials().getAuthToken()
)
;
if (accountName != null) { if (accountName != null) {
client = mClientsWithKnownUsername.get(accountName); client = mClientsWithKnownUsername.get(accountName);
} }
@ -82,10 +87,11 @@ public class SingleSessionManager implements OwnCloudClientManager {
if (accountName != null) { if (accountName != null) {
client = mClientsWithUnknownUsername.remove(sessionName); client = mClientsWithUnknownUsername.remove(sessionName);
if (client != null) { if (client != null) {
// TODO REMOVE THIS LOG
Log_OC.d(TAG, " reusing client {" + sessionName + ", " + Log_OC.d(TAG, " reusing client {" + sessionName + ", " +
client.hashCode() + "}"); client.hashCode() + "}");
mClientsWithKnownUsername.put(accountName, client); mClientsWithKnownUsername.put(accountName, client);
Log_OC.d(TAG, " moved client to {" + accountName + ", " + Log_OC.d(TAG, " moved client to {" + accountName + ", " +
client.hashCode() + "}"); client.hashCode() + "}");
} }
} else { } else {
@ -105,10 +111,9 @@ public class SingleSessionManager implements OwnCloudClientManager {
client.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY); client.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
// enable cookie tracking // enable cookie tracking
AccountUtils.restoreCookies(accountName, client, context);
// Restore Cookies ??
AccountUtils.restoreCookies(accountName, client, context); account.loadCredentials(context);
client.setCredentials(account.getCredentials()); client.setCredentials(account.getCredentials());
if (accountName != null) { if (accountName != null) {
mClientsWithKnownUsername.put(accountName, client); mClientsWithKnownUsername.put(accountName, client);
@ -116,10 +121,12 @@ public class SingleSessionManager implements OwnCloudClientManager {
} else { } else {
mClientsWithUnknownUsername.put(sessionName, client); mClientsWithUnknownUsername.put(sessionName, client);
// TODO REMOVE THIS LOG
Log_OC.d(TAG, " new client {" + sessionName + ", " + client.hashCode() + "}"); Log_OC.d(TAG, " new client {" + sessionName + ", " + client.hashCode() + "}");
} }
} else { } else {
if (!reusingKnown) { if (!reusingKnown) {
// TODO REMOVE THIS LOG
Log_OC.d(TAG, " reusing client {" + sessionName + ", " + client.hashCode() + "}"); Log_OC.d(TAG, " reusing client {" + sessionName + ", " + client.hashCode() + "}");
} }
keepCredentialsUpdated(account, client); keepCredentialsUpdated(account, client);
@ -148,18 +155,9 @@ public class SingleSessionManager implements OwnCloudClientManager {
Log_OC.d(TAG, "No client tracked for {" + accountName + "}"); Log_OC.d(TAG, "No client tracked for {" + accountName + "}");
} }
} }
String sessionName = AccountUtils.buildAccountName( mClientsWithUnknownUsername.clear();
account.getBaseUri(),
account.getCredentials().getAuthToken());
client = mClientsWithUnknownUsername.remove(sessionName);
if (client != null) {
Log_OC.d(TAG, "Removed client {" + sessionName + ", " + client.hashCode() + "}");
return client;
}
Log_OC.d(TAG, "No client tracked for {" + sessionName + "}");
Log_OC.d(TAG, "No client removed");
return null; return null;
} }