mirror of
				https://github.com/owncloud/android-library.git
				synced 2025-10-28 17:07:49 +00:00 
			
		
		
		
	Merge pull request #52 from owncloud/update_OC_client_manager
Update oc client manager
This commit is contained in:
		
						commit
						942971a202
					
				| @ -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; | ||||
|  | ||||
| @ -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); | ||||
| 
 | ||||
|  | ||||
| @ -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; | ||||
| 	} | ||||
|  | ||||
| @ -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); | ||||
| 		} | ||||
|  | ||||
| @ -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); | ||||
|  | ||||
| @ -94,6 +94,7 @@ public class SimpleFactoryManagerTest extends AndroidTestCase { | ||||
| 	} | ||||
| 	 | ||||
| 	public void testGetClientFor() { | ||||
| 		try { | ||||
| 			OwnCloudClient client = mSFMgr.getClientFor(mValidAccount, getContext()); | ||||
| 		 | ||||
| 			assertNotSame("Got same client instances for same account", | ||||
| @ -102,15 +103,22 @@ public class SimpleFactoryManagerTest extends AndroidTestCase { | ||||
| 			assertNotSame("Got same client instances for different accounts", | ||||
| 					client, mSFMgr.getClientFor(mAnonymousAccount, getContext())); | ||||
| 		 | ||||
| 		} catch (Exception e) { | ||||
| 			throw new AssertionFailedError("Exception getting client for account: " + e.getMessage()); | ||||
| 		} | ||||
| 		// TODO harder tests | ||||
| 	} | ||||
|      | ||||
| 	public void testRemoveClientFor() { | ||||
| 		try { | ||||
| 			OwnCloudClient client = mSFMgr.getClientFor(mValidAccount, getContext()); | ||||
| 			mSFMgr.removeClientFor(mValidAccount); | ||||
| 			assertNotSame("Got same client instance after removing it from manager", | ||||
| 					client, mSFMgr.getClientFor(mValidAccount,  getContext())); | ||||
| 			 | ||||
| 		} catch (Exception e) { | ||||
| 			throw new AssertionFailedError("Exception getting client for account: " + e.getMessage()); | ||||
| 		} | ||||
| 		// TODO harder tests | ||||
| 	} | ||||
| 
 | ||||
|  | ||||
| @ -93,6 +93,7 @@ public class SingleSessionManagerTest extends AndroidTestCase { | ||||
| 	} | ||||
| 	 | ||||
| 	public void testGetClientFor() { | ||||
| 		try { | ||||
| 			OwnCloudClient client1 = mSSMgr.getClientFor(mValidAccount, getContext()); | ||||
| 			OwnCloudClient client2 = mSSMgr.getClientFor(mAnonymousAccount, getContext()); | ||||
| 
 | ||||
| @ -101,14 +102,22 @@ public class SingleSessionManagerTest extends AndroidTestCase { | ||||
| 			assertSame("Got different client instances for same account", | ||||
| 					client1, mSSMgr.getClientFor(mValidAccount,  getContext())); | ||||
| 
 | ||||
| 		} catch (Exception e) { | ||||
| 			throw new AssertionFailedError("Exception getting client for account: " + e.getMessage()); | ||||
| 		} | ||||
| 
 | ||||
| 		// TODO harder tests | ||||
| 	} | ||||
|      | ||||
| 	public void testRemoveClientFor() { | ||||
| 		try { | ||||
| 			OwnCloudClient client1 = mSSMgr.getClientFor(mValidAccount, getContext()); | ||||
| 			mSSMgr.removeClientFor(mValidAccount); | ||||
| 			assertNotSame("Got same client instance after removing it from manager", | ||||
| 					client1, mSSMgr.getClientFor(mValidAccount,  getContext())); | ||||
| 		} catch (Exception e) { | ||||
| 			throw new AssertionFailedError("Exception getting client for account: " + e.getMessage()); | ||||
| 		} | ||||
| 		 | ||||
| 		// TODO harder tests | ||||
| 	} | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user