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

Commit 942971a2 authored by masensio's avatar masensio
Browse files

Merge pull request #52 from owncloud/update_OC_client_manager

Update oc client manager
parents 2f178c9c c2b5ddd2
Loading
Loading
Loading
Loading
+58 −6
Original line number Diff line number Diff line
@@ -42,7 +42,52 @@ 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");
        }

        if (context == null) {
            throw new IllegalArgumentException("Parameter 'context' 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 {

        if (context == null) {
            throw new IllegalArgumentException("Parameter 'context' cannot be null");
        }

		if (mSavedAccount != null) {
			mCredentials = AccountUtils.getCredentialsForAccount(context, mSavedAccount);
		}
	}

    /*
    public OwnCloudAccount(Account savedAccount, Context context)
    		throws AccountNotFoundException, AuthenticatorException, 
    		IOException, OperationCanceledException {
@@ -61,12 +106,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 +132,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;
	}
+21 −23
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;
		
	}
@@ -186,7 +184,7 @@ public class SingleSessionManager implements OwnCloudClientManager {
    
	private void keepCredentialsUpdated(OwnCloudAccount account, OwnCloudClient reusedClient) {
		OwnCloudCredentials recentCredentials = account.getCredentials();
		if (!recentCredentials.getAuthToken().equals(
		if (recentCredentials != null && !recentCredentials.getAuthToken().equals(
				reusedClient.getCredentials().getAuthToken())) {
			reusedClient.setCredentials(recentCredentials);
		}
+3 −0
Original line number Diff line number Diff line
@@ -92,6 +92,7 @@ public class AdvancedSslSocketFactory implements SecureProtocolSocketFactory {
    /**
     * @see ProtocolSocketFactory#createSocket(java.lang.String,int,java.net.InetAddress,int)
     */
    @Override
    public Socket createSocket(String host, int port, InetAddress clientHost, int clientPort) 
    		throws IOException, UnknownHostException {
    	
@@ -157,6 +158,7 @@ public class AdvancedSslSocketFactory implements SecureProtocolSocketFactory {
     * @throws UnknownHostException if the IP address of the host cannot be
     *             determined
     */
    @Override
    public Socket createSocket(final String host, final int port,
            final InetAddress localAddress, final int localPort,
            final HttpConnectionParams params) throws IOException,
@@ -187,6 +189,7 @@ public class AdvancedSslSocketFactory implements SecureProtocolSocketFactory {
	/**
     * @see ProtocolSocketFactory#createSocket(java.lang.String,int)
     */
    @Override
    public Socket createSocket(String host, int port) throws IOException,
            UnknownHostException {
    	Log_OC.d(TAG, "Creating SSL Socket with remote " + host + ":" + port);
Loading