/... which would
- // conflict with src/ being used by the main source set.
- // Adding new build types or product flavors should be accompanied
- // by a similar customization.
- debug.setRoot('build-types/debug')
- release.setRoot('build-types/release')
- }
-
- lintOptions {
- abortOnError false
- }
- compileOptions {
- sourceCompatibility JavaVersion.VERSION_1_8
- targetCompatibility JavaVersion.VERSION_1_8
- }
-}
diff --git a/build.xml b/build.xml
deleted file mode 100644
index a87e590d..00000000
--- a/build.xml
+++ /dev/null
@@ -1,92 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/custom_rules.xml b/custom_rules.xml
deleted file mode 100644
index 64ac6702..00000000
--- a/custom_rules.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
- Copying jar file for binary distribution
-
-
-
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 267dfc1e..53f7eaf3 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip
\ No newline at end of file
+distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip
\ No newline at end of file
diff --git a/libs/commons-httpclient-3.1.jar b/libs/commons-httpclient-3.1.jar
deleted file mode 100644
index 7c59774a..00000000
Binary files a/libs/commons-httpclient-3.1.jar and /dev/null differ
diff --git a/libs/jackrabbit-webdav-2.12.4.jar b/libs/jackrabbit-webdav-2.12.4.jar
deleted file mode 100644
index 95a44533..00000000
Binary files a/libs/jackrabbit-webdav-2.12.4.jar and /dev/null differ
diff --git a/libs/slf4j-api-1.7.5.jar b/libs/slf4j-api-1.7.5.jar
deleted file mode 100644
index 8f004d39..00000000
Binary files a/libs/slf4j-api-1.7.5.jar and /dev/null differ
diff --git a/owncloudComLibrary/build.gradle b/owncloudComLibrary/build.gradle
new file mode 100644
index 00000000..146f276f
--- /dev/null
+++ b/owncloudComLibrary/build.gradle
@@ -0,0 +1,26 @@
+apply plugin: 'com.android.library'
+
+dependencies {
+ api 'com.squareup.okhttp3:okhttp:3.12.0'
+ implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.11"
+ implementation 'com.gitlab.ownclouders:dav4android:oc_support'
+}
+
+android {
+ compileSdkVersion 28
+
+ defaultConfig {
+ minSdkVersion 19
+ targetSdkVersion 28
+ }
+
+ lintOptions {
+ abortOnError false
+ ignoreWarnings true
+ }
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+}
diff --git a/AndroidManifest.xml b/owncloudComLibrary/src/main/AndroidManifest.xml
similarity index 82%
rename from AndroidManifest.xml
rename to owncloudComLibrary/src/main/AndroidManifest.xml
index 81b9494e..fce28b17 100644
--- a/AndroidManifest.xml
+++ b/owncloudComLibrary/src/main/AndroidManifest.xml
@@ -22,20 +22,20 @@
THE SOFTWARE.
-->
-
-
+ android:versionName="1.0">
+
-
-
+
diff --git a/src/com/owncloud/android/lib/common/DynamicSessionManager.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/DynamicSessionManager.java
similarity index 88%
rename from src/com/owncloud/android/lib/common/DynamicSessionManager.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/DynamicSessionManager.java
index 46b477c3..04b1f69a 100644
--- a/src/com/owncloud/android/lib/common/DynamicSessionManager.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/DynamicSessionManager.java
@@ -11,7 +11,7 @@ import java.io.IOException;
/**
* Dynamic implementation of {@link OwnCloudClientManager}.
- *
+ *
* Wraps instances of {@link SingleSessionManager} and {@link SimpleFactoryManager} and delegates on one
* or the other depending on the known version of the server corresponding to the {@link OwnCloudAccount}
*
@@ -26,17 +26,17 @@ public class DynamicSessionManager implements OwnCloudClientManager {
@Override
public OwnCloudClient getClientFor(OwnCloudAccount account, Context context)
- throws AccountUtils.AccountNotFoundException,
- OperationCanceledException, AuthenticatorException, IOException {
+ throws AccountUtils.AccountNotFoundException,
+ OperationCanceledException, AuthenticatorException, IOException {
OwnCloudVersion ownCloudVersion = null;
if (account.getSavedAccount() != null) {
ownCloudVersion = AccountUtils.getServerVersionForAccount(
- account.getSavedAccount(), context
+ account.getSavedAccount(), context
);
}
- if (ownCloudVersion != null && ownCloudVersion.isSessionMonitoringSupported()) {
+ if (ownCloudVersion != null && ownCloudVersion.isSessionMonitoringSupported()) {
return mSingleSessionManager.getClientFor(account, context);
} else {
return mSimpleFactoryManager.getClientFor(account, context);
diff --git a/src/com/owncloud/android/lib/common/OwnCloudAccount.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/OwnCloudAccount.java
similarity index 92%
rename from src/com/owncloud/android/lib/common/OwnCloudAccount.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/OwnCloudAccount.java
index b3ebcd59..87e1e150 100644
--- a/src/com/owncloud/android/lib/common/OwnCloudAccount.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/OwnCloudAccount.java
@@ -24,14 +24,6 @@
package com.owncloud.android.lib.common;
-
-import java.io.IOException;
-
-import com.owncloud.android.lib.common.accounts.AccountUtils;
-import com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundException;
-import com.owncloud.android.lib.common.authentication.OwnCloudCredentials;
-import com.owncloud.android.lib.common.authentication.OwnCloudCredentialsFactory;
-
import android.accounts.Account;
import android.accounts.AccountManager;
import android.accounts.AuthenticatorException;
@@ -39,27 +31,33 @@ import android.accounts.OperationCanceledException;
import android.content.Context;
import android.net.Uri;
+import com.owncloud.android.lib.common.accounts.AccountUtils;
+import com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundException;
+import com.owncloud.android.lib.common.authentication.OwnCloudCredentials;
+import com.owncloud.android.lib.common.authentication.OwnCloudCredentialsFactory;
+
+import java.io.IOException;
+
/**
* OwnCloud Account
- *
+ *
* @author David A. Velasco
*/
public class OwnCloudAccount {
- private Uri mBaseUri;
-
+ private Uri mBaseUri;
+
private OwnCloudCredentials mCredentials;
private String mDisplayName;
-
+
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 {
@@ -77,19 +75,18 @@ public class OwnCloudAccount {
AccountManager ama = AccountManager.get(context.getApplicationContext());
String baseUrl = ama.getUserData(mSavedAccount, AccountUtils.Constants.KEY_OC_BASE_URL);
- if (baseUrl == null ) {
+ if (baseUrl == null) {
throw new AccountNotFoundException(mSavedAccount, "Account not found", null);
}
mBaseUri = Uri.parse(AccountUtils.getBaseUrlForAccount(context, mSavedAccount));
mDisplayName = ama.getUserData(mSavedAccount, AccountUtils.Constants.KEY_DISPLAY_NAME);
}
-
/**
* 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.
+ * @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) {
@@ -99,14 +96,13 @@ public class OwnCloudAccount {
mSavedAccountName = null;
mBaseUri = baseUri;
mCredentials = credentials != null ?
- credentials : OwnCloudCredentialsFactory.getAnonymousCredentials();
+ credentials : OwnCloudCredentialsFactory.getAnonymousCredentials();
String username = mCredentials.getUsername();
if (username != null) {
mSavedAccountName = AccountUtils.buildAccountName(mBaseUri, username);
}
}
-
/**
* Method for deferred load of account attributes from AccountManager
*
@@ -131,13 +127,13 @@ public class OwnCloudAccount {
public Uri getBaseUri() {
return mBaseUri;
}
-
+
public OwnCloudCredentials getCredentials() {
return mCredentials;
}
-
+
public String getName() {
- return mSavedAccountName;
+ return mSavedAccountName;
}
public Account getSavedAccount() {
diff --git a/src/com/owncloud/android/lib/common/OwnCloudClient.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/OwnCloudClient.java
similarity index 93%
rename from src/com/owncloud/android/lib/common/OwnCloudClient.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/OwnCloudClient.java
index 6dd69f0e..e0a48f19 100644
--- a/src/com/owncloud/android/lib/common/OwnCloudClient.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/OwnCloudClient.java
@@ -1,5 +1,5 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
+ * Copyright (C) 2019 ownCloud GmbH.
* Copyright (C) 2012 Bartek Przybylski
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -29,6 +29,7 @@ import android.accounts.AccountManager;
import android.accounts.AccountsException;
import android.net.Uri;
+import at.bitfire.dav4android.exception.HttpException;
import com.owncloud.android.lib.common.accounts.AccountUtils;
import com.owncloud.android.lib.common.authentication.OwnCloudCredentials;
import com.owncloud.android.lib.common.authentication.OwnCloudCredentialsFactory;
@@ -40,16 +41,14 @@ import com.owncloud.android.lib.common.network.RedirectionPath;
import com.owncloud.android.lib.common.utils.Log_OC;
import com.owncloud.android.lib.common.utils.RandomUtils;
import com.owncloud.android.lib.resources.status.OwnCloudVersion;
+import okhttp3.Cookie;
+import okhttp3.Headers;
+import okhttp3.HttpUrl;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
-import at.bitfire.dav4android.exception.HttpException;
-import okhttp3.Cookie;
-import okhttp3.Headers;
-import okhttp3.HttpUrl;
-
import static com.owncloud.android.lib.common.http.HttpConstants.OC_X_REQUEST_ID;
public class OwnCloudClient extends HttpClient {
@@ -62,12 +61,11 @@ public class OwnCloudClient extends HttpClient {
private static final String TAG = OwnCloudClient.class.getSimpleName();
private static final int MAX_REDIRECTIONS_COUNT = 3;
private static final int MAX_REPEAT_COUNT_WITH_FRESH_CREDENTIALS = 1;
- private static final String PARAM_PROTOCOL_VERSION = "http.protocol.version";
private static byte[] sExhaustBuffer = new byte[1024];
private static int sIntanceCounter = 0;
private OwnCloudCredentials mCredentials = null;
- private int mInstanceNumber = 0;
+ private int mInstanceNumber;
private Uri mBaseUri;
private OwnCloudVersion mVersion = null;
private OwnCloudAccount mAccount;
@@ -94,15 +92,6 @@ public class OwnCloudClient extends HttpClient {
clearCookies();
}
- public void setCredentials(OwnCloudCredentials credentials) {
- if (credentials != null) {
- mCredentials = credentials;
- mCredentials.applyTo(this);
- } else {
- clearCredentials();
- }
- }
-
public void clearCredentials() {
if (!(mCredentials instanceof OwnCloudAnonymousCredentials)) {
mCredentials = OwnCloudCredentialsFactory.getAnonymousCredentials();
@@ -114,7 +103,7 @@ public class OwnCloudClient extends HttpClient {
mCredentials.applyTo(this);
}
- public int executeHttpMethod (HttpBaseMethod method) throws Exception {
+ public int executeHttpMethod(HttpBaseMethod method) throws Exception {
boolean repeatWithFreshCredentials;
int repeatCounter = 0;
int status;
@@ -125,7 +114,7 @@ public class OwnCloudClient extends HttpClient {
status = method.execute();
checkFirstRedirection(method);
- if(mFollowRedirects && !isIdPRedirection()) {
+ if (mFollowRedirects && !isIdPRedirection()) {
status = followRedirection(method).getLastStatus();
}
@@ -140,12 +129,12 @@ public class OwnCloudClient extends HttpClient {
private void checkFirstRedirection(HttpBaseMethod method) {
final String location = method.getResponseHeader(HttpConstants.LOCATION_HEADER_LOWER);
- if(location != null && !location.isEmpty()) {
+ if (location != null && !location.isEmpty()) {
mRedirectedLocation = location;
}
}
- private int executeRedirectedHttpMethod (HttpBaseMethod method) throws Exception {
+ private int executeRedirectedHttpMethod(HttpBaseMethod method) throws Exception {
boolean repeatWithFreshCredentials;
int repeatCounter = 0;
int status;
@@ -217,9 +206,9 @@ public class OwnCloudClient extends HttpClient {
try {
status = executeRedirectedHttpMethod(method);
} catch (HttpException e) {
- if(e.getMessage().contains(Integer.toString(HttpConstants.HTTP_MOVED_TEMPORARILY))) {
+ if (e.getMessage().contains(Integer.toString(HttpConstants.HTTP_MOVED_TEMPORARILY))) {
status = HttpConstants.HTTP_MOVED_TEMPORARILY;
- } else {
+ } else {
throw e;
}
}
@@ -242,7 +231,9 @@ public class OwnCloudClient extends HttpClient {
public void exhaustResponse(InputStream responseBodyAsStream) {
if (responseBodyAsStream != null) {
try {
- while (responseBodyAsStream.read(sExhaustBuffer) >= 0) ;
+ while (responseBodyAsStream.read(sExhaustBuffer) >= 0) {
+ ;
+ }
responseBodyAsStream.close();
} catch (IOException io) {
@@ -252,7 +243,7 @@ public class OwnCloudClient extends HttpClient {
}
}
- public Uri getBaseFilesWebDavUri(){
+ public Uri getBaseFilesWebDavUri() {
return Uri.parse(mBaseUri + WEBDAV_FILES_PATH_4_0);
}
@@ -260,7 +251,7 @@ public class OwnCloudClient extends HttpClient {
return mCredentials instanceof OwnCloudAnonymousCredentials
? Uri.parse(mBaseUri + WEBDAV_FILES_PATH_4_0)
: Uri.parse(mBaseUri + WEBDAV_FILES_PATH_4_0 + AccountUtils.getUserId(
- mAccount.getSavedAccount(), getContext()
+ mAccount.getSavedAccount(), getContext()
)
);
}
@@ -269,14 +260,18 @@ public class OwnCloudClient extends HttpClient {
return mCredentials instanceof OwnCloudAnonymousCredentials
? Uri.parse(mBaseUri + WEBDAV_UPLOADS_PATH_4_0)
: Uri.parse(mBaseUri + WEBDAV_UPLOADS_PATH_4_0 + AccountUtils.getUserId(
- mAccount.getSavedAccount(), getContext()
+ mAccount.getSavedAccount(), getContext()
)
);
}
+ public Uri getBaseUri() {
+ return mBaseUri;
+ }
+
/**
* Sets the root URI to the ownCloud server.
- *
+ *
* Use with care.
*
* @param uri
@@ -288,14 +283,19 @@ public class OwnCloudClient extends HttpClient {
mBaseUri = uri;
}
- public Uri getBaseUri() {
- return mBaseUri;
- }
-
public final OwnCloudCredentials getCredentials() {
return mCredentials;
}
+ public void setCredentials(OwnCloudCredentials credentials) {
+ if (credentials != null) {
+ mCredentials = credentials;
+ mCredentials.applyTo(this);
+ } else {
+ clearCredentials();
+ }
+ }
+
private void logCookie(Cookie cookie) {
Log_OC.d(TAG, "Cookie name: " + cookie.name());
Log_OC.d(TAG, " value: " + cookie.value());
@@ -329,16 +329,16 @@ public class OwnCloudClient extends HttpClient {
}
public String getCookiesString() {
- String cookiesString = "";
+ StringBuilder cookiesString = new StringBuilder();
List cookieList = getCookiesFromUrl(HttpUrl.parse(mBaseUri.toString()));
if (cookieList != null) {
for (Cookie cookie : cookieList) {
- cookiesString += cookie.toString() + ";";
+ cookiesString.append(cookie.toString()).append(";");
}
}
- return cookiesString;
+ return cookiesString.toString();
}
public void setCookiesForCurrentAccount(List cookies) {
@@ -348,27 +348,27 @@ public class OwnCloudClient extends HttpClient {
);
}
- public void setOwnCloudVersion(OwnCloudVersion version) {
- mVersion = version;
- }
-
public OwnCloudVersion getOwnCloudVersion() {
return mVersion;
}
- public void setAccount(OwnCloudAccount account) {
- this.mAccount = account;
+ public void setOwnCloudVersion(OwnCloudVersion version) {
+ mVersion = version;
}
public OwnCloudAccount getAccount() {
return mAccount;
}
+ public void setAccount(OwnCloudAccount account) {
+ this.mAccount = account;
+ }
+
/**
* Checks the status code of an execution and decides if should be repeated with fresh credentials.
- *
+ *
* Invalidates current credentials if the request failed as anauthorized.
- *
+ *
* Refresh current credentials if possible, and marks a retry.
*
* @param status
@@ -416,10 +416,9 @@ public class OwnCloudClient extends HttpClient {
* Determines if credentials should be invalidated according the to the HTTPS status
* of a network request just performed.
*
- * @param httpStatusCode Result of the last request ran with the 'credentials' belows.
-
- * @return 'True' if credentials should and might be invalidated, 'false' if shouldn't or
- * cannot be invalidated with the given arguments.
+ * @param httpStatusCode Result of the last request ran with the 'credentials' belows.
+ * @return 'True' if credentials should and might be invalidated, 'false' if shouldn't or
+ * cannot be invalidated with the given arguments.
*/
private boolean shouldInvalidateAccountCredentials(int httpStatusCode) {
@@ -437,10 +436,10 @@ public class OwnCloudClient extends HttpClient {
/**
* Invalidates credentials stored for the given account in the system {@link AccountManager} and in
* current {@link OwnCloudClientManagerFactory#getDefaultSingleton()} instance.
- *
+ *
* {@link #shouldInvalidateAccountCredentials(int)} should be called first.
*
- * @return 'True' if invalidation was successful, 'false' otherwise.
+ * @return 'True' if invalidation was successful, 'false' otherwise.
*/
private boolean invalidateAccountCredentials() {
AccountManager am = AccountManager.get(getContext());
@@ -462,6 +461,7 @@ public class OwnCloudClient extends HttpClient {
/**
* Check if the redirection is to an identity provider such as SAML or wayf
+ *
* @return true if the redirection location includes SAML or wayf, false otherwise
*/
private boolean isIdPRedirection() {
diff --git a/src/com/owncloud/android/lib/common/OwnCloudClientFactory.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/OwnCloudClientFactory.java
similarity index 59%
rename from src/com/owncloud/android/lib/common/OwnCloudClientFactory.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/OwnCloudClientFactory.java
index 7fd4a799..041f72fa 100644
--- a/src/com/owncloud/android/lib/common/OwnCloudClientFactory.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/OwnCloudClientFactory.java
@@ -1,22 +1,22 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
- *
+ * Copyright (C) 2019 ownCloud GmbH.
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
@@ -43,29 +43,28 @@ import com.owncloud.android.lib.resources.status.OwnCloudVersion;
import java.io.IOException;
public class OwnCloudClientFactory {
-
+
final private static String TAG = OwnCloudClientFactory.class.getSimpleName();
/**
* Creates a OwnCloudClient setup for an ownCloud account
- *
+ *
* Do not call this method from the main thread.
*
- * @param account The ownCloud account
- * @param appContext Android application context
- * @param currentActivity Caller {@link Activity}
- * @return A OwnCloudClient object ready to be used
- * @throws AuthenticatorException If the authenticator failed to get the authorization
- * token for the account.
- * @throws OperationCanceledException If the authenticator operation was cancelled while
- * getting the authorization token for the account.
- * @throws IOException If there was some I/O error while getting the
- * authorization token for the account.
- * @throws AccountNotFoundException If 'account' is unknown for the AccountManager
- *
+ * @param account The ownCloud account
+ * @param appContext Android application context
+ * @param currentActivity Caller {@link Activity}
+ * @return A OwnCloudClient object ready to be used
+ * @throws AuthenticatorException If the authenticator failed to get the authorization
+ * token for the account.
+ * @throws OperationCanceledException If the authenticator operation was cancelled while
+ * getting the authorization token for the account.
+ * @throws IOException If there was some I/O error while getting the
+ * authorization token for the account.
+ * @throws AccountNotFoundException If 'account' is unknown for the AccountManager
*/
- public static OwnCloudClient createOwnCloudClient (Account account, Context appContext,
- Activity currentActivity)
+ public static OwnCloudClient createOwnCloudClient(Account account, Context appContext,
+ Activity currentActivity)
throws OperationCanceledException, AuthenticatorException, IOException,
AccountNotFoundException {
Uri baseUri = Uri.parse(AccountUtils.getBaseUrlForAccount(appContext, account));
@@ -79,57 +78,60 @@ public class OwnCloudClientFactory {
String username = AccountUtils.getUsernameForAccount(account);
if (isOauth2) { // TODO avoid a call to getUserData here
- AccountManagerFuture future = am.getAuthToken(
- account,
- AccountTypeUtils.getAuthTokenTypeAccessToken(account.type),
- null,
- currentActivity,
- null,
- null);
+ AccountManagerFuture future = am.getAuthToken(
+ account,
+ AccountTypeUtils.getAuthTokenTypeAccessToken(account.type),
+ null,
+ currentActivity,
+ null,
+ null);
Bundle result = future.getResult();
String accessToken = result.getString(AccountManager.KEY_AUTHTOKEN);
- if (accessToken == null) throw new AuthenticatorException("WTF!");
+ if (accessToken == null) {
+ throw new AuthenticatorException("WTF!");
+ }
client.setCredentials(
- OwnCloudCredentialsFactory.newBearerCredentials(username, accessToken)
+ OwnCloudCredentialsFactory.newBearerCredentials(username, accessToken)
);
} else if (isSamlSso) { // TODO avoid a call to getUserData here
- AccountManagerFuture future = am.getAuthToken(
- account,
- AccountTypeUtils.getAuthTokenTypeSamlSessionCookie(account.type),
- null,
- currentActivity,
- null,
- null);
+ AccountManagerFuture future = am.getAuthToken(
+ account,
+ AccountTypeUtils.getAuthTokenTypeSamlSessionCookie(account.type),
+ null,
+ currentActivity,
+ null,
+ null);
Bundle result = future.getResult();
String accessToken = result.getString(AccountManager.KEY_AUTHTOKEN);
- if (accessToken == null) throw new AuthenticatorException("WTF!");
+ if (accessToken == null) {
+ throw new AuthenticatorException("WTF!");
+ }
client.setCredentials(
- OwnCloudCredentialsFactory.newSamlSsoCredentials(username, accessToken)
+ OwnCloudCredentialsFactory.newSamlSsoCredentials(username, accessToken)
);
-
} else {
- AccountManagerFuture future = am.getAuthToken(
- account,
- AccountTypeUtils.getAuthTokenTypePass(account.type),
- null,
- currentActivity,
- null,
- null
+ AccountManagerFuture future = am.getAuthToken(
+ account,
+ AccountTypeUtils.getAuthTokenTypePass(account.type),
+ null,
+ currentActivity,
+ null,
+ null
);
Bundle result = future.getResult();
String password = result.getString(AccountManager.KEY_AUTHTOKEN);
OwnCloudVersion version = AccountUtils.getServerVersionForAccount(account, appContext);
client.setCredentials(
- OwnCloudCredentialsFactory.newBasicCredentials(
- username,
- password,
- (version != null && version.isPreemptiveAuthenticationPreferred())
- )
+ OwnCloudCredentialsFactory.newBasicCredentials(
+ username,
+ password,
+ (version != null && version.isPreemptiveAuthenticationPreferred())
+ )
);
}
@@ -142,10 +144,10 @@ public class OwnCloudClientFactory {
/**
* Creates a OwnCloudClient to access a URL and sets the desired parameters for ownCloud
* client connections.
- *
- * @param uri URL to the ownCloud server; BASE ENTRY POINT, not WebDavPATH
- * @param context Android context where the OwnCloudClient is being created.
- * @return A OwnCloudClient object ready to be used
+ *
+ * @param uri URL to the ownCloud server; BASE ENTRY POINT, not WebDavPATH
+ * @param context Android context where the OwnCloudClient is being created.
+ * @return A OwnCloudClient object ready to be used
*/
public static OwnCloudClient createOwnCloudClient(Uri uri, Context context,
boolean followRedirects) {
@@ -154,7 +156,7 @@ public class OwnCloudClientFactory {
client.setFollowRedirects(followRedirects);
client.setContext(context);
-
+
return client;
}
}
\ No newline at end of file
diff --git a/src/com/owncloud/android/lib/common/OwnCloudClientManager.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/OwnCloudClientManager.java
similarity index 79%
rename from src/com/owncloud/android/lib/common/OwnCloudClientManager.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/OwnCloudClientManager.java
index fbaebc06..c2d7e6b3 100644
--- a/src/com/owncloud/android/lib/common/OwnCloudClientManager.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/OwnCloudClientManager.java
@@ -1,22 +1,22 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
- *
+ * Copyright (C) 2019 ownCloud GmbH.
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
@@ -24,17 +24,17 @@
package com.owncloud.android.lib.common;
-import java.io.IOException;
-
import android.accounts.AuthenticatorException;
import android.accounts.OperationCanceledException;
import android.content.Context;
import com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundException;
+import java.io.IOException;
+
/**
- * Manager to create and reuse OwnCloudClient instances to access remote OC servers.
- *
+ * Manager to create and reuse OwnCloudClient instances to access remote OC servers.
+ *
* @author David A. Velasco
* @author masensio
* @author Christian Schabesberger
@@ -42,13 +42,13 @@ import com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundExce
public interface OwnCloudClientManager {
- OwnCloudClient getClientFor(OwnCloudAccount account, Context context) throws AccountNotFoundException,
- OperationCanceledException, AuthenticatorException,
+ OwnCloudClient getClientFor(OwnCloudAccount account, Context context) throws AccountNotFoundException,
+ OperationCanceledException, AuthenticatorException,
IOException;
-
+
OwnCloudClient removeClientFor(OwnCloudAccount account);
void saveAllClients(Context context, String accountType)
- throws AccountNotFoundException, AuthenticatorException,
- IOException, OperationCanceledException;
+ throws AccountNotFoundException, AuthenticatorException,
+ IOException, OperationCanceledException;
}
\ No newline at end of file
diff --git a/src/com/owncloud/android/lib/common/OwnCloudClientManagerFactory.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/OwnCloudClientManagerFactory.java
similarity index 96%
rename from src/com/owncloud/android/lib/common/OwnCloudClientManagerFactory.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/OwnCloudClientManagerFactory.java
index 4fc6ea65..7b1b0b5b 100644
--- a/src/com/owncloud/android/lib/common/OwnCloudClientManagerFactory.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/OwnCloudClientManagerFactory.java
@@ -25,16 +25,8 @@ package com.owncloud.android.lib.common;
public class OwnCloudClientManagerFactory {
- public static enum Policy {
- ALWAYS_NEW_CLIENT,
- SINGLE_SESSION_PER_ACCOUNT,
- SINGLE_SESSION_PER_ACCOUNT_IF_SERVER_SUPPORTS_SERVER_MONITORING
- }
-
private static Policy sDefaultPolicy = Policy.ALWAYS_NEW_CLIENT;
-
private static OwnCloudClientManager sDefaultSingleton;
-
private static String sUserAgent;
public static OwnCloudClientManager newDefaultOwnCloudClientManager() {
@@ -78,26 +70,32 @@ public class OwnCloudClientManagerFactory {
sDefaultPolicy = policy;
}
- public static void setUserAgent(String userAgent) {
- sUserAgent = userAgent;
- }
-
public static String getUserAgent() {
return sUserAgent;
}
+ public static void setUserAgent(String userAgent) {
+ sUserAgent = userAgent;
+ }
+
private static boolean defaultSingletonMustBeUpdated(Policy policy) {
if (sDefaultSingleton == null) {
return false;
}
if (policy == Policy.ALWAYS_NEW_CLIENT &&
- !(sDefaultSingleton instanceof SimpleFactoryManager)) {
+ !(sDefaultSingleton instanceof SimpleFactoryManager)) {
return true;
}
if (policy == Policy.SINGLE_SESSION_PER_ACCOUNT &&
- !(sDefaultSingleton instanceof SingleSessionManager)) {
+ !(sDefaultSingleton instanceof SingleSessionManager)) {
return true;
}
return false;
}
+
+ public static enum Policy {
+ ALWAYS_NEW_CLIENT,
+ SINGLE_SESSION_PER_ACCOUNT,
+ SINGLE_SESSION_PER_ACCOUNT_IF_SERVER_SUPPORTS_SERVER_MONITORING
+ }
}
\ No newline at end of file
diff --git a/src/com/owncloud/android/lib/common/SimpleFactoryManager.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/SimpleFactoryManager.java
similarity index 84%
rename from src/com/owncloud/android/lib/common/SimpleFactoryManager.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/SimpleFactoryManager.java
index f7d9e983..46f722e9 100644
--- a/src/com/owncloud/android/lib/common/SimpleFactoryManager.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/SimpleFactoryManager.java
@@ -1,22 +1,22 @@
/* ownCloud Android Library is available under MIT license
* Copyright (C) 2016 ownCloud GmbH.
- *
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
@@ -24,13 +24,11 @@
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;
@@ -46,16 +44,16 @@ public class SimpleFactoryManager implements OwnCloudClientManager {
Log_OC.d(TAG, "getClientFor(OwnCloudAccount ... : ");
OwnCloudClient client = OwnCloudClientFactory.createOwnCloudClient(
- account.getBaseUri(),
- context.getApplicationContext(),
- true);
+ account.getBaseUri(),
+ context.getApplicationContext(),
+ true);
Log_OC.v(TAG, " new client {" +
- (account.getName() != null ?
- account.getName() :
- AccountUtils.buildAccountName(account.getBaseUri(), "")
+ (account.getName() != null ?
+ account.getName() :
+ AccountUtils.buildAccountName(account.getBaseUri(), "")
- ) + ", " + client.hashCode() + "}");
+ ) + ", " + client.hashCode() + "}");
if (account.getCredentials() == null) {
account.loadCredentials(context);
diff --git a/src/com/owncloud/android/lib/common/SingleSessionManager.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/SingleSessionManager.java
similarity index 92%
rename from src/com/owncloud/android/lib/common/SingleSessionManager.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/SingleSessionManager.java
index 99642813..128207a8 100644
--- a/src/com/owncloud/android/lib/common/SingleSessionManager.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/SingleSessionManager.java
@@ -1,22 +1,22 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
- *
+ * Copyright (C) 2019 ownCloud GmbH.
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
@@ -43,7 +43,7 @@ import java.util.concurrent.ConcurrentMap;
/**
* Implementation of {@link OwnCloudClientManager}
- *
+ *
* TODO check multithreading safety
*
* @author David A. Velasco
@@ -57,11 +57,10 @@ public class SingleSessionManager implements OwnCloudClientManager {
private static final String TAG = SingleSessionManager.class.getSimpleName();
private ConcurrentMap mClientsWithKnownUsername =
- new ConcurrentHashMap<>();
+ new ConcurrentHashMap<>();
private ConcurrentMap mClientsWithUnknownUsername =
- new ConcurrentHashMap<>();
-
+ new ConcurrentHashMap<>();
@Override
public OwnCloudClient getClientFor(OwnCloudAccount account, Context context) throws OperationCanceledException,
@@ -77,9 +76,9 @@ public class SingleSessionManager implements OwnCloudClientManager {
OwnCloudClient client = null;
String accountName = account.getName();
String sessionName = account.getCredentials() == null ? "" :
- AccountUtils.buildAccountName(
- account.getBaseUri(),
- account.getCredentials().getAuthToken());
+ AccountUtils.buildAccountName(
+ account.getBaseUri(),
+ account.getCredentials().getAuthToken());
if (accountName != null) {
client = mClientsWithKnownUsername.get(accountName);
@@ -110,9 +109,9 @@ public class SingleSessionManager implements OwnCloudClientManager {
if (client == null) {
// no client to reuse - create a new one
client = OwnCloudClientFactory.createOwnCloudClient(
- account.getBaseUri(),
- context.getApplicationContext(),
- true); // TODO remove dependency on OwnCloudClientFactory
+ account.getBaseUri(),
+ context.getApplicationContext(),
+ true); // TODO remove dependency on OwnCloudClientFactory
client.setAccount(account);
client.setContext(context);
client.setOwnCloudClientManager(this);
@@ -152,7 +151,6 @@ public class SingleSessionManager implements OwnCloudClientManager {
return client;
}
-
@Override
public OwnCloudClient removeClientFor(OwnCloudAccount account) {
if (Log.isLoggable(TAG, Log.DEBUG)) {
@@ -187,7 +185,6 @@ public class SingleSessionManager implements OwnCloudClientManager {
return null;
}
-
@Override
public void saveAllClients(Context context, String accountType) {
@@ -202,9 +199,9 @@ public class SingleSessionManager implements OwnCloudClientManager {
accountName = accountNames.next();
account = new Account(accountName, accountType);
AccountUtils.saveClient(
- mClientsWithKnownUsername.get(accountName),
- account,
- context);
+ mClientsWithKnownUsername.get(accountName),
+ account,
+ context);
}
if (Log.isLoggable(TAG, Log.DEBUG)) {
diff --git a/src/com/owncloud/android/lib/common/accounts/AccountTypeUtils.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/accounts/AccountTypeUtils.java
similarity index 84%
rename from src/com/owncloud/android/lib/common/accounts/AccountTypeUtils.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/accounts/AccountTypeUtils.java
index 43dc79a1..b5e67c82 100644
--- a/src/com/owncloud/android/lib/common/accounts/AccountTypeUtils.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/accounts/AccountTypeUtils.java
@@ -1,22 +1,22 @@
/* ownCloud Android Library is available under MIT license
* Copyright (C) 2016 ownCloud GmbH.
- *
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
@@ -33,17 +33,17 @@ public class AccountTypeUtils {
public static String getAuthTokenTypePass(String accountType) {
return accountType + ".password";
}
-
+
public static String getAuthTokenTypeAccessToken(String accountType) {
- return accountType + ".oauth2.access_token";
+ return accountType + ".oauth2.access_token";
}
-
+
public static String getAuthTokenTypeRefreshToken(String accountType) {
- return accountType + ".oauth2.refresh_token";
+ return accountType + ".oauth2.refresh_token";
}
-
+
public static String getAuthTokenTypeSamlSessionCookie(String accountType) {
- return accountType + ".saml.web_sso.session_cookie";
+ return accountType + ".saml.web_sso.session_cookie";
}
-
+
}
diff --git a/src/com/owncloud/android/lib/common/accounts/AccountUtils.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/accounts/AccountUtils.java
similarity index 85%
rename from src/com/owncloud/android/lib/common/accounts/AccountUtils.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/accounts/AccountUtils.java
index 72126285..4478330f 100644
--- a/src/com/owncloud/android/lib/common/accounts/AccountUtils.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/accounts/AccountUtils.java
@@ -1,23 +1,23 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
+ * Copyright (C) 2019 ownCloud GmbH.
* Copyright (C) 2012 Bartek Przybylski
- *
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
@@ -39,13 +39,12 @@ import com.owncloud.android.lib.common.authentication.OwnCloudCredentialsFactory
import com.owncloud.android.lib.common.utils.Log_OC;
import com.owncloud.android.lib.resources.files.FileUtils;
import com.owncloud.android.lib.resources.status.OwnCloudVersion;
+import okhttp3.Cookie;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
-import okhttp3.Cookie;
-
public class AccountUtils {
private static final String TAG = AccountUtils.class.getSimpleName();
@@ -53,13 +52,13 @@ public class AccountUtils {
/**
* Constructs full url to host and webdav resource basing on host version
*
- * @param context Valid Android {@link Context}, needed to access the {@link AccountManager}
- * @param account A stored ownCloud {@link Account}
- * @return Full URL to WebDAV endpoint in the server corresponding to 'account'.
+ * @param context Valid Android {@link Context}, needed to access the {@link AccountManager}
+ * @param account A stored ownCloud {@link Account}
+ * @return Full URL to WebDAV endpoint in the server corresponding to 'account'.
* @throws AccountNotFoundException When 'account' is unknown for the AccountManager
*/
public static String getWebDavUrlForAccount(Context context, Account account)
- throws AccountNotFoundException {
+ throws AccountNotFoundException {
String webDavUrlForAccount = "";
try {
@@ -80,19 +79,20 @@ public class AccountUtils {
/**
* Extracts url server from the account
*
- * @param context Valid Android {@link Context}, needed to access the {@link AccountManager}
- * @param account A stored ownCloud {@link Account}
- * @return Full URL to the server corresponding to 'account', ending in the base path
- * common to all API endpoints.
+ * @param context Valid Android {@link Context}, needed to access the {@link AccountManager}
+ * @param account A stored ownCloud {@link Account}
+ * @return Full URL to the server corresponding to 'account', ending in the base path
+ * common to all API endpoints.
* @throws AccountNotFoundException When 'account' is unknown for the AccountManager
*/
public static String getBaseUrlForAccount(Context context, Account account)
- throws AccountNotFoundException {
+ throws AccountNotFoundException {
AccountManager ama = AccountManager.get(context.getApplicationContext());
String baseurl = ama.getUserData(account, Constants.KEY_OC_BASE_URL);
- if (baseurl == null)
+ if (baseurl == null) {
throw new AccountNotFoundException(account, "Account not found", null);
+ }
return baseurl;
}
@@ -116,8 +116,8 @@ public class AccountUtils {
/**
* Get the stored server version corresponding to an OC account.
*
- * @param account An OC account
- * @param context Application context
+ * @param account An OC account
+ * @param context Application context
* @return Version of the OC server, according to last check
*/
public static OwnCloudVersion getServerVersionForAccount(Account account, Context context) {
@@ -140,7 +140,7 @@ public class AccountUtils {
* @throws OperationCanceledException
*/
public static OwnCloudCredentials getCredentialsForAccount(Context context, Account account)
- throws OperationCanceledException, AuthenticatorException, IOException {
+ throws OperationCanceledException, AuthenticatorException, IOException {
OwnCloudCredentials credentials;
AccountManager am = AccountManager.get(context);
@@ -158,30 +158,30 @@ public class AccountUtils {
if (isOauth2) {
String accessToken = am.blockingGetAuthToken(
- account,
- AccountTypeUtils.getAuthTokenTypeAccessToken(account.type),
- false);
+ account,
+ AccountTypeUtils.getAuthTokenTypeAccessToken(account.type),
+ false);
credentials = OwnCloudCredentialsFactory.newBearerCredentials(username, accessToken);
} else if (isSamlSso) {
String accessToken = am.blockingGetAuthToken(
- account,
- AccountTypeUtils.getAuthTokenTypeSamlSessionCookie(account.type),
- false);
+ account,
+ AccountTypeUtils.getAuthTokenTypeSamlSessionCookie(account.type),
+ false);
credentials = OwnCloudCredentialsFactory.newSamlSsoCredentials(username, accessToken);
} else {
String password = am.blockingGetAuthToken(
- account,
- AccountTypeUtils.getAuthTokenTypePass(account.type),
- false);
+ account,
+ AccountTypeUtils.getAuthTokenTypePass(account.type),
+ false);
credentials = OwnCloudCredentialsFactory.newBasicCredentials(
- username,
- password,
- version.isPreemptiveAuthenticationPreferred()
+ username,
+ password,
+ version.isPreemptiveAuthenticationPreferred()
);
}
@@ -190,8 +190,9 @@ public class AccountUtils {
/**
* Get the user id corresponding to an OC account.
+ *
* @param account ownCloud account
- * @return user id
+ * @return user id
*/
public static String getUserId(Account account, Context context) {
AccountManager accountMgr = AccountManager.get(context);
@@ -232,7 +233,7 @@ public class AccountUtils {
String cookiesString = client.getCookiesString();
if (!"".equals(cookiesString)) {
ac.setUserData(savedAccount, Constants.KEY_COOKIES, cookiesString);
- Log_OC.d(TAG, "Saving Cookies: "+ cookiesString );
+ Log_OC.d(TAG, "Saving Cookies: " + cookiesString);
}
}
}
@@ -240,9 +241,9 @@ public class AccountUtils {
/**
* Restore the client cookies persisted in an account stored in the system AccountManager.
*
- * @param account Stored account.
- * @param client Client to restore cookies in.
- * @param context Android context used to access the system AccountManager.
+ * @param account Stored account.
+ * @param client Client to restore cookies in.
+ * @param context Android context used to access the system AccountManager.
*/
public static void restoreCookies(Account account, OwnCloudClient client, Context context) {
if (account == null) {
@@ -260,10 +261,12 @@ public class AccountUtils {
if (cookiesString != null) {
String[] rawCookies = cookiesString.split(";");
List cookieList = new ArrayList<>(rawCookies.length);
- for(String rawCookie : rawCookies) {
+ for (String rawCookie : rawCookies) {
rawCookie = rawCookie.replace(" ", "");
final int equalPos = rawCookie.indexOf('=');
- if (equalPos == -1) continue;
+ if (equalPos == -1) {
+ continue;
+ }
cookieList.add(new Cookie.Builder()
.name(rawCookie.substring(0, equalPos))
.value(rawCookie.substring(equalPos + 1))
@@ -302,7 +305,7 @@ public class AccountUtils {
public static class Constants {
/**
* Version should be 3 numbers separated by dot so it can be parsed by
- * {@link com.owncloud.android.lib.resources.status.OwnCloudVersion}
+ * {@link OwnCloudVersion}
*/
public static final String KEY_OC_VERSION = "oc_version";
/**
diff --git a/src/com/owncloud/android/lib/common/authentication/OwnCloudBasicCredentials.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/OwnCloudBasicCredentials.java
similarity index 98%
rename from src/com/owncloud/android/lib/common/authentication/OwnCloudBasicCredentials.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/OwnCloudBasicCredentials.java
index ecd2a0c4..5a83cf63 100644
--- a/src/com/owncloud/android/lib/common/authentication/OwnCloudBasicCredentials.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/OwnCloudBasicCredentials.java
@@ -1,5 +1,5 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
+ * Copyright (C) 2019 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -26,7 +26,6 @@ package com.owncloud.android.lib.common.authentication;
import com.owncloud.android.lib.common.OwnCloudClient;
import com.owncloud.android.lib.common.http.HttpClient;
import com.owncloud.android.lib.common.http.HttpConstants;
-
import okhttp3.Credentials;
public class OwnCloudBasicCredentials implements OwnCloudCredentials {
diff --git a/src/com/owncloud/android/lib/common/authentication/OwnCloudBearerCredentials.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/OwnCloudBearerCredentials.java
similarity index 98%
rename from src/com/owncloud/android/lib/common/authentication/OwnCloudBearerCredentials.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/OwnCloudBearerCredentials.java
index a53712d6..573307a0 100644
--- a/src/com/owncloud/android/lib/common/authentication/OwnCloudBearerCredentials.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/OwnCloudBearerCredentials.java
@@ -1,5 +1,5 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
+ * Copyright (C) 2019 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/src/com/owncloud/android/lib/common/authentication/OwnCloudCredentials.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/OwnCloudCredentials.java
similarity index 100%
rename from src/com/owncloud/android/lib/common/authentication/OwnCloudCredentials.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/OwnCloudCredentials.java
diff --git a/src/com/owncloud/android/lib/common/authentication/OwnCloudCredentialsFactory.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/OwnCloudCredentialsFactory.java
similarity index 96%
rename from src/com/owncloud/android/lib/common/authentication/OwnCloudCredentialsFactory.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/OwnCloudCredentialsFactory.java
index a7f2ff80..5ac44517 100644
--- a/src/com/owncloud/android/lib/common/authentication/OwnCloudCredentialsFactory.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/OwnCloudCredentialsFactory.java
@@ -1,5 +1,5 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
+ * Copyright (C) 2019 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -39,7 +39,7 @@ public class OwnCloudCredentialsFactory {
}
public static OwnCloudCredentials newBasicCredentials(
- String username, String password, boolean preemptiveMode
+ String username, String password, boolean preemptiveMode
) {
return new OwnCloudBasicCredentials(username, password, preemptiveMode);
}
diff --git a/src/com/owncloud/android/lib/common/authentication/OwnCloudSamlSsoCredentials.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/OwnCloudSamlSsoCredentials.java
similarity index 98%
rename from src/com/owncloud/android/lib/common/authentication/OwnCloudSamlSsoCredentials.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/OwnCloudSamlSsoCredentials.java
index a01e05da..40f77bb3 100644
--- a/src/com/owncloud/android/lib/common/authentication/OwnCloudSamlSsoCredentials.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/OwnCloudSamlSsoCredentials.java
@@ -1,5 +1,5 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
+ * Copyright (C) 2019 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/src/com/owncloud/android/lib/common/authentication/oauth/BearerCredentials.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/BearerCredentials.java
similarity index 82%
rename from src/com/owncloud/android/lib/common/authentication/oauth/BearerCredentials.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/BearerCredentials.java
index 6d82bdb3..ffed3a03 100644
--- a/src/com/owncloud/android/lib/common/authentication/oauth/BearerCredentials.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/BearerCredentials.java
@@ -1,22 +1,22 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
- *
+ * Copyright (C) 2019 ownCloud GmbH.
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
@@ -32,14 +32,13 @@ public class BearerCredentials {
public static final int HASH_SEED = 17;
public static final int HASH_OFFSET = 37;
-
+
private String mAccessToken;
-
-
+
/**
* The constructor with the bearer token
*
- * @param token The bearer token
+ * @param token The bearer token
*/
public BearerCredentials(String token) {
/*if (token == null) {
@@ -48,21 +47,19 @@ public class BearerCredentials {
mAccessToken = (token == null) ? "" : token;
}
-
/**
* Returns the access token
*
- * @return The access token
+ * @return The access token
*/
public String getAccessToken() {
return mAccessToken;
}
-
/**
* Get this object string.
*
- * @return The access token
+ * @return The access token
*/
public String toString() {
return mAccessToken;
@@ -74,19 +71,22 @@ public class BearerCredentials {
* @return The hash code of the access token
*/
public int hashCode() {
- return HASH_SEED * HASH_OFFSET + mAccessToken.hashCode();
+ return HASH_SEED * HASH_OFFSET + mAccessToken.hashCode();
}
/**
* These credentials are assumed equal if accessToken is the same.
*
- * @param o The other object to compare with.
- *
- * @return 'True' if the object is equivalent.
+ * @param o The other object to compare with.
+ * @return 'True' if the object is equivalent.
*/
public boolean equals(Object o) {
- if (o == null) return false;
- if (this == o) return true;
+ if (o == null) {
+ return false;
+ }
+ if (this == o) {
+ return true;
+ }
if (this.getClass().equals(o.getClass())) {
BearerCredentials that = (BearerCredentials) o;
if (mAccessToken.equals(that.mAccessToken)) {
diff --git a/src/com/owncloud/android/lib/common/authentication/oauth/OAuth2ClientConfiguration.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/OAuth2ClientConfiguration.java
similarity index 100%
rename from src/com/owncloud/android/lib/common/authentication/oauth/OAuth2ClientConfiguration.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/OAuth2ClientConfiguration.java
diff --git a/src/com/owncloud/android/lib/common/authentication/oauth/OAuth2Constants.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/OAuth2Constants.java
similarity index 97%
rename from src/com/owncloud/android/lib/common/authentication/oauth/OAuth2Constants.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/OAuth2Constants.java
index ad48e5b1..97dbfc41 100644
--- a/src/com/owncloud/android/lib/common/authentication/oauth/OAuth2Constants.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/OAuth2Constants.java
@@ -26,34 +26,34 @@
package com.owncloud.android.lib.common.authentication.oauth;
-/**
+/**
* Constant values for OAuth 2 protocol.
- *
+ *
* Includes required and optional parameter NAMES used in the 'authorization code' grant type.
*/
public class OAuth2Constants {
-
+
/// Parameters to send to the Authorization Endpoint
public static final String KEY_RESPONSE_TYPE = "response_type";
public static final String KEY_REDIRECT_URI = "redirect_uri";
public static final String KEY_CLIENT_ID = "client_id";
public static final String KEY_SCOPE = "scope";
- public static final String KEY_STATE = "state";
-
+ public static final String KEY_STATE = "state";
+
/// Additional parameters to send to the Token Endpoint
public static final String KEY_GRANT_TYPE = "grant_type";
public static final String KEY_CODE = "code";
// Used to get the Access Token using Refresh Token
public static final String OAUTH2_REFRESH_TOKEN_GRANT_TYPE = "refresh_token";
-
+
/// Parameters received in an OK response from the Token Endpoint
public static final String KEY_ACCESS_TOKEN = "access_token";
public static final String KEY_TOKEN_TYPE = "token_type";
public static final String KEY_EXPIRES_IN = "expires_in";
public static final String KEY_REFRESH_TOKEN = "refresh_token";
-
+
/// Parameters in an ERROR response
public static final String KEY_ERROR = "error";
public static final String KEY_ERROR_DESCRIPTION = "error_description";
diff --git a/src/com/owncloud/android/lib/common/authentication/oauth/OAuth2GetAccessTokenOperation.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/OAuth2GetAccessTokenOperation.java
similarity index 91%
rename from src/com/owncloud/android/lib/common/authentication/oauth/OAuth2GetAccessTokenOperation.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/OAuth2GetAccessTokenOperation.java
index a3e5666f..c5273215 100644
--- a/src/com/owncloud/android/lib/common/authentication/oauth/OAuth2GetAccessTokenOperation.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/OAuth2GetAccessTokenOperation.java
@@ -2,7 +2,7 @@
*
* @author David A. Velasco
* @author Christian Schabesberger
- * Copyright (C) 2018 ownCloud GmbH.
+ * Copyright (C) 2019 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -29,42 +29,37 @@ package com.owncloud.android.lib.common.authentication.oauth;
import android.net.Uri;
-import com.owncloud.android.lib.common.authentication.OwnCloudBasicCredentials;
import com.owncloud.android.lib.common.OwnCloudClient;
+import com.owncloud.android.lib.common.authentication.OwnCloudBasicCredentials;
import com.owncloud.android.lib.common.authentication.OwnCloudCredentials;
import com.owncloud.android.lib.common.http.methods.nonwebdav.PostMethod;
-import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
import com.owncloud.android.lib.common.operations.RemoteOperation;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
-
+import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
+import okhttp3.MultipartBody;
+import okhttp3.RequestBody;
import org.json.JSONObject;
import java.net.URL;
import java.util.Map;
-import okhttp3.MultipartBody;
-import okhttp3.RequestBody;
-
-
public class OAuth2GetAccessTokenOperation extends RemoteOperation> {
-
+
+ private final String mAccessTokenEndpointPath;
+ private final OAuth2ResponseParser mResponseParser;
private String mGrantType;
private String mCode;
private String mClientId;
private String mClientSecret;
private String mRedirectUri;
- private final String mAccessTokenEndpointPath;
-
- private final OAuth2ResponseParser mResponseParser;
-
public OAuth2GetAccessTokenOperation(
- String grantType,
- String code,
- String clientId,
- String secretId,
- String redirectUri,
- String accessTokenEndpointPath
+ String grantType,
+ String code,
+ String clientId,
+ String secretId,
+ String redirectUri,
+ String accessTokenEndpointPath
) {
mClientId = clientId;
mClientSecret = secretId;
@@ -73,9 +68,9 @@ public class OAuth2GetAccessTokenOperation extends RemoteOperation> result = null;
-
+
try {
final RequestBody requestBody = new MultipartBody.Builder()
@@ -116,7 +111,7 @@ public class OAuth2GetAccessTokenOperation extends RemoteOperation 0) {
JSONObject tokenJson = new JSONObject(response);
Map accessTokenResult =
- mResponseParser.parseAccessTokenResult(tokenJson);
+ mResponseParser.parseAccessTokenResult(tokenJson);
if (accessTokenResult.get(OAuth2Constants.KEY_ERROR) != null ||
accessTokenResult.get(OAuth2Constants.KEY_ACCESS_TOKEN) == null) {
result = new RemoteOperationResult<>(ResultCode.OAUTH2_ERROR);
@@ -133,7 +128,7 @@ public class OAuth2GetAccessTokenOperation extends RemoteOperation(e);
-
+
}
return result;
}
diff --git a/src/com/owncloud/android/lib/common/authentication/oauth/OAuth2GrantType.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/OAuth2GrantType.java
similarity index 100%
rename from src/com/owncloud/android/lib/common/authentication/oauth/OAuth2GrantType.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/OAuth2GrantType.java
diff --git a/src/com/owncloud/android/lib/common/authentication/oauth/OAuth2Provider.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/OAuth2Provider.java
similarity index 87%
rename from src/com/owncloud/android/lib/common/authentication/oauth/OAuth2Provider.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/OAuth2Provider.java
index d259d80e..e8f598cd 100644
--- a/src/com/owncloud/android/lib/common/authentication/oauth/OAuth2Provider.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/OAuth2Provider.java
@@ -31,36 +31,35 @@ public interface OAuth2Provider {
/**
* {@link OAuth2RequestBuilder} implementation for this provider.
*
- * @return {@link OAuth2RequestBuilder} implementation.
+ * @return {@link OAuth2RequestBuilder} implementation.
*/
OAuth2RequestBuilder getOperationBuilder();
-
- /**
- * Set configuration of the client that will use this {@link OAuth2Provider}
- * @param oAuth2ClientConfiguration Configuration of the client that will use this {@link OAuth2Provider}
- */
- void setClientConfiguration(OAuth2ClientConfiguration oAuth2ClientConfiguration);
-
/**
* Configuration of the client that is using this {@link OAuth2Provider}
* return Configuration of the client that is usinng this {@link OAuth2Provider}
*/
OAuth2ClientConfiguration getClientConfiguration();
-
/**
- * Set base URI to authorization server.
+ * Set configuration of the client that will use this {@link OAuth2Provider}
*
- * @param authorizationServerUri Set base URL to authorization server.
+ * @param oAuth2ClientConfiguration Configuration of the client that will use this {@link OAuth2Provider}
*/
- void setAuthorizationServerUri(String authorizationServerUri);
+ void setClientConfiguration(OAuth2ClientConfiguration oAuth2ClientConfiguration);
/**
* base URI to authorization server.
*
- * @return Base URL to authorization server.
+ * @return Base URL to authorization server.
*/
String getAuthorizationServerUri();
+ /**
+ * Set base URI to authorization server.
+ *
+ * @param authorizationServerUri Set base URL to authorization server.
+ */
+ void setAuthorizationServerUri(String authorizationServerUri);
+
}
diff --git a/src/com/owncloud/android/lib/common/authentication/oauth/OAuth2ProvidersRegistry.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/OAuth2ProvidersRegistry.java
similarity index 84%
rename from src/com/owncloud/android/lib/common/authentication/oauth/OAuth2ProvidersRegistry.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/OAuth2ProvidersRegistry.java
index 32aac0ad..16e3b9ac 100644
--- a/src/com/owncloud/android/lib/common/authentication/oauth/OAuth2ProvidersRegistry.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/OAuth2ProvidersRegistry.java
@@ -26,7 +26,6 @@
package com.owncloud.android.lib.common.authentication.oauth;
-
import java.util.HashMap;
import java.util.Map;
@@ -36,20 +35,13 @@ public class OAuth2ProvidersRegistry {
private OAuth2Provider mDefaultProvider = null;
- private OAuth2ProvidersRegistry () {
- }
-
- /**
- * See https://en.wikipedia.org/wiki/Initialization-on-demand_holder_idiom
- */
- private static class LazyHolder {
- private static final OAuth2ProvidersRegistry INSTANCE = new OAuth2ProvidersRegistry();
+ private OAuth2ProvidersRegistry() {
}
/**
* Singleton accesor.
*
- * @return Singleton isntance of {@link OAuth2ProvidersRegistry}
+ * @return Singleton isntance of {@link OAuth2ProvidersRegistry}
*/
public static OAuth2ProvidersRegistry getInstance() {
return LazyHolder.INSTANCE;
@@ -58,8 +50,8 @@ public class OAuth2ProvidersRegistry {
/**
* Register an {@link OAuth2Provider} with the name passed as parameter.
*
- * @param name Name to bind 'oAuthProvider' in the registry.
- * @param oAuth2Provider An {@link OAuth2Provider} instance to keep in the registry.
+ * @param name Name to bind 'oAuthProvider' in the registry.
+ * @param oAuth2Provider An {@link OAuth2Provider} instance to keep in the registry.
* @throws IllegalArgumentException if 'name' or 'oAuthProvider' are null.
*/
public void registerProvider(String name, OAuth2Provider oAuth2Provider) {
@@ -89,7 +81,7 @@ public class OAuth2ProvidersRegistry {
/**
* Get default {@link OAuth2Provider}.
*
- * @return Default provider, or NULL if there is no provider.
+ * @return Default provider, or NULL if there is no provider.
*/
public OAuth2Provider getProvider() {
return mDefaultProvider;
@@ -98,8 +90,8 @@ public class OAuth2ProvidersRegistry {
/**
* Get {@link OAuth2Provider} registered with the name passed as parameter.
*
- * @param name Name used to register the desired {@link OAuth2Provider}
- * @return {@link OAuth2Provider} registered with the name 'name'
+ * @param name Name used to register the desired {@link OAuth2Provider}
+ * @return {@link OAuth2Provider} registered with the name 'name'
*/
public OAuth2Provider getProvider(String name) {
return mProviders.get(name);
@@ -108,8 +100,8 @@ public class OAuth2ProvidersRegistry {
/**
* Sets the {@link OAuth2Provider} registered with the name passed as parameter as the default provider
*
- * @param name Name used to register the {@link OAuth2Provider} to set as default.
- * @return {@link OAuth2Provider} set as default, or NULL if no provider was registered with 'name'.
+ * @param name Name used to register the {@link OAuth2Provider} to set as default.
+ * @return {@link OAuth2Provider} set as default, or NULL if no provider was registered with 'name'.
*/
public OAuth2Provider setDefaultProvider(String name) {
OAuth2Provider toDefault = mProviders.get(name);
@@ -119,4 +111,11 @@ public class OAuth2ProvidersRegistry {
return toDefault;
}
+ /**
+ * See https://en.wikipedia.org/wiki/Initialization-on-demand_holder_idiom
+ */
+ private static class LazyHolder {
+ private static final OAuth2ProvidersRegistry INSTANCE = new OAuth2ProvidersRegistry();
+ }
+
}
diff --git a/src/com/owncloud/android/lib/common/authentication/oauth/OAuth2QueryParser.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/OAuth2QueryParser.java
similarity index 99%
rename from src/com/owncloud/android/lib/common/authentication/oauth/OAuth2QueryParser.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/OAuth2QueryParser.java
index 353cb7b5..aacd8bab 100644
--- a/src/com/owncloud/android/lib/common/authentication/oauth/OAuth2QueryParser.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/OAuth2QueryParser.java
@@ -31,7 +31,6 @@ import com.owncloud.android.lib.common.utils.Log_OC;
import java.util.HashMap;
import java.util.Map;
-
public class OAuth2QueryParser {
private static final String TAG = OAuth2QueryParser.class.getName();
diff --git a/src/com/owncloud/android/lib/common/authentication/oauth/OAuth2RefreshAccessTokenOperation.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/OAuth2RefreshAccessTokenOperation.java
similarity index 85%
rename from src/com/owncloud/android/lib/common/authentication/oauth/OAuth2RefreshAccessTokenOperation.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/OAuth2RefreshAccessTokenOperation.java
index eba3dbeb..5f788831 100644
--- a/src/com/owncloud/android/lib/common/authentication/oauth/OAuth2RefreshAccessTokenOperation.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/OAuth2RefreshAccessTokenOperation.java
@@ -1,59 +1,52 @@
/**
- * ownCloud Android client application
- *
- * @author David González Verdugo
- * @author Christian Schabesberger
- *
- * Copyright (C) 2018 ownCloud GmbH.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
+ * ownCloud Android client application
*
+ * @author David González Verdugo
+ * @author Christian Schabesberger
+ *
+ * Copyright (C) 2019 ownCloud GmbH.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
*/
package com.owncloud.android.lib.common.authentication.oauth;
import android.net.Uri;
-import com.owncloud.android.lib.common.authentication.OwnCloudBasicCredentials;
import com.owncloud.android.lib.common.OwnCloudClient;
+import com.owncloud.android.lib.common.authentication.OwnCloudBasicCredentials;
import com.owncloud.android.lib.common.authentication.OwnCloudCredentials;
-import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
+import com.owncloud.android.lib.common.http.methods.nonwebdav.PostMethod;
import com.owncloud.android.lib.common.operations.RemoteOperation;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
+import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
import com.owncloud.android.lib.common.utils.Log_OC;
-
+import okhttp3.MultipartBody;
+import okhttp3.RequestBody;
import org.json.JSONObject;
import java.net.URL;
import java.util.Map;
-import com.owncloud.android.lib.common.http.methods.nonwebdav.PostMethod;
-
-import okhttp3.MultipartBody;
-import okhttp3.RequestBody;
-
public class OAuth2RefreshAccessTokenOperation extends RemoteOperation> {
private static final String TAG = OAuth2RefreshAccessTokenOperation.class.getSimpleName();
-
+ private final String mAccessTokenEndpointPath;
+ private final OAuth2ResponseParser mResponseParser;
private String mClientId;
private String mClientSecret;
private String mRefreshToken;
- private final String mAccessTokenEndpointPath;
-
- private final OAuth2ResponseParser mResponseParser;
-
public OAuth2RefreshAccessTokenOperation(
String clientId,
String secretId,
diff --git a/src/com/owncloud/android/lib/common/authentication/oauth/OAuth2RequestBuilder.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/OAuth2RequestBuilder.java
similarity index 100%
rename from src/com/owncloud/android/lib/common/authentication/oauth/OAuth2RequestBuilder.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/OAuth2RequestBuilder.java
index 23b3cdb9..edda5d6b 100644
--- a/src/com/owncloud/android/lib/common/authentication/oauth/OAuth2RequestBuilder.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/OAuth2RequestBuilder.java
@@ -30,10 +30,6 @@ import com.owncloud.android.lib.common.operations.RemoteOperation;
public interface OAuth2RequestBuilder {
- enum OAuthRequest {
- GET_AUTHORIZATION_CODE, CREATE_ACCESS_TOKEN, REFRESH_ACCESS_TOKEN
- }
-
void setRequest(OAuthRequest operation);
void setGrantType(OAuth2GrantType grantType);
@@ -45,4 +41,8 @@ public interface OAuth2RequestBuilder {
RemoteOperation buildOperation();
String buildUri();
+
+ enum OAuthRequest {
+ GET_AUTHORIZATION_CODE, CREATE_ACCESS_TOKEN, REFRESH_ACCESS_TOKEN
+ }
}
\ No newline at end of file
diff --git a/src/com/owncloud/android/lib/common/authentication/oauth/OAuth2ResponseParser.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/OAuth2ResponseParser.java
similarity index 57%
rename from src/com/owncloud/android/lib/common/authentication/oauth/OAuth2ResponseParser.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/OAuth2ResponseParser.java
index 068165f2..0d377c9e 100644
--- a/src/com/owncloud/android/lib/common/authentication/oauth/OAuth2ResponseParser.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/OAuth2ResponseParser.java
@@ -1,27 +1,25 @@
/**
- * ownCloud Android client application
- *
- * @author David A. Velasco
- *
- * Copyright (C) 2017 ownCloud GmbH.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
+ * ownCloud Android client application
*
+ * @author David A. Velasco
+ *
+ * Copyright (C) 2017 ownCloud GmbH.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
*/
package com.owncloud.android.lib.common.authentication.oauth;
-
import org.json.JSONException;
import org.json.JSONObject;
@@ -35,40 +33,40 @@ class OAuth2ResponseParser {
if (tokenJson.has(OAuth2Constants.KEY_ACCESS_TOKEN)) {
resultTokenMap.put(OAuth2Constants.KEY_ACCESS_TOKEN, tokenJson.
- getString(OAuth2Constants.KEY_ACCESS_TOKEN));
+ getString(OAuth2Constants.KEY_ACCESS_TOKEN));
}
if (tokenJson.has(OAuth2Constants.KEY_TOKEN_TYPE)) {
resultTokenMap.put(OAuth2Constants.KEY_TOKEN_TYPE, tokenJson.
- getString(OAuth2Constants.KEY_TOKEN_TYPE));
+ getString(OAuth2Constants.KEY_TOKEN_TYPE));
}
if (tokenJson.has(OAuth2Constants.KEY_EXPIRES_IN)) {
resultTokenMap.put(OAuth2Constants.KEY_EXPIRES_IN, tokenJson.
- getString(OAuth2Constants.KEY_EXPIRES_IN));
+ getString(OAuth2Constants.KEY_EXPIRES_IN));
}
if (tokenJson.has(OAuth2Constants.KEY_REFRESH_TOKEN)) {
resultTokenMap.put(OAuth2Constants.KEY_REFRESH_TOKEN, tokenJson.
- getString(OAuth2Constants.KEY_REFRESH_TOKEN));
+ getString(OAuth2Constants.KEY_REFRESH_TOKEN));
}
if (tokenJson.has(OAuth2Constants.KEY_SCOPE)) {
resultTokenMap.put(OAuth2Constants.KEY_SCOPE, tokenJson.
- getString(OAuth2Constants.KEY_SCOPE));
+ getString(OAuth2Constants.KEY_SCOPE));
}
if (tokenJson.has(OAuth2Constants.KEY_ERROR)) {
resultTokenMap.put(OAuth2Constants.KEY_ERROR, tokenJson.
- getString(OAuth2Constants.KEY_ERROR));
+ getString(OAuth2Constants.KEY_ERROR));
}
if (tokenJson.has(OAuth2Constants.KEY_ERROR_DESCRIPTION)) {
resultTokenMap.put(OAuth2Constants.KEY_ERROR_DESCRIPTION, tokenJson.
- getString(OAuth2Constants.KEY_ERROR_DESCRIPTION));
+ getString(OAuth2Constants.KEY_ERROR_DESCRIPTION));
}
if (tokenJson.has(OAuth2Constants.KEY_ERROR_URI)) {
resultTokenMap.put(OAuth2Constants.KEY_ERROR_URI, tokenJson.
- getString(OAuth2Constants.KEY_ERROR_URI));
+ getString(OAuth2Constants.KEY_ERROR_URI));
}
if (tokenJson.has(OAuth2Constants.KEY_USER_ID)) { // not standard
resultTokenMap.put(OAuth2Constants.KEY_USER_ID, tokenJson.
- getString(OAuth2Constants.KEY_USER_ID));
+ getString(OAuth2Constants.KEY_USER_ID));
}
return resultTokenMap;
diff --git a/src/com/owncloud/android/lib/common/authentication/oauth/OwnCloudOAuth2Provider.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/OwnCloudOAuth2Provider.java
similarity index 100%
rename from src/com/owncloud/android/lib/common/authentication/oauth/OwnCloudOAuth2Provider.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/OwnCloudOAuth2Provider.java
index 63b43b3e..58f149c7 100644
--- a/src/com/owncloud/android/lib/common/authentication/oauth/OwnCloudOAuth2Provider.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/OwnCloudOAuth2Provider.java
@@ -46,19 +46,14 @@ public class OwnCloudOAuth2Provider implements OAuth2Provider {
return new OwnCloudOAuth2RequestBuilder(this);
}
- @Override
- public void setClientConfiguration(OAuth2ClientConfiguration oAuth2ClientConfiguration) {
- mClientConfiguration = oAuth2ClientConfiguration;
- }
-
@Override
public OAuth2ClientConfiguration getClientConfiguration() {
return mClientConfiguration;
}
@Override
- public void setAuthorizationServerUri(String authorizationServerUri) {
- mAuthorizationServerUrl = authorizationServerUri;
+ public void setClientConfiguration(OAuth2ClientConfiguration oAuth2ClientConfiguration) {
+ mClientConfiguration = oAuth2ClientConfiguration;
}
@Override
@@ -66,6 +61,11 @@ public class OwnCloudOAuth2Provider implements OAuth2Provider {
return mAuthorizationServerUrl;
}
+ @Override
+ public void setAuthorizationServerUri(String authorizationServerUri) {
+ mAuthorizationServerUrl = authorizationServerUri;
+ }
+
public String getAccessTokenEndpointPath() {
return mAccessTokenEndpointPath;
}
diff --git a/src/com/owncloud/android/lib/common/authentication/oauth/OwnCloudOAuth2RequestBuilder.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/OwnCloudOAuth2RequestBuilder.java
similarity index 76%
rename from src/com/owncloud/android/lib/common/authentication/oauth/OwnCloudOAuth2RequestBuilder.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/OwnCloudOAuth2RequestBuilder.java
index 18933824..83d1625c 100644
--- a/src/com/owncloud/android/lib/common/authentication/oauth/OwnCloudOAuth2RequestBuilder.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/OwnCloudOAuth2RequestBuilder.java
@@ -68,22 +68,22 @@ public class OwnCloudOAuth2RequestBuilder implements OAuth2RequestBuilder {
if (mGrantType != OAuth2GrantType.AUTHORIZATION_CODE &&
mGrantType != OAuth2GrantType.REFRESH_TOKEN) {
throw new UnsupportedOperationException(
- "Unsupported grant type. Only " +
- OAuth2GrantType.AUTHORIZATION_CODE.getValue() + " and " +
- OAuth2GrantType.REFRESH_TOKEN + " are supported"
+ "Unsupported grant type. Only " +
+ OAuth2GrantType.AUTHORIZATION_CODE.getValue() + " and " +
+ OAuth2GrantType.REFRESH_TOKEN + " are supported"
);
}
OAuth2ClientConfiguration clientConfiguration = mOAuth2Provider.getClientConfiguration();
- switch(mRequest) {
+ switch (mRequest) {
case CREATE_ACCESS_TOKEN:
return new OAuth2GetAccessTokenOperation(
- mGrantType.getValue(),
- mCode,
- clientConfiguration.getClientId(),
- clientConfiguration.getClientSecret(),
- clientConfiguration.getRedirectUri(),
- mOAuth2Provider.getAccessTokenEndpointPath()
+ mGrantType.getValue(),
+ mCode,
+ clientConfiguration.getClientId(),
+ clientConfiguration.getClientSecret(),
+ clientConfiguration.getRedirectUri(),
+ mOAuth2Provider.getAccessTokenEndpointPath()
);
case REFRESH_ACCESS_TOKEN:
@@ -95,7 +95,7 @@ public class OwnCloudOAuth2RequestBuilder implements OAuth2RequestBuilder {
);
default:
throw new UnsupportedOperationException(
- "Unsupported request"
+ "Unsupported request"
);
}
}
@@ -104,26 +104,26 @@ public class OwnCloudOAuth2RequestBuilder implements OAuth2RequestBuilder {
public String buildUri() {
if (OAuth2GrantType.AUTHORIZATION_CODE != mGrantType) {
throw new UnsupportedOperationException(
- "Unsupported grant type. Only " +
- OAuth2GrantType.AUTHORIZATION_CODE.getValue() + " is supported by this provider"
+ "Unsupported grant type. Only " +
+ OAuth2GrantType.AUTHORIZATION_CODE.getValue() + " is supported by this provider"
);
}
OAuth2ClientConfiguration clientConfiguration = mOAuth2Provider.getClientConfiguration();
Uri uri;
Uri.Builder uriBuilder;
- switch(mRequest) {
+ switch (mRequest) {
case GET_AUTHORIZATION_CODE:
uri = Uri.parse(mOAuth2Provider.getAuthorizationServerUri());
uriBuilder = uri.buildUpon();
uriBuilder.appendEncodedPath(mOAuth2Provider.getAuthorizationCodeEndpointPath());
uriBuilder.appendQueryParameter(
- OAuth2Constants.KEY_RESPONSE_TYPE, OAuth2Constants.OAUTH2_RESPONSE_TYPE_CODE
+ OAuth2Constants.KEY_RESPONSE_TYPE, OAuth2Constants.OAUTH2_RESPONSE_TYPE_CODE
);
uriBuilder.appendQueryParameter(
- OAuth2Constants.KEY_REDIRECT_URI, clientConfiguration.getRedirectUri()
+ OAuth2Constants.KEY_REDIRECT_URI, clientConfiguration.getRedirectUri()
);
uriBuilder.appendQueryParameter(
- OAuth2Constants.KEY_CLIENT_ID, clientConfiguration.getClientId()
+ OAuth2Constants.KEY_CLIENT_ID, clientConfiguration.getClientId()
);
uri = uriBuilder.build();
@@ -134,13 +134,13 @@ public class OwnCloudOAuth2RequestBuilder implements OAuth2RequestBuilder {
uriBuilder = uri.buildUpon();
uriBuilder.appendEncodedPath(mOAuth2Provider.getAccessTokenEndpointPath());
uriBuilder.appendQueryParameter(
- OAuth2Constants.KEY_RESPONSE_TYPE, OAuth2Constants.OAUTH2_RESPONSE_TYPE_CODE
+ OAuth2Constants.KEY_RESPONSE_TYPE, OAuth2Constants.OAUTH2_RESPONSE_TYPE_CODE
);
uriBuilder.appendQueryParameter(
- OAuth2Constants.KEY_REDIRECT_URI, clientConfiguration.getRedirectUri()
+ OAuth2Constants.KEY_REDIRECT_URI, clientConfiguration.getRedirectUri()
);
uriBuilder.appendQueryParameter(
- OAuth2Constants.KEY_CLIENT_ID, clientConfiguration.getClientId()
+ OAuth2Constants.KEY_CLIENT_ID, clientConfiguration.getClientId()
);
uri = uriBuilder.build();
@@ -148,7 +148,7 @@ public class OwnCloudOAuth2RequestBuilder implements OAuth2RequestBuilder {
default:
throw new UnsupportedOperationException(
- "Unsupported request"
+ "Unsupported request"
);
}
}
diff --git a/src/com/owncloud/android/lib/common/http/HttpClient.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/HttpClient.java
similarity index 95%
rename from src/com/owncloud/android/lib/common/http/HttpClient.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/HttpClient.java
index a363b931..566d98e9 100644
--- a/src/com/owncloud/android/lib/common/http/HttpClient.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/HttpClient.java
@@ -1,5 +1,5 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
+ * Copyright (C) 2019 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -32,7 +32,15 @@ import com.owncloud.android.lib.common.http.interceptors.RequestHeaderIntercepto
import com.owncloud.android.lib.common.network.AdvancedX509TrustManager;
import com.owncloud.android.lib.common.network.NetworkUtils;
import com.owncloud.android.lib.common.utils.Log_OC;
+import okhttp3.Cookie;
+import okhttp3.CookieJar;
+import okhttp3.HttpUrl;
+import okhttp3.OkHttpClient;
+import okhttp3.Protocol;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
@@ -41,18 +49,9 @@ import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.X509TrustManager;
-
-import okhttp3.Cookie;
-import okhttp3.CookieJar;
-import okhttp3.HttpUrl;
-import okhttp3.OkHttpClient;
-import okhttp3.Protocol;
-
/**
* Client used to perform network operations
+ *
* @author David González Verdugo
*/
public class HttpClient {
@@ -63,21 +62,13 @@ public class HttpClient {
private static Context sContext;
private static HashMap> sCookieStore = new HashMap<>();
- public static void setContext(Context context) {
- sContext = context;
- }
-
- public Context getContext() {
- return sContext;
- }
-
public static OkHttpClient getOkHttpClient() {
if (sOkHttpClient == null) {
try {
final X509TrustManager trustManager = new AdvancedX509TrustManager(
NetworkUtils.getKnownServersStore(sContext));
final SSLContext sslContext = SSLContext.getInstance("TLS");
- sslContext.init(null, new TrustManager[] {trustManager}, null);
+ sslContext.init(null, new TrustManager[]{trustManager}, null);
// Automatic cookie handling, NOT PERSISTENT
CookieJar cookieJar = new CookieJar() {
@@ -109,8 +100,8 @@ public class HttpClient {
.sslSocketFactory(sslContext.getSocketFactory(), trustManager)
.hostnameVerifier((asdf, usdf) -> true)
.cookieJar(cookieJar);
- // TODO: Not verifying the hostname against certificate. ask owncloud security human if this is ok.
- //.hostnameVerifier(new BrowserCompatHostnameVerifier());
+ // TODO: Not verifying the hostname against certificate. ask owncloud security human if this is ok.
+ //.hostnameVerifier(new BrowserCompatHostnameVerifier());
sOkHttpClient = clientBuilder.build();
} catch (Exception e) {
@@ -130,6 +121,31 @@ public class HttpClient {
return sOkHttpInterceptor;
}
+ /**
+ * Add header that will be included for all the requests from now on
+ *
+ * @param headerName
+ * @param headerValue
+ */
+ public static void addHeaderForAllRequests(String headerName, String headerValue) {
+ getOkHttpInterceptor()
+ .addRequestInterceptor(
+ new RequestHeaderInterceptor(headerName, headerValue)
+ );
+ }
+
+ public static void deleteHeaderForAllRequests(String headerName) {
+ getOkHttpInterceptor().deleteRequestHeaderInterceptor(headerName);
+ }
+
+ public Context getContext() {
+ return sContext;
+ }
+
+ public static void setContext(Context context) {
+ sContext = context;
+ }
+
public void disableAutomaticCookiesHandling() {
OkHttpClient.Builder clientBuilder = getOkHttpClient().newBuilder();
clientBuilder.cookieJar(new CookieJar() {
@@ -146,22 +162,6 @@ public class HttpClient {
sOkHttpClient = clientBuilder.build();
}
- /**
- * Add header that will be included for all the requests from now on
- * @param headerName
- * @param headerValue
- */
- public static void addHeaderForAllRequests(String headerName, String headerValue) {
- getOkHttpInterceptor()
- .addRequestInterceptor(
- new RequestHeaderInterceptor(headerName, headerValue)
- );
- }
-
- public static void deleteHeaderForAllRequests(String headerName) {
- getOkHttpInterceptor().deleteRequestHeaderInterceptor(headerName);
- }
-
public List getCookiesFromUrl(HttpUrl httpUrl) {
return sCookieStore.get(httpUrl.host());
}
diff --git a/src/com/owncloud/android/lib/common/http/HttpConstants.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/HttpConstants.java
similarity index 98%
rename from src/com/owncloud/android/lib/common/http/HttpConstants.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/HttpConstants.java
index cef4e75d..201d3b3a 100644
--- a/src/com/owncloud/android/lib/common/http/HttpConstants.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/HttpConstants.java
@@ -1,5 +1,5 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
+ * Copyright (C) 2019 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -181,9 +181,13 @@ public class HttpConstants {
*************************************************** TIMEOUTS **********************************************
***********************************************************************************************************/
- /** Default timeout for waiting data from the server */
+ /**
+ * Default timeout for waiting data from the server
+ */
public static final int DEFAULT_DATA_TIMEOUT = 60000;
- /** Default timeout for establishing a connection */
+ /**
+ * Default timeout for establishing a connection
+ */
public static final int DEFAULT_CONNECTION_TIMEOUT = 60000;
}
\ No newline at end of file
diff --git a/src/com/owncloud/android/lib/common/http/interceptors/HttpInterceptor.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/interceptors/HttpInterceptor.java
similarity index 96%
rename from src/com/owncloud/android/lib/common/http/interceptors/HttpInterceptor.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/interceptors/HttpInterceptor.java
index f49b2686..3c9b61e7 100644
--- a/src/com/owncloud/android/lib/common/http/interceptors/HttpInterceptor.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/interceptors/HttpInterceptor.java
@@ -1,5 +1,5 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
+ * Copyright (C) 2019 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -24,16 +24,17 @@
package com.owncloud.android.lib.common.http.interceptors;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Iterator;
-
import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+
/**
* Http interceptor to use multiple interceptors in the same {@link okhttp3.OkHttpClient} instance
+ *
* @author David González Verdugo
*/
public class HttpInterceptor implements Interceptor {
@@ -58,20 +59,12 @@ public class HttpInterceptor implements Interceptor {
return response;
}
- public interface RequestInterceptor {
- Request intercept(Request request) throws IOException;
- }
-
- public interface ResponseInterceptor {
- Response intercept(Response response) throws IOException;
- }
-
public HttpInterceptor addRequestInterceptor(RequestInterceptor requestInterceptor) {
mRequestInterceptors.add(requestInterceptor);
return this;
}
- public HttpInterceptor addResponseInterceptor (ResponseInterceptor responseInterceptor) {
+ public HttpInterceptor addResponseInterceptor(ResponseInterceptor responseInterceptor) {
mResponseInterceptors.add(responseInterceptor);
return this;
}
@@ -106,4 +99,12 @@ public class HttpInterceptor implements Interceptor {
public ArrayList getResponseInterceptors() {
return mResponseInterceptors;
}
+
+ public interface RequestInterceptor {
+ Request intercept(Request request) throws IOException;
+ }
+
+ public interface ResponseInterceptor {
+ Response intercept(Response response) throws IOException;
+ }
}
\ No newline at end of file
diff --git a/src/com/owncloud/android/lib/common/http/interceptors/RequestHeaderInterceptor.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/interceptors/RequestHeaderInterceptor.java
similarity index 98%
rename from src/com/owncloud/android/lib/common/http/interceptors/RequestHeaderInterceptor.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/interceptors/RequestHeaderInterceptor.java
index a998e49b..5066d607 100644
--- a/src/com/owncloud/android/lib/common/http/interceptors/RequestHeaderInterceptor.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/interceptors/RequestHeaderInterceptor.java
@@ -1,5 +1,5 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
+ * Copyright (C) 2019 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/src/com/owncloud/android/lib/common/http/methods/HttpBaseMethod.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/HttpBaseMethod.java
similarity index 99%
rename from src/com/owncloud/android/lib/common/http/methods/HttpBaseMethod.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/HttpBaseMethod.java
index 4444b964..1d12c6e1 100644
--- a/src/com/owncloud/android/lib/common/http/methods/HttpBaseMethod.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/HttpBaseMethod.java
@@ -1,5 +1,5 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
+ * Copyright (C) 2019 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -25,12 +25,6 @@
package com.owncloud.android.lib.common.http.methods;
import com.owncloud.android.lib.common.http.HttpClient;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.concurrent.TimeUnit;
-
import okhttp3.Call;
import okhttp3.Headers;
import okhttp3.HttpUrl;
@@ -39,6 +33,11 @@ import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.concurrent.TimeUnit;
+
/**
* Wrapper to perform http calls transparently by using:
* - OkHttp for non webdav methods
@@ -136,6 +135,12 @@ public abstract class HttpBaseMethod {
// Connection parameters
+ public void setRetryOnConnectionFailure(boolean retryOnConnectionFailure) {
+ mOkHttpClient = mOkHttpClient.newBuilder()
+ .retryOnConnectionFailure(retryOnConnectionFailure)
+ .build();
+ }
+
public void setReadTimeout(long readTimeout, TimeUnit timeUnit) {
mOkHttpClient = mOkHttpClient.newBuilder()
.readTimeout(readTimeout, timeUnit)
@@ -154,12 +159,6 @@ public abstract class HttpBaseMethod {
.build();
}
- public void setRetryOnConnectionFailure(boolean retryOnConnectionFailure) {
- mOkHttpClient = mOkHttpClient.newBuilder()
- .retryOnConnectionFailure(retryOnConnectionFailure)
- .build();
- }
-
// Request
public void addRequestHeader(String name, String value) {
diff --git a/src/com/owncloud/android/lib/common/http/methods/nonwebdav/DeleteMethod.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/nonwebdav/DeleteMethod.java
similarity index 93%
rename from src/com/owncloud/android/lib/common/http/methods/nonwebdav/DeleteMethod.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/nonwebdav/DeleteMethod.java
index 5b9c6d1b..2d7153f9 100644
--- a/src/com/owncloud/android/lib/common/http/methods/nonwebdav/DeleteMethod.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/nonwebdav/DeleteMethod.java
@@ -1,5 +1,5 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
+ * Copyright (C) 2019 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -27,13 +27,12 @@ package com.owncloud.android.lib.common.http.methods.nonwebdav;
import java.io.IOException;
import java.net.URL;
-import okhttp3.HttpUrl;
-
/**
* OkHttp delete calls wrapper
+ *
* @author David González Verdugo
*/
-public class DeleteMethod extends HttpMethod{
+public class DeleteMethod extends HttpMethod {
public DeleteMethod(URL url) {
super(url);
diff --git a/src/com/owncloud/android/lib/common/http/methods/nonwebdav/GetMethod.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/nonwebdav/GetMethod.java
similarity index 96%
rename from src/com/owncloud/android/lib/common/http/methods/nonwebdav/GetMethod.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/nonwebdav/GetMethod.java
index 183a7299..afcf45e5 100644
--- a/src/com/owncloud/android/lib/common/http/methods/nonwebdav/GetMethod.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/nonwebdav/GetMethod.java
@@ -1,5 +1,5 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
+ * Copyright (C) 2019 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -27,10 +27,9 @@ package com.owncloud.android.lib.common.http.methods.nonwebdav;
import java.io.IOException;
import java.net.URL;
-import okhttp3.HttpUrl;
-
/**
* OkHttp get calls wrapper
+ *
* @author David González Verdugo
*/
public class GetMethod extends HttpMethod {
diff --git a/src/com/owncloud/android/lib/common/http/methods/nonwebdav/HttpMethod.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/nonwebdav/HttpMethod.java
similarity index 95%
rename from src/com/owncloud/android/lib/common/http/methods/nonwebdav/HttpMethod.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/nonwebdav/HttpMethod.java
index 3c73bf3f..30e8c52c 100644
--- a/src/com/owncloud/android/lib/common/http/methods/nonwebdav/HttpMethod.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/nonwebdav/HttpMethod.java
@@ -1,5 +1,5 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
+ * Copyright (C) 2019 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -29,9 +29,6 @@ import com.owncloud.android.lib.common.http.methods.HttpBaseMethod;
import java.io.IOException;
import java.net.URL;
-import okhttp3.Call;
-import okhttp3.HttpUrl;
-
/**
* Wrapper to perform OkHttp calls
*
diff --git a/src/com/owncloud/android/lib/common/http/methods/nonwebdav/PostMethod.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/nonwebdav/PostMethod.java
similarity index 94%
rename from src/com/owncloud/android/lib/common/http/methods/nonwebdav/PostMethod.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/nonwebdav/PostMethod.java
index 970252e1..a6cc7fc9 100644
--- a/src/com/owncloud/android/lib/common/http/methods/nonwebdav/PostMethod.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/nonwebdav/PostMethod.java
@@ -1,5 +1,5 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
+ * Copyright (C) 2019 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -27,15 +27,14 @@ package com.owncloud.android.lib.common.http.methods.nonwebdav;
import java.io.IOException;
import java.net.URL;
-import okhttp3.HttpUrl;
-
/**
* OkHttp post calls wrapper
+ *
* @author David González Verdugo
*/
public class PostMethod extends HttpMethod {
- public PostMethod(URL url){
+ public PostMethod(URL url) {
super(url);
}
diff --git a/src/com/owncloud/android/lib/common/http/methods/nonwebdav/PutMethod.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/nonwebdav/PutMethod.java
similarity index 91%
rename from src/com/owncloud/android/lib/common/http/methods/nonwebdav/PutMethod.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/nonwebdav/PutMethod.java
index 6497b002..67eb4f00 100644
--- a/src/com/owncloud/android/lib/common/http/methods/nonwebdav/PutMethod.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/nonwebdav/PutMethod.java
@@ -1,5 +1,5 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
+ * Copyright (C) 2019 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -27,11 +27,9 @@ package com.owncloud.android.lib.common.http.methods.nonwebdav;
import java.io.IOException;
import java.net.URL;
-import okhttp3.HttpUrl;
+public class PutMethod extends HttpMethod {
-public class PutMethod extends HttpMethod{
-
- public PutMethod(URL url){
+ public PutMethod(URL url) {
super(url);
}
diff --git a/src/com/owncloud/android/lib/common/http/methods/webdav/CopyMethod.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/CopyMethod.java
similarity index 97%
rename from src/com/owncloud/android/lib/common/http/methods/webdav/CopyMethod.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/CopyMethod.java
index 6350ff82..a3daeba3 100644
--- a/src/com/owncloud/android/lib/common/http/methods/webdav/CopyMethod.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/CopyMethod.java
@@ -1,5 +1,5 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
+ * Copyright (C) 2019 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -24,12 +24,13 @@
package com.owncloud.android.lib.common.http.methods.webdav;
-import java.net.URL;
-
import kotlin.Unit;
+import java.net.URL;
+
/**
* Copy calls wrapper
+ *
* @author Christian Schabesberger
* @author David González Verdugo
*/
diff --git a/src/com/owncloud/android/lib/common/http/methods/webdav/DavConstants.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/DavConstants.java
similarity index 97%
rename from src/com/owncloud/android/lib/common/http/methods/webdav/DavConstants.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/DavConstants.java
index 7017e4fa..c1ceacd9 100644
--- a/src/com/owncloud/android/lib/common/http/methods/webdav/DavConstants.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/DavConstants.java
@@ -1,5 +1,5 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
+ * Copyright (C) 2019 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/src/com/owncloud/android/lib/common/http/methods/webdav/DavMethod.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/DavMethod.java
similarity index 98%
rename from src/com/owncloud/android/lib/common/http/methods/webdav/DavMethod.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/DavMethod.java
index d37c2337..a132f528 100644
--- a/src/com/owncloud/android/lib/common/http/methods/webdav/DavMethod.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/DavMethod.java
@@ -1,5 +1,5 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
+ * Copyright (C) 2019 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -24,23 +24,23 @@
package com.owncloud.android.lib.common.http.methods.webdav;
-import com.owncloud.android.lib.common.http.HttpConstants;
-import com.owncloud.android.lib.common.http.methods.HttpBaseMethod;
-
-import java.net.URL;
-import java.util.concurrent.TimeUnit;
-
import at.bitfire.dav4android.Constants;
import at.bitfire.dav4android.DavOCResource;
import at.bitfire.dav4android.exception.HttpException;
import at.bitfire.dav4android.exception.RedirectException;
+import com.owncloud.android.lib.common.http.HttpConstants;
+import com.owncloud.android.lib.common.http.methods.HttpBaseMethod;
import okhttp3.HttpUrl;
import okhttp3.Protocol;
import okhttp3.Response;
import okhttp3.ResponseBody;
+import java.net.URL;
+import java.util.concurrent.TimeUnit;
+
/**
* Wrapper to perform WebDAV (dav4android) calls
+ *
* @author David González Verdugo
*/
public abstract class DavMethod extends HttpBaseMethod {
@@ -124,6 +124,24 @@ public abstract class DavMethod extends HttpBaseMethod {
Constants.INSTANCE.getLog());
}
+ @Override
+ public void setUrl(HttpUrl url) {
+ super.setUrl(url);
+ mDavResource = new DavOCResource(
+ mOkHttpClient,
+ HttpUrl.parse(mRequest.url().toString()),
+ Constants.INSTANCE.getLog());
+ }
+
+ @Override
+ public boolean getRetryOnConnectionFailure() {
+ return false; //TODO: implement me
+ }
+
+ //////////////////////////////
+ // Getter
+ //////////////////////////////
+
@Override
public void setRetryOnConnectionFailure(boolean retryOnConnectionFailure) {
super.setRetryOnConnectionFailure(retryOnConnectionFailure);
@@ -133,24 +151,6 @@ public abstract class DavMethod extends HttpBaseMethod {
Constants.INSTANCE.getLog());
}
- @Override
- public void setUrl(HttpUrl url){
- super.setUrl(url);
- mDavResource = new DavOCResource(
- mOkHttpClient,
- HttpUrl.parse(mRequest.url().toString()),
- Constants.INSTANCE.getLog());
- }
-
- //////////////////////////////
- // Getter
- //////////////////////////////
-
- @Override
- public boolean getRetryOnConnectionFailure() {
- return false; //TODO: implement me
- }
-
@Override
public boolean isAborted() {
return mDavResource.isCallAborted();
diff --git a/src/com/owncloud/android/lib/common/http/methods/webdav/DavUtils.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/DavUtils.java
similarity index 100%
rename from src/com/owncloud/android/lib/common/http/methods/webdav/DavUtils.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/DavUtils.java
diff --git a/src/com/owncloud/android/lib/common/http/methods/webdav/MkColMethod.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/MkColMethod.java
similarity index 97%
rename from src/com/owncloud/android/lib/common/http/methods/webdav/MkColMethod.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/MkColMethod.java
index 4bafc0aa..07b6fbfb 100644
--- a/src/com/owncloud/android/lib/common/http/methods/webdav/MkColMethod.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/MkColMethod.java
@@ -1,5 +1,5 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
+ * Copyright (C) 2019 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -24,12 +24,13 @@
package com.owncloud.android.lib.common.http.methods.webdav;
-import java.net.URL;
-
import kotlin.Unit;
+import java.net.URL;
+
/**
* MkCol calls wrapper
+ *
* @author Christian Schabesberger
* @author David González Verdugo
*/
diff --git a/src/com/owncloud/android/lib/common/http/methods/webdav/MoveMethod.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/MoveMethod.java
similarity index 98%
rename from src/com/owncloud/android/lib/common/http/methods/webdav/MoveMethod.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/MoveMethod.java
index 27a2c918..c6e281c1 100644
--- a/src/com/owncloud/android/lib/common/http/methods/webdav/MoveMethod.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/MoveMethod.java
@@ -1,5 +1,5 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
+ * Copyright (C) 2019 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -25,13 +25,13 @@
package com.owncloud.android.lib.common.http.methods.webdav;
import com.owncloud.android.lib.common.http.HttpConstants;
+import kotlin.Unit;
import java.net.URL;
-import kotlin.Unit;
-
/**
* Move calls wrapper
+ *
* @author Christian Schabesberger
* @author David González Verdugo
*/
diff --git a/src/com/owncloud/android/lib/common/http/methods/webdav/PropfindMethod.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/PropfindMethod.java
similarity index 96%
rename from src/com/owncloud/android/lib/common/http/methods/webdav/PropfindMethod.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/PropfindMethod.java
index 31ce12c4..3e5bb087 100644
--- a/src/com/owncloud/android/lib/common/http/methods/webdav/PropfindMethod.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/PropfindMethod.java
@@ -1,5 +1,5 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
+ * Copyright (C) 2019 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -24,18 +24,19 @@
package com.owncloud.android.lib.common.http.methods.webdav;
-import java.io.IOException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.List;
-
import at.bitfire.dav4android.Property;
import at.bitfire.dav4android.Response;
import at.bitfire.dav4android.exception.DavException;
import kotlin.Unit;
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
/**
* Propfind calls wrapper
+ *
* @author David González Verdugo
*/
public class PropfindMethod extends DavMethod {
@@ -57,7 +58,7 @@ public class PropfindMethod extends DavMethod {
}
@Override
- public int onExecute() throws IOException, DavException{
+ public int onExecute() throws IOException, DavException {
mDavResource.propfind(mDepth, mPropertiesToRequest,
(Response response, Response.HrefRelation hrefRelation) -> {
switch (hrefRelation) {
diff --git a/src/com/owncloud/android/lib/common/http/methods/webdav/PutMethod.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/PutMethod.java
similarity index 97%
rename from src/com/owncloud/android/lib/common/http/methods/webdav/PutMethod.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/PutMethod.java
index f5b889df..52e33c75 100644
--- a/src/com/owncloud/android/lib/common/http/methods/webdav/PutMethod.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/methods/webdav/PutMethod.java
@@ -1,5 +1,5 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
+ * Copyright (C) 2019 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -24,23 +24,25 @@
package com.owncloud.android.lib.common.http.methods.webdav;
+import at.bitfire.dav4android.exception.HttpException;
import com.owncloud.android.lib.common.http.HttpConstants;
+import kotlin.Unit;
import java.io.IOException;
import java.net.URL;
-import at.bitfire.dav4android.exception.HttpException;
-import kotlin.Unit;
-
/**
* Put calls wrapper
+ *
* @author David González Verdugo
*/
public class PutMethod extends DavMethod {
public PutMethod(URL url) {
super(url);
- };
+ }
+
+ ;
@Override
public int onExecute() throws IOException, HttpException {
diff --git a/src/com/owncloud/android/lib/common/network/AdvancedX509TrustManager.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/network/AdvancedX509TrustManager.java
similarity index 75%
rename from src/com/owncloud/android/lib/common/network/AdvancedX509TrustManager.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/network/AdvancedX509TrustManager.java
index 53d60475..a1fbf59d 100644
--- a/src/com/owncloud/android/lib/common/network/AdvancedX509TrustManager.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/network/AdvancedX509TrustManager.java
@@ -1,22 +1,22 @@
/* ownCloud Android Library is available under MIT license
* Copyright (C) 2016 ownCloud GmbH.
- *
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
@@ -24,6 +24,11 @@
package com.owncloud.android.lib.common.network;
+import com.owncloud.android.lib.common.utils.Log_OC;
+
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.TrustManagerFactory;
+import javax.net.ssl.X509TrustManager;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
@@ -34,19 +39,11 @@ import java.security.cert.CertificateExpiredException;
import java.security.cert.CertificateNotYetValidException;
import java.security.cert.X509Certificate;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.TrustManagerFactory;
-import javax.net.ssl.X509TrustManager;
-
-import com.owncloud.android.lib.common.utils.Log_OC;
-
-
-
/**
* @author David A. Velasco
*/
public class AdvancedX509TrustManager implements X509TrustManager {
-
+
private static final String TAG = AdvancedX509TrustManager.class.getSimpleName();
private X509TrustManager mStandardTrustManager = null;
@@ -54,27 +51,27 @@ public class AdvancedX509TrustManager implements X509TrustManager {
/**
* Constructor for AdvancedX509TrustManager
- *
- * @param knownServersKeyStore Local certificates store with server certificates explicitly trusted by the user.
- * @throws CertStoreException When no default X509TrustManager instance was found in the system.
+ *
+ * @param knownServersKeyStore Local certificates store with server certificates explicitly trusted by the user.
+ * @throws CertStoreException When no default X509TrustManager instance was found in the system.
*/
public AdvancedX509TrustManager(KeyStore knownServersKeyStore)
throws NoSuchAlgorithmException, KeyStoreException, CertStoreException {
super();
TrustManagerFactory factory = TrustManagerFactory
.getInstance(TrustManagerFactory.getDefaultAlgorithm());
- factory.init((KeyStore)null);
+ factory.init((KeyStore) null);
mStandardTrustManager = findX509TrustManager(factory);
mKnownServersKeyStore = knownServersKeyStore;
}
-
-
+
/**
* Locates the first X509TrustManager provided by a given TrustManagerFactory
- * @param factory TrustManagerFactory to inspect in the search for a X509TrustManager
- * @return The first X509TrustManager found in factory.
- * @throws CertStoreException When no X509TrustManager instance was found in factory
+ *
+ * @param factory TrustManagerFactory to inspect in the search for a X509TrustManager
+ * @return The first X509TrustManager found in factory.
+ * @throws CertStoreException When no X509TrustManager instance was found in factory
*/
private X509TrustManager findX509TrustManager(TrustManagerFactory factory) throws CertStoreException {
TrustManager tms[] = factory.getTrustManagers();
@@ -85,36 +82,34 @@ public class AdvancedX509TrustManager implements X509TrustManager {
}
return null;
}
-
/**
* @see javax.net.ssl.X509TrustManager#checkClientTrusted(X509Certificate[],
- * String authType)
+ * String authType)
*/
public void checkClientTrusted(X509Certificate[] certificates, String authType) throws CertificateException {
mStandardTrustManager.checkClientTrusted(certificates, authType);
}
-
/**
* @see javax.net.ssl.X509TrustManager#checkServerTrusted(X509Certificate[],
- * String authType)
+ * String authType)
*/
public void checkServerTrusted(X509Certificate[] certificates, String authType) {
if (!isKnownServer(certificates[0])) {
- CertificateCombinedException result = new CertificateCombinedException(certificates[0]);
- try {
- certificates[0].checkValidity();
- } catch (CertificateExpiredException c) {
- result.setCertificateExpiredException(c);
-
- } catch (CertificateNotYetValidException c) {
+ CertificateCombinedException result = new CertificateCombinedException(certificates[0]);
+ try {
+ certificates[0].checkValidity();
+ } catch (CertificateExpiredException c) {
+ result.setCertificateExpiredException(c);
+
+ } catch (CertificateNotYetValidException c) {
result.setCertificateNotYetException(c);
- }
-
- try {
- mStandardTrustManager.checkServerTrusted(certificates, authType);
- } catch (CertificateException c) {
+ }
+
+ try {
+ mStandardTrustManager.checkServerTrusted(certificates, authType);
+ } catch (CertificateException c) {
Throwable cause = c.getCause();
Throwable previousCause = null;
while (cause != null && cause != previousCause && !(cause instanceof CertPathValidatorException)) { // getCause() is not funny
@@ -122,19 +117,19 @@ public class AdvancedX509TrustManager implements X509TrustManager {
cause = cause.getCause();
}
if (cause != null && cause instanceof CertPathValidatorException) {
- result.setCertPathValidatorException((CertPathValidatorException)cause);
+ result.setCertPathValidatorException((CertPathValidatorException) cause);
} else {
- result.setOtherCertificateException(c);
+ result.setOtherCertificateException(c);
}
- }
-
- if (result.isException())
- throw result;
+ }
+
+ if (result.isException()) {
+ throw result;
+ }
}
}
-
-
+
/**
* @see javax.net.ssl.X509TrustManager#getAcceptedIssuers()
*/
@@ -142,7 +137,6 @@ public class AdvancedX509TrustManager implements X509TrustManager {
return mStandardTrustManager.getAcceptedIssuers();
}
-
public boolean isKnownServer(X509Certificate cert) {
try {
return (mKnownServersKeyStore.getCertificateAlias(cert) != null);
@@ -151,5 +145,5 @@ public class AdvancedX509TrustManager implements X509TrustManager {
return false;
}
}
-
+
}
\ No newline at end of file
diff --git a/src/com/owncloud/android/lib/common/network/CertificateCombinedException.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/network/CertificateCombinedException.java
similarity index 93%
rename from src/com/owncloud/android/lib/common/network/CertificateCombinedException.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/network/CertificateCombinedException.java
index 6c50855c..97d40b6e 100644
--- a/src/com/owncloud/android/lib/common/network/CertificateCombinedException.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/network/CertificateCombinedException.java
@@ -1,22 +1,22 @@
/* ownCloud Android Library is available under MIT license
* Copyright (C) 2016 ownCloud GmbH.
- *
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
@@ -24,36 +24,37 @@
package com.owncloud.android.lib.common.network;
+import javax.net.ssl.SSLPeerUnverifiedException;
import java.security.cert.CertPathValidatorException;
import java.security.cert.CertificateException;
import java.security.cert.CertificateExpiredException;
import java.security.cert.CertificateNotYetValidException;
import java.security.cert.X509Certificate;
-import javax.net.ssl.SSLPeerUnverifiedException;
-
/**
* Exception joining all the problems that {@link AdvancedX509TrustManager} can find in
* a certificate chain for a server.
- *
+ *
* This was initially created as an extension of CertificateException, but some
* implementations of the SSL socket layer in existing devices are REPLACING the CertificateException
* instances thrown by {@link javax.net.ssl.X509TrustManager#checkServerTrusted(X509Certificate[], String)}
- * with SSLPeerUnverifiedException FORGETTING THE CAUSING EXCEPTION instead of wrapping it.
- *
- * Due to this, extending RuntimeException is necessary to get that the CertificateCombinedException
+ * with SSLPeerUnverifiedException FORGETTING THE CAUSING EXCEPTION instead of wrapping it.
+ *
+ * Due to this, extending RuntimeException is necessary to get that the CertificateCombinedException
* instance reaches {@link AdvancedSslSocketFactory#verifyPeerIdentity}.
- *
+ *
* BE CAREFUL. As a RuntimeException extensions, Java compilers do not require to handle it
* in client methods. Be sure to use it only when you know exactly where it will go.
- *
+ *
* @author David A. Velasco
*/
public class CertificateCombinedException extends RuntimeException {
- /** Generated - to refresh every time the class changes */
+ /**
+ * Generated - to refresh every time the class changes
+ */
private static final long serialVersionUID = -8875782030758554999L;
-
+
private X509Certificate mServerCert = null;
private String mHostInUrl;
@@ -62,7 +63,7 @@ public class CertificateCombinedException extends RuntimeException {
private CertPathValidatorException mCertPathValidatorException = null;
private CertificateException mOtherCertificateException = null;
private SSLPeerUnverifiedException mSslPeerUnverifiedException = null;
-
+
public CertificateCombinedException(X509Certificate x509Certificate) {
mServerCert = x509Certificate;
}
@@ -84,7 +85,7 @@ public class CertificateCombinedException extends RuntimeException {
}
public void setCertificateExpiredException(CertificateExpiredException c) {
- mCertificateExpiredException = c;
+ mCertificateExpiredException = c;
}
public CertificateNotYetValidException getCertificateNotYetValidException() {
@@ -112,7 +113,7 @@ public class CertificateCombinedException extends RuntimeException {
}
public SSLPeerUnverifiedException getSslPeerUnverifiedException() {
- return mSslPeerUnverifiedException ;
+ return mSslPeerUnverifiedException;
}
public void setSslPeerUnverifiedException(SSLPeerUnverifiedException s) {
diff --git a/src/com/owncloud/android/lib/common/network/ChunkFromFileRequestBody.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/network/ChunkFromFileRequestBody.java
similarity index 87%
rename from src/com/owncloud/android/lib/common/network/ChunkFromFileRequestBody.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/network/ChunkFromFileRequestBody.java
index 63ee682f..776bce2a 100644
--- a/src/com/owncloud/android/lib/common/network/ChunkFromFileRequestBody.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/network/ChunkFromFileRequestBody.java
@@ -1,5 +1,5 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
+ * Copyright (C) 2019 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -27,6 +27,8 @@ package com.owncloud.android.lib.common.network;
import android.util.Log;
import com.owncloud.android.lib.common.utils.Log_OC;
+import okhttp3.MediaType;
+import okio.BufferedSink;
import java.io.File;
import java.io.IOException;
@@ -34,9 +36,6 @@ import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.util.Iterator;
-import okhttp3.MediaType;
-import okio.BufferedSink;
-
/**
* A Request body that represents a file chunk and include information about the progress when uploading it
*
@@ -84,18 +83,19 @@ public class ChunkFromFileRequestBody extends FileRequestBody {
try {
mChannel.position(mOffset);
long size = mFile.length();
- if (size == 0) size = -1;
+ if (size == 0) {
+ size = -1;
+ }
long maxCount = Math.min(mOffset + mChunkSize, mChannel.size());
while (mChannel.position() < maxCount) {
-
Log_OC.d(TAG, "Sink buffer size: " + sink.buffer().size());
readCount = mChannel.read(mBuffer);
Log_OC.d(TAG, "Read " + readCount + " bytes from file channel to " + mBuffer.toString());
- sink.buffer().write(mBuffer.array(), 0 ,readCount);
+ sink.buffer().write(mBuffer.array(), 0, readCount);
sink.flush();
@@ -118,14 +118,14 @@ public class ChunkFromFileRequestBody extends FileRequestBody {
} catch (Exception exception) {
Log.e(TAG, exception.toString());
-// // any read problem will be handled as if the file is not there
-// if (io instanceof FileNotFoundException) {
-// throw io;
-// } else {
-// FileNotFoundException fnf = new FileNotFoundException("Exception reading source file");
-// fnf.initCause(io);
-// throw fnf;
-// }
+ // // any read problem will be handled as if the file is not there
+ // if (io instanceof FileNotFoundException) {
+ // throw io;
+ // } else {
+ // FileNotFoundException fnf = new FileNotFoundException("Exception reading source file");
+ // fnf.initCause(io);
+ // throw fnf;
+ // }
}
}
diff --git a/src/com/owncloud/android/lib/common/network/FileRequestBody.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/network/FileRequestBody.java
similarity index 97%
rename from src/com/owncloud/android/lib/common/network/FileRequestBody.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/network/FileRequestBody.java
index 56575827..21934a2b 100644
--- a/src/com/owncloud/android/lib/common/network/FileRequestBody.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/network/FileRequestBody.java
@@ -1,5 +1,5 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
+ * Copyright (C) 2019 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -26,7 +26,11 @@ package com.owncloud.android.lib.common.network;
import android.util.Log;
-import com.owncloud.android.lib.common.utils.Log_OC;
+import okhttp3.MediaType;
+import okhttp3.RequestBody;
+import okio.BufferedSink;
+import okio.Okio;
+import okio.Source;
import java.io.File;
import java.util.Collection;
@@ -34,12 +38,6 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
-import okhttp3.MediaType;
-import okhttp3.RequestBody;
-import okio.BufferedSink;
-import okio.Okio;
-import okio.Source;
-
/**
* A Request body that represents a file and include information about the progress when uploading it
*
diff --git a/src/com/owncloud/android/lib/common/network/NetworkUtils.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/network/NetworkUtils.java
similarity index 67%
rename from src/com/owncloud/android/lib/common/network/NetworkUtils.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/network/NetworkUtils.java
index d9e79706..e4461341 100644
--- a/src/com/owncloud/android/lib/common/network/NetworkUtils.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/network/NetworkUtils.java
@@ -1,22 +1,22 @@
/* ownCloud Android Library is available under MIT license
* Copyright (C) 2016 ownCloud GmbH.
- *
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
@@ -24,6 +24,11 @@
package com.owncloud.android.lib.common.network;
+import android.content.Context;
+
+import com.owncloud.android.lib.common.utils.Log_OC;
+import org.apache.http.conn.ssl.X509HostnameVerifier;
+
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
@@ -35,54 +40,50 @@ import java.security.NoSuchAlgorithmException;
import java.security.cert.Certificate;
import java.security.cert.CertificateException;
-
-import org.apache.http.conn.ssl.X509HostnameVerifier;
-
-import android.content.Context;
-
-import com.owncloud.android.lib.common.utils.Log_OC;
-
public class NetworkUtils {
-
- final private static String TAG = NetworkUtils.class.getSimpleName();
-
- /** Default timeout for waiting data from the server */
- public static final int DEFAULT_DATA_TIMEOUT = 60000;
-
- /** Default timeout for establishing a connection */
- public static final int DEFAULT_CONNECTION_TIMEOUT = 60000;
-
- /** Standard name for protocol TLS version 1.2 in Java Secure Socket Extension (JSSE) API */
- public static final String PROTOCOL_TLSv1_2 = "TLSv1.2";
-
- /** Standard name for protocol TLS version 1.0 in JSSE API */
- public static final String PROTOCOL_TLSv1_0 = "TLSv1";
+ /**
+ * Default timeout for waiting data from the server
+ */
+ public static final int DEFAULT_DATA_TIMEOUT = 60000;
+ /**
+ * Default timeout for establishing a connection
+ */
+ public static final int DEFAULT_CONNECTION_TIMEOUT = 60000;
+ /**
+ * Standard name for protocol TLS version 1.2 in Java Secure Socket Extension (JSSE) API
+ */
+ public static final String PROTOCOL_TLSv1_2 = "TLSv1.2";
+ /**
+ * Standard name for protocol TLS version 1.0 in JSSE API
+ */
+ public static final String PROTOCOL_TLSv1_0 = "TLSv1";
+ final private static String TAG = NetworkUtils.class.getSimpleName();
private static X509HostnameVerifier mHostnameVerifier = null;
private static String LOCAL_TRUSTSTORE_FILENAME = "knownServers.bks";
-
+
private static String LOCAL_TRUSTSTORE_PASSWORD = "password";
private static KeyStore mKnownServersStore = null;
-
+
/**
* Returns the local store of reliable server certificates, explicitly accepted by the user.
- *
+ *
* Returns a KeyStore instance with empty content if the local store was never created.
- *
+ *
* Loads the store from the storage environment if needed.
- *
- * @param context Android context where the operation is being performed.
- * @return KeyStore instance with explicitly-accepted server certificates.
- * @throws KeyStoreException When the KeyStore instance could not be created.
- * @throws IOException When an existing local trust store could not be loaded.
- * @throws NoSuchAlgorithmException When the existing local trust store was saved with an unsupported algorithm.
- * @throws CertificateException When an exception occurred while loading the certificates from the local
- * trust store.
+ *
+ * @param context Android context where the operation is being performed.
+ * @return KeyStore instance with explicitly-accepted server certificates.
+ * @throws KeyStoreException When the KeyStore instance could not be created.
+ * @throws IOException When an existing local trust store could not be loaded.
+ * @throws NoSuchAlgorithmException When the existing local trust store was saved with an unsupported algorithm.
+ * @throws CertificateException When an exception occurred while loading the certificates from the local
+ * trust store.
*/
public static KeyStore getKnownServersStore(Context context)
- throws KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException {
+ throws KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException {
if (mKnownServersStore == null) {
//mKnownServersStore = KeyStore.getInstance("BKS");
mKnownServersStore = KeyStore.getInstance(KeyStore.getDefaultType());
@@ -96,17 +97,16 @@ public class NetworkUtils {
in.close();
}
} else {
- // next is necessary to initialize an empty KeyStore instance
- mKnownServersStore.load(null, LOCAL_TRUSTSTORE_PASSWORD.toCharArray());
+ // next is necessary to initialize an empty KeyStore instance
+ mKnownServersStore.load(null, LOCAL_TRUSTSTORE_PASSWORD.toCharArray());
}
}
return mKnownServersStore;
}
-
-
- public static void addCertToKnownServersStore(Certificate cert, Context context)
- throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException {
-
+
+ public static void addCertToKnownServersStore(Certificate cert, Context context)
+ throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException {
+
KeyStore knownServers = getKnownServersStore(context);
knownServers.setCertificateEntry(Integer.toString(cert.hashCode()), cert);
FileOutputStream fos = null;
@@ -118,13 +118,13 @@ public class NetworkUtils {
}
}
- public static boolean isCertInKnownServersStore(Certificate cert, Context context)
- throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException {
-
- KeyStore knownServers = getKnownServersStore(context);
- Log_OC.d(TAG, "Certificate - HashCode: " + cert.hashCode() + " "
- + Boolean.toString(knownServers.isCertificateEntry(Integer.toString(cert.hashCode()))));
- return knownServers.isCertificateEntry(Integer.toString(cert.hashCode()));
+ public static boolean isCertInKnownServersStore(Certificate cert, Context context)
+ throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException {
+
+ KeyStore knownServers = getKnownServersStore(context);
+ Log_OC.d(TAG, "Certificate - HashCode: " + cert.hashCode() + " "
+ + Boolean.toString(knownServers.isCertificateEntry(Integer.toString(cert.hashCode()))));
+ return knownServers.isCertificateEntry(Integer.toString(cert.hashCode()));
}
}
diff --git a/src/com/owncloud/android/lib/common/network/OnDatatransferProgressListener.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/network/OnDatatransferProgressListener.java
similarity index 92%
rename from src/com/owncloud/android/lib/common/network/OnDatatransferProgressListener.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/network/OnDatatransferProgressListener.java
index e78320cd..807884fd 100644
--- a/src/com/owncloud/android/lib/common/network/OnDatatransferProgressListener.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/network/OnDatatransferProgressListener.java
@@ -1,23 +1,23 @@
/* ownCloud Android Library is available under MIT license
* Copyright (C) 2016 ownCloud GmbH.
* Copyright (C) 2012 Bartek Przybylski
- *
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
diff --git a/src/com/owncloud/android/lib/common/network/ProgressiveDataTransferer.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/network/ProgressiveDataTransferer.java
similarity index 87%
rename from src/com/owncloud/android/lib/common/network/ProgressiveDataTransferer.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/network/ProgressiveDataTransferer.java
index 979e8082..9c89e542 100644
--- a/src/com/owncloud/android/lib/common/network/ProgressiveDataTransferer.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/network/ProgressiveDataTransferer.java
@@ -1,22 +1,22 @@
/* ownCloud Android Library is available under MIT license
* Copyright (C) 2016 ownCloud GmbH.
- *
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
@@ -26,11 +26,10 @@ package com.owncloud.android.lib.common.network;
import java.util.Collection;
-
public interface ProgressiveDataTransferer {
- public void addDatatransferProgressListener (OnDatatransferProgressListener listener);
-
+ public void addDatatransferProgressListener(OnDatatransferProgressListener listener);
+
public void addDatatransferProgressListeners(Collection listeners);
public void removeDatatransferProgressListener(OnDatatransferProgressListener listener);
diff --git a/src/com/owncloud/android/lib/common/network/RedirectionPath.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/network/RedirectionPath.java
similarity index 85%
rename from src/com/owncloud/android/lib/common/network/RedirectionPath.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/network/RedirectionPath.java
index 3df629ac..3247b1ee 100644
--- a/src/com/owncloud/android/lib/common/network/RedirectionPath.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/network/RedirectionPath.java
@@ -27,22 +27,19 @@
package com.owncloud.android.lib.common.network;
-
-
import com.owncloud.android.lib.common.http.HttpConstants;
import java.util.Arrays;
-
/**
* Aggregate saving the list of URLs followed in a sequence of redirections during the exceution of a
* {@link RemoteOperation}, and the status codes corresponding to all
* of them.
- *
+ *
* The last status code saved corresponds to the first response not being a redirection, unless the sequence exceeds
* the maximum length of redirections allowed by the {@link com.owncloud.android.lib.common.OwnCloudClient} instance
* that ran the operation.
- *
+ *
* If no redirection was followed, the last (and first) status code contained corresponds to the original URL in the
* request.
*/
@@ -59,9 +56,9 @@ public class RedirectionPath {
/**
* Public constructor.
*
- * @param status Status code resulting of executing a request on the original URL.
- * @param maxRedirections Maximum number of redirections that will be contained.
- * @throws IllegalArgumentException If 'maxRedirections' is < 0
+ * @param status Status code resulting of executing a request on the original URL.
+ * @param maxRedirections Maximum number of redirections that will be contained.
+ * @throws IllegalArgumentException If 'maxRedirections' is < 0
*/
public RedirectionPath(int status, int maxRedirections) {
if (maxRedirections < 0) {
@@ -75,7 +72,7 @@ public class RedirectionPath {
/**
* Adds a new location URL to the list of followed redirections.
*
- * @param location URL extracted from a 'Location' header in a redirection.
+ * @param location URL extracted from a 'Location' header in a redirection.
*/
public void addLocation(String location) {
if (mLocations == null) {
@@ -86,11 +83,10 @@ public class RedirectionPath {
}
}
-
/**
* Adds a new status code to the list of status corresponding to followed redirections.
*
- * @param status Status code from the response of another followed redirection.
+ * @param status Status code from the response of another followed redirection.
*/
public void addStatus(int status) {
if (mLastStatus < mStatuses.length - 1) {
@@ -99,14 +95,14 @@ public class RedirectionPath {
}
/**
- * @return Last status code saved.
+ * @return Last status code saved.
*/
public int getLastStatus() {
return mStatuses[mLastStatus];
}
/**
- * @return Last location followed corresponding to a permanent redirection (status code 301).
+ * @return Last location followed corresponding to a permanent redirection (status code 301).
*/
public String getLastPermanentLocation() {
for (int i = mLastStatus; i >= 0; i--) {
@@ -118,11 +114,10 @@ public class RedirectionPath {
}
/**
- * @return Count of locations.
+ * @return Count of locations.
*/
public int getRedirectionsCount() {
return mLastLocation + 1;
}
-
}
diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/network/ServerNameIndicator.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/network/ServerNameIndicator.java
new file mode 100644
index 00000000..e0dabae9
--- /dev/null
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/network/ServerNameIndicator.java
@@ -0,0 +1,145 @@
+/* ownCloud Android Library is available under MIT license
+ * Copyright (C) 2016 ownCloud GmbH.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ */
+
+package com.owncloud.android.lib.common.network;
+
+import com.owncloud.android.lib.common.utils.Log_OC;
+
+import javax.net.ssl.SSLSocket;
+import java.lang.ref.WeakReference;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.concurrent.atomic.AtomicReference;
+
+/**
+ * Enables the support of Server Name Indication if existing
+ * in the underlying network implementation.
+ *
+ * Build as a singleton.
+ *
+ * @author David A. Velasco
+ */
+public class ServerNameIndicator {
+
+ private static final String TAG = ServerNameIndicator.class.getSimpleName();
+
+ private static final AtomicReference mSingleInstance = new AtomicReference();
+
+ private static final String METHOD_NAME = "setHostname";
+
+ private final WeakReference> mSSLSocketClassRef;
+ private final WeakReference mSetHostnameMethodRef;
+
+ /**
+ * Private constructor, class is a singleton.
+ *
+ * @param sslSocketClass Underlying implementation class of {@link SSLSocket} used to connect with the server.
+ * @param setHostnameMethod Name of the method to call to enable the SNI support.
+ */
+ private ServerNameIndicator(Class> sslSocketClass, Method setHostnameMethod) {
+ mSSLSocketClassRef = new WeakReference>(sslSocketClass);
+ mSetHostnameMethodRef = (setHostnameMethod == null) ? null : new WeakReference(setHostnameMethod);
+ }
+
+ /**
+ * Calls the {@code #setHostname(String)} method of the underlying implementation
+ * of {@link SSLSocket} if exists.
+ *
+ * Creates and initializes the single instance of the class when needed
+ *
+ * @param hostname The name of the server host of interest.
+ * @param sslSocket Client socket to connect with the server.
+ */
+ public static void setServerNameIndication(String hostname, SSLSocket sslSocket) {
+ final Method setHostnameMethod = getMethod(sslSocket);
+ if (setHostnameMethod != null) {
+ try {
+ setHostnameMethod.invoke(sslSocket, hostname);
+ Log_OC.i(TAG, "SNI done, hostname: " + hostname);
+
+ } catch (IllegalArgumentException e) {
+ Log_OC.e(TAG, "Call to SSLSocket#setHost(String) failed ", e);
+
+ } catch (IllegalAccessException e) {
+ Log_OC.e(TAG, "Call to SSLSocket#setHost(String) failed ", e);
+
+ } catch (InvocationTargetException e) {
+ Log_OC.e(TAG, "Call to SSLSocket#setHost(String) failed ", e);
+ }
+ } else {
+ Log_OC.i(TAG, "SNI not supported");
+ }
+ }
+
+ /**
+ * Gets the method to invoke trying to minimize the effective
+ * application of reflection.
+ *
+ * @param sslSocket Instance of the SSL socket to use in connection with server.
+ * @return Method to call to indicate the server name of interest to the server.
+ */
+ private static Method getMethod(SSLSocket sslSocket) {
+ final Class> sslSocketClass = sslSocket.getClass();
+ final ServerNameIndicator instance = mSingleInstance.get();
+ if (instance == null) {
+ return initFrom(sslSocketClass);
+
+ } else if (instance.mSSLSocketClassRef.get() != sslSocketClass) {
+ // the underlying class changed
+ return initFrom(sslSocketClass);
+
+ } else if (instance.mSetHostnameMethodRef == null) {
+ // SNI not supported
+ return null;
+
+ } else {
+ final Method cachedSetHostnameMethod = instance.mSetHostnameMethodRef.get();
+ return (cachedSetHostnameMethod == null) ? initFrom(sslSocketClass) : cachedSetHostnameMethod;
+ }
+ }
+
+ /**
+ * Singleton initializer.
+ *
+ * Uses reflection to extract and 'cache' the method to invoke to indicate the desited host name to the server side.
+ *
+ * @param sslSocketClass Underlying class providing the implementation of {@link SSLSocket}.
+ * @return Method to call to indicate the server name of interest to the server.
+ */
+ private static Method initFrom(Class> sslSocketClass) {
+ Log_OC.i(TAG, "SSLSocket implementation: " + sslSocketClass.getCanonicalName());
+ Method setHostnameMethod = null;
+ try {
+ setHostnameMethod = sslSocketClass.getMethod(METHOD_NAME, String.class);
+ } catch (SecurityException e) {
+ Log_OC.e(TAG, "Could not access to SSLSocket#setHostname(String) method ", e);
+
+ } catch (NoSuchMethodException e) {
+ Log_OC.i(TAG, "Could not find SSLSocket#setHostname(String) method - SNI not supported");
+ }
+ mSingleInstance.set(new ServerNameIndicator(sslSocketClass, setHostnameMethod));
+ return setHostnameMethod;
+ }
+
+}
diff --git a/src/com/owncloud/android/lib/common/network/WebdavUtils.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/network/WebdavUtils.java
similarity index 75%
rename from src/com/owncloud/android/lib/common/network/WebdavUtils.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/network/WebdavUtils.java
index 25f002dc..45b7f35f 100644
--- a/src/com/owncloud/android/lib/common/network/WebdavUtils.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/network/WebdavUtils.java
@@ -1,23 +1,23 @@
/* ownCloud Android Library is available under MIT license
* Copyright (C) 2016 ownCloud GmbH.
* Copyright (C) 2012 Bartek Przybylski
- *
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
@@ -25,64 +25,64 @@
package com.owncloud.android.lib.common.network;
+import android.net.Uri;
+
+import com.owncloud.android.lib.common.http.methods.HttpBaseMethod;
+
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
-import android.net.Uri;
-
-import com.owncloud.android.lib.common.http.methods.HttpBaseMethod;
-
public class WebdavUtils {
public static final SimpleDateFormat DISPLAY_DATE_FORMAT = new SimpleDateFormat(
"dd.MM.yyyy hh:mm");
-
+
private static final SimpleDateFormat DATETIME_FORMATS[] = {
- new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US),
- new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz", Locale.US),
- new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sss'Z'", Locale.US),
- new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.US),
- new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US),
- new SimpleDateFormat("EEEEEE, dd-MMM-yy HH:mm:ss zzz", Locale.US),
- new SimpleDateFormat("EEE MMMM d HH:mm:ss yyyy", Locale.US),
- new SimpleDateFormat("yyyy-MM-dd hh:mm:ss", Locale.US)
- };
+ new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US),
+ new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz", Locale.US),
+ new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sss'Z'", Locale.US),
+ new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.US),
+ new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US),
+ new SimpleDateFormat("EEEEEE, dd-MMM-yy HH:mm:ss zzz", Locale.US),
+ new SimpleDateFormat("EEE MMMM d HH:mm:ss yyyy", Locale.US),
+ new SimpleDateFormat("yyyy-MM-dd hh:mm:ss", Locale.US)
+ };
public static Date parseResponseDate(String date) {
Date returnDate = null;
SimpleDateFormat format = null;
for (int i = 0; i < DATETIME_FORMATS.length; ++i) {
try {
- format = DATETIME_FORMATS[i];
- synchronized(format) {
- returnDate = format.parse(date);
- }
+ format = DATETIME_FORMATS[i];
+ synchronized (format) {
+ returnDate = format.parse(date);
+ }
return returnDate;
} catch (ParseException e) {
- // this is not the format
+ // this is not the format
}
}
return null;
}
/**
- * Encodes a path according to URI RFC 2396.
- *
+ * Encodes a path according to URI RFC 2396.
+ *
* If the received path doesn't start with "/", the method adds it.
- *
- * @param remoteFilePath Path
- * @return Encoded path according to RFC 2396, always starting with "/"
+ *
+ * @param remoteFilePath Path
+ * @return Encoded path according to RFC 2396, always starting with "/"
*/
public static String encodePath(String remoteFilePath) {
String encodedPath = Uri.encode(remoteFilePath, "/");
- if (!encodedPath.startsWith("/"))
+ if (!encodedPath.startsWith("/")) {
encodedPath = "/" + encodedPath;
+ }
return encodedPath;
}
/**
- *
* @param rawEtag
* @return
*/
@@ -100,7 +100,6 @@ public class WebdavUtils {
}
/**
- *
* @param httpBaseMethod from which to get the etag
* @return etag from response
*/
diff --git a/src/com/owncloud/android/lib/common/network/WriteTimeoutEnforcer.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/network/WriteTimeoutEnforcer.java
similarity index 79%
rename from src/com/owncloud/android/lib/common/network/WriteTimeoutEnforcer.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/network/WriteTimeoutEnforcer.java
index 665a07e3..19b4a797 100644
--- a/src/com/owncloud/android/lib/common/network/WriteTimeoutEnforcer.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/network/WriteTimeoutEnforcer.java
@@ -1,22 +1,22 @@
/* ownCloud Android Library is available under MIT license
* Copyright (C) 2017 ownCloud GmbH.
- *
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
@@ -32,18 +32,17 @@ import java.lang.reflect.Method;
import java.net.Socket;
import java.util.concurrent.atomic.AtomicReference;
-
/**
* Enforces, if possible, a write timeout for a socket.
- *
+ *
* Built as a singleton.
- *
+ *
* Tries to hit something like this:
* https://android.googlesource.com/platform/external/conscrypt/+/lollipop-release/src/main/java/org/conscrypt/OpenSSLSocketImpl.java#1005
- *
+ *
* Minimizes the chances of getting stalled in PUT/POST request if the network interface is lost while
* writing the entity into the outwards sockect.
- *
+ *
* It happens. See https://github.com/owncloud/android/issues/1684#issuecomment-295306015
*
* @author David A. Velasco
@@ -56,36 +55,33 @@ public class WriteTimeoutEnforcer {
private static final String METHOD_NAME = "setSoWriteTimeout";
-
private final WeakReference> mSocketClassRef;
private final WeakReference mSetSoWriteTimeoutMethodRef;
-
/**
* Private constructor, class is a singleton.
*
- * @param socketClass Underlying implementation class of {@link Socket} used to connect
- * with the server.
- * @param setSoWriteTimeoutMethod Name of the method to call to set a write timeout in the socket.
+ * @param socketClass Underlying implementation class of {@link Socket} used to connect
+ * with the server.
+ * @param setSoWriteTimeoutMethod Name of the method to call to set a write timeout in the socket.
*/
private WriteTimeoutEnforcer(Class> socketClass, Method setSoWriteTimeoutMethod) {
mSocketClassRef = new WeakReference>(socketClass);
mSetSoWriteTimeoutMethodRef =
- (setSoWriteTimeoutMethod == null) ?
- null :
- new WeakReference<>(setSoWriteTimeoutMethod)
+ (setSoWriteTimeoutMethod == null) ?
+ null :
+ new WeakReference<>(setSoWriteTimeoutMethod)
;
}
-
/**
* Calls the {@code #setSoWrite(int)} method of the underlying implementation
* of {@link Socket} if exists.
-
+ *
* Creates and initializes the single instance of the class when needed
*
- * @param writeTimeoutMilliseconds Write timeout to set, in milliseconds.
- * @param socket Client socket to connect with the server.
+ * @param writeTimeoutMilliseconds Write timeout to set, in milliseconds.
+ * @param socket Client socket to connect with the server.
*/
public static void setSoWriteTimeout(int writeTimeoutMilliseconds, Socket socket) {
final Method setSoWriteTimeoutMethod = getMethod(socket);
@@ -93,9 +89,9 @@ public class WriteTimeoutEnforcer {
try {
setSoWriteTimeoutMethod.invoke(socket, writeTimeoutMilliseconds);
Log_OC.i(
- TAG,
- "Write timeout set in socket, writeTimeoutMilliseconds: "
- + writeTimeoutMilliseconds
+ TAG,
+ "Write timeout set in socket, writeTimeoutMilliseconds: "
+ + writeTimeoutMilliseconds
);
} catch (IllegalArgumentException e) {
@@ -112,13 +108,12 @@ public class WriteTimeoutEnforcer {
}
}
-
/**
* Gets the method to invoke trying to minimize the cost of reflection reusing objects cached
* in static members.
*
- * @param socket Instance of the socket to use in connection with server.
- * @return Method to call to set a write timeout in the socket.
+ * @param socket Instance of the socket to use in connection with server.
+ * @return Method to call to set a write timeout in the socket.
*/
private static Method getMethod(Socket socket) {
final Class> socketClass = socket.getClass();
@@ -137,20 +132,19 @@ public class WriteTimeoutEnforcer {
} else {
final Method cachedSetSoWriteTimeoutMethod = instance.mSetSoWriteTimeoutMethodRef.get();
return (cachedSetSoWriteTimeoutMethod == null) ?
- initFrom(socketClass) :
- cachedSetSoWriteTimeoutMethod
- ;
+ initFrom(socketClass) :
+ cachedSetSoWriteTimeoutMethod
+ ;
}
}
-
/**
* Singleton initializer.
- *
+ *
* Uses reflection to extract and 'cache' the method to invoke to set a write timouet in a socket.
*
- * @param socketClass Underlying class providing the implementation of {@link Socket}.
- * @return Method to call to set a write timeout in the socket.
+ * @param socketClass Underlying class providing the implementation of {@link Socket}.
+ * @return Method to call to set a write timeout in the socket.
*/
private static Method initFrom(Class> socketClass) {
Log_OC.i(TAG, "Socket implementation: " + socketClass.getCanonicalName());
@@ -162,8 +156,8 @@ public class WriteTimeoutEnforcer {
} catch (NoSuchMethodException e) {
Log_OC.i(
- TAG,
- "Could not find (SocketImpl)#setSoWriteTimeout(int) method - write timeout not supported"
+ TAG,
+ "Could not find (SocketImpl)#setSoWriteTimeout(int) method - write timeout not supported"
);
}
mSingleInstance.set(new WriteTimeoutEnforcer(socketClass, setSoWriteTimeoutMethod));
diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/operations/ErrorMessageParser.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/operations/ErrorMessageParser.java
new file mode 100644
index 00000000..87c4ddc8
--- /dev/null
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/operations/ErrorMessageParser.java
@@ -0,0 +1,143 @@
+/* ownCloud Android Library is available under MIT license
+ * Copyright (C) 2017 ownCloud GmbH.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ */
+package com.owncloud.android.lib.common.operations;
+
+import android.util.Xml;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+import org.xmlpull.v1.XmlPullParserFactory;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * Parser for server exceptions
+ *
+ * @author davidgonzalez
+ */
+public class ErrorMessageParser {
+ // No namespaces
+ private static final String ns = null;
+
+ // Nodes for XML Parser
+ private static final String NODE_ERROR = "d:error";
+ private static final String NODE_MESSAGE = "s:message";
+
+ /**
+ * Parse exception response
+ *
+ * @param is
+ * @return errorMessage for an exception
+ * @throws XmlPullParserException
+ * @throws IOException
+ */
+ public String parseXMLResponse(InputStream is) throws XmlPullParserException,
+ IOException {
+ String errorMessage = "";
+
+ try {
+ // XMLPullParser
+ XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
+ factory.setNamespaceAware(true);
+
+ XmlPullParser parser = Xml.newPullParser();
+ parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
+ parser.setInput(is, null);
+ parser.nextTag();
+ errorMessage = readError(parser);
+
+ } finally {
+ is.close();
+ }
+ return errorMessage;
+ }
+
+ /**
+ * Parse OCS node
+ *
+ * @param parser
+ * @return reason for exception
+ * @throws XmlPullParserException
+ * @throws IOException
+ */
+ private String readError(XmlPullParser parser) throws XmlPullParserException, IOException {
+ String errorMessage = "";
+ parser.require(XmlPullParser.START_TAG, ns, NODE_ERROR);
+ while (parser.next() != XmlPullParser.END_TAG) {
+ if (parser.getEventType() != XmlPullParser.START_TAG) {
+ continue;
+ }
+ String name = parser.getName();
+ // read NODE_MESSAGE
+ if (name.equalsIgnoreCase(NODE_MESSAGE)) {
+ errorMessage = readText(parser);
+ } else {
+ skip(parser);
+ }
+ }
+ return errorMessage;
+ }
+
+ /**
+ * Skip tags in parser procedure
+ *
+ * @param parser
+ * @throws XmlPullParserException
+ * @throws IOException
+ */
+ private void skip(XmlPullParser parser) throws XmlPullParserException, IOException {
+ if (parser.getEventType() != XmlPullParser.START_TAG) {
+ throw new IllegalStateException();
+ }
+ int depth = 1;
+ while (depth != 0) {
+ switch (parser.next()) {
+ case XmlPullParser.END_TAG:
+ depth--;
+ break;
+ case XmlPullParser.START_TAG:
+ depth++;
+ break;
+ }
+ }
+ }
+
+ /**
+ * Read the text from a node
+ *
+ * @param parser
+ * @return Text of the node
+ * @throws IOException
+ * @throws XmlPullParserException
+ */
+ private String readText(XmlPullParser parser) throws IOException, XmlPullParserException {
+ String result = "";
+ if (parser.next() == XmlPullParser.TEXT) {
+ result = parser.getText();
+ parser.nextTag();
+ }
+ return result;
+ }
+}
\ No newline at end of file
diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/operations/InvalidCharacterExceptionParser.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/operations/InvalidCharacterExceptionParser.java
new file mode 100644
index 00000000..08586922
--- /dev/null
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/operations/InvalidCharacterExceptionParser.java
@@ -0,0 +1,150 @@
+
+/* ownCloud Android Library is available under MIT license
+ * Copyright (C) 2016 ownCloud GmbH.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ */
+package com.owncloud.android.lib.common.operations;
+
+import android.util.Xml;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+import org.xmlpull.v1.XmlPullParserFactory;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * Parser for Invalid Character server exception
+ *
+ * @author masensio
+ */
+public class InvalidCharacterExceptionParser {
+
+ private static final String EXCEPTION_STRING = "OC\\Connector\\Sabre\\Exception\\InvalidPath";
+ private static final String EXCEPTION_UPLOAD_STRING = "OCP\\Files\\InvalidPathException";
+
+ // No namespaces
+ private static final String ns = null;
+
+ // Nodes for XML Parser
+ private static final String NODE_ERROR = "d:error";
+ private static final String NODE_EXCEPTION = "s:exception";
+
+ /**
+ * Parse is as an Invalid Path Exception
+ *
+ * @param is
+ * @return if The exception is an Invalid Char Exception
+ * @throws XmlPullParserException
+ * @throws IOException
+ */
+ public boolean parseXMLResponse(InputStream is) throws XmlPullParserException,
+ IOException {
+ boolean result = false;
+
+ try {
+ // XMLPullParser
+ XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
+ factory.setNamespaceAware(true);
+
+ XmlPullParser parser = Xml.newPullParser();
+ parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
+ parser.setInput(is, null);
+ parser.nextTag();
+ result = readError(parser);
+
+ } finally {
+ is.close();
+ }
+ return result;
+ }
+
+ /**
+ * Parse OCS node
+ *
+ * @param parser
+ * @return List of ShareRemoteFiles
+ * @throws XmlPullParserException
+ * @throws IOException
+ */
+ private boolean readError(XmlPullParser parser) throws XmlPullParserException, IOException {
+ String exception = "";
+ parser.require(XmlPullParser.START_TAG, ns, NODE_ERROR);
+ while (parser.next() != XmlPullParser.END_TAG) {
+ if (parser.getEventType() != XmlPullParser.START_TAG) {
+ continue;
+ }
+ String name = parser.getName();
+ // read NODE_EXCEPTION
+ if (name.equalsIgnoreCase(NODE_EXCEPTION)) {
+ exception = readText(parser);
+ } else {
+ skip(parser);
+ }
+
+ }
+ return exception.equalsIgnoreCase(EXCEPTION_STRING) ||
+ exception.equalsIgnoreCase(EXCEPTION_UPLOAD_STRING);
+ }
+
+ /**
+ * Skip tags in parser procedure
+ *
+ * @param parser
+ * @throws XmlPullParserException
+ * @throws IOException
+ */
+ private void skip(XmlPullParser parser) throws XmlPullParserException, IOException {
+ if (parser.getEventType() != XmlPullParser.START_TAG) {
+ throw new IllegalStateException();
+ }
+ int depth = 1;
+ while (depth != 0) {
+ switch (parser.next()) {
+ case XmlPullParser.END_TAG:
+ depth--;
+ break;
+ case XmlPullParser.START_TAG:
+ depth++;
+ break;
+ }
+ }
+ }
+
+ /**
+ * Read the text from a node
+ *
+ * @param parser
+ * @return Text of the node
+ * @throws IOException
+ * @throws XmlPullParserException
+ */
+ private String readText(XmlPullParser parser) throws IOException, XmlPullParserException {
+ String result = "";
+ if (parser.next() == XmlPullParser.TEXT) {
+ result = parser.getText();
+ parser.nextTag();
+ }
+ return result;
+ }
+}
diff --git a/src/com/owncloud/android/lib/common/operations/OnRemoteOperationListener.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/operations/OnRemoteOperationListener.java
similarity index 86%
rename from src/com/owncloud/android/lib/common/operations/OnRemoteOperationListener.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/operations/OnRemoteOperationListener.java
index 495b8749..065b2df8 100644
--- a/src/com/owncloud/android/lib/common/operations/OnRemoteOperationListener.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/operations/OnRemoteOperationListener.java
@@ -1,22 +1,22 @@
/* ownCloud Android Library is available under MIT license
* Copyright (C) 2016 ownCloud GmbH.
- *
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
@@ -24,9 +24,8 @@
package com.owncloud.android.lib.common.operations;
-
public interface OnRemoteOperationListener {
- void onRemoteOperationFinish(RemoteOperation caller, RemoteOperationResult result);
-
+ void onRemoteOperationFinish(RemoteOperation caller, RemoteOperationResult result);
+
}
diff --git a/src/com/owncloud/android/lib/common/operations/OperationCancelledException.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/operations/OperationCancelledException.java
similarity index 92%
rename from src/com/owncloud/android/lib/common/operations/OperationCancelledException.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/operations/OperationCancelledException.java
index c637618b..5ee915eb 100644
--- a/src/com/owncloud/android/lib/common/operations/OperationCancelledException.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/operations/OperationCancelledException.java
@@ -1,22 +1,22 @@
/* ownCloud Android Library is available under MIT license
* Copyright (C) 2016 ownCloud GmbH.
- *
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
diff --git a/src/com/owncloud/android/lib/common/operations/RemoteOperation.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/operations/RemoteOperation.java
similarity index 96%
rename from src/com/owncloud/android/lib/common/operations/RemoteOperation.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/operations/RemoteOperation.java
index 9c769aee..fc8fd3d4 100644
--- a/src/com/owncloud/android/lib/common/operations/RemoteOperation.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/operations/RemoteOperation.java
@@ -12,25 +12,21 @@ import com.owncloud.android.lib.common.OwnCloudClient;
import com.owncloud.android.lib.common.OwnCloudClientManagerFactory;
import com.owncloud.android.lib.common.accounts.AccountUtils;
import com.owncloud.android.lib.common.utils.Log_OC;
+import okhttp3.OkHttpClient;
import java.io.IOException;
-import okhttp3.OkHttpClient;
-
public abstract class RemoteOperation implements Runnable {
- private static final String TAG = RemoteOperation.class.getSimpleName();
-
/**
* OCS API header name
*/
public static final String OCS_API_HEADER = "OCS-APIREQUEST";
-
/**
* OCS API header value
*/
public static final String OCS_API_HEADER_VALUE = "true";
-
+ private static final String TAG = RemoteOperation.class.getSimpleName();
/**
* ownCloud account in the remote ownCloud server to operate
*/
@@ -61,10 +57,9 @@ public abstract class RemoteOperation implements Runnable {
*/
protected Handler mListenerHandler = null;
-
/**
* Asynchronously executes the remote operation
- *
+ *
* This method should be used whenever an ownCloud account is available,
* instead of {@link #execute(OwnCloudClient, OnRemoteOperationListener, Handler))}.
*
@@ -79,12 +74,14 @@ public abstract class RemoteOperation implements Runnable {
public Thread execute(Account account, Context context,
OnRemoteOperationListener listener, Handler listenerHandler) {
- if (account == null)
+ if (account == null) {
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");
+ }
// mAccount and mContext in the runnerThread to create below
mAccount = account;
mContext = context.getApplicationContext();
@@ -99,7 +96,6 @@ public abstract class RemoteOperation implements Runnable {
return runnerThread;
}
-
/**
* Asynchronously executes the remote operation
*
@@ -168,9 +164,9 @@ public abstract class RemoteOperation implements Runnable {
/**
* Synchronously executes the remote operation on the received ownCloud account.
- *
+ *
* 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)}.
*
@@ -180,22 +176,23 @@ public abstract class RemoteOperation implements Runnable {
* @return Result of the operation.
*/
public RemoteOperationResult execute(Account account, Context context) {
- if (account == null)
+ if (account == null) {
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");
+ }
mAccount = account;
mContext = context.getApplicationContext();
return runOperation();
}
-
/**
* Synchronously executes the remote operation
- *
+ *
* Do not call this method from the main thread.
*
* @param client Client object to reach an ownCloud server during the execution of
@@ -203,9 +200,10 @@ public abstract class RemoteOperation implements Runnable {
* @return Result of the operation.
*/
public RemoteOperationResult execute(OwnCloudClient client) {
- if (client == null)
+ if (client == null) {
throw new IllegalArgumentException("Trying to execute a remote operation with a NULL " +
"OwnCloudClient");
+ }
mClient = client;
if (client.getAccount() != null) {
mAccount = client.getAccount().getSavedAccount();
@@ -217,7 +215,7 @@ public abstract class RemoteOperation implements Runnable {
/**
* Synchronously executes the remote operation
- *
+ *
* Do not call this method from the main thread.
*
* @param client Client object to reach an ownCloud server during the execution of
@@ -225,9 +223,10 @@ public abstract class RemoteOperation implements Runnable {
* @return Result of the operation.
*/
public RemoteOperationResult execute(OkHttpClient client, Context context) {
- if (client == null)
+ if (client == null) {
throw new IllegalArgumentException("Trying to execute a remote operation with a NULL " +
"OwnCloudClient");
+ }
mHttpClient = client;
mContext = context;
@@ -236,12 +235,12 @@ public abstract class RemoteOperation implements Runnable {
/**
* Run operation for asynchronous or synchronous 'onExecute' method.
- *
+ *
* Considers and performs silent refresh of account credentials if possible, and if
* {@link RemoteOperation#setSilentRefreshOfAccountCredentials(boolean)} was called with
* parameter 'true' before the execution.
*
- * @return Remote operation result
+ * @return Remote operation result
*/
private RemoteOperationResult runOperation() {
diff --git a/src/com/owncloud/android/lib/common/operations/RemoteOperationResult.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/operations/RemoteOperationResult.java
similarity index 97%
rename from src/com/owncloud/android/lib/common/operations/RemoteOperationResult.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/operations/RemoteOperationResult.java
index 5d73f181..18d417fc 100644
--- a/src/com/owncloud/android/lib/common/operations/RemoteOperationResult.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/operations/RemoteOperationResult.java
@@ -1,5 +1,5 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
+ * Copyright (C) 2019 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -27,14 +27,18 @@ package com.owncloud.android.lib.common.operations;
import android.accounts.Account;
import android.accounts.AccountsException;
+import at.bitfire.dav4android.exception.DavException;
+import at.bitfire.dav4android.exception.HttpException;
import com.owncloud.android.lib.common.accounts.AccountUtils;
import com.owncloud.android.lib.common.http.HttpConstants;
import com.owncloud.android.lib.common.http.methods.HttpBaseMethod;
import com.owncloud.android.lib.common.network.CertificateCombinedException;
import com.owncloud.android.lib.common.utils.Log_OC;
-
+import okhttp3.Headers;
import org.json.JSONException;
+import javax.net.ssl.SSLException;
+import javax.net.ssl.SSLPeerUnverifiedException;
import java.io.ByteArrayInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
@@ -48,13 +52,6 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
-import javax.net.ssl.SSLException;
-import javax.net.ssl.SSLPeerUnverifiedException;
-
-import at.bitfire.dav4android.exception.DavException;
-import at.bitfire.dav4android.exception.HttpException;
-import okhttp3.Headers;
-
public class RemoteOperationResult
implements Serializable {
@@ -64,61 +61,6 @@ public class RemoteOperationResult
private static final long serialVersionUID = 4968939884332372230L;
private static final String TAG = RemoteOperationResult.class.getSimpleName();
-
- public enum ResultCode {
- OK,
- OK_SSL,
- OK_NO_SSL,
- UNHANDLED_HTTP_CODE,
- UNAUTHORIZED,
- FILE_NOT_FOUND,
- INSTANCE_NOT_CONFIGURED,
- UNKNOWN_ERROR,
- WRONG_CONNECTION,
- TIMEOUT,
- INCORRECT_ADDRESS,
- HOST_NOT_AVAILABLE,
- NO_NETWORK_CONNECTION,
- SSL_ERROR,
- SSL_RECOVERABLE_PEER_UNVERIFIED,
- BAD_OC_VERSION,
- CANCELLED,
- INVALID_LOCAL_FILE_NAME,
- INVALID_OVERWRITE,
- CONFLICT,
- OAUTH2_ERROR,
- SYNC_CONFLICT,
- LOCAL_STORAGE_FULL,
- LOCAL_STORAGE_NOT_MOVED,
- LOCAL_STORAGE_NOT_COPIED,
- OAUTH2_ERROR_ACCESS_DENIED,
- QUOTA_EXCEEDED,
- ACCOUNT_NOT_FOUND,
- ACCOUNT_EXCEPTION,
- ACCOUNT_NOT_NEW,
- ACCOUNT_NOT_THE_SAME,
- INVALID_CHARACTER_IN_NAME,
- SHARE_NOT_FOUND,
- LOCAL_STORAGE_NOT_REMOVED,
- FORBIDDEN,
- SHARE_FORBIDDEN,
- SPECIFIC_FORBIDDEN,
- OK_REDIRECT_TO_NON_SECURE_CONNECTION,
- INVALID_MOVE_INTO_DESCENDANT,
- INVALID_COPY_INTO_DESCENDANT,
- PARTIAL_MOVE_DONE,
- PARTIAL_COPY_DONE,
- SHARE_WRONG_PARAMETER,
- WRONG_SERVER_RESPONSE,
- INVALID_CHARACTER_DETECT_IN_SERVER,
- DELAYED_FOR_WIFI,
- LOCAL_FILE_NOT_FOUND,
- SERVICE_UNAVAILABLE,
- SPECIFIC_SERVICE_UNAVAILABLE,
- SPECIFIC_UNSUPPORTED_MEDIA_TYPE,
- SPECIFIC_METHOD_NOT_ALLOWED
- }
-
private boolean mSuccess = false;
private int mHttpCode = -1;
private String mHttpPhrase = null;
@@ -128,10 +70,9 @@ public class RemoteOperationResult
private ArrayList mAuthenticate = new ArrayList<>();
private String mLastPermanentLocation = null;
private T mData = null;
-
/**
* Public constructor from result code.
- *
+ *
* To be used when the caller takes the responsibility of interpreting the result of a {@link RemoteOperation}
*
* @param code {@link ResultCode} decided by the caller.
@@ -146,6 +87,7 @@ public class RemoteOperationResult
/**
* Create a new RemoteOperationResult based on the result given by a previous one.
* It does not copy the data.
+ *
* @param prevRemoteOperation
*/
public RemoteOperationResult(RemoteOperationResult prevRemoteOperation) {
@@ -161,9 +103,9 @@ public class RemoteOperationResult
/**
* Public constructor from exception.
- *
+ *
* To be used when an exception prevented the end of the {@link RemoteOperation}.
- *
+ *
* Determines a {@link ResultCode} depending on the type of the exception.
*
* @param e Exception that interrupted the {@link RemoteOperation}
@@ -193,7 +135,7 @@ public class RemoteOperationResult
mCode = ResultCode.ACCOUNT_EXCEPTION;
} else if (e instanceof SSLException || e instanceof RuntimeException) {
- if(e instanceof SSLPeerUnverifiedException) {
+ if (e instanceof SSLPeerUnverifiedException) {
mCode = ResultCode.SSL_RECOVERABLE_PEER_UNVERIFIED;
} else {
CertificateCombinedException se = getCertificateCombinedException(e);
@@ -220,9 +162,9 @@ public class RemoteOperationResult
/**
* Public constructor from separate elements of an HTTP or DAV response.
- *
+ *
* To be used when the result needs to be interpreted from the response of an HTTP/DAV method.
- *
+ *
* Determines a {@link ResultCode} from the already executed method received as a parameter. Generally,
* will depend on the HTTP code and HTTP response headers received. In some cases will inspect also the
* response body
@@ -285,44 +227,18 @@ public class RemoteOperationResult
}
}
- /**
- * Parse the error message included in the body response, if any, and set the specific result
- * code
- *
- * @param bodyResponse okHttp response body
- * @param resultCode our own custom result code
- * @throws IOException
- */
- private void parseErrorMessageAndSetCode(String bodyResponse, ResultCode resultCode) {
-
- if (bodyResponse != null && bodyResponse.length() > 0) {
- InputStream is = new ByteArrayInputStream(bodyResponse.getBytes());
- ErrorMessageParser xmlParser = new ErrorMessageParser();
- try {
- String errorMessage = xmlParser.parseXMLResponse(is);
- if (errorMessage != "" && errorMessage != null) {
- mCode = resultCode;
- mHttpPhrase = errorMessage;
- }
- } catch (Exception e) {
- Log_OC.w(TAG, "Error reading exception from server: " + e.getMessage());
- // mCode stays as set in this(success, httpCode, headers)
- }
- }
- }
-
/**
* Public constructor from separate elements of an HTTP or DAV response.
- *
+ *
* To be used when the result needs to be interpreted from HTTP response elements that could come from
* different requests (WARNING: black magic, try to avoid).
- *
- *
+ *
+ *
* Determines a {@link ResultCode} depending on the HTTP code and HTTP response headers received.
*
- * @param httpCode HTTP status code returned by an HTTP/DAV method.
- * @param httpPhrase HTTP status line phrase returned by an HTTP/DAV method
- * @param headers HTTP response header returned by an HTTP/DAV method
+ * @param httpCode HTTP status code returned by an HTTP/DAV method.
+ * @param httpPhrase HTTP status line phrase returned by an HTTP/DAV method
+ * @param headers HTTP response header returned by an HTTP/DAV method
*/
public RemoteOperationResult(int httpCode, String httpPhrase, Headers headers) {
this(httpCode, httpPhrase);
@@ -345,7 +261,7 @@ public class RemoteOperationResult
/**
* Private constructor for results built interpreting a HTTP or DAV response.
- *
+ *
* Determines a {@link ResultCode} depending of the type of the exception.
*
* @param httpCode HTTP status code returned by the HTTP/DAV method.
@@ -389,11 +305,40 @@ public class RemoteOperationResult
}
}
+ /**
+ * Parse the error message included in the body response, if any, and set the specific result
+ * code
+ *
+ * @param bodyResponse okHttp response body
+ * @param resultCode our own custom result code
+ * @throws IOException
+ */
+ private void parseErrorMessageAndSetCode(String bodyResponse, ResultCode resultCode) {
+
+ if (bodyResponse != null && bodyResponse.length() > 0) {
+ InputStream is = new ByteArrayInputStream(bodyResponse.getBytes());
+ ErrorMessageParser xmlParser = new ErrorMessageParser();
+ try {
+ String errorMessage = xmlParser.parseXMLResponse(is);
+ if (errorMessage != "" && errorMessage != null) {
+ mCode = resultCode;
+ mHttpPhrase = errorMessage;
+ }
+ } catch (Exception e) {
+ Log_OC.w(TAG, "Error reading exception from server: " + e.getMessage());
+ // mCode stays as set in this(success, httpCode, headers)
+ }
+ }
+ }
public boolean isSuccess() {
return mSuccess;
}
+ public void setSuccess(boolean success) {
+ this.mSuccess = success;
+ }
+
public boolean isCancelled() {
return mCode == ResultCode.CANCELLED;
}
@@ -459,10 +404,11 @@ public class RemoteOperationResult
return "Unknown host exception";
} else if (mException instanceof CertificateCombinedException) {
- if (((CertificateCombinedException) mException).isRecoverable())
+ if (((CertificateCombinedException) mException).isRecoverable()) {
return "SSL recoverable exception";
- else
+ } else {
return "SSL exception";
+ }
} else if (mException instanceof SSLException) {
return "SSL exception";
@@ -572,15 +518,65 @@ public class RemoteOperationResult
mLastPermanentLocation = lastPermanentLocation;
}
- public void setSuccess(boolean success) {
- this.mSuccess = success;
+ public T getData() {
+ return mData;
}
public void setData(T data) {
mData = data;
}
- public T getData() {
- return mData;
+ public enum ResultCode {
+ OK,
+ OK_SSL,
+ OK_NO_SSL,
+ UNHANDLED_HTTP_CODE,
+ UNAUTHORIZED,
+ FILE_NOT_FOUND,
+ INSTANCE_NOT_CONFIGURED,
+ UNKNOWN_ERROR,
+ WRONG_CONNECTION,
+ TIMEOUT,
+ INCORRECT_ADDRESS,
+ HOST_NOT_AVAILABLE,
+ NO_NETWORK_CONNECTION,
+ SSL_ERROR,
+ SSL_RECOVERABLE_PEER_UNVERIFIED,
+ BAD_OC_VERSION,
+ CANCELLED,
+ INVALID_LOCAL_FILE_NAME,
+ INVALID_OVERWRITE,
+ CONFLICT,
+ OAUTH2_ERROR,
+ SYNC_CONFLICT,
+ LOCAL_STORAGE_FULL,
+ LOCAL_STORAGE_NOT_MOVED,
+ LOCAL_STORAGE_NOT_COPIED,
+ OAUTH2_ERROR_ACCESS_DENIED,
+ QUOTA_EXCEEDED,
+ ACCOUNT_NOT_FOUND,
+ ACCOUNT_EXCEPTION,
+ ACCOUNT_NOT_NEW,
+ ACCOUNT_NOT_THE_SAME,
+ INVALID_CHARACTER_IN_NAME,
+ SHARE_NOT_FOUND,
+ LOCAL_STORAGE_NOT_REMOVED,
+ FORBIDDEN,
+ SHARE_FORBIDDEN,
+ SPECIFIC_FORBIDDEN,
+ OK_REDIRECT_TO_NON_SECURE_CONNECTION,
+ INVALID_MOVE_INTO_DESCENDANT,
+ INVALID_COPY_INTO_DESCENDANT,
+ PARTIAL_MOVE_DONE,
+ PARTIAL_COPY_DONE,
+ SHARE_WRONG_PARAMETER,
+ WRONG_SERVER_RESPONSE,
+ INVALID_CHARACTER_DETECT_IN_SERVER,
+ DELAYED_FOR_WIFI,
+ LOCAL_FILE_NOT_FOUND,
+ SERVICE_UNAVAILABLE,
+ SPECIFIC_SERVICE_UNAVAILABLE,
+ SPECIFIC_UNSUPPORTED_MEDIA_TYPE,
+ SPECIFIC_METHOD_NOT_ALLOWED
}
}
\ No newline at end of file
diff --git a/src/com/owncloud/android/lib/common/utils/Log_OC.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/utils/Log_OC.java
similarity index 76%
rename from src/com/owncloud/android/lib/common/utils/Log_OC.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/utils/Log_OC.java
index ca30f1d8..bdfc2645 100644
--- a/src/com/owncloud/android/lib/common/utils/Log_OC.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/utils/Log_OC.java
@@ -8,6 +8,7 @@ import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
+import java.util.Locale;
public class Log_OC {
private static final String SIMPLE_DATE_FORMAT = "yyyy/MM/dd HH:mm:ss";
@@ -25,50 +26,53 @@ public class Log_OC {
private static boolean isMaxFileSizeReached = false;
private static boolean isEnabled = false;
- public static void setLogDataFolder(String logFolder){
- mOwncloudDataFolderLog = logFolder;
+ public static void setLogDataFolder(String logFolder) {
+ mOwncloudDataFolderLog = logFolder;
}
- public static void i(String TAG, String message){
+ public static void i(String TAG, String message) {
Log.i(TAG, message);
- appendLog(TAG+" : "+ message);
+ appendLog(TAG + " : " + message);
}
- public static void d(String TAG, String message){
+ public static void d(String TAG, String message) {
Log.d(TAG, message);
appendLog(TAG + " : " + message);
}
+
public static void d(String TAG, String message, Exception e) {
Log.d(TAG, message, e);
- appendLog(TAG + " : " + message + " Exception : "+ e.getStackTrace());
+ appendLog(TAG + " : " + message + " Exception : " + e.getStackTrace());
}
- public static void e(String TAG, String message){
+
+ public static void e(String TAG, String message) {
Log.e(TAG, message);
appendLog(TAG + " : " + message);
}
-
+
public static void e(String TAG, String message, Throwable e) {
Log.e(TAG, message, e);
- appendLog(TAG+" : " + message +" Exception : " + e.getStackTrace());
+ appendLog(TAG + " : " + message + " Exception : " + e.getStackTrace());
}
-
- public static void v(String TAG, String message){
+
+ public static void v(String TAG, String message) {
Log.v(TAG, message);
- appendLog(TAG+" : "+ message);
+ appendLog(TAG + " : " + message);
}
-
+
public static void w(String TAG, String message) {
Log.w(TAG, message);
- appendLog(TAG+" : "+ message);
+ appendLog(TAG + " : " + message);
}
/**
* Start doing logging
+ *
* @param storagePath : directory for keeping logs
*/
synchronized public static void startLogging(String storagePath) {
- String logPath = storagePath + File.separator +
- mOwncloudDataFolderLog + File.separator + LOG_FOLDER_NAME;
+ String logPath = storagePath + File.separator +
+ mOwncloudDataFolderLog + File.separator + LOG_FOLDER_NAME;
mFolder = new File(logPath);
mLogFile = new File(mFolder + File.separator + mLogFileNames[0]);
@@ -80,7 +84,7 @@ public class Log_OC {
Log.d("LOG_OC", "Log file created");
}
- try {
+ try {
// Create the current log file if does not exist
mLogFile.createNewFile();
@@ -94,10 +98,10 @@ public class Log_OC {
} catch (IOException e) {
e.printStackTrace();
} finally {
- if(mBuf != null) {
+ if (mBuf != null) {
try {
mBuf.close();
- } catch(IOException e) {
+ } catch (IOException e) {
e.printStackTrace();
}
}
@@ -106,15 +110,15 @@ public class Log_OC {
synchronized public static void stopLogging() {
try {
- if (mBuf != null)
+ if (mBuf != null) {
mBuf.close();
+ }
isEnabled = false;
mLogFile = null;
mFolder = null;
mBuf = null;
isMaxFileSizeReached = false;
- isEnabled = false;
} catch (IOException e) {
// Because we are stopping logging, we only log to Android console.
@@ -132,15 +136,15 @@ public class Log_OC {
*/
public static void deleteHistoryLogging() {
File folderLogs = new File(mFolder + File.separator);
- if(folderLogs.isDirectory()){
+ if (folderLogs.isDirectory()) {
String[] myFiles = folderLogs.list();
- for (int i=0; i
* Allows renaming the moving file/folder at the same time.
*
* @author David A. Velasco
@@ -112,14 +112,13 @@ public class CopyRemoteFileOperation extends RemoteOperation {
final int status = client.executeHttpMethod(copyMethod);
- if(status == HttpConstants.HTTP_CREATED || status == HttpConstants.HTTP_NO_CONTENT) {
+ if (status == HttpConstants.HTTP_CREATED || status == HttpConstants.HTTP_NO_CONTENT) {
result = new RemoteOperationResult<>(ResultCode.OK);
} else if (status == HttpConstants.HTTP_PRECONDITION_FAILED && !mOverwrite) {
result = new RemoteOperationResult<>(ResultCode.INVALID_OVERWRITE);
client.exhaustResponse(copyMethod.getResponseBodyAsStream());
-
/// for other errors that could be explicitly handled, check first:
/// http://www.webdav.org/specs/rfc4918.html#rfc.section.9.9.4
diff --git a/src/com/owncloud/android/lib/resources/files/CreateRemoteFolderOperation.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/CreateRemoteFolderOperation.java
similarity index 94%
rename from src/com/owncloud/android/lib/resources/files/CreateRemoteFolderOperation.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/CreateRemoteFolderOperation.java
index 6eb7947d..04a1c4bb 100644
--- a/src/com/owncloud/android/lib/resources/files/CreateRemoteFolderOperation.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/CreateRemoteFolderOperation.java
@@ -1,22 +1,22 @@
/* ownCloud Android Library is available under MIT license
* Copyright (C) 2016 ownCloud GmbH.
- *
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
@@ -24,23 +24,21 @@
package com.owncloud.android.lib.resources.files;
-
import android.net.Uri;
import com.owncloud.android.lib.common.OwnCloudClient;
import com.owncloud.android.lib.common.http.HttpConstants;
import com.owncloud.android.lib.common.http.methods.webdav.MkColMethod;
import com.owncloud.android.lib.common.network.WebdavUtils;
-import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
import com.owncloud.android.lib.common.operations.RemoteOperation;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
+import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
import com.owncloud.android.lib.common.utils.Log_OC;
import com.owncloud.android.lib.resources.status.OwnCloudVersion;
import java.net.URL;
import java.util.concurrent.TimeUnit;
-
/**
* Remote operation performing the creation of a new folder in the ownCloud server.
*
@@ -60,6 +58,7 @@ public class CreateRemoteFolderOperation extends RemoteOperation {
/**
* Constructor
+ *
* @param remotePath Full path to the new directory to create in the remote server.
* @param createFullPath 'True' means that all the ancestor folders should be created.
*/
@@ -79,12 +78,12 @@ public class CreateRemoteFolderOperation extends RemoteOperation {
RemoteOperationResult result;
OwnCloudVersion version = client.getOwnCloudVersion();
boolean versionWithForbiddenChars =
- (version != null && version.isVersionWithForbiddenCharacters());
+ (version != null && version.isVersionWithForbiddenCharacters());
boolean noInvalidChars = FileUtils.isValidPath(mRemotePath, versionWithForbiddenChars);
if (noInvalidChars) {
result = createFolder(client);
if (!result.isSuccess() && mCreateFullPath &&
- RemoteOperationResult.ResultCode.CONFLICT == result.getCode()) {
+ RemoteOperationResult.ResultCode.CONFLICT == result.getCode()) {
result = createParentFolder(FileUtils.getParentPath(mRemotePath), client);
if (result.isSuccess()) {
result = createFolder(client); // second (and last) try
diff --git a/src/com/owncloud/android/lib/resources/files/DownloadRemoteFileOperation.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/DownloadRemoteFileOperation.java
similarity index 92%
rename from src/com/owncloud/android/lib/resources/files/DownloadRemoteFileOperation.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/DownloadRemoteFileOperation.java
index b9f35633..16699e3b 100644
--- a/src/com/owncloud/android/lib/resources/files/DownloadRemoteFileOperation.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/DownloadRemoteFileOperation.java
@@ -1,22 +1,22 @@
/* ownCloud Android Library is available under MIT license
* Copyright (C) 2016 ownCloud GmbH.
- *
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
@@ -56,9 +56,8 @@ public class DownloadRemoteFileOperation extends RemoteOperation {
private static final String TAG = DownloadRemoteFileOperation.class.getSimpleName();
private static final int FORBIDDEN_ERROR = 403;
private static final int SERVICE_UNAVAILABLE_ERROR = 503;
-
- private Set mDataTransferListeners = new HashSet<>();
private final AtomicBoolean mCancellationRequested = new AtomicBoolean(false);
+ private Set mDataTransferListeners = new HashSet<>();
private long mModificationTimestamp = 0;
private String mEtag = "";
private GetMethod mGet;
@@ -83,18 +82,17 @@ public class DownloadRemoteFileOperation extends RemoteOperation {
tmpFile.getParentFile().mkdirs();
result = downloadFile(client, tmpFile);
Log_OC.i(TAG, "Download of " + mRemotePath + " to " + getTmpPath() + ": " +
- result.getLogMessage());
+ result.getLogMessage());
} catch (Exception e) {
result = new RemoteOperationResult<>(e);
Log_OC.e(TAG, "Download of " + mRemotePath + " to " + getTmpPath() + ": " +
- result.getLogMessage(), e);
+ result.getLogMessage(), e);
}
return result;
}
-
private RemoteOperationResult downloadFile(OwnCloudClient client, File targetFile) throws
Exception {
@@ -118,8 +116,8 @@ public class DownloadRemoteFileOperation extends RemoteOperation {
long totalToTransfer =
(contentLength != null
&& contentLength.length() > 0)
- ? Long.parseLong(contentLength)
- : 0;
+ ? Long.parseLong(contentLength)
+ : 0;
byte[] bytes = new byte[4096];
int readResult;
@@ -136,7 +134,7 @@ public class DownloadRemoteFileOperation extends RemoteOperation {
it = mDataTransferListeners.iterator();
while (it.hasNext()) {
it.next().onTransferProgress(readResult, transferred, totalToTransfer,
- targetFile.getName());
+ targetFile.getName());
}
}
}
@@ -144,8 +142,8 @@ public class DownloadRemoteFileOperation extends RemoteOperation {
savedFile = true;
final String modificationTime =
mGet.getResponseHeaders().get("Last-Modified") != null
- ? mGet.getResponseHeaders().get("Last-Modified")
- : mGet.getResponseHeader("last-modified");
+ ? mGet.getResponseHeaders().get("Last-Modified")
+ : mGet.getResponseHeader("last-modified");
if (modificationTime != null) {
final Date d = WebdavUtils.parseResponseDate(modificationTime);
@@ -177,8 +175,12 @@ public class DownloadRemoteFileOperation extends RemoteOperation {
? new RemoteOperationResult<>(RemoteOperationResult.ResultCode.OK)
: new RemoteOperationResult<>(mGet);
} finally {
- if (fos != null) fos.close();
- if (bis != null) bis.close();
+ if (fos != null) {
+ fos.close();
+ }
+ if (bis != null) {
+ bis.close();
+ }
if (!savedFile && targetFile.exists()) {
targetFile.delete();
}
diff --git a/src/com/owncloud/android/lib/resources/files/ExistenceCheckRemoteOperation.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/ExistenceCheckRemoteOperation.java
similarity index 99%
rename from src/com/owncloud/android/lib/resources/files/ExistenceCheckRemoteOperation.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/ExistenceCheckRemoteOperation.java
index 71d8060b..4bb2e760 100644
--- a/src/com/owncloud/android/lib/resources/files/ExistenceCheckRemoteOperation.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/ExistenceCheckRemoteOperation.java
@@ -1,5 +1,5 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
+ * Copyright (C) 2019 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/FileUtils.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/FileUtils.java
new file mode 100644
index 00000000..f0165505
--- /dev/null
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/FileUtils.java
@@ -0,0 +1,85 @@
+/* ownCloud Android Library is available under MIT license
+ * Copyright (C) 2019 ownCloud GmbH.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ */
+
+package com.owncloud.android.lib.resources.files;
+
+import com.owncloud.android.lib.common.utils.Log_OC;
+
+import java.io.File;
+
+public class FileUtils {
+
+ public static final String PATH_SEPARATOR = "/";
+ public static final String FINAL_CHUNKS_FILE = ".file";
+ private static final String TAG = FileUtils.class.getSimpleName();
+
+ public static String getParentPath(String remotePath) {
+ String parentPath = new File(remotePath).getParent();
+ parentPath = parentPath.endsWith(PATH_SEPARATOR) ? parentPath : parentPath + PATH_SEPARATOR;
+ return parentPath;
+ }
+
+ /**
+ * Validate the fileName to detect if contains any forbidden character: / , \ , < , > ,
+ * : , " , | , ? , *
+ *
+ * @param fileName
+ * @param versionSupportsForbiddenChars
+ * @return
+ */
+ public static boolean isValidName(String fileName, boolean versionSupportsForbiddenChars) {
+ boolean result = true;
+
+ Log_OC.d(TAG, "fileName =======" + fileName);
+ if ((versionSupportsForbiddenChars && fileName.contains(PATH_SEPARATOR)) ||
+ (!versionSupportsForbiddenChars && (fileName.contains(PATH_SEPARATOR) ||
+ fileName.contains("\\") || fileName.contains("<") || fileName.contains(">") ||
+ fileName.contains(":") || fileName.contains("\"") || fileName.contains("|") ||
+ fileName.contains("?") || fileName.contains("*")))) {
+
+ result = false;
+ }
+ return result;
+ }
+
+ /**
+ * Validate the path to detect if contains any forbidden character: \ , < , > , : , " , | ,
+ * ? , *
+ *
+ * @param path
+ * @return
+ */
+ public static boolean isValidPath(String path, boolean versionSupportsForbidenChars) {
+ boolean result = true;
+
+ Log_OC.d(TAG, "path ....... " + path);
+ if (!versionSupportsForbidenChars &&
+ (path.contains("\\") || path.contains("<") || path.contains(">") ||
+ path.contains(":") || path.contains("\"") || path.contains("|") ||
+ path.contains("?") || path.contains("*"))) {
+ result = false;
+ }
+ return result;
+ }
+}
\ No newline at end of file
diff --git a/src/com/owncloud/android/lib/resources/files/MoveRemoteFileOperation.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/MoveRemoteFileOperation.java
similarity index 93%
rename from src/com/owncloud/android/lib/resources/files/MoveRemoteFileOperation.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/MoveRemoteFileOperation.java
index f2cda2fa..2bebe540 100644
--- a/src/com/owncloud/android/lib/resources/files/MoveRemoteFileOperation.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/MoveRemoteFileOperation.java
@@ -1,22 +1,22 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
- *
+ * Copyright (C) 2019 ownCloud GmbH.
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
@@ -31,9 +31,9 @@ import com.owncloud.android.lib.common.OwnCloudClient;
import com.owncloud.android.lib.common.http.HttpConstants;
import com.owncloud.android.lib.common.http.methods.webdav.MoveMethod;
import com.owncloud.android.lib.common.network.WebdavUtils;
-import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
import com.owncloud.android.lib.common.operations.RemoteOperation;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
+import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
import com.owncloud.android.lib.resources.status.OwnCloudVersion;
import java.net.URL;
@@ -42,7 +42,7 @@ import java.util.concurrent.TimeUnit;
/**
* Remote operation moving a remote file or folder in the ownCloud server to a different folder
* in the same account.
- *
+ *
* Allows renaming the moving file/folder at the same time.
*
* @author David A. Velasco
@@ -65,7 +65,7 @@ public class MoveRemoteFileOperation extends RemoteOperation {
/**
* Constructor.
- *
+ *
* TODO Paths should finish in "/" in the case of folders. ?
*
* @param srcRemotePath Remote path of the file/folder to move.
@@ -90,7 +90,7 @@ public class MoveRemoteFileOperation extends RemoteOperation {
OwnCloudVersion version = client.getOwnCloudVersion();
boolean versionWithForbiddenChars =
- (version != null && version.isVersionWithForbiddenCharacters());
+ (version != null && version.isVersionWithForbiddenCharacters());
/// check parameters
if (!FileUtils.isValidPath(mTargetRemotePath, versionWithForbiddenChars)) {
@@ -115,7 +115,7 @@ public class MoveRemoteFileOperation extends RemoteOperation {
final MoveMethod move = new MoveMethod(
new URL(srcWebDavUri + WebdavUtils.encodePath(mSrcRemotePath)),
- client.getUserFilesWebDavUri() + WebdavUtils.encodePath(mTargetRemotePath),
+ client.getUserFilesWebDavUri() + WebdavUtils.encodePath(mTargetRemotePath),
mOverwrite);
if (moveChunkedFile) {
@@ -128,7 +128,7 @@ public class MoveRemoteFileOperation extends RemoteOperation {
final int status = client.executeHttpMethod(move);
/// process response
- if(isSuccess(status)) {
+ if (isSuccess(status)) {
result = new RemoteOperationResult<>(ResultCode.OK);
} else if (status == HttpConstants.HTTP_PRECONDITION_FAILED && !mOverwrite) {
@@ -144,12 +144,12 @@ public class MoveRemoteFileOperation extends RemoteOperation {
}
Log.i(TAG, "Move " + mSrcRemotePath + " to " + mTargetRemotePath + ": " +
- result.getLogMessage());
+ result.getLogMessage());
} catch (Exception e) {
result = new RemoteOperationResult<>(e);
Log.e(TAG, "Move " + mSrcRemotePath + " to " + mTargetRemotePath + ": " +
- result.getLogMessage(), e);
+ result.getLogMessage(), e);
}
return result;
diff --git a/src/com/owncloud/android/lib/resources/files/ReadRemoteFileOperation.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/ReadRemoteFileOperation.java
similarity index 96%
rename from src/com/owncloud/android/lib/resources/files/ReadRemoteFileOperation.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/ReadRemoteFileOperation.java
index f8476def..d3dfcb83 100644
--- a/src/com/owncloud/android/lib/resources/files/ReadRemoteFileOperation.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/ReadRemoteFileOperation.java
@@ -1,22 +1,22 @@
/* ownCloud Android Library is available under MIT license
* Copyright (C) 2016 ownCloud GmbH.
- *
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
@@ -102,7 +102,7 @@ public class ReadRemoteFileOperation extends RemoteOperation {
result = new RemoteOperationResult<>(e);
e.printStackTrace();
Log_OC.e(TAG, "Synchronizing file " + mRemotePath + ": " + result.getLogMessage(),
- result.getException());
+ result.getException());
}
return result;
diff --git a/src/com/owncloud/android/lib/resources/files/ReadRemoteFolderOperation.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/ReadRemoteFolderOperation.java
similarity index 97%
rename from src/com/owncloud/android/lib/resources/files/ReadRemoteFolderOperation.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/ReadRemoteFolderOperation.java
index 8136a7a3..3aee5d40 100644
--- a/src/com/owncloud/android/lib/resources/files/ReadRemoteFolderOperation.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/ReadRemoteFolderOperation.java
@@ -1,5 +1,5 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
+ * Copyright (C) 2019 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -24,6 +24,7 @@
package com.owncloud.android.lib.resources.files;
+import at.bitfire.dav4android.Response;
import com.owncloud.android.lib.common.OwnCloudClient;
import com.owncloud.android.lib.common.accounts.AccountUtils;
import com.owncloud.android.lib.common.http.HttpConstants;
@@ -38,8 +39,6 @@ import com.owncloud.android.lib.common.utils.Log_OC;
import java.net.URL;
import java.util.ArrayList;
-import at.bitfire.dav4android.Response;
-
import static com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode.OK;
/**
@@ -103,7 +102,7 @@ public class ReadRemoteFolderOperation extends RemoteOperation (propfindMethod);
+ result = new RemoteOperationResult<>(propfindMethod);
}
} catch (Exception e) {
diff --git a/src/com/owncloud/android/lib/resources/files/RemoteFile.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/RemoteFile.java
similarity index 90%
rename from src/com/owncloud/android/lib/resources/files/RemoteFile.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/RemoteFile.java
index 4be62b80..e8892e6e 100644
--- a/src/com/owncloud/android/lib/resources/files/RemoteFile.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/RemoteFile.java
@@ -1,22 +1,22 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
- *
+ * Copyright (C) 2019 ownCloud GmbH.
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
@@ -28,10 +28,6 @@ import android.net.Uri;
import android.os.Parcel;
import android.os.Parcelable;
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.util.List;
-
import at.bitfire.dav4android.Property;
import at.bitfire.dav4android.Response;
import at.bitfire.dav4android.property.CreationDate;
@@ -47,6 +43,10 @@ import at.bitfire.dav4android.property.owncloud.OCPrivatelink;
import at.bitfire.dav4android.property.owncloud.OCSize;
import okhttp3.HttpUrl;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
import static com.owncloud.android.lib.common.OwnCloudClient.WEBDAV_FILES_PATH_4_0;
/**
@@ -58,11 +58,24 @@ import static com.owncloud.android.lib.common.OwnCloudClient.WEBDAV_FILES_PATH_4
public class RemoteFile implements Parcelable, Serializable {
+ /**
+ * Parcelable Methods
+ */
+ public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
+ @Override
+ public RemoteFile createFromParcel(Parcel source) {
+ return new RemoteFile(source);
+ }
+
+ @Override
+ public RemoteFile[] newArray(int size) {
+ return new RemoteFile[size];
+ }
+ };
/**
* Generated - should be refreshed every time the class changes!!
*/
private static final long serialVersionUID = -8965995357413958539L;
-
private String mRemotePath;
private String mMimeType;
private long mLength;
@@ -76,6 +89,100 @@ public class RemoteFile implements Parcelable, Serializable {
private BigDecimal mQuotaAvailableBytes;
private String mPrivateLink;
+ public RemoteFile() {
+ resetData();
+ }
+
+ /**
+ * Create new {@link RemoteFile} with given path.
+ *
+ * The path received must be URL-decoded. Path separator must be OCFile.PATH_SEPARATOR, and it must be the first character in 'path'.
+ *
+ * @param path The remote path of the file.
+ */
+ public RemoteFile(String path) {
+ resetData();
+ if (path == null || path.length() <= 0 || !path.startsWith(FileUtils.PATH_SEPARATOR)) {
+ throw new IllegalArgumentException("Trying to create a OCFile with a non valid remote path: " + path);
+ }
+ mRemotePath = path;
+ mCreationTimestamp = 0;
+ mLength = 0;
+ mMimeType = "DIR";
+ mQuotaUsedBytes = BigDecimal.ZERO;
+ mQuotaAvailableBytes = BigDecimal.ZERO;
+ mPrivateLink = null;
+ }
+
+ public RemoteFile(final Response davResource, String userId) {
+ this(getRemotePathFromUrl(davResource.getHref(), userId));
+ final List properties = davResource.getProperties();
+
+ for (Property property : properties) {
+ if (property instanceof CreationDate) {
+ this.setCreationTimestamp(
+ Long.parseLong(((CreationDate) property).getCreationDate()));
+ }
+ if (property instanceof GetContentLength) {
+ this.setLength(((GetContentLength) property).getContentLength());
+ }
+ if (property instanceof GetContentType) {
+ this.setMimeType(((GetContentType) property).getType());
+ }
+ if (property instanceof GetLastModified) {
+ this.setModifiedTimestamp(((GetLastModified) property).getLastModified());
+ }
+ if (property instanceof GetETag) {
+ this.setEtag(((GetETag) property).getETag());
+ }
+ if (property instanceof OCPermissions) {
+ this.setPermissions(((OCPermissions) property).getPermission());
+ }
+ if (property instanceof OCId) {
+ this.setRemoteId(((OCId) property).getId());
+ }
+ if (property instanceof OCSize) {
+ this.setSize(((OCSize) property).getSize());
+ }
+ if (property instanceof QuotaUsedBytes) {
+ this.setQuotaUsedBytes(
+ BigDecimal.valueOf(((QuotaUsedBytes) property).getQuotaUsedBytes()));
+ }
+ if (property instanceof QuotaAvailableBytes) {
+ this.setQuotaAvailableBytes(
+ BigDecimal.valueOf(((QuotaAvailableBytes) property).getQuotaAvailableBytes()));
+ }
+ if (property instanceof OCPrivatelink) {
+ this.setPrivateLink(((OCPrivatelink) property).getLink());
+ }
+ }
+ }
+
+ /**
+ * Reconstruct from parcel
+ *
+ * @param source The source parcel
+ */
+ protected RemoteFile(Parcel source) {
+ readFromParcel(source);
+ }
+
+ /**
+ * Retrieves a relative path from a remote file url
+ *
+ * Example: url:port/remote.php/dav/files/username/Documents/text.txt => /Documents/text.txt
+ *
+ * @param url remote file url
+ * @param userId file owner
+ * @return remote relative path of the file
+ */
+ private static String getRemotePathFromUrl(HttpUrl url, String userId) {
+ final String davFilesPath = WEBDAV_FILES_PATH_4_0 + userId;
+ final String absoluteDavPath = Uri.decode(url.encodedPath());
+ final String pathToOc = absoluteDavPath.split(davFilesPath)[0];
+ return absoluteDavPath.replace(pathToOc + davFilesPath, "");
+ }
+
/**
* Getters and Setters
*/
@@ -168,80 +275,6 @@ public class RemoteFile implements Parcelable, Serializable {
mPrivateLink = privateLink;
}
- public RemoteFile() {
- resetData();
- }
-
- /**
- * Create new {@link RemoteFile} with given path.
- *
- * The path received must be URL-decoded. Path separator must be OCFile.PATH_SEPARATOR, and it must be the first character in 'path'.
- *
- * @param path The remote path of the file.
- */
- public RemoteFile(String path) {
- resetData();
- if (path == null || path.length() <= 0 || !path.startsWith(FileUtils.PATH_SEPARATOR)) {
- throw new IllegalArgumentException("Trying to create a OCFile with a non valid remote path: " + path);
- }
- mRemotePath = path;
- mCreationTimestamp = 0;
- mLength = 0;
- mMimeType = "DIR";
- mQuotaUsedBytes = BigDecimal.ZERO;
- mQuotaAvailableBytes = BigDecimal.ZERO;
- mPrivateLink = null;
- }
-
- public RemoteFile(final Response davResource, String userId) {
- this(getRemotePathFromUrl(davResource.getHref(), userId));
- final List properties = davResource.getProperties();
-
- for(Property property : properties) {
- if(property instanceof CreationDate)
- this.setCreationTimestamp(
- Long.parseLong(((CreationDate) property).getCreationDate()));
- if(property instanceof GetContentLength)
- this.setLength(((GetContentLength) property).getContentLength());
- if(property instanceof GetContentType)
- this.setMimeType(((GetContentType) property).getType());
- if(property instanceof GetLastModified)
- this.setModifiedTimestamp(((GetLastModified) property).getLastModified());
- if(property instanceof GetETag)
- this.setEtag(((GetETag) property).getETag());
- if(property instanceof OCPermissions)
- this.setPermissions(((OCPermissions) property).getPermission());
- if(property instanceof OCId)
- this.setRemoteId(((OCId) property).getId());
- if(property instanceof OCSize)
- this.setSize(((OCSize) property).getSize());
- if(property instanceof QuotaUsedBytes)
- this.setQuotaUsedBytes(
- BigDecimal.valueOf(((QuotaUsedBytes) property).getQuotaUsedBytes()));
- if(property instanceof QuotaAvailableBytes)
- this.setQuotaAvailableBytes(
- BigDecimal.valueOf(((QuotaAvailableBytes) property).getQuotaAvailableBytes()));
- if(property instanceof OCPrivatelink)
- this.setPrivateLink(((OCPrivatelink) property).getLink());
- }
- }
-
- /**
- * Retrieves a relative path from a remote file url
- *
- * Example: url:port/remote.php/dav/files/username/Documents/text.txt => /Documents/text.txt
- *
- * @param url remote file url
- * @param userId file owner
- * @return remote relative path of the file
- */
- private static String getRemotePathFromUrl(HttpUrl url, String userId) {
- final String davFilesPath = WEBDAV_FILES_PATH_4_0 + userId;
- final String absoluteDavPath = Uri.decode(url.encodedPath());
- final String pathToOc = absoluteDavPath.split(davFilesPath)[0];
- return absoluteDavPath.replace(pathToOc + davFilesPath, "");
- }
-
/**
* Used internally. Reset all file properties
*/
@@ -260,31 +293,6 @@ public class RemoteFile implements Parcelable, Serializable {
mPrivateLink = null;
}
- /**
- * Parcelable Methods
- */
- public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
- @Override
- public RemoteFile createFromParcel(Parcel source) {
- return new RemoteFile(source);
- }
-
- @Override
- public RemoteFile[] newArray(int size) {
- return new RemoteFile[size];
- }
- };
-
-
- /**
- * Reconstruct from parcel
- *
- * @param source The source parcel
- */
- protected RemoteFile(Parcel source) {
- readFromParcel(source);
- }
-
public void readFromParcel(Parcel source) {
mRemotePath = source.readString();
mMimeType = source.readString();
diff --git a/src/com/owncloud/android/lib/resources/files/RemoveRemoteFileOperation.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/RemoveRemoteFileOperation.java
similarity index 95%
rename from src/com/owncloud/android/lib/resources/files/RemoveRemoteFileOperation.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/RemoveRemoteFileOperation.java
index 9ccfa778..20ba44ca 100644
--- a/src/com/owncloud/android/lib/resources/files/RemoveRemoteFileOperation.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/RemoveRemoteFileOperation.java
@@ -1,22 +1,22 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
- *
+ * Copyright (C) 2019 ownCloud GmbH.
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
diff --git a/src/com/owncloud/android/lib/resources/files/RenameRemoteFileOperation.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/RenameRemoteFileOperation.java
similarity index 92%
rename from src/com/owncloud/android/lib/resources/files/RenameRemoteFileOperation.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/RenameRemoteFileOperation.java
index d5d7c13a..56f137ff 100644
--- a/src/com/owncloud/android/lib/resources/files/RenameRemoteFileOperation.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/RenameRemoteFileOperation.java
@@ -1,22 +1,22 @@
/* ownCloud Android Library is available under MIT license
* Copyright (C) 2016 ownCloud GmbH.
- *
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
@@ -24,20 +24,19 @@
package com.owncloud.android.lib.resources.files;
-import java.io.File;
-import java.net.URL;
-import java.util.concurrent.TimeUnit;
-
import com.owncloud.android.lib.common.OwnCloudClient;
import com.owncloud.android.lib.common.http.HttpConstants;
import com.owncloud.android.lib.common.http.methods.webdav.MoveMethod;
import com.owncloud.android.lib.common.network.WebdavUtils;
-import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
import com.owncloud.android.lib.common.operations.RemoteOperation;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
+import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
import com.owncloud.android.lib.common.utils.Log_OC;
import com.owncloud.android.lib.resources.status.OwnCloudVersion;
+import java.io.File;
+import java.net.URL;
+import java.util.concurrent.TimeUnit;
/**
* Remote operation performing the rename of a remote file or folder in the ownCloud server.
@@ -73,7 +72,7 @@ public class RenameRemoteFileOperation extends RemoteOperation {
String parent = (new File(mOldRemotePath)).getParent();
parent = (parent.endsWith(FileUtils.PATH_SEPARATOR)) ? parent : parent +
- FileUtils.PATH_SEPARATOR;
+ FileUtils.PATH_SEPARATOR;
mNewRemotePath = parent + mNewName;
if (isFolder) {
mNewRemotePath += FileUtils.PATH_SEPARATOR;
@@ -90,10 +89,11 @@ public class RenameRemoteFileOperation extends RemoteOperation {
final OwnCloudVersion version = client.getOwnCloudVersion();
final boolean versionWithForbiddenChars =
- (version != null && version.isVersionWithForbiddenCharacters());
+ (version != null && version.isVersionWithForbiddenCharacters());
- if(!FileUtils.isValidPath(mNewRemotePath, versionWithForbiddenChars))
+ if (!FileUtils.isValidPath(mNewRemotePath, versionWithForbiddenChars)) {
return new RemoteOperationResult<>(ResultCode.INVALID_CHARACTER_IN_NAME);
+ }
try {
if (mNewName.equals(mOldName)) {
@@ -134,11 +134,11 @@ public class RenameRemoteFileOperation extends RemoteOperation {
/**
* Checks if a file with the new name already exists.
*
- * @return 'True' if the target path is already used by an existing file.
+ * @return 'True' if the target path is already used by an existing file.
*/
private boolean targetPathIsUsed(OwnCloudClient client) {
ExistenceCheckRemoteOperation existenceCheckRemoteOperation =
- new ExistenceCheckRemoteOperation(mNewRemotePath, false, false);
+ new ExistenceCheckRemoteOperation(mNewRemotePath, false, false);
RemoteOperationResult exists = existenceCheckRemoteOperation.run(client);
return exists.isSuccess();
}
diff --git a/src/com/owncloud/android/lib/resources/files/UploadRemoteFileOperation.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/UploadRemoteFileOperation.java
similarity index 96%
rename from src/com/owncloud/android/lib/resources/files/UploadRemoteFileOperation.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/UploadRemoteFileOperation.java
index 4f6bae81..46738f8b 100644
--- a/src/com/owncloud/android/lib/resources/files/UploadRemoteFileOperation.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/UploadRemoteFileOperation.java
@@ -1,22 +1,22 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
- *
+ * Copyright (C) 2019 ownCloud GmbH.
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
@@ -34,6 +34,7 @@ import com.owncloud.android.lib.common.operations.OperationCancelledException;
import com.owncloud.android.lib.common.operations.RemoteOperation;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
import com.owncloud.android.lib.common.utils.Log_OC;
+import okhttp3.MediaType;
import java.io.File;
import java.net.URL;
@@ -41,13 +42,11 @@ import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
-import okhttp3.MediaType;
-
import static com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode.OK;
/**
* Remote operation performing the upload of a remote file to the ownCloud server.
- *
+ *
* @author David A. Velasco
* @author masensio
* @author David González Verdugo
@@ -56,15 +55,13 @@ import static com.owncloud.android.lib.common.operations.RemoteOperationResult.R
public class UploadRemoteFileOperation extends RemoteOperation {
private static final String TAG = UploadRemoteFileOperation.class.getSimpleName();
-
+ protected final AtomicBoolean mCancellationRequested = new AtomicBoolean(false);
protected String mLocalPath;
protected String mRemotePath;
protected String mMimeType;
protected String mFileLastModifTimestamp;
protected PutMethod mPutMethod = null;
protected String mRequiredEtag = null;
-
- protected final AtomicBoolean mCancellationRequested = new AtomicBoolean(false);
protected Set mDataTransferListeners = new HashSet();
protected FileRequestBody mFileRequestBody = null;
@@ -153,8 +150,8 @@ public class UploadRemoteFileOperation extends RemoteOperation {
public Set getDataTransferListeners() {
return mDataTransferListeners;
}
-
- public void addDatatransferProgressListener (OnDatatransferProgressListener listener) {
+
+ public void addDatatransferProgressListener(OnDatatransferProgressListener listener) {
synchronized (mDataTransferListeners) {
mDataTransferListeners.add(listener);
}
@@ -162,7 +159,7 @@ public class UploadRemoteFileOperation extends RemoteOperation {
mFileRequestBody.addDatatransferProgressListener(listener);
}
}
-
+
public void removeDatatransferProgressListener(OnDatatransferProgressListener listener) {
synchronized (mDataTransferListeners) {
mDataTransferListeners.remove(listener);
@@ -171,12 +168,13 @@ public class UploadRemoteFileOperation extends RemoteOperation {
mFileRequestBody.removeDatatransferProgressListener(listener);
}
}
-
+
public void cancel() {
synchronized (mCancellationRequested) {
mCancellationRequested.set(true);
- if (mPutMethod != null)
+ if (mPutMethod != null) {
mPutMethod.abort();
+ }
}
}
diff --git a/src/com/owncloud/android/lib/resources/files/chunks/ChunkedUploadRemoteFileOperation.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/chunks/ChunkedUploadRemoteFileOperation.java
similarity index 96%
rename from src/com/owncloud/android/lib/resources/files/chunks/ChunkedUploadRemoteFileOperation.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/chunks/ChunkedUploadRemoteFileOperation.java
index 0b6239c9..2282767c 100644
--- a/src/com/owncloud/android/lib/resources/files/chunks/ChunkedUploadRemoteFileOperation.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/chunks/ChunkedUploadRemoteFileOperation.java
@@ -1,22 +1,22 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
- *
+ * Copyright (C) 2019 ownCloud GmbH.
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
@@ -32,6 +32,7 @@ import com.owncloud.android.lib.common.operations.RemoteOperationResult;
import com.owncloud.android.lib.common.utils.Log_OC;
import com.owncloud.android.lib.resources.files.FileUtils;
import com.owncloud.android.lib.resources.files.UploadRemoteFileOperation;
+import okhttp3.MediaType;
import java.io.File;
import java.io.RandomAccessFile;
@@ -39,8 +40,6 @@ import java.net.URL;
import java.nio.channels.FileChannel;
import java.util.concurrent.TimeUnit;
-import okhttp3.MediaType;
-
import static com.owncloud.android.lib.common.http.HttpConstants.IF_MATCH_HEADER;
import static com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode.OK;
@@ -52,8 +51,8 @@ import static com.owncloud.android.lib.common.operations.RemoteOperationResult.R
*/
public class ChunkedUploadRemoteFileOperation extends UploadRemoteFileOperation {
- private static final int LAST_CHUNK_TIMEOUT = 900000; //15 mins.
public static final long CHUNK_SIZE = 1024000;
+ private static final int LAST_CHUNK_TIMEOUT = 900000; //15 mins.
private static final String TAG = ChunkedUploadRemoteFileOperation.class.getSimpleName();
private String mTransferId;
@@ -127,11 +126,13 @@ public class ChunkedUploadRemoteFileOperation extends UploadRemoteFileOperation
}
}
- if (channel != null)
+ if (channel != null) {
channel.close();
+ }
- if (raf != null)
+ if (raf != null) {
raf.close();
+ }
return result;
}
diff --git a/src/com/owncloud/android/lib/resources/files/chunks/CreateRemoteChunkFolderOperation.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/chunks/CreateRemoteChunkFolderOperation.java
similarity index 88%
rename from src/com/owncloud/android/lib/resources/files/chunks/CreateRemoteChunkFolderOperation.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/chunks/CreateRemoteChunkFolderOperation.java
index 2fc9d4bf..2c9557e1 100644
--- a/src/com/owncloud/android/lib/resources/files/chunks/CreateRemoteChunkFolderOperation.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/chunks/CreateRemoteChunkFolderOperation.java
@@ -1,5 +1,5 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
+ * Copyright (C) 2019 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -35,8 +35,8 @@ public class CreateRemoteChunkFolderOperation extends CreateRemoteFolderOperatio
/**
* Constructor
*
- * @param remotePath Full path to the new directory to create in the remote server.
- * @param createFullPath 'True' means that all the ancestor folders should be created.
+ * @param remotePath Full path to the new directory to create in the remote server.
+ * @param createFullPath 'True' means that all the ancestor folders should be created.
*/
public CreateRemoteChunkFolderOperation(String remotePath, boolean createFullPath) {
super(remotePath, createFullPath);
diff --git a/src/com/owncloud/android/lib/resources/files/chunks/MoveRemoteChunksFileOperation.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/chunks/MoveRemoteChunksFileOperation.java
similarity index 98%
rename from src/com/owncloud/android/lib/resources/files/chunks/MoveRemoteChunksFileOperation.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/chunks/MoveRemoteChunksFileOperation.java
index 5c84609a..c60ec12f 100644
--- a/src/com/owncloud/android/lib/resources/files/chunks/MoveRemoteChunksFileOperation.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/chunks/MoveRemoteChunksFileOperation.java
@@ -1,5 +1,5 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
+ * Copyright (C) 2019 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/src/com/owncloud/android/lib/resources/files/chunks/RemoveRemoteChunksFolderOperation.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/chunks/RemoveRemoteChunksFolderOperation.java
similarity index 97%
rename from src/com/owncloud/android/lib/resources/files/chunks/RemoveRemoteChunksFolderOperation.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/chunks/RemoveRemoteChunksFolderOperation.java
index 48602313..e515cd04 100644
--- a/src/com/owncloud/android/lib/resources/files/chunks/RemoveRemoteChunksFolderOperation.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/chunks/RemoveRemoteChunksFolderOperation.java
@@ -1,6 +1,6 @@
/* ownCloud Android Library is available under MIT license
* @author David González Verdugo
- * Copyright (C) 2018 ownCloud GmbH.
+ * Copyright (C) 2019 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/src/com/owncloud/android/lib/resources/shares/CreateRemoteShareOperation.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/CreateRemoteShareOperation.java
similarity index 98%
rename from src/com/owncloud/android/lib/resources/shares/CreateRemoteShareOperation.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/CreateRemoteShareOperation.java
index 9b40b4e2..631af0ee 100644
--- a/src/com/owncloud/android/lib/resources/shares/CreateRemoteShareOperation.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/CreateRemoteShareOperation.java
@@ -2,7 +2,7 @@
* @author masensio
* @author David A. Velasco
* @author David González Verdugo
- * Copyright (C) 2018 ownCloud GmbH
+ * Copyright (C) 2019 ownCloud GmbH
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -35,6 +35,7 @@ import com.owncloud.android.lib.common.http.methods.nonwebdav.PostMethod;
import com.owncloud.android.lib.common.operations.RemoteOperation;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
import com.owncloud.android.lib.common.utils.Log_OC;
+import okhttp3.FormBody;
import java.net.URL;
import java.text.DateFormat;
@@ -42,8 +43,6 @@ import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;
-import okhttp3.FormBody;
-
/**
* Creates a new share. This allows sharing with a user or group or as a link.
*
@@ -133,12 +132,11 @@ public class CreateRemoteShareOperation extends RemoteOperation {
mGetShareDetails = false; // defaults to false for backwards compatibility
}
-
/**
* Set name to create in Share resource. Ignored by servers previous to version 10.0.0
*
- * @param name Name to set to the target share.
- * Null or empty string result in no value set for the name.
+ * @param name Name to set to the target share.
+ * Null or empty string result in no value set for the name.
*/
public void setName(String name) {
this.mName = (name == null) ? "" : name;
@@ -154,7 +152,6 @@ public class CreateRemoteShareOperation extends RemoteOperation {
mPassword = password;
}
-
/**
* Set expiration date to create in Share resource.
*
@@ -165,7 +162,6 @@ public class CreateRemoteShareOperation extends RemoteOperation {
mExpirationDateInMillis = expirationDateInMillis;
}
-
/**
* Set permissions to create in Share resource.
*
diff --git a/src/com/owncloud/android/lib/resources/shares/GetRemoteShareOperation.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareOperation.java
similarity index 98%
rename from src/com/owncloud/android/lib/resources/shares/GetRemoteShareOperation.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareOperation.java
index e475864f..e4d4972e 100644
--- a/src/com/owncloud/android/lib/resources/shares/GetRemoteShareOperation.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareOperation.java
@@ -1,7 +1,7 @@
/* ownCloud Android Library is available under MIT license
* @author David A. Velasco
* @author David González Verdugo
- * Copyright (C) 2018 ownCloud GmbH.
+ * Copyright (C) 2019 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -50,7 +50,6 @@ public class GetRemoteShareOperation extends RemoteOperation
private long mRemoteId;
-
public GetRemoteShareOperation(long remoteId) {
mRemoteId = remoteId;
}
diff --git a/src/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.java
similarity index 89%
rename from src/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.java
index 006ac719..2a90128e 100644
--- a/src/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.java
@@ -3,7 +3,7 @@
* @author masensio
* @author David A. Velasco
* @author David González Verdugo
- * Copyright (C) 2018 ownCloud GmbH.
+ * Copyright (C) 2019 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -47,24 +47,24 @@ import static com.owncloud.android.lib.common.operations.RemoteOperationResult.R
/**
* Created by masensio on 08/10/2015.
- *
+ *
* Retrieves a list of sharees (possible targets of a share) from the ownCloud server.
- *
+ *
* Currently only handles users and groups. Users in other OC servers (federation) should be added later.
- *
+ *
* Depends on SHAREE API. {@See https://github.com/owncloud/documentation/issues/1626}
- *
+ *
* Syntax:
- * Entry point: ocs/v2.php/apps/files_sharing/api/v1/sharees
- * HTTP method: GET
- * url argument: itemType - string, required
- * url argument: format - string, optional
- * url argument: search - string, optional
- * url arguments: perPage - int, optional
- * url arguments: page - int, optional
- *
+ * Entry point: ocs/v2.php/apps/files_sharing/api/v1/sharees
+ * HTTP method: GET
+ * url argument: itemType - string, required
+ * url argument: format - string, optional
+ * url argument: search - string, optional
+ * url arguments: perPage - int, optional
+ * url arguments: page - int, optional
+ *
* Status codes:
- * 100 - successful
+ * 100 - successful
*
* @author masensio
* @author David A. Velasco
@@ -99,6 +99,7 @@ public class GetRemoteShareesOperation extends RemoteOperation> run(OwnCloudClient client) {
RemoteOperationResult> result;
- try{
+ try {
Uri requestUri = client.getBaseUri();
Uri.Builder uriBuilder = requestUri.buildUpon()
.appendEncodedPath(OCS_ROUTE)
@@ -138,7 +139,7 @@ public class GetRemoteShareesOperation extends RemoteOperation data = new ArrayList<>(); // For result data
- for (int i=0; i<6; i++) {
- for(int j=0; j< jsonResults[i].length(); j++){
+ for (int i = 0; i < 6; i++) {
+ for (int j = 0; j < jsonResults[i].length(); j++) {
JSONObject jsonResult = jsonResults[i].getJSONObject(j);
data.add(jsonResult);
Log_OC.d(TAG, "*** Added item: " + jsonResult.getString(PROPERTY_LABEL));
@@ -173,7 +174,7 @@ public class GetRemoteShareesOperation extends RemoteOperation(OK);
result.setData(data);
- Log_OC.d(TAG, "*** Get Users or groups completed " );
+ Log_OC.d(TAG, "*** Get Users or groups completed ");
} else {
result = new RemoteOperationResult<>(getMethod);
diff --git a/src/com/owncloud/android/lib/resources/shares/GetRemoteSharesForFileOperation.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteSharesForFileOperation.java
similarity index 98%
rename from src/com/owncloud/android/lib/resources/shares/GetRemoteSharesForFileOperation.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteSharesForFileOperation.java
index aadbad3e..e788cb25 100644
--- a/src/com/owncloud/android/lib/resources/shares/GetRemoteSharesForFileOperation.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteSharesForFileOperation.java
@@ -2,7 +2,7 @@
* @author masensio
* @author David A. Velasco
* @author David González Verdugo
- * Copyright (C) 2018 ownCloud GmbH.
+ * Copyright (C) 2019 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -98,7 +98,7 @@ public class GetRemoteSharesForFileOperation extends RemoteOperation 0) {
if (mServerBaseUri != null) {
String sharingLinkPath = ShareUtils.getSharingLinkPath(mOwnCloudVersion);
@@ -112,11 +110,11 @@ public class ShareToRemoteOperationResultParser {
Log_OC.e(TAG, "Successful status with no share in the response");
}
- } else if (mShareXmlParser.isWrongParameter()){
+ } else if (mShareXmlParser.isWrongParameter()) {
result = new RemoteOperationResult<>(RemoteOperationResult.ResultCode.SHARE_WRONG_PARAMETER);
result.setData(new ShareParserResult(null, mShareXmlParser.getMessage()));
- } else if (mShareXmlParser.isNotFound()){
+ } else if (mShareXmlParser.isNotFound()) {
result = new RemoteOperationResult<>(RemoteOperationResult.ResultCode.SHARE_NOT_FOUND);
result.setData(new ShareParserResult(null, mShareXmlParser.getMessage()));
diff --git a/src/com/owncloud/android/lib/resources/shares/ShareType.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/ShareType.java
similarity index 63%
rename from src/com/owncloud/android/lib/resources/shares/ShareType.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/ShareType.java
index a2d3c101..e272abbd 100644
--- a/src/com/owncloud/android/lib/resources/shares/ShareType.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/ShareType.java
@@ -1,22 +1,22 @@
/* ownCloud Android Library is available under MIT license
* Copyright (C) 2016 ownCloud GmbH.
- *
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
@@ -27,55 +27,51 @@ package com.owncloud.android.lib.resources.shares;
/**
* Enum for Share Type, with values:
* -1 - No shared
- * 0 - Shared by user
- * 1 - Shared by group
- * 3 - Shared by public link
- * 4 - Shared by e-mail
- * 5 - Shared by contact
- *
- * @author masensio
+ * 0 - Shared by user
+ * 1 - Shared by group
+ * 3 - Shared by public link
+ * 4 - Shared by e-mail
+ * 5 - Shared by contact
*
+ * @author masensio
*/
public enum ShareType {
- NO_SHARED (-1),
- USER (0),
- GROUP (1),
- PUBLIC_LINK (3),
- EMAIL (4),
- CONTACT (5),
- FEDERATED (6);
-
+ NO_SHARED(-1),
+ USER(0),
+ GROUP(1),
+ PUBLIC_LINK(3),
+ EMAIL(4),
+ CONTACT(5),
+ FEDERATED(6);
+
private int value;
-
- private ShareType(int value)
- {
+
+ private ShareType(int value) {
this.value = value;
}
-
- public int getValue() {
- return value;
- }
-
- public static ShareType fromValue(int value)
- {
- switch (value)
- {
- case -1:
- return NO_SHARED;
- case 0:
- return USER;
- case 1:
- return GROUP;
- case 3:
- return PUBLIC_LINK;
- case 4:
- return EMAIL;
- case 5:
- return CONTACT;
- case 6:
- return FEDERATED;
+
+ public static ShareType fromValue(int value) {
+ switch (value) {
+ case -1:
+ return NO_SHARED;
+ case 0:
+ return USER;
+ case 1:
+ return GROUP;
+ case 3:
+ return PUBLIC_LINK;
+ case 4:
+ return EMAIL;
+ case 5:
+ return CONTACT;
+ case 6:
+ return FEDERATED;
}
return null;
}
+
+ public int getValue() {
+ return value;
+ }
};
\ No newline at end of file
diff --git a/src/com/owncloud/android/lib/resources/shares/ShareUtils.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/ShareUtils.java
similarity index 84%
rename from src/com/owncloud/android/lib/resources/shares/ShareUtils.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/ShareUtils.java
index cb355855..4d4b80ae 100644
--- a/src/com/owncloud/android/lib/resources/shares/ShareUtils.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/ShareUtils.java
@@ -1,22 +1,22 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
- *
+ * Copyright (C) 2019 ownCloud GmbH.
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
@@ -28,23 +28,22 @@ import com.owncloud.android.lib.resources.status.OwnCloudVersion;
/**
* Contains Constants for Share Operation
- *
+ *
* @author masensio
* @author David González Verdugo
- *
*/
public class ShareUtils {
- // OCS Route
- public static final String SHARING_API_PATH ="ocs/v2.php/apps/files_sharing/api/v1/shares";
+ // OCS Route
+ public static final String SHARING_API_PATH = "ocs/v2.php/apps/files_sharing/api/v1/shares";
// String to build the link with the token of a share:
public static final String SHARING_LINK_PATH_BEFORE_VERSION_8 = "/public.php?service=files&t=";
public static final String SHARING_LINK_PATH_AFTER_VERSION_8 = "/index.php/s/";
- public static String getSharingLinkPath(OwnCloudVersion version){
- if (version!= null && version.isAfter8Version()){
+ public static String getSharingLinkPath(OwnCloudVersion version) {
+ if (version != null && version.isAfter8Version()) {
return SHARING_LINK_PATH_AFTER_VERSION_8;
} else {
return SHARING_LINK_PATH_BEFORE_VERSION_8;
diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/ShareXMLParser.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/ShareXMLParser.java
new file mode 100644
index 00000000..a6265e1a
--- /dev/null
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/ShareXMLParser.java
@@ -0,0 +1,452 @@
+/* ownCloud Android Library is available under MIT license
+ * Copyright (C) 2019 ownCloud GmbH.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ */
+
+package com.owncloud.android.lib.resources.shares;
+
+import android.util.Xml;
+
+import com.owncloud.android.lib.common.network.WebdavUtils;
+import com.owncloud.android.lib.resources.files.FileUtils;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+import org.xmlpull.v1.XmlPullParserFactory;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+
+/**
+ * Parser for Share API Response
+ *
+ * @author masensio
+ * @author David González Verdugo
+ */
+
+public class ShareXMLParser {
+
+ //private static final String TAG = ShareXMLParser.class.getSimpleName();
+
+ // No namespaces
+ private static final String ns = null;
+
+ // NODES for XML Parser
+ private static final String NODE_OCS = "ocs";
+
+ private static final String NODE_META = "meta";
+ private static final String NODE_STATUS = "status";
+ private static final String NODE_STATUS_CODE = "statuscode";
+ private static final String NODE_MESSAGE = "message";
+
+ private static final String NODE_DATA = "data";
+ private static final String NODE_ELEMENT = "element";
+ private static final String NODE_ID = "id";
+ private static final String NODE_ITEM_TYPE = "item_type";
+ private static final String NODE_ITEM_SOURCE = "item_source";
+ private static final String NODE_PARENT = "parent";
+ private static final String NODE_SHARE_TYPE = "share_type";
+ private static final String NODE_SHARE_WITH = "share_with";
+ private static final String NODE_FILE_SOURCE = "file_source";
+ private static final String NODE_PATH = "path";
+ private static final String NODE_PERMISSIONS = "permissions";
+ private static final String NODE_STIME = "stime";
+ private static final String NODE_EXPIRATION = "expiration";
+ private static final String NODE_TOKEN = "token";
+ private static final String NODE_STORAGE = "storage";
+ private static final String NODE_MAIL_SEND = "mail_send";
+ private static final String NODE_SHARE_WITH_DISPLAY_NAME = "share_with_displayname";
+ private static final String NODE_SHARE_WITH_ADDITIONAL_INFO = "share_with_additional_info";
+ private static final String NODE_NAME = "name";
+
+ private static final String NODE_URL = "url";
+
+ private static final String TYPE_FOLDER = "folder";
+
+ private static final int SUCCESS = 200;
+ private static final int ERROR_WRONG_PARAMETER = 400;
+ private static final int ERROR_FORBIDDEN = 403;
+ private static final int ERROR_NOT_FOUND = 404;
+
+ private String mStatus;
+ private int mStatusCode;
+ private String mMessage;
+
+ // Getters and Setters
+ public String getStatus() {
+ return mStatus;
+ }
+
+ public void setStatus(String status) {
+ this.mStatus = status;
+ }
+
+ public int getStatusCode() {
+ return mStatusCode;
+ }
+
+ public void setStatusCode(int statusCode) {
+ this.mStatusCode = statusCode;
+ }
+
+ public String getMessage() {
+ return mMessage;
+ }
+
+ public void setMessage(String message) {
+ this.mMessage = message;
+ }
+
+ // Constructor
+ public ShareXMLParser() {
+ mStatusCode = -1;
+ }
+
+ public boolean isSuccess() {
+ return mStatusCode == SUCCESS;
+ }
+
+ public boolean isForbidden() {
+ return mStatusCode == ERROR_FORBIDDEN;
+ }
+
+ public boolean isNotFound() {
+ return mStatusCode == ERROR_NOT_FOUND;
+ }
+
+ public boolean isWrongParameter() {
+ return mStatusCode == ERROR_WRONG_PARAMETER;
+ }
+
+ /**
+ * Parse is as response of Share API
+ *
+ * @param is
+ * @return List of ShareRemoteFiles
+ * @throws XmlPullParserException
+ * @throws IOException
+ */
+ public ArrayList parseXMLResponse(InputStream is) throws XmlPullParserException,
+ IOException {
+
+ try {
+ // XMLPullParser
+ XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
+ factory.setNamespaceAware(true);
+
+ XmlPullParser parser = Xml.newPullParser();
+ parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
+ parser.setInput(is, null);
+ parser.nextTag();
+ return readOCS(parser);
+
+ } finally {
+ is.close();
+ }
+ }
+
+ /**
+ * Parse OCS node
+ *
+ * @param parser
+ * @return List of ShareRemoteFiles
+ * @throws XmlPullParserException
+ * @throws IOException
+ */
+ private ArrayList readOCS(XmlPullParser parser) throws XmlPullParserException,
+ IOException {
+ ArrayList shares = new ArrayList<>();
+ parser.require(XmlPullParser.START_TAG, ns, NODE_OCS);
+ while (parser.next() != XmlPullParser.END_TAG) {
+ if (parser.getEventType() != XmlPullParser.START_TAG) {
+ continue;
+ }
+ String name = parser.getName();
+ // read NODE_META and NODE_DATA
+ if (name.equalsIgnoreCase(NODE_META)) {
+ readMeta(parser);
+ } else if (name.equalsIgnoreCase(NODE_DATA)) {
+ shares = readData(parser);
+ } else {
+ skip(parser);
+ }
+
+ }
+ return shares;
+ }
+
+ /**
+ * Parse Meta node
+ *
+ * @param parser
+ * @throws XmlPullParserException
+ * @throws IOException
+ */
+ private void readMeta(XmlPullParser parser) throws XmlPullParserException, IOException {
+ parser.require(XmlPullParser.START_TAG, ns, NODE_META);
+ //Log_OC.d(TAG, "---- NODE META ---");
+ while (parser.next() != XmlPullParser.END_TAG) {
+ if (parser.getEventType() != XmlPullParser.START_TAG) {
+ continue;
+ }
+ String name = parser.getName();
+
+ if (name.equalsIgnoreCase(NODE_STATUS)) {
+ setStatus(readNode(parser, NODE_STATUS));
+
+ } else if (name.equalsIgnoreCase(NODE_STATUS_CODE)) {
+ setStatusCode(Integer.parseInt(readNode(parser, NODE_STATUS_CODE)));
+
+ } else if (name.equalsIgnoreCase(NODE_MESSAGE)) {
+ setMessage(readNode(parser, NODE_MESSAGE));
+
+ } else {
+ skip(parser);
+ }
+
+ }
+ }
+
+ /**
+ * Parse Data node
+ *
+ * @param parser
+ * @return
+ * @throws XmlPullParserException
+ * @throws IOException
+ */
+ private ArrayList readData(XmlPullParser parser) throws XmlPullParserException,
+ IOException {
+ ArrayList shares = new ArrayList();
+ OCShare share = null;
+
+ parser.require(XmlPullParser.START_TAG, ns, NODE_DATA);
+ //Log_OC.d(TAG, "---- NODE DATA ---");
+ while (parser.next() != XmlPullParser.END_TAG) {
+ if (parser.getEventType() != XmlPullParser.START_TAG) {
+ continue;
+ }
+ String name = parser.getName();
+ if (name.equalsIgnoreCase(NODE_ELEMENT)) {
+ readElement(parser, shares);
+
+ } else if (name.equalsIgnoreCase(NODE_ID)) {// Parse Create XML Response
+ share = new OCShare();
+ String value = readNode(parser, NODE_ID);
+ share.setIdRemoteShared(Integer.parseInt(value));
+
+ } else if (name.equalsIgnoreCase(NODE_URL)) {
+ // NOTE: this field is received in all the public shares from OC 9.0.0
+ // in previous versions, it's received in the result of POST requests, but not
+ // in GET requests
+ share.setShareType(ShareType.PUBLIC_LINK);
+ String value = readNode(parser, NODE_URL);
+ share.setShareLink(value);
+
+ } else if (name.equalsIgnoreCase(NODE_TOKEN)) {
+ share.setToken(readNode(parser, NODE_TOKEN));
+
+ } else {
+ skip(parser);
+
+ }
+ }
+
+ if (share != null) {
+ // this is the response of a request for creation; don't pass to isValidShare()
+ shares.add(share);
+ }
+
+ return shares;
+
+ }
+
+
+ /**
+ * Parse Element node
+ *
+ * @param parser
+ * @return
+ * @throws XmlPullParserException
+ * @throws IOException
+ */
+ private void readElement(XmlPullParser parser, ArrayList shares)
+ throws XmlPullParserException, IOException {
+ parser.require(XmlPullParser.START_TAG, ns, NODE_ELEMENT);
+
+ OCShare share = new OCShare();
+
+ //Log_OC.d(TAG, "---- NODE ELEMENT ---");
+ while (parser.next() != XmlPullParser.END_TAG) {
+ if (parser.getEventType() != XmlPullParser.START_TAG) {
+ continue;
+ }
+
+ String name = parser.getName();
+
+ if (name.equalsIgnoreCase(NODE_ELEMENT)) {
+ // patch to work around servers responding with extra surrounding all
+ // the shares on the same file before
+ // https://github.com/owncloud/core/issues/6992 was fixed
+ readElement(parser, shares);
+
+ } else if (name.equalsIgnoreCase(NODE_ID)) {
+ share.setIdRemoteShared(Integer.parseInt(readNode(parser, NODE_ID)));
+
+ } else if (name.equalsIgnoreCase(NODE_ITEM_TYPE)) {
+ share.setIsFolder(readNode(parser, NODE_ITEM_TYPE).equalsIgnoreCase(TYPE_FOLDER));
+ fixPathForFolder(share);
+
+ } else if (name.equalsIgnoreCase(NODE_ITEM_SOURCE)) {
+ share.setItemSource(Long.parseLong(readNode(parser, NODE_ITEM_SOURCE)));
+
+ } else if (name.equalsIgnoreCase(NODE_PARENT)) {
+ readNode(parser, NODE_PARENT);
+
+ } else if (name.equalsIgnoreCase(NODE_SHARE_TYPE)) {
+ int value = Integer.parseInt(readNode(parser, NODE_SHARE_TYPE));
+ share.setShareType(ShareType.fromValue(value));
+
+ } else if (name.equalsIgnoreCase(NODE_SHARE_WITH)) {
+ share.setShareWith(readNode(parser, NODE_SHARE_WITH));
+
+ } else if (name.equalsIgnoreCase(NODE_FILE_SOURCE)) {
+ share.setFileSource(Long.parseLong(readNode(parser, NODE_FILE_SOURCE)));
+
+ } else if (name.equalsIgnoreCase(NODE_PATH)) {
+ share.setPath(readNode(parser, NODE_PATH));
+ fixPathForFolder(share);
+
+ } else if (name.equalsIgnoreCase(NODE_PERMISSIONS)) {
+ share.setPermissions(Integer.parseInt(readNode(parser, NODE_PERMISSIONS)));
+
+ } else if (name.equalsIgnoreCase(NODE_STIME)) {
+ share.setSharedDate(Long.parseLong(readNode(parser, NODE_STIME)));
+
+ } else if (name.equalsIgnoreCase(NODE_EXPIRATION)) {
+ String value = readNode(parser, NODE_EXPIRATION);
+ if (!(value.length() == 0)) {
+ share.setExpirationDate(WebdavUtils.parseResponseDate(value).getTime());
+ }
+
+ } else if (name.equalsIgnoreCase(NODE_TOKEN)) {
+ share.setToken(readNode(parser, NODE_TOKEN));
+
+ } else if (name.equalsIgnoreCase(NODE_STORAGE)) {
+ readNode(parser, NODE_STORAGE);
+ } else if (name.equalsIgnoreCase(NODE_MAIL_SEND)) {
+ readNode(parser, NODE_MAIL_SEND);
+
+ } else if (name.equalsIgnoreCase(NODE_SHARE_WITH_DISPLAY_NAME)) {
+ share.setSharedWithDisplayName(readNode(parser, NODE_SHARE_WITH_DISPLAY_NAME));
+
+ } else if (name.equalsIgnoreCase(NODE_SHARE_WITH_ADDITIONAL_INFO)) {
+ share.setSharedWithAdditionalInfo(readNode(parser, NODE_SHARE_WITH_ADDITIONAL_INFO));
+
+ } else if (name.equalsIgnoreCase(NODE_URL)) {
+ String value = readNode(parser, NODE_URL);
+ share.setShareLink(value);
+
+ } else if (name.equalsIgnoreCase(NODE_NAME)) {
+ share.setName(readNode(parser, NODE_NAME));
+
+ } else {
+ skip(parser);
+ }
+ }
+
+ if (isValidShare(share)) {
+ shares.add(share);
+ }
+ }
+
+ private boolean isValidShare(OCShare share) {
+ return (share.getRemoteId() > -1);
+ }
+
+ private void fixPathForFolder(OCShare share) {
+ if (share.isFolder() && share.getPath() != null && share.getPath().length() > 0 &&
+ !share.getPath().endsWith(FileUtils.PATH_SEPARATOR)) {
+ share.setPath(share.getPath() + FileUtils.PATH_SEPARATOR);
+ }
+ }
+
+ /**
+ * Parse a node, to obtain its text. Needs readText method
+ *
+ * @param parser
+ * @param node
+ * @return Text of the node
+ * @throws XmlPullParserException
+ * @throws IOException
+ */
+ private String readNode(XmlPullParser parser, String node) throws XmlPullParserException,
+ IOException {
+ parser.require(XmlPullParser.START_TAG, ns, node);
+ String value = readText(parser);
+ //Log_OC.d(TAG, "node= " + node + ", value= " + value);
+ parser.require(XmlPullParser.END_TAG, ns, node);
+ return value;
+ }
+
+ /**
+ * Read the text from a node
+ *
+ * @param parser
+ * @return Text of the node
+ * @throws IOException
+ * @throws XmlPullParserException
+ */
+ private String readText(XmlPullParser parser) throws IOException, XmlPullParserException {
+ String result = "";
+ if (parser.next() == XmlPullParser.TEXT) {
+ result = parser.getText();
+ parser.nextTag();
+ }
+ return result;
+ }
+
+ /**
+ * Skip tags in parser procedure
+ *
+ * @param parser
+ * @throws XmlPullParserException
+ * @throws IOException
+ */
+ private void skip(XmlPullParser parser) throws XmlPullParserException, IOException {
+ if (parser.getEventType() != XmlPullParser.START_TAG) {
+ throw new IllegalStateException();
+ }
+ int depth = 1;
+ while (depth != 0) {
+ switch (parser.next()) {
+ case XmlPullParser.END_TAG:
+ depth--;
+ break;
+ case XmlPullParser.START_TAG:
+ depth++;
+ break;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/com/owncloud/android/lib/resources/shares/UpdateRemoteShareOperation.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/UpdateRemoteShareOperation.java
similarity index 95%
rename from src/com/owncloud/android/lib/resources/shares/UpdateRemoteShareOperation.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/UpdateRemoteShareOperation.java
index 2ec8c3ed..0122d86e 100644
--- a/src/com/owncloud/android/lib/resources/shares/UpdateRemoteShareOperation.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/UpdateRemoteShareOperation.java
@@ -1,6 +1,6 @@
/* ownCloud Android Library is available under MIT license
*
- * Copyright (C) 2018 ownCloud GmbH.
+ * Copyright (C) 2019 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -33,6 +33,7 @@ import com.owncloud.android.lib.common.http.methods.nonwebdav.PutMethod;
import com.owncloud.android.lib.common.operations.RemoteOperation;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
import com.owncloud.android.lib.common.utils.Log_OC;
+import okhttp3.FormBody;
import java.net.URL;
import java.text.DateFormat;
@@ -40,11 +41,9 @@ import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;
-import okhttp3.FormBody;
-
/**
* Updates parameters of an existing Share resource, known its remote ID.
- *
+ *
* Allow updating several parameters, triggering a request to the server per parameter.
*
* @author David A. Velasco
@@ -64,7 +63,6 @@ public class UpdateRemoteShareOperation extends RemoteOperation
- * Copyright (C) 2018 ownCloud GmbH.
+ * @author David González Verdugo
+ * Copyright (C) 2019 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -24,7 +25,6 @@
*
*/
-
package com.owncloud.android.lib.resources.status;
import android.net.Uri;
@@ -35,7 +35,6 @@ import com.owncloud.android.lib.common.http.methods.nonwebdav.GetMethod;
import com.owncloud.android.lib.common.operations.RemoteOperation;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
import com.owncloud.android.lib.common.utils.Log_OC;
-
import org.json.JSONObject;
import java.net.URL;
@@ -76,6 +75,7 @@ public class GetRemoteCapabilitiesOperation extends RemoteOperation {
String redirectedLocation = mLatestResult.getRedirectedLocation();
while (redirectedLocation != null && redirectedLocation.length() > 0
- && !mLatestResult.isSuccess()) {
+ && !mLatestResult.isSuccess()) {
isRedirectToNonSecureConnection |= (
- baseUrlSt.startsWith(HTTPS_PREFIX) &&
- redirectedLocation.startsWith(HTTP_PREFIX)
+ baseUrlSt.startsWith(HTTPS_PREFIX) &&
+ redirectedLocation.startsWith(HTTP_PREFIX)
);
getMethod = new GetMethod(new URL(redirectedLocation));
@@ -128,13 +127,13 @@ public class GetRemoteStatusOperation extends RemoteOperation {
if (isRedirectToNonSecureConnection) {
mLatestResult = new RemoteOperationResult<>(
- RemoteOperationResult.ResultCode.
- OK_REDIRECT_TO_NON_SECURE_CONNECTION);
+ RemoteOperationResult.ResultCode.
+ OK_REDIRECT_TO_NON_SECURE_CONNECTION);
} else {
mLatestResult = new RemoteOperationResult<>(
- baseUrlSt.startsWith(HTTPS_PREFIX) ?
- RemoteOperationResult.ResultCode.OK_SSL :
- RemoteOperationResult.ResultCode.OK_NO_SSL);
+ baseUrlSt.startsWith(HTTPS_PREFIX) ?
+ RemoteOperationResult.ResultCode.OK_SSL :
+ RemoteOperationResult.ResultCode.OK_NO_SSL);
}
mLatestResult.setData(ocVersion);
@@ -147,7 +146,7 @@ public class GetRemoteStatusOperation extends RemoteOperation {
} catch (JSONException e) {
mLatestResult = new RemoteOperationResult<>(
- RemoteOperationResult.ResultCode.INSTANCE_NOT_CONFIGURED);
+ RemoteOperationResult.ResultCode.INSTANCE_NOT_CONFIGURED);
} catch (Exception e) {
mLatestResult = new RemoteOperationResult<>(e);
@@ -158,7 +157,7 @@ public class GetRemoteStatusOperation extends RemoteOperation {
} else if (mLatestResult.getException() != null) {
Log_OC.e(TAG, "Connection check at " + baseUrlSt + ": " + mLatestResult.getLogMessage(),
- mLatestResult.getException());
+ mLatestResult.getException());
} else {
Log_OC.e(TAG, "Connection check at " + baseUrlSt + ": " + mLatestResult.getLogMessage());
@@ -169,9 +168,9 @@ public class GetRemoteStatusOperation extends RemoteOperation {
private boolean isOnline() {
ConnectivityManager cm = (ConnectivityManager) mContext
- .getSystemService(Context.CONNECTIVITY_SERVICE);
+ .getSystemService(Context.CONNECTIVITY_SERVICE);
return cm != null && cm.getActiveNetworkInfo() != null
- && cm.getActiveNetworkInfo().isConnectedOrConnecting();
+ && cm.getActiveNetworkInfo().isConnectedOrConnecting();
}
@Override
diff --git a/src/com/owncloud/android/lib/resources/status/OCCapability.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/OCCapability.java
similarity index 85%
rename from src/com/owncloud/android/lib/resources/status/OCCapability.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/OCCapability.java
index f866e4c9..99479b54 100644
--- a/src/com/owncloud/android/lib/resources/status/OCCapability.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/OCCapability.java
@@ -1,6 +1,7 @@
/* ownCloud Android Library is available under MIT license
* @author masensio
- * Copyright (C) 2016 ownCloud GmbH.
+ * @author David González Verdugo
+ * Copyright (C) 2019 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -49,6 +50,9 @@ public class OCCapability {
private CapabilityBooleanType mFilesSharingPublicEnabled;
private CapabilityBooleanType mFilesSharingPublicPasswordEnforced;
+ private CapabilityBooleanType mFilesSharingPublicPasswordEnforcedReadOnly;
+ private CapabilityBooleanType mFilesSharingPublicPasswordEnforcedReadWrite;
+ private CapabilityBooleanType mFilesSharingPublicPasswordEnforcedUploadOnly;
private CapabilityBooleanType mFilesSharingPublicExpireDateEnabled;
private int mFilesSharingPublicExpireDateDays;
private CapabilityBooleanType mFilesSharingPublicExpireDateEnforced;
@@ -84,6 +88,9 @@ public class OCCapability {
mFilesSharingApiEnabled = CapabilityBooleanType.UNKNOWN;
mFilesSharingPublicEnabled = CapabilityBooleanType.UNKNOWN;
mFilesSharingPublicPasswordEnforced = CapabilityBooleanType.UNKNOWN;
+ mFilesSharingPublicPasswordEnforcedReadOnly = CapabilityBooleanType.UNKNOWN;
+ mFilesSharingPublicPasswordEnforcedReadWrite = CapabilityBooleanType.UNKNOWN;
+ mFilesSharingPublicPasswordEnforcedUploadOnly = CapabilityBooleanType.UNKNOWN;
mFilesSharingPublicExpireDateEnabled = CapabilityBooleanType.UNKNOWN;
mFilesSharingPublicExpireDateDays = 0;
mFilesSharingPublicExpireDateEnforced = CapabilityBooleanType.UNKNOWN;
@@ -101,7 +108,6 @@ public class OCCapability {
mFilesVersioning = CapabilityBooleanType.UNKNOWN;
}
-
// Getters and Setters
public String getAccountName() {
return mAccountName;
@@ -159,7 +165,6 @@ public class OCCapability {
this.mVersionEdition = versionEdition;
}
-
public int getCorePollinterval() {
return mCorePollinterval;
}
@@ -192,6 +197,33 @@ public class OCCapability {
this.mFilesSharingPublicPasswordEnforced = filesSharingPublicPasswordEnforced;
}
+ public CapabilityBooleanType getFilesSharingPublicPasswordEnforcedReadOnly() {
+ return mFilesSharingPublicPasswordEnforcedReadOnly;
+ }
+
+ public void setFilesSharingPublicPasswordEnforcedReadOnly(
+ CapabilityBooleanType filesSharingPublicPasswordEnforcedReadOnly) {
+ this.mFilesSharingPublicPasswordEnforcedReadOnly = filesSharingPublicPasswordEnforcedReadOnly;
+ }
+
+ public CapabilityBooleanType getFilesSharingPublicPasswordEnforcedReadWrite() {
+ return mFilesSharingPublicPasswordEnforcedReadWrite;
+ }
+
+ public void setFilesSharingPublicPasswordEnforcedReadWrite(
+ CapabilityBooleanType filesSharingPublicPasswordEnforcedReadWrite) {
+ this.mFilesSharingPublicPasswordEnforcedReadWrite = filesSharingPublicPasswordEnforcedReadWrite;
+ }
+
+ public CapabilityBooleanType getFilesSharingPublicPasswordEnforcedUploadOnly() {
+ return mFilesSharingPublicPasswordEnforcedUploadOnly;
+ }
+
+ public void setFilesSharingPublicPasswordEnforcedUploadOnly(
+ CapabilityBooleanType filesSharingPublicPasswordEnforcedUploadOnly) {
+ this.mFilesSharingPublicPasswordEnforcedUploadOnly = filesSharingPublicPasswordEnforcedUploadOnly;
+ }
+
public CapabilityBooleanType getFilesSharingPublicExpireDateEnabled() {
return mFilesSharingPublicExpireDateEnabled;
}
@@ -216,7 +248,6 @@ public class OCCapability {
this.mFilesSharingPublicExpireDateEnforced = filesSharingPublicExpireDateEnforced;
}
-
public CapabilityBooleanType getFilesSharingPublicSendMail() {
return mFilesSharingPublicSendMail;
}
diff --git a/src/com/owncloud/android/lib/resources/status/OwnCloudVersion.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/OwnCloudVersion.java
similarity index 95%
rename from src/com/owncloud/android/lib/resources/status/OwnCloudVersion.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/OwnCloudVersion.java
index 0bd66036..04b8800c 100644
--- a/src/com/owncloud/android/lib/resources/status/OwnCloudVersion.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/OwnCloudVersion.java
@@ -1,23 +1,23 @@
/* ownCloud Android Library is available under MIT license
* Copyright (C) 2016 ownCloud GmbH.
* Copyright (C) 2012 Bartek Przybylski
- *
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
@@ -106,7 +106,7 @@ public class OwnCloudVersion implements Comparable {
@Override
public int compareTo(OwnCloudVersion another) {
return another.mVersion == mVersion ? 0
- : another.mVersion < mVersion ? 1 : -1;
+ : another.mVersion < mVersion ? 1 : -1;
}
private void parseVersion(String version) {
@@ -139,7 +139,6 @@ public class OwnCloudVersion implements Comparable {
return versionValue;
}
-
public boolean isChunkedUploadSupported() {
return (mVersion >= MINIMUN_VERSION_FOR_CHUNKED_UPLOADS);
}
@@ -185,8 +184,8 @@ public class OwnCloudVersion implements Comparable {
*/
public boolean isPreemptiveAuthenticationPreferred() {
return (
- (mVersion < MINIMUM_VERSION_WITH_SESSION_MONITORING) ||
- (mVersion >= MINIMUM_VERSION_WITH_SESSION_MONITORING_WORKING_IN_PREEMPTIVE_MODE)
+ (mVersion < MINIMUM_VERSION_WITH_SESSION_MONITORING) ||
+ (mVersion >= MINIMUM_VERSION_WITH_SESSION_MONITORING_WORKING_IN_PREEMPTIVE_MODE)
);
}
diff --git a/src/com/owncloud/android/lib/resources/users/GetRemoteUserAvatarOperation.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/users/GetRemoteUserAvatarOperation.java
similarity index 96%
rename from src/com/owncloud/android/lib/resources/users/GetRemoteUserAvatarOperation.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/users/GetRemoteUserAvatarOperation.java
index eb88d11f..40d19465 100644
--- a/src/com/owncloud/android/lib/resources/users/GetRemoteUserAvatarOperation.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/users/GetRemoteUserAvatarOperation.java
@@ -1,6 +1,6 @@
/* ownCloud Android Library is available under MIT license
*
- * Copyright (C) 2018 ownCloud GmbH.
+ * Copyright (C) 2019 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -43,6 +43,7 @@ import static com.owncloud.android.lib.common.operations.RemoteOperationResult.R
/**
* Gets avatar about the user logged in, if available
+ *
* @author David A. Velasco
* @author David González Verdugo
*/
@@ -52,7 +53,9 @@ public class GetRemoteUserAvatarOperation extends RemoteOperation(RemoteOperationResult.ResultCode.FILE_NOT_FOUND);
return result;
diff --git a/src/com/owncloud/android/lib/resources/users/GetRemoteUserInfoOperation.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/users/GetRemoteUserInfoOperation.java
similarity index 96%
rename from src/com/owncloud/android/lib/resources/users/GetRemoteUserInfoOperation.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/users/GetRemoteUserInfoOperation.java
index 7e3c61f2..7b94eec1 100644
--- a/src/com/owncloud/android/lib/resources/users/GetRemoteUserInfoOperation.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/users/GetRemoteUserInfoOperation.java
@@ -1,22 +1,22 @@
/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
- *
+ * Copyright (C) 2019 ownCloud GmbH.
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
@@ -30,7 +30,6 @@ import com.owncloud.android.lib.common.http.methods.nonwebdav.GetMethod;
import com.owncloud.android.lib.common.operations.RemoteOperation;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
import com.owncloud.android.lib.common.utils.Log_OC;
-
import org.json.JSONObject;
import java.net.URL;
diff --git a/src/com/owncloud/android/lib/resources/users/GetRemoteUserQuotaOperation.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/users/GetRemoteUserQuotaOperation.java
similarity index 91%
rename from src/com/owncloud/android/lib/resources/users/GetRemoteUserQuotaOperation.java
rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/users/GetRemoteUserQuotaOperation.java
index d856be15..49c313be 100644
--- a/src/com/owncloud/android/lib/resources/users/GetRemoteUserQuotaOperation.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/users/GetRemoteUserQuotaOperation.java
@@ -1,6 +1,6 @@
/* ownCloud Android Library is available under MIT license
*
- * Copyright (C) 2018 ownCloud Inc.
+ * Copyright (C) 2019 ownCloud Inc.
* Copyright (C) 2015 Bartosz Przybylski
* Copyright (C) 2014 Marcello Steiner
*
@@ -27,6 +27,9 @@
package com.owncloud.android.lib.resources.users;
+import at.bitfire.dav4android.Property;
+import at.bitfire.dav4android.property.QuotaAvailableBytes;
+import at.bitfire.dav4android.property.QuotaUsedBytes;
import com.owncloud.android.lib.common.OwnCloudClient;
import com.owncloud.android.lib.common.http.HttpConstants;
import com.owncloud.android.lib.common.http.methods.webdav.DavUtils;
@@ -39,10 +42,6 @@ import com.owncloud.android.lib.common.utils.Log_OC;
import java.net.URL;
import java.util.List;
-import at.bitfire.dav4android.Property;
-import at.bitfire.dav4android.property.QuotaAvailableBytes;
-import at.bitfire.dav4android.property.QuotaUsedBytes;
-
import static com.owncloud.android.lib.common.http.methods.webdav.DavConstants.DEPTH_0;
import static com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode.OK;
@@ -52,26 +51,7 @@ import static com.owncloud.android.lib.common.operations.RemoteOperationResult.R
*/
public class GetRemoteUserQuotaOperation extends RemoteOperation {
- static public class RemoteQuota {
-
- long mFree, mUsed, mTotal;
- double mRelative;
-
- public RemoteQuota(long free, long used, long total, double relative) {
- mFree = free;
- mUsed = used;
- mTotal = total;
- mRelative = relative;
- }
-
- public long getFree() { return mFree; }
- public long getUsed() { return mUsed; }
- public long getTotal() { return mTotal; }
- public double getRelative() { return mRelative; }
- }
-
private static final String TAG = GetRemoteUserQuotaOperation.class.getSimpleName();
-
private String mRemotePath;
/**
@@ -112,7 +92,6 @@ public class GetRemoteUserQuotaOperation extends RemoteOperation(e);
-
} finally {
if (result.isSuccess()) {
Log_OC.i(TAG, "Get quota from " + mRemotePath + ": " + result.getLogMessage());
@@ -143,11 +122,13 @@ public class GetRemoteUserQuotaOperation extends RemoteOperation
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
4.0.0
com.owncloud.android
@@ -19,7 +19,7 @@
owncloud-android-library for Owncloud for Android
-
+
diff --git a/project.properties b/project.properties
deleted file mode 100644
index 34c8d58b..00000000
--- a/project.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# This file is automatically generated by Android Tools.
-# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
-#
-# This file must be checked in Version Control Systems.
-#
-# To customize properties used by the Ant build system edit
-# "ant.properties", and override values to adapt the script to your
-# project structure.
-#
-# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
-#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
-
-# Project target.
-target=android-24
-android.library=true
diff --git a/sample_client/.classpath b/sample_client/.classpath
deleted file mode 100644
index 51769745..00000000
--- a/sample_client/.classpath
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/sample_client/.project b/sample_client/.project
deleted file mode 100644
index d1b87431..00000000
--- a/sample_client/.project
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
- ownCloud Sample Client
-
-
-
-
-
- com.android.ide.eclipse.adt.ResourceManagerBuilder
-
-
-
-
- com.android.ide.eclipse.adt.PreCompilerBuilder
-
-
-
-
- org.eclipse.jdt.core.javabuilder
-
-
-
-
- com.android.ide.eclipse.adt.ApkBuilder
-
-
-
-
-
- com.android.ide.eclipse.adt.AndroidNature
- org.eclipse.jdt.core.javanature
-
-
diff --git a/sample_client/.settings/org.eclipse.jdt.core.prefs b/sample_client/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index b080d2dd..00000000
--- a/sample_client/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,4 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
-org.eclipse.jdt.core.compiler.compliance=1.6
-org.eclipse.jdt.core.compiler.source=1.6
diff --git a/sample_client/ant.properties b/sample_client/ant.properties
deleted file mode 100644
index b0971e89..00000000
--- a/sample_client/ant.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-# This file is used to override default values used by the Ant build system.
-#
-# This file must be checked into Version Control Systems, as it is
-# integral to the build system of your project.
-
-# This file is only used by the Ant script.
-
-# You can use this to override default values such as
-# 'source.dir' for the location of your java source folder and
-# 'out.dir' for the location of your output folder.
-
-# You can also use it define how the release builds are signed by declaring
-# the following properties:
-# 'key.store' for the location of your keystore and
-# 'key.alias' for the name of the key to use.
-# The password will be asked during the build when you use the 'release' target.
-
diff --git a/sample_client/build.gradle b/sample_client/build.gradle
index e61a1458..7f865ceb 100644
--- a/sample_client/build.gradle
+++ b/sample_client/build.gradle
@@ -1,38 +1,15 @@
apply plugin: 'com.android.application'
-repositories {
- jcenter()
-}
-
dependencies {
- implementation project(':')
+ implementation project(':owncloudComLibrary')
}
android {
- compileSdkVersion 26
+ compileSdkVersion 28
- sourceSets {
- main {
- manifest.srcFile 'AndroidManifest.xml'
- java.srcDirs = ['src']
- resources.srcDirs = ['src']
- aidl.srcDirs = ['src']
- renderscript.srcDirs = ['src']
- res.srcDirs = ['res']
- assets.srcDirs = ['assets']
- }
-
- // Move the tests to tests/java, tests/res, etc...
- androidTest.setRoot('tests')
-
- // Move the build types to build-types/
- // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
- // This moves them out of them default location under src//... which would
- // conflict with src/ being used by the main source set.
- // Adding new build types or product flavors should be accompanied
- // by a similar customization.
- debug.setRoot('build-types/debug')
- release.setRoot('build-types/release')
+ defaultConfig {
+ minSdkVersion 19
+ targetSdkVersion 28
}
lintOptions {
@@ -42,6 +19,7 @@ android {
packagingOptions {
exclude 'META-INF/LICENSE.txt'
}
+
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
diff --git a/sample_client/build.xml b/sample_client/build.xml
deleted file mode 100644
index 751356dd..00000000
--- a/sample_client/build.xml
+++ /dev/null
@@ -1,92 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/sample_client/gradle/wrapper/gradle-wrapper.jar b/sample_client/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index 13372aef..00000000
Binary files a/sample_client/gradle/wrapper/gradle-wrapper.jar and /dev/null differ
diff --git a/sample_client/gradle/wrapper/gradle-wrapper.properties b/sample_client/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index fc5d4423..00000000
--- a/sample_client/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-#Mon Dec 28 10:00:20 PST 2015
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip
\ No newline at end of file
diff --git a/sample_client/gradlew b/sample_client/gradlew
deleted file mode 100755
index 91a7e269..00000000
--- a/sample_client/gradlew
+++ /dev/null
@@ -1,164 +0,0 @@
-#!/usr/bin/env bash
-
-##############################################################################
-##
-## Gradle start up script for UN*X
-##
-##############################################################################
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS=""
-
-APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
-
-warn ( ) {
- echo "$*"
-}
-
-die ( ) {
- echo
- echo "$*"
- echo
- exit 1
-}
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-case "`uname`" in
- CYGWIN* )
- cygwin=true
- ;;
- Darwin* )
- darwin=true
- ;;
- MINGW* )
- msys=true
- ;;
-esac
-
-# For Cygwin, ensure paths are in UNIX format before anything is touched.
-if $cygwin ; then
- [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
-fi
-
-# Attempt to set APP_HOME
-# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
- ls=`ls -ld "$PRG"`
- link=`expr "$ls" : '.*-> \(.*\)$'`
- if expr "$link" : '/.*' > /dev/null; then
- PRG="$link"
- else
- PRG=`dirname "$PRG"`"/$link"
- fi
-done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >&-
-APP_HOME="`pwd -P`"
-cd "$SAVED" >&-
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
- if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
- # IBM's JDK on AIX uses strange locations for the executables
- JAVACMD="$JAVA_HOME/jre/sh/java"
- else
- JAVACMD="$JAVA_HOME/bin/java"
- fi
- if [ ! -x "$JAVACMD" ] ; then
- die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
- fi
-else
- JAVACMD="java"
- which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-fi
-
-# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
- MAX_FD_LIMIT=`ulimit -H -n`
- if [ $? -eq 0 ] ; then
- if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
- MAX_FD="$MAX_FD_LIMIT"
- fi
- ulimit -n $MAX_FD
- if [ $? -ne 0 ] ; then
- warn "Could not set maximum file descriptor limit: $MAX_FD"
- fi
- else
- warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
- fi
-fi
-
-# For Darwin, add options to specify how the application appears in the dock
-if $darwin; then
- GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
-fi
-
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin ; then
- APP_HOME=`cygpath --path --mixed "$APP_HOME"`
- CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
-
- # We build the pattern for arguments to be converted via cygpath
- ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
- SEP=""
- for dir in $ROOTDIRSRAW ; do
- ROOTDIRS="$ROOTDIRS$SEP$dir"
- SEP="|"
- done
- OURCYGPATTERN="(^($ROOTDIRS))"
- # Add a user-defined pattern to the cygpath arguments
- if [ "$GRADLE_CYGPATTERN" != "" ] ; then
- OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
- fi
- # Now convert the arguments - kludge to limit ourselves to /bin/sh
- i=0
- for arg in "$@" ; do
- CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
- CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
-
- if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
- eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
- else
- eval `echo args$i`="\"$arg\""
- fi
- i=$((i+1))
- done
- case $i in
- (0) set -- ;;
- (1) set -- "$args0" ;;
- (2) set -- "$args0" "$args1" ;;
- (3) set -- "$args0" "$args1" "$args2" ;;
- (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
- (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
- (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
- (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
- (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
- (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
- esac
-fi
-
-# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
-function splitJvmOpts() {
- JVM_OPTS=("$@")
-}
-eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
-JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
-
-exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
diff --git a/sample_client/gradlew.bat b/sample_client/gradlew.bat
deleted file mode 100644
index aec99730..00000000
--- a/sample_client/gradlew.bat
+++ /dev/null
@@ -1,90 +0,0 @@
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS=
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto init
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:init
-@rem Get command-line arguments, handling Windowz variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-if "%@eval[2+2]" == "4" goto 4NT_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-goto execute
-
-:4NT_args
-@rem Get arguments from the 4NT Shell from JP Software
-set CMD_LINE_ARGS=%$
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
diff --git a/sample_client/project.properties b/sample_client/project.properties
deleted file mode 100644
index 07afc2f8..00000000
--- a/sample_client/project.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-# This file is automatically generated by Android Tools.
-# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
-#
-# This file must be checked in Version Control Systems.
-#
-# To customize properties used by the Ant build system edit
-# "ant.properties", and override values to adapt the script to your
-# project structure.
-#
-# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
-#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
-
-# Project target.
-target=android-24
-android.library.reference.1=..
diff --git a/sample_client/assets/oc_sample.png b/sample_client/src/assets/oc_sample.png
similarity index 100%
rename from sample_client/assets/oc_sample.png
rename to sample_client/src/assets/oc_sample.png
diff --git a/sample_client/assets/oc_sample.txt b/sample_client/src/assets/oc_sample.txt
similarity index 100%
rename from sample_client/assets/oc_sample.txt
rename to sample_client/src/assets/oc_sample.txt
diff --git a/sample_client/src/com/owncloud/android/lib/sampleclient/MainActivity.java b/sample_client/src/com/owncloud/android/lib/sampleclient/MainActivity.java
deleted file mode 100644
index 7f105d2c..00000000
--- a/sample_client/src/com/owncloud/android/lib/sampleclient/MainActivity.java
+++ /dev/null
@@ -1,310 +0,0 @@
-/* ownCloud Android Library is available under MIT license
- * Copyright (C) 2018 ownCloud GmbH.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- *
- */
-
-package com.owncloud.android.lib.sampleclient;
-
-import android.annotation.SuppressLint;
-import android.app.Activity;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageManager;
-import android.content.res.AssetManager;
-import android.graphics.drawable.BitmapDrawable;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Handler;
-import android.util.Log;
-import android.view.View;
-import android.widget.ListView;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import com.owncloud.android.lib.common.OwnCloudClient;
-import com.owncloud.android.lib.common.OwnCloudClientFactory;
-import com.owncloud.android.lib.common.OwnCloudClientManagerFactory;
-import com.owncloud.android.lib.common.authentication.OwnCloudCredentialsFactory;
-import com.owncloud.android.lib.common.network.OnDatatransferProgressListener;
-import com.owncloud.android.lib.common.operations.OnRemoteOperationListener;
-import com.owncloud.android.lib.common.operations.RemoteOperation;
-import com.owncloud.android.lib.common.operations.RemoteOperationResult;
-import com.owncloud.android.lib.common.utils.Log_OC;
-import com.owncloud.android.lib.resources.files.DownloadRemoteFileOperation;
-import com.owncloud.android.lib.resources.files.FileUtils;
-import com.owncloud.android.lib.resources.files.ReadRemoteFolderOperation;
-import com.owncloud.android.lib.resources.files.RemoteFile;
-import com.owncloud.android.lib.resources.files.RemoveRemoteFileOperation;
-import com.owncloud.android.lib.resources.files.UploadRemoteFileOperation;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import static android.content.ContentValues.TAG;
-
-public class MainActivity extends Activity implements OnRemoteOperationListener, OnDatatransferProgressListener {
-
- private static String LOG_TAG = MainActivity.class.getCanonicalName();
-
- private Handler mHandler;
- private OwnCloudClient mClient;
- private FilesArrayAdapter mFilesAdapter;
- private View mFrame;
-
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
-
- mHandler = new Handler();
-
- final Uri serverUri = Uri.parse(getString(R.string.server_base_url));
-
- OwnCloudClientManagerFactory.setUserAgent(getUserAgent());
- mClient = OwnCloudClientFactory.createOwnCloudClient(serverUri, this, true);
-
- mClient.setCredentials(
- OwnCloudCredentialsFactory.newBasicCredentials(
- getString(R.string.username),
- getString(R.string.password)
- )
- );
-
- mFilesAdapter = new FilesArrayAdapter(this, R.layout.file_in_list);
- ((ListView)findViewById(R.id.list_view)).setAdapter(mFilesAdapter);
-
- // TODO move to background thread or task
- AssetManager assets = getAssets();
- try {
- String sampleFileName = getString(R.string.sample_file_name);
- File upFolder = new File(getCacheDir(), getString(R.string.upload_folder_path));
- upFolder.mkdir();
- File upFile = new File(upFolder, sampleFileName);
- FileOutputStream fos = new FileOutputStream(upFile);
- InputStream is = assets.open(sampleFileName);
- int count = 0;
- byte[] buffer = new byte[1024];
- while ((count = is.read(buffer, 0, buffer.length)) >= 0) {
- fos.write(buffer, 0, count);
- }
- is.close();
- fos.close();
- } catch (IOException e) {
- Toast.makeText(this, R.string.error_copying_sample_file, Toast.LENGTH_SHORT).show();
- Log.e(LOG_TAG, getString(R.string.error_copying_sample_file), e);
- }
-
- mFrame = findViewById(R.id.frame);
- }
-
-
- @Override
- public void onDestroy() {
- File upFolder = new File(getCacheDir(), getString(R.string.upload_folder_path));
- File upFile = upFolder.listFiles()[0];
- upFile.delete();
- upFolder.delete();
- super.onDestroy();
- }
-
-
- public void onClickHandler(View button) {
- switch (button.getId()) {
- case R.id.button_refresh:
- startRefresh();
- break;
- case R.id.button_upload:
- startUpload();
- break;
- case R.id.button_delete_remote:
- startRemoteDeletion();
- break;
- case R.id.button_download:
- startDownload();
- break;
- case R.id.button_delete_local:
- startLocalDeletion();
- break;
- default:
- Toast.makeText(this, R.string.youre_doing_it_wrong, Toast.LENGTH_SHORT).show();
- }
- }
-
- private void startRefresh() {
- ReadRemoteFolderOperation refreshOperation = new ReadRemoteFolderOperation(FileUtils.PATH_SEPARATOR);
- refreshOperation.execute(mClient, this, mHandler);
- }
-
- private void startUpload() {
- File upFolder = new File(getCacheDir(), getString(R.string.upload_folder_path));
- File fileToUpload = upFolder.listFiles()[0];
- String remotePath = FileUtils.PATH_SEPARATOR + fileToUpload.getName();
- String mimeType = getString(R.string.sample_file_mimetype);
-
- // Get the last modification date of the file from the file system
- Long timeStampLong = fileToUpload.lastModified()/1000;
- String timeStamp = timeStampLong.toString();
-
- UploadRemoteFileOperation uploadOperation = new UploadRemoteFileOperation(fileToUpload.getAbsolutePath(),
- remotePath, mimeType, timeStamp);
- uploadOperation.addDatatransferProgressListener(this);
- uploadOperation.execute(mClient, this, mHandler);
- }
-
- private void startRemoteDeletion() {
- File upFolder = new File(getCacheDir(), getString(R.string.upload_folder_path));
- File fileToUpload = upFolder.listFiles()[0];
- String remotePath = FileUtils.PATH_SEPARATOR + fileToUpload.getName();
-
- RemoveRemoteFileOperation removeOperation = new RemoveRemoteFileOperation(remotePath);
- removeOperation.execute(mClient, this, mHandler);
- }
-
- private void startDownload() {
- File downFolder = new File(getCacheDir(), getString(R.string.download_folder_path));
- downFolder.mkdir();
- File upFolder = new File(getCacheDir(), getString(R.string.upload_folder_path));
- File fileToUpload = upFolder.listFiles()[0];
- String remotePath = FileUtils.PATH_SEPARATOR + fileToUpload.getName();
-
- DownloadRemoteFileOperation downloadOperation = new DownloadRemoteFileOperation(remotePath,
- downFolder.getAbsolutePath());
- downloadOperation.addDatatransferProgressListener(this);
- downloadOperation.execute(mClient, this, mHandler);
- }
-
- private void startLocalDeletion() {
- File downFolder = new File(getCacheDir(), getString(R.string.download_folder_path));
- File downloadedFile = downFolder.listFiles()[0];
- if (!downloadedFile.delete() && downloadedFile.exists()) {
- Toast.makeText(this, R.string.error_deleting_local_file, Toast.LENGTH_SHORT).show();
- } else {
- ((TextView) findViewById(R.id.download_progress)).setText("0%");
- findViewById(R.id.frame).setBackgroundDrawable(null);
- }
- }
-
- @Override
- public void onRemoteOperationFinish(RemoteOperation operation, RemoteOperationResult result) {
- if (!result.isSuccess()) {
- Toast.makeText(this, R.string.todo_operation_finished_in_fail, Toast.LENGTH_SHORT).show();
- Log.e(LOG_TAG, result.getLogMessage(), result.getException());
-
- } else if (operation instanceof ReadRemoteFolderOperation) {
- onSuccessfulRefresh((ReadRemoteFolderOperation)operation, result);
-
- } else if (operation instanceof com.owncloud.android.lib.resources.files.UploadRemoteFileOperation) {
- onSuccessfulUpload((com.owncloud.android.lib.resources.files.UploadRemoteFileOperation)operation, result);
-
- } else if (operation instanceof RemoveRemoteFileOperation ) {
- onSuccessfulRemoteDeletion((RemoveRemoteFileOperation)operation, result);
-
- } else if (operation instanceof DownloadRemoteFileOperation ) {
- onSuccessfulDownload();
-
- } else {
- Toast.makeText(this, R.string.todo_operation_finished_in_success, Toast.LENGTH_SHORT).show();
- }
- }
-
- private void onSuccessfulRefresh(ReadRemoteFolderOperation operation, RemoteOperationResult result) {
- mFilesAdapter.clear();
- List files = new ArrayList<>();
- for(RemoteFile remoteFile: (List) result.getData()) {
- files.add(remoteFile);
- }
- if (files != null) {
- Iterator it = files.iterator();
- while (it.hasNext()) {
- mFilesAdapter.add(it.next());
- }
- mFilesAdapter.remove(mFilesAdapter.getItem(0));
- }
- mFilesAdapter.notifyDataSetChanged();
- }
-
- private void onSuccessfulUpload(com.owncloud.android.lib.resources.files.UploadRemoteFileOperation operation, RemoteOperationResult result) {
- startRefresh();
- }
-
- private void onSuccessfulRemoteDeletion(RemoveRemoteFileOperation operation, RemoteOperationResult result) {
- startRefresh();
- TextView progressView = (TextView) findViewById(R.id.upload_progress);
- if (progressView != null) {
- progressView.setText("0%");
- }
- }
-
- private void onSuccessfulDownload() {
- File downFolder = new File(getCacheDir(), getString(R.string.download_folder_path));
- File downloadedFile = downFolder.listFiles()[0];
- BitmapDrawable bDraw = new BitmapDrawable(getResources(), downloadedFile.getAbsolutePath());
- mFrame.setBackgroundDrawable(bDraw);
- }
-
- @Override
- public void onTransferProgress(long progressRate, long totalTransferredSoFar, long totalToTransfer, String fileName) {
- final long percentage = (totalToTransfer > 0 ? totalTransferredSoFar * 100 / totalToTransfer : 0);
- final boolean upload = fileName.contains(getString(R.string.upload_folder_path));
- Log.d(LOG_TAG, "progressRate " + percentage);
- mHandler.post(new Runnable() {
- @Override
- public void run() {
- TextView progressView = null;
- if (upload) {
- progressView = findViewById(R.id.upload_progress);
- } else {
- progressView = findViewById(R.id.download_progress);
- }
- if (progressView != null) {
- progressView.setText(Long.toString(percentage) + "%");
- }
- }
- });
- }
-
- // user agent
- @SuppressLint("StringFormatInvalid")
- private String getUserAgent() {
- String appString = getResources().getString(R.string.user_agent);
- String packageName = getPackageName();
- String version = "";
-
- PackageInfo pInfo;
- try {
- pInfo = getPackageManager().getPackageInfo(packageName, 0);
- if (pInfo != null) {
- version = pInfo.versionName;
- }
- } catch (PackageManager.NameNotFoundException e) {
- Log_OC.e(TAG, "Trying to get packageName", e.getCause());
- }
-
- // Mozilla/5.0 (Android) ownCloud-android/1.7.0
- return String.format(appString, version);
- }
-}
\ No newline at end of file
diff --git a/sample_client/AndroidManifest.xml b/sample_client/src/main/AndroidManifest.xml
similarity index 82%
rename from sample_client/AndroidManifest.xml
rename to sample_client/src/main/AndroidManifest.xml
index 58d5d6c1..ba0c8247 100644
--- a/sample_client/AndroidManifest.xml
+++ b/sample_client/src/main/AndroidManifest.xml
@@ -23,15 +23,12 @@
-->
-
+
-
-
+
@@ -42,8 +39,8 @@
android:screenOrientation="portrait"
>
-
-
+
+
diff --git a/sample_client/src/com/owncloud/android/lib/sampleclient/FilesArrayAdapter.java b/sample_client/src/main/java/com/owncloud/android/lib/sampleclient/FilesArrayAdapter.java
similarity index 76%
rename from sample_client/src/com/owncloud/android/lib/sampleclient/FilesArrayAdapter.java
rename to sample_client/src/main/java/com/owncloud/android/lib/sampleclient/FilesArrayAdapter.java
index 23806628..4e942719 100644
--- a/sample_client/src/com/owncloud/android/lib/sampleclient/FilesArrayAdapter.java
+++ b/sample_client/src/main/java/com/owncloud/android/lib/sampleclient/FilesArrayAdapter.java
@@ -1,22 +1,22 @@
/* ownCloud Android Library is available under MIT license
* Copyright (C) 2016 ownCloud GmbH.
- *
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
@@ -32,15 +32,15 @@ import android.widget.TextView;
import com.owncloud.android.lib.resources.files.RemoteFile;
public class FilesArrayAdapter extends ArrayAdapter {
-
- public FilesArrayAdapter(Context context, int resource) {
- super(context, resource);
- }
-
- public View getView(int position, View convertView, ViewGroup parent) {
- TextView textView = (TextView)super.getView(position, convertView, parent);
- textView.setText(getItem(position).getRemotePath());
- return textView;
- }
+
+ public FilesArrayAdapter(Context context, int resource) {
+ super(context, resource);
+ }
+
+ public View getView(int position, View convertView, ViewGroup parent) {
+ TextView textView = (TextView) super.getView(position, convertView, parent);
+ textView.setText(getItem(position).getRemotePath());
+ return textView;
+ }
}
diff --git a/sample_client/src/main/java/com/owncloud/android/lib/sampleclient/MainActivity.java b/sample_client/src/main/java/com/owncloud/android/lib/sampleclient/MainActivity.java
new file mode 100644
index 00000000..953699ab
--- /dev/null
+++ b/sample_client/src/main/java/com/owncloud/android/lib/sampleclient/MainActivity.java
@@ -0,0 +1,310 @@
+/* ownCloud Android Library is available under MIT license
+ * Copyright (C) 2019 ownCloud GmbH.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ */
+
+package com.owncloud.android.lib.sampleclient;
+
+import android.annotation.SuppressLint;
+import android.app.Activity;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.content.res.AssetManager;
+import android.graphics.drawable.BitmapDrawable;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Handler;
+import android.util.Log;
+import android.view.View;
+import android.widget.ListView;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.owncloud.android.lib.common.OwnCloudClient;
+import com.owncloud.android.lib.common.OwnCloudClientFactory;
+import com.owncloud.android.lib.common.OwnCloudClientManagerFactory;
+import com.owncloud.android.lib.common.authentication.OwnCloudCredentialsFactory;
+import com.owncloud.android.lib.common.network.OnDatatransferProgressListener;
+import com.owncloud.android.lib.common.operations.OnRemoteOperationListener;
+import com.owncloud.android.lib.common.operations.RemoteOperation;
+import com.owncloud.android.lib.common.operations.RemoteOperationResult;
+import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.lib.resources.files.DownloadRemoteFileOperation;
+import com.owncloud.android.lib.resources.files.FileUtils;
+import com.owncloud.android.lib.resources.files.ReadRemoteFolderOperation;
+import com.owncloud.android.lib.resources.files.RemoteFile;
+import com.owncloud.android.lib.resources.files.RemoveRemoteFileOperation;
+import com.owncloud.android.lib.resources.files.UploadRemoteFileOperation;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import static android.content.ContentValues.TAG;
+
+public class MainActivity extends Activity implements OnRemoteOperationListener, OnDatatransferProgressListener {
+
+ private static String LOG_TAG = MainActivity.class.getCanonicalName();
+
+ private Handler mHandler;
+ private OwnCloudClient mClient;
+ private FilesArrayAdapter mFilesAdapter;
+ private View mFrame;
+
+ /**
+ * Called when the activity is first created.
+ */
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.main);
+
+ mHandler = new Handler();
+
+ final Uri serverUri = Uri.parse(getString(R.string.server_base_url));
+
+ OwnCloudClientManagerFactory.setUserAgent(getUserAgent());
+ mClient = OwnCloudClientFactory.createOwnCloudClient(serverUri, this, true);
+
+ mClient.setCredentials(
+ OwnCloudCredentialsFactory.newBasicCredentials(
+ getString(R.string.username),
+ getString(R.string.password)
+ )
+ );
+
+ mFilesAdapter = new FilesArrayAdapter(this, R.layout.file_in_list);
+ ((ListView) findViewById(R.id.list_view)).setAdapter(mFilesAdapter);
+
+ // TODO move to background thread or task
+ AssetManager assets = getAssets();
+ try {
+ String sampleFileName = getString(R.string.sample_file_name);
+ File upFolder = new File(getCacheDir(), getString(R.string.upload_folder_path));
+ upFolder.mkdir();
+ File upFile = new File(upFolder, sampleFileName);
+ FileOutputStream fos = new FileOutputStream(upFile);
+ InputStream is = assets.open(sampleFileName);
+ int count = 0;
+ byte[] buffer = new byte[1024];
+ while ((count = is.read(buffer, 0, buffer.length)) >= 0) {
+ fos.write(buffer, 0, count);
+ }
+ is.close();
+ fos.close();
+ } catch (IOException e) {
+ Toast.makeText(this, R.string.error_copying_sample_file, Toast.LENGTH_SHORT).show();
+ Log.e(LOG_TAG, getString(R.string.error_copying_sample_file), e);
+ }
+
+ mFrame = findViewById(R.id.frame);
+ }
+
+ @Override
+ public void onDestroy() {
+ File upFolder = new File(getCacheDir(), getString(R.string.upload_folder_path));
+ File upFile = upFolder.listFiles()[0];
+ upFile.delete();
+ upFolder.delete();
+ super.onDestroy();
+ }
+
+ public void onClickHandler(View button) {
+ switch (button.getId()) {
+ case R.id.button_refresh:
+ startRefresh();
+ break;
+ case R.id.button_upload:
+ startUpload();
+ break;
+ case R.id.button_delete_remote:
+ startRemoteDeletion();
+ break;
+ case R.id.button_download:
+ startDownload();
+ break;
+ case R.id.button_delete_local:
+ startLocalDeletion();
+ break;
+ default:
+ Toast.makeText(this, R.string.youre_doing_it_wrong, Toast.LENGTH_SHORT).show();
+ }
+ }
+
+ private void startRefresh() {
+ ReadRemoteFolderOperation refreshOperation = new ReadRemoteFolderOperation(FileUtils.PATH_SEPARATOR);
+ refreshOperation.execute(mClient, this, mHandler);
+ }
+
+ private void startUpload() {
+ File upFolder = new File(getCacheDir(), getString(R.string.upload_folder_path));
+ File fileToUpload = upFolder.listFiles()[0];
+ String remotePath = FileUtils.PATH_SEPARATOR + fileToUpload.getName();
+ String mimeType = getString(R.string.sample_file_mimetype);
+
+ // Get the last modification date of the file from the file system
+ Long timeStampLong = fileToUpload.lastModified() / 1000;
+ String timeStamp = timeStampLong.toString();
+
+ UploadRemoteFileOperation uploadOperation = new UploadRemoteFileOperation(fileToUpload.getAbsolutePath(),
+ remotePath, mimeType, timeStamp);
+ uploadOperation.addDatatransferProgressListener(this);
+ uploadOperation.execute(mClient, this, mHandler);
+ }
+
+ private void startRemoteDeletion() {
+ File upFolder = new File(getCacheDir(), getString(R.string.upload_folder_path));
+ File fileToUpload = upFolder.listFiles()[0];
+ String remotePath = FileUtils.PATH_SEPARATOR + fileToUpload.getName();
+
+ RemoveRemoteFileOperation removeOperation = new RemoveRemoteFileOperation(remotePath);
+ removeOperation.execute(mClient, this, mHandler);
+ }
+
+ private void startDownload() {
+ File downFolder = new File(getCacheDir(), getString(R.string.download_folder_path));
+ downFolder.mkdir();
+ File upFolder = new File(getCacheDir(), getString(R.string.upload_folder_path));
+ File fileToUpload = upFolder.listFiles()[0];
+ String remotePath = FileUtils.PATH_SEPARATOR + fileToUpload.getName();
+
+ DownloadRemoteFileOperation downloadOperation = new DownloadRemoteFileOperation(remotePath,
+ downFolder.getAbsolutePath());
+ downloadOperation.addDatatransferProgressListener(this);
+ downloadOperation.execute(mClient, this, mHandler);
+ }
+
+ private void startLocalDeletion() {
+ File downFolder = new File(getCacheDir(), getString(R.string.download_folder_path));
+ File downloadedFile = downFolder.listFiles()[0];
+ if (!downloadedFile.delete() && downloadedFile.exists()) {
+ Toast.makeText(this, R.string.error_deleting_local_file, Toast.LENGTH_SHORT).show();
+ } else {
+ ((TextView) findViewById(R.id.download_progress)).setText("0%");
+ findViewById(R.id.frame).setBackgroundDrawable(null);
+ }
+ }
+
+ @Override
+ public void onRemoteOperationFinish(RemoteOperation operation, RemoteOperationResult result) {
+ if (!result.isSuccess()) {
+ Toast.makeText(this, R.string.todo_operation_finished_in_fail, Toast.LENGTH_SHORT).show();
+ Log.e(LOG_TAG, result.getLogMessage(), result.getException());
+
+ } else if (operation instanceof ReadRemoteFolderOperation) {
+ onSuccessfulRefresh((ReadRemoteFolderOperation) operation, result);
+
+ } else if (operation instanceof com.owncloud.android.lib.resources.files.UploadRemoteFileOperation) {
+ onSuccessfulUpload((com.owncloud.android.lib.resources.files.UploadRemoteFileOperation) operation, result);
+
+ } else if (operation instanceof RemoveRemoteFileOperation) {
+ onSuccessfulRemoteDeletion((RemoveRemoteFileOperation) operation, result);
+
+ } else if (operation instanceof DownloadRemoteFileOperation) {
+ onSuccessfulDownload();
+
+ } else {
+ Toast.makeText(this, R.string.todo_operation_finished_in_success, Toast.LENGTH_SHORT).show();
+ }
+ }
+
+ private void onSuccessfulRefresh(ReadRemoteFolderOperation operation, RemoteOperationResult result) {
+ mFilesAdapter.clear();
+ List files = new ArrayList<>();
+ for (RemoteFile remoteFile : (List) result.getData()) {
+ files.add(remoteFile);
+ }
+ if (files != null) {
+ Iterator it = files.iterator();
+ while (it.hasNext()) {
+ mFilesAdapter.add(it.next());
+ }
+ mFilesAdapter.remove(mFilesAdapter.getItem(0));
+ }
+ mFilesAdapter.notifyDataSetChanged();
+ }
+
+ private void onSuccessfulUpload(com.owncloud.android.lib.resources.files.UploadRemoteFileOperation operation, RemoteOperationResult result) {
+ startRefresh();
+ }
+
+ private void onSuccessfulRemoteDeletion(RemoveRemoteFileOperation operation, RemoteOperationResult result) {
+ startRefresh();
+ TextView progressView = (TextView) findViewById(R.id.upload_progress);
+ if (progressView != null) {
+ progressView.setText("0%");
+ }
+ }
+
+ private void onSuccessfulDownload() {
+ File downFolder = new File(getCacheDir(), getString(R.string.download_folder_path));
+ File downloadedFile = downFolder.listFiles()[0];
+ BitmapDrawable bDraw = new BitmapDrawable(getResources(), downloadedFile.getAbsolutePath());
+ mFrame.setBackgroundDrawable(bDraw);
+ }
+
+ @Override
+ public void onTransferProgress(long progressRate, long totalTransferredSoFar, long totalToTransfer, String fileName) {
+ final long percentage = (totalToTransfer > 0 ? totalTransferredSoFar * 100 / totalToTransfer : 0);
+ final boolean upload = fileName.contains(getString(R.string.upload_folder_path));
+ Log.d(LOG_TAG, "progressRate " + percentage);
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ TextView progressView = null;
+ if (upload) {
+ progressView = findViewById(R.id.upload_progress);
+ } else {
+ progressView = findViewById(R.id.download_progress);
+ }
+ if (progressView != null) {
+ progressView.setText(Long.toString(percentage) + "%");
+ }
+ }
+ });
+ }
+
+ // user agent
+ @SuppressLint("StringFormatInvalid")
+ private String getUserAgent() {
+ String appString = getResources().getString(R.string.user_agent);
+ String packageName = getPackageName();
+ String version = "";
+
+ PackageInfo pInfo;
+ try {
+ pInfo = getPackageManager().getPackageInfo(packageName, 0);
+ if (pInfo != null) {
+ version = pInfo.versionName;
+ }
+ } catch (PackageManager.NameNotFoundException e) {
+ Log_OC.e(TAG, "Trying to get packageName", e.getCause());
+ }
+
+ // Mozilla/5.0 (Android) ownCloud-android/1.7.0
+ return String.format(appString, version);
+ }
+}
\ No newline at end of file
diff --git a/sample_client/res/drawable-hdpi/ic_launcher.png b/sample_client/src/main/res/drawable-hdpi/ic_launcher.png
similarity index 100%
rename from sample_client/res/drawable-hdpi/ic_launcher.png
rename to sample_client/src/main/res/drawable-hdpi/ic_launcher.png
diff --git a/sample_client/res/drawable-ldpi/ic_launcher.png b/sample_client/src/main/res/drawable-ldpi/ic_launcher.png
similarity index 100%
rename from sample_client/res/drawable-ldpi/ic_launcher.png
rename to sample_client/src/main/res/drawable-ldpi/ic_launcher.png
diff --git a/sample_client/res/drawable-mdpi/ic_launcher.png b/sample_client/src/main/res/drawable-mdpi/ic_launcher.png
similarity index 100%
rename from sample_client/res/drawable-mdpi/ic_launcher.png
rename to sample_client/src/main/res/drawable-mdpi/ic_launcher.png
diff --git a/sample_client/res/layout/file_in_list.xml b/sample_client/src/main/res/layout/file_in_list.xml
similarity index 96%
rename from sample_client/res/layout/file_in_list.xml
rename to sample_client/src/main/res/layout/file_in_list.xml
index 2f988433..4c0703a9 100644
--- a/sample_client/res/layout/file_in_list.xml
+++ b/sample_client/src/main/res/layout/file_in_list.xml
@@ -22,8 +22,8 @@
THE SOFTWARE.
-->
-
+
+ android:layout_height="wrap_content"
+ />
diff --git a/sample_client/res/layout/main.xml b/sample_client/src/main/res/layout/main.xml
similarity index 98%
rename from sample_client/res/layout/main.xml
rename to sample_client/src/main/res/layout/main.xml
index e743396b..ed7e2e42 100644
--- a/sample_client/res/layout/main.xml
+++ b/sample_client/src/main/res/layout/main.xml
@@ -33,58 +33,58 @@
style="@style/ButtonStyle"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
- android:text="@string/refresh"
android:onClick="onClickHandler"
+ android:text="@string/refresh"
/>
@@ -93,20 +93,20 @@
style="@style/ButtonStyle"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
- android:text="@string/download"
android:onClick="onClickHandler"
+ android:text="@string/download"
/>
diff --git a/sample_client/res/values-v11/styles.xml b/sample_client/src/main/res/values-v11/styles.xml
similarity index 99%
rename from sample_client/res/values-v11/styles.xml
rename to sample_client/src/main/res/values-v11/styles.xml
index 20688bd3..c636c71e 100644
--- a/sample_client/res/values-v11/styles.xml
+++ b/sample_client/src/main/res/values-v11/styles.xml
@@ -22,13 +22,15 @@
THE SOFTWARE.
-->
-
+
+
+
+