Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7e2ec104 authored by David A. Velasco's avatar David A. Velasco
Browse files

Default policy for singleton available in OwnCloudManagerFactory made configurable

parent 9be13237
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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();
        }
    }
    
    
+28 −6
Original line number Diff line number Diff line
@@ -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;
	}

}
+10 −0
Original line number Diff line number Diff line
@@ -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 {