diff --git a/src/com/owncloud/android/lib/common/OwnCloudAccount.java b/src/com/owncloud/android/lib/common/OwnCloudAccount.java index 993cd74a..339eb128 100644 --- a/src/com/owncloud/android/lib/common/OwnCloudAccount.java +++ b/src/com/owncloud/android/lib/common/OwnCloudAccount.java @@ -57,6 +57,9 @@ public class OwnCloudAccount { mSavedAccountName = savedAccount.name; mBaseUri = Uri.parse(AccountUtils.getBaseUrlForAccount(context, savedAccount)); mCredentials = AccountUtils.getCredentialsForAccount(context, savedAccount); + if (mCredentials == null) { + mCredentials = OwnCloudCredentialsFactory.getAnonymousCredentials(); + } } diff --git a/src/com/owncloud/android/lib/common/OwnCloudClientManagerFactory.java b/src/com/owncloud/android/lib/common/OwnCloudClientManagerFactory.java index f8a9a2f3..cc7ba6b9 100644 --- a/src/com/owncloud/android/lib/common/OwnCloudClientManagerFactory.java +++ b/src/com/owncloud/android/lib/common/OwnCloudClientManagerFactory.java @@ -7,12 +7,12 @@ public class OwnCloudClientManagerFactory { 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() { - return newOwnCloudClientManager(DEFAULT_POLICY); + return newOwnCloudClientManager(sDefaultPolicy); } public static OwnCloudClientManager newOwnCloudClientManager(Policy policy) { @@ -29,10 +29,32 @@ public class OwnCloudClientManagerFactory { } public static OwnCloudClientManager getDefaultSingleton() { - if (mDefaultSingleton == null) { - mDefaultSingleton = newDefaultOwnCloudClientManager(); + if (sDefaultSingleton == null) { + 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; + } + } diff --git a/src/com/owncloud/android/lib/common/SingleSessionManager.java b/src/com/owncloud/android/lib/common/SingleSessionManager.java index f427c8f4..221e1609 100644 --- a/src/com/owncloud/android/lib/common/SingleSessionManager.java +++ b/src/com/owncloud/android/lib/common/SingleSessionManager.java @@ -99,6 +99,7 @@ public class SingleSessionManager implements OwnCloudClientManager { } else { Log.d(TAG, " reusing client {" + accountName + ", " + client.hashCode() + "}"); reusingKnown = true; + keepCredentialsUpdated(account, client); } 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 public synchronized OwnCloudClient removeClientFor(Account savedAccount, Context context) throws AccountNotFoundException, OperationCanceledException, AuthenticatorException, IOException {