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

Default policy for singleton available in OwnCloudManagerFactory made configurable

This commit is contained in:
David A. Velasco 2014-06-13 13:42:59 +02:00
parent 9be1323745
commit 7e2ec10442
3 changed files with 41 additions and 6 deletions

View File

@ -57,6 +57,9 @@ public class OwnCloudAccount {
mSavedAccountName = savedAccount.name; mSavedAccountName = savedAccount.name;
mBaseUri = Uri.parse(AccountUtils.getBaseUrlForAccount(context, savedAccount)); mBaseUri = Uri.parse(AccountUtils.getBaseUrlForAccount(context, savedAccount));
mCredentials = AccountUtils.getCredentialsForAccount(context, savedAccount); mCredentials = AccountUtils.getCredentialsForAccount(context, savedAccount);
if (mCredentials == null) {
mCredentials = OwnCloudCredentialsFactory.getAnonymousCredentials();
}
} }

View File

@ -7,12 +7,12 @@ public class OwnCloudClientManagerFactory {
SINGLE_SESSION_PER_ACCOUNT SINGLE_SESSION_PER_ACCOUNT
} }
public final static Policy DEFAULT_POLICY = Policy.ALWAYS_NEW_CLIENT; public static Policy sDefaultPolicy = Policy.ALWAYS_NEW_CLIENT;
private static OwnCloudClientManager mDefaultSingleton; private static OwnCloudClientManager sDefaultSingleton;
public static OwnCloudClientManager newDefaultOwnCloudClientManager() { public static OwnCloudClientManager newDefaultOwnCloudClientManager() {
return newOwnCloudClientManager(DEFAULT_POLICY); return newOwnCloudClientManager(sDefaultPolicy);
} }
public static OwnCloudClientManager newOwnCloudClientManager(Policy policy) { public static OwnCloudClientManager newOwnCloudClientManager(Policy policy) {
@ -29,10 +29,32 @@ public class OwnCloudClientManagerFactory {
} }
public static OwnCloudClientManager getDefaultSingleton() { public static OwnCloudClientManager getDefaultSingleton() {
if (mDefaultSingleton == null) { if (sDefaultSingleton == null) {
mDefaultSingleton = newDefaultOwnCloudClientManager(); sDefaultSingleton = newDefaultOwnCloudClientManager();
} }
return mDefaultSingleton; return sDefaultSingleton;
}
public static void setDefaultPolicy(Policy policy) {
if (defaultSingletonMustBeUpdated(policy)) {
sDefaultSingleton = null;
}
sDefaultPolicy = policy;
} }
private static boolean defaultSingletonMustBeUpdated(Policy policy) {
if (sDefaultSingleton == null) {
return false;
}
if (policy == Policy.ALWAYS_NEW_CLIENT &&
!(sDefaultSingleton instanceof SimpleFactoryManager)) {
return true;
}
if (policy == Policy.SINGLE_SESSION_PER_ACCOUNT &&
!(sDefaultSingleton instanceof SingleSessionManager)) {
return true;
}
return false;
}
} }

View File

@ -99,6 +99,7 @@ public class SingleSessionManager implements OwnCloudClientManager {
} else { } else {
Log.d(TAG, " reusing client {" + accountName + ", " + client.hashCode() + "}"); Log.d(TAG, " reusing client {" + accountName + ", " + client.hashCode() + "}");
reusingKnown = true; reusingKnown = true;
keepCredentialsUpdated(account, client);
} }
if (client == null) { if (client == null) {
@ -191,6 +192,15 @@ public class SingleSessionManager implements OwnCloudClientManager {
} }
*/ */
private void keepCredentialsUpdated(OwnCloudAccount account, OwnCloudClient reusedClient) {
OwnCloudCredentials recentCredentials = account.getCredentials();
if (!recentCredentials.getAuthToken().equals(
reusedClient.getCredentials().getAuthToken())) {
reusedClient.setCredentials(recentCredentials);
}
}
@Override @Override
public synchronized OwnCloudClient removeClientFor(Account savedAccount, Context context) public synchronized OwnCloudClient removeClientFor(Account savedAccount, Context context)
throws AccountNotFoundException, OperationCanceledException, AuthenticatorException, IOException { throws AccountNotFoundException, OperationCanceledException, AuthenticatorException, IOException {