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

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

Load of credentials from AccountManager is refactored out from constructor

parent 2f178c9c
Loading
Loading
Loading
Loading
+47 −6
Original line number Diff line number Diff line
@@ -42,7 +42,41 @@ public class OwnCloudAccount {
    
    private String mSavedAccountName;

    private Account mSavedAccount;


    /**
     * 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, 
    		IOException, OperationCanceledException {
@@ -61,12 +95,19 @@ public class OwnCloudAccount {
        	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) {
        if (baseUri == null) {
            throw new IllegalArgumentException("Parameter 'baseUri' cannot be null");
        }
        mSavedAccount = null;
        mSavedAccountName = null;
        mBaseUri = baseUri;
        mCredentials = credentials != null ? 
@@ -80,7 +121,7 @@ public class OwnCloudAccount {

	public boolean isAnonymous() {
        return (mCredentials == null);
    }
    }   // TODO no more
    
    public Uri getBaseUri() {
        return mBaseUri;
+2 −1
Original line number Diff line number Diff line
@@ -42,7 +42,8 @@ import com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundExce

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);

+19 −9
Original line number Diff line number Diff line
@@ -25,31 +25,41 @@
package com.owncloud.android.lib.common;


import android.accounts.AuthenticatorException;
import android.accounts.OperationCanceledException;
import android.content.Context;

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 java.io.IOException;

public class SimpleFactoryManager implements OwnCloudClientManager {
    
	private static final String TAG = SimpleFactoryManager.class.getSimpleName();

	@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 ... : ");

		OwnCloudClient client = OwnCloudClientFactory.createOwnCloudClient(
				account.getBaseUri(), 
				context.getApplicationContext(),
				true);

		Log_OC.d(TAG, "    new client {" + 
		Log_OC.v(TAG, "    new client {" +
				(account.getName() != null ?
						account.getName() :
							AccountUtils.buildAccountName(
					    			account.getBaseUri(), 
					    			account.getCredentials().getAuthToken())) +
					", " + client.hashCode() + "}");
						AccountUtils.buildAccountName(account.getBaseUri(), "")

                ) + ", " + client.hashCode() + "}");

        if (account.getCredentials() == null) {
            account.loadCredentials(context);
        }
        client.setCredentials(account.getCredentials());
		return client;
	}
+20 −22
Original line number Diff line number Diff line
@@ -62,7 +62,9 @@ public class SingleSessionManager implements OwnCloudClientManager {
    
    
    @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 ... : ");
    	if (account == null) {
    		throw new IllegalArgumentException("Cannot get an OwnCloudClient for a null account");
@@ -70,9 +72,12 @@ public class SingleSessionManager implements OwnCloudClientManager {

    	OwnCloudClient client = null;
    	String accountName = account.getName();
    	String sessionName = AccountUtils.buildAccountName(
    	String sessionName = account.getCredentials() == null ? "" :
            AccountUtils.buildAccountName (
                account.getBaseUri(),
    			account.getCredentials().getAuthToken());
                account.getCredentials().getAuthToken()
            )
        ;

    	if (accountName != null) {
    		client = mClientsWithKnownUsername.get(accountName);
@@ -82,6 +87,7 @@ public class SingleSessionManager implements OwnCloudClientManager {
    		if (accountName != null) {
    			client = mClientsWithUnknownUsername.remove(sessionName);
    			if (client != null) {
                    // TODO REMOVE THIS LOG
    	    		Log_OC.d(TAG, "    reusing client {" + sessionName + ", " + 
    	    				client.hashCode() + "}");
    				mClientsWithKnownUsername.put(accountName, client);
@@ -105,10 +111,9 @@ public class SingleSessionManager implements OwnCloudClientManager {
            client.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
            	// enable cookie tracking
            
    		
    		// Restore Cookies ??
    		AccountUtils.restoreCookies(accountName, client, context);

            account.loadCredentials(context);
    		client.setCredentials(account.getCredentials());
    		if (accountName != null) {
    			mClientsWithKnownUsername.put(accountName, client);
@@ -116,10 +121,12 @@ public class SingleSessionManager implements OwnCloudClientManager {

    		} else {
    			mClientsWithUnknownUsername.put(sessionName, client);
                // TODO REMOVE THIS LOG
    			Log_OC.d(TAG, "    new client {" + sessionName + ", " + client.hashCode() + "}");
    		}
    	} else {
    		if (!reusingKnown) {
                // TODO REMOVE THIS LOG
    			Log_OC.d(TAG, "    reusing client {" + sessionName + ", " + client.hashCode() + "}");
    		}
    		keepCredentialsUpdated(account, client);
@@ -149,17 +156,8 @@ public class SingleSessionManager implements OwnCloudClientManager {
        	}
    	}

    	String sessionName = AccountUtils.buildAccountName(
    			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 + "}");
        mClientsWithUnknownUsername.clear();

		Log_OC.d(TAG, "No client removed");
		return null;
		
	}