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:
parent
0dd68c1f65
commit
a1420ab00e
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user