1
0
mirror of https://github.com/owncloud/android-library.git synced 2025-06-08 16:36:13 +00:00

Add userAgent in RemoteOperation

This commit is contained in:
masensio 2015-03-13 13:37:23 +01:00
parent 0dd68c1f65
commit a1420ab00e

View File

@ -60,6 +60,9 @@ public abstract class RemoteOperation implements Runnable {
/** OCS API header value */ /** OCS API header value */
public static final String OCS_API_HEADER_VALUE = "true"; public static final String OCS_API_HEADER_VALUE = "true";
/** User agent header */
public static final String USER_AGENT_HEADER = "User-Agent";
/** ownCloud account in the remote ownCloud server to operate */ /** ownCloud account in the remote ownCloud server to operate */
private Account mAccount = null; private Account mAccount = null;
@ -78,6 +81,9 @@ public abstract class RemoteOperation implements Runnable {
/** Activity */ /** Activity */
private Activity mCallerActivity; private Activity mCallerActivity;
/** User agent */
private String mUserAgent;
/** /**
* Abstract method to implement the operation in derived classes. * Abstract method to implement the operation in derived classes.
@ -90,19 +96,23 @@ public abstract class RemoteOperation implements Runnable {
* *
* Do not call this method from the main thread. * Do not call this method from the main thread.
* *
* This method should be used whenever an ownCloud account is available, instead of {@link #execute(OwnCloudClient)}. * This method should be used whenever an ownCloud account is available, instead of
* {@link #execute(OwnCloudClient, java.lang.String)}.
* *
* @param account ownCloud account in remote ownCloud server to reach during the execution of the operation. * @param account ownCloud account in remote ownCloud server to reach during the
* execution of the operation.
* @param context Android context for the component calling the method. * @param context Android context for the component calling the method.
* @param userAgent userAgent string
* @return Result of the operation. * @return Result of the operation.
*/ */
public RemoteOperationResult execute(Account account, Context context) { public RemoteOperationResult execute(Account account, Context context, String userAgent) {
if (account == null) if (account == null)
throw new IllegalArgumentException("Trying to execute a remote operation with a NULL Account"); throw new IllegalArgumentException("Trying to execute a remote operation with a NULL Account");
if (context == null) if (context == null)
throw new IllegalArgumentException("Trying to execute a remote operation with a NULL Context"); throw new IllegalArgumentException("Trying to execute a remote operation with a NULL Context");
mAccount = account; mAccount = account;
mContext = context.getApplicationContext(); mContext = context.getApplicationContext();
mUserAgent = userAgent;
try { try {
OwnCloudAccount ocAccount = new OwnCloudAccount(mAccount, mContext); OwnCloudAccount ocAccount = new OwnCloudAccount(mAccount, mContext);
mClient = OwnCloudClientManagerFactory.getDefaultSingleton(). mClient = OwnCloudClientManagerFactory.getDefaultSingleton().
@ -120,13 +130,16 @@ public abstract class RemoteOperation implements Runnable {
* *
* Do not call this method from the main thread. * Do not call this method from the main thread.
* *
* @param client Client object to reach an ownCloud server during the execution of the operation. * @param client Client object to reach an ownCloud server during the execution of
* the operation.
* @param userAgent userAgent string
* @return Result of the operation. * @return Result of the operation.
*/ */
public RemoteOperationResult execute(OwnCloudClient client) { public RemoteOperationResult execute(OwnCloudClient client, String userAgent) {
if (client == null) if (client == null)
throw new IllegalArgumentException("Trying to execute a remote operation with a NULL OwnCloudClient"); throw new IllegalArgumentException("Trying to execute a remote operation with a NULL OwnCloudClient");
mClient = client; mClient = client;
mUserAgent = userAgent;
return run(client); return run(client);
} }
@ -134,29 +147,35 @@ public abstract class RemoteOperation implements Runnable {
/** /**
* Asynchronously executes the remote operation * Asynchronously executes the remote operation
* *
* This method should be used whenever an ownCloud account is available, instead of {@link #execute(OwnCloudClient)}. * This method should be used whenever an ownCloud account is available, instead of
* {@link #execute(OwnCloudClient, java.lang.String)}.
* *
* @deprecated This method will be removed in version 1.0. * @deprecated This method will be removed in version 1.0.
* Use {@link #execute(Account, Context, OnRemoteOperationListener, Handler)} * Use {@link #execute(Account, Context, String, OnRemoteOperationListener,
* instead. * Handler)} instead.
* *
* @param account ownCloud account in remote ownCloud server to reach during the execution of the operation. * @param account ownCloud account in remote ownCloud server to reach during
* the execution of the operation.
* @param context Android context for the component calling the method. * @param context Android context for the component calling the method.
* @param listener Listener to be notified about the execution of the operation. * @param listener Listener to be notified about the execution of the operation.
* @param listenerHandler Handler associated to the thread where the methods of the listener objects must be called. * @param listenerHandler Handler associated to the thread where the methods of the listener
* objects must be called.
* @return Thread were the remote operation is executed. * @return Thread were the remote operation is executed.
*/ */
@Deprecated @Deprecated
public Thread execute(Account account, Context context, OnRemoteOperationListener listener, Handler listenerHandler, Activity callerActivity) { public Thread execute(Account account, Context context, OnRemoteOperationListener listener,
Handler listenerHandler, Activity callerActivity) {
if (account == null) if (account == null)
throw new IllegalArgumentException("Trying to execute a remote operation with a NULL Account"); throw new IllegalArgumentException
("Trying to execute a remote operation with a NULL Account");
if (context == null) if (context == null)
throw new IllegalArgumentException("Trying to execute a remote operation with a NULL Context"); throw new IllegalArgumentException
("Trying to execute a remote operation with a NULL Context");
mAccount = account; mAccount = account;
mContext = context.getApplicationContext(); mContext = context.getApplicationContext();
mCallerActivity = callerActivity; mCallerActivity = callerActivity;
mClient = null; // the client instance will be created from mAccount and mContext in the runnerThread to create below mClient = null; // the client instance will be created from mAccount
// and mContext in the runnerThread to create below
mListener = listener; mListener = listener;
mListenerHandler = listenerHandler; mListenerHandler = listenerHandler;
@ -171,27 +190,31 @@ public abstract class RemoteOperation implements Runnable {
* Asynchronously executes the remote operation * Asynchronously executes the remote operation
* *
* This method should be used whenever an ownCloud account is available, * This method should be used whenever an ownCloud account is available,
* instead of {@link #execute(OwnCloudClient, OnRemoteOperationListener, Handler))}. * instead of {@link #execute(OwnCloudClient, String, OnRemoteOperationListener, Handler))}.
* *
* @param account ownCloud account in remote ownCloud server to reach during the * @param account ownCloud account in remote ownCloud server to reach during the
* execution of the operation. * execution of the operation.
* @param context Android context for the component calling the method. * @param context Android context for the component calling the method.
* @param userAgent userAgent string
* @param listener Listener to be notified about the execution of the operation. * @param listener Listener to be notified about the execution of the operation.
* @param listenerHandler Handler associated to the thread where the methods of the listener * @param listenerHandler Handler associated to the thread where the methods of the listener
* objects must be called. * objects must be called.
* @return Thread were the remote operation is executed. * @return Thread were the remote operation is executed.
*/ */
public Thread execute(Account account, Context context, OnRemoteOperationListener listener, public Thread execute(Account account, Context context, String userAgent,
Handler listenerHandler) { OnRemoteOperationListener listener, Handler listenerHandler) {
if (account == null) if (account == null)
throw new IllegalArgumentException("Trying to execute a remote operation with a NULL Account"); throw new IllegalArgumentException
("Trying to execute a remote operation with a NULL Account");
if (context == null) if (context == null)
throw new IllegalArgumentException("Trying to execute a remote operation with a NULL Context"); throw new IllegalArgumentException
("Trying to execute a remote operation with a NULL Context");
mAccount = account; mAccount = account;
mContext = context.getApplicationContext(); mContext = context.getApplicationContext();
mCallerActivity = null; mCallerActivity = null;
mClient = null; // the client instance will be created from mAccount and mContext in the runnerThread to create below mClient = null; // the client instance will be created from
// mAccount and mContext in the runnerThread to create below
mListener = listener; mListener = listener;
@ -206,24 +229,34 @@ public abstract class RemoteOperation implements Runnable {
/** /**
* Asynchronously executes the remote operation * Asynchronously executes the remote operation
* *
* @param client Client object to reach an ownCloud server during the execution of the operation. * @param client Client object to reach an ownCloud server
* during the execution of the operation.
* @param userAgent userAgent string
* @param listener Listener to be notified about the execution of the operation. * @param listener Listener to be notified about the execution of the operation.
* @param listenerHandler Handler associated to the thread where the methods of the listener objects must be called. * @param listenerHandler Handler associated to the thread where the methods of
* the listener objects must be called.
* @return Thread were the remote operation is executed. * @return Thread were the remote operation is executed.
*/ */
public Thread execute(OwnCloudClient client, OnRemoteOperationListener listener, Handler listenerHandler) { public Thread execute(OwnCloudClient client, String userAgent,
OnRemoteOperationListener listener, Handler listenerHandler) {
if (client == null) { if (client == null) {
throw new IllegalArgumentException("Trying to execute a remote operation with a NULL OwnCloudClient"); throw new IllegalArgumentException
("Trying to execute a remote operation with a NULL OwnCloudClient");
} }
mClient = client; mClient = client;
mUserAgent = userAgent;
if (listener == null) { if (listener == null) {
throw new IllegalArgumentException("Trying to execute a remote operation asynchronously without a listener to notiy the result"); throw new IllegalArgumentException
("Trying to execute a remote operation asynchronously " +
"without a listener to notiy the result");
} }
mListener = listener; mListener = listener;
if (listenerHandler == null) { if (listenerHandler == null) {
throw new IllegalArgumentException("Trying to execute a remote operation asynchronously without a handler to the listener's thread"); throw new IllegalArgumentException
("Trying to execute a remote operation asynchronously " +
"without a handler to the listener's thread");
} }
mListenerHandler = listenerHandler; mListenerHandler = listenerHandler;
@ -234,7 +267,8 @@ public abstract class RemoteOperation implements Runnable {
/** /**
* Asynchronous execution of the operation * Asynchronous execution of the operation
* started by {@link RemoteOperation#execute(OwnCloudClient, OnRemoteOperationListener, Handler)}, * started by {@link RemoteOperation#execute(OwnCloudClient, String,
* OnRemoteOperationListener, Handler)},
* and result posting. * and result posting.
* *
* TODO refactor && clean the code; now it's a mess * TODO refactor && clean the code; now it's a mess
@ -259,12 +293,15 @@ public abstract class RemoteOperation implements Runnable {
} }
} else { } else {
throw new IllegalStateException("Trying to run a remote operation asynchronously with no client instance or account"); throw new IllegalStateException("Trying to run a remote operation " +
"asynchronously with no client instance or account");
} }
} }
} catch (IOException e) { } catch (IOException e) {
Log_OC.e(TAG, "Error while trying to access to " + mAccount.name, new AccountsException("I/O exception while trying to authorize the account", e)); Log_OC.e(TAG, "Error while trying to access to " + mAccount.name,
new AccountsException("I/O exception while trying to authorize the account",
e));
result = new RemoteOperationResult(e); result = new RemoteOperationResult(e);
} catch (AccountsException e) { } catch (AccountsException e) {
@ -278,9 +315,11 @@ public abstract class RemoteOperation implements Runnable {
repeat = false; repeat = false;
/** DEPRECATED BLOCK - will be removed at version 1.0 ; don't trust in this code /** DEPRECATED BLOCK - will be removed at version 1.0 ; don't trust in this code
* to trigger authentication update */ * to trigger authentication update */
if (mCallerActivity != null && mAccount != null && mContext != null && !result.isSuccess() && if (mCallerActivity != null && mAccount != null && mContext != null &&
!result.isSuccess() &&
(result.getCode() == ResultCode.UNAUTHORIZED || result.isIdPRedirection())) { (result.getCode() == ResultCode.UNAUTHORIZED || result.isIdPRedirection())) {
/// possible fail due to lack of authorization in an operation performed in foreground /// possible fail due to lack of authorization
// in an operation performed in foreground
OwnCloudCredentials cred = mClient.getCredentials(); OwnCloudCredentials cred = mClient.getCredentials();
if (cred != null) { if (cred != null) {
/// confirmed : unauthorized operation /// confirmed : unauthorized operation
@ -294,7 +333,9 @@ public abstract class RemoteOperation implements Runnable {
am.clearPassword(mAccount); am.clearPassword(mAccount);
} }
mClient = null; mClient = null;
repeat = true; // when repeated, the creation of a new OwnCloudClient after erasing the saved credentials will trigger the login activity // when repeated, the creation of a new OwnCloudClient after erasing the saved
// credentials will trigger the login activity
repeat = true;
result = null; result = null;
} }
} }
@ -327,5 +368,13 @@ public abstract class RemoteOperation implements Runnable {
return mClient; return mClient;
} }
/**
* Returns the user agent string
* @return
*/
public final String getUserAgent() {
return mUserAgent;
}
} }