From 8d820f42fb98af9ca69315b736730e260d5a6917 Mon Sep 17 00:00:00 2001 From: masensio Date: Thu, 27 Mar 2014 09:45:07 +0100 Subject: [PATCH 1/5] Check the version number taking into account the new format --- .../lib/common/accounts/AccountUtils.java | 2 +- .../status/GetRemoteStatusOperation.java | 2 +- .../lib/resources/status/OwnCloudVersion.java | 116 ++++++++++++------ 3 files changed, 80 insertions(+), 40 deletions(-) diff --git a/src/com/owncloud/android/lib/common/accounts/AccountUtils.java b/src/com/owncloud/android/lib/common/accounts/AccountUtils.java index b6cbb30c..4b9c3d61 100644 --- a/src/com/owncloud/android/lib/common/accounts/AccountUtils.java +++ b/src/com/owncloud/android/lib/common/accounts/AccountUtils.java @@ -84,7 +84,7 @@ public class AccountUtils { String versionString = ama.getUserData(account, Constants.KEY_OC_VERSION_STRING); boolean supportsOAuth = (ama.getUserData(account, Constants.KEY_SUPPORTS_OAUTH2) != null); boolean supportsSamlSso = (ama.getUserData(account, Constants.KEY_SUPPORTS_SAML_WEB_SSO) != null); - OwnCloudVersion ver = new OwnCloudVersion(version, versionString); + OwnCloudVersion ver = new OwnCloudVersion(version); String webdavpath = getWebdavPath(ver, supportsOAuth, supportsSamlSso); if (baseurl == null || webdavpath == null) diff --git a/src/com/owncloud/android/lib/resources/status/GetRemoteStatusOperation.java b/src/com/owncloud/android/lib/resources/status/GetRemoteStatusOperation.java index bc8b92e1..1cf369f1 100644 --- a/src/com/owncloud/android/lib/resources/status/GetRemoteStatusOperation.java +++ b/src/com/owncloud/android/lib/resources/status/GetRemoteStatusOperation.java @@ -87,7 +87,7 @@ public class GetRemoteStatusOperation extends RemoteOperation { } else { String version = json.getString(NODE_VERSION); String versionString = json.getString(NODE_VERSIONSTRING); - mOCVersion = new OwnCloudVersion(version, versionString); + mOCVersion = new OwnCloudVersion(version); if (!mOCVersion.isVersionValid()) { mLatestResult = new RemoteOperationResult(RemoteOperationResult.ResultCode.BAD_OC_VERSION); diff --git a/src/com/owncloud/android/lib/resources/status/OwnCloudVersion.java b/src/com/owncloud/android/lib/resources/status/OwnCloudVersion.java index 8bb4e1e7..737e21c6 100644 --- a/src/com/owncloud/android/lib/resources/status/OwnCloudVersion.java +++ b/src/com/owncloud/android/lib/resources/status/OwnCloudVersion.java @@ -25,6 +25,8 @@ package com.owncloud.android.lib.resources.status; +import android.util.Log; + public class OwnCloudVersion implements Comparable { public static final OwnCloudVersion owncloud_v1 = new OwnCloudVersion( 0x010000); @@ -37,7 +39,7 @@ public class OwnCloudVersion implements Comparable { public static final OwnCloudVersion owncloud_v4_5 = new OwnCloudVersion( 0x040500); - public static final int MINIMUM_VERSION_STRING_FOR_SHARING_API = 0x05000D; + public static final int MINIMUM_VERSION_FOR_SHARING_API = 0x05001B; // 5.0.27 // format is in version // 0xAABBCC @@ -47,28 +49,52 @@ public class OwnCloudVersion implements Comparable { private boolean mIsValid; // not parsed, saved same value offered by the server private String mVersionString; + private int mCountDots; protected OwnCloudVersion(int version) { mVersion = version; mIsValid = true; mVersionString = ""; } + + public OwnCloudVersion(String version){ + mVersion = 0; + mIsValid = false; + mCountDots = version.length() - version.replace(".", "").length(); + Log.d("OwnCloudVersion", "VERSION "+ version + " Asign dots = " + String.valueOf(mCountDots)); + parseVersion(version); - public OwnCloudVersion(String version, String versionString) { - mVersion = 0; - mIsValid = false; - parseVersionString(version); - if (versionString != null && versionString.length() > 0) { - mVersionString = versionString; - - } else if (mIsValid) { - mVersionString = version; - } } + +// public OwnCloudVersion(String version, String versionString) { +// mVersion = 0; +// mIsValid = false; +// //mCountDots = version.length() - version.replace(".", "").length(); +// mCountDots = 2; +// Log.d("OwnCloudVersion", "VERSION "+ version + " Asign dots = " + String.valueOf(mCountDots)); +// parseVersion(version); +// if (versionString != null && versionString.length() > 0) { +// mVersionString = versionString; +// +// } else if (mIsValid) { +// mVersionString = version; +// } +// } public String toString() { - return ((mVersion >> 16) % 256) + "." + ((mVersion >> 8) % 256) + "." - + ((mVersion) % 256); + String versionToString = String.valueOf((mVersion >> (8*mCountDots)) % 256); + Log.d("OwnCloudVersion", " versionToString " + versionToString); + for (int i = mCountDots - 1; i >= 0; i-- ) { + Log.d("OwnCloudVersion", "i = "+ i + " versionToString " + versionToString); + versionToString = versionToString + "." + String.valueOf((mVersion >> (8*i)) % 256); + } + //versionToString = versionToString + "." + String.valueOf((mVersion) % 256); + + Log.d("OwnCloudVersion", "dots = " + String.valueOf(mCountDots)); + Log.d("OwnCloudVersion", " versionToString " + versionToString); + Log.d("OwncloudVersion", ((mVersion >> 24) % 256) + "." + ((mVersion >> 16) % 256) + "." + ((mVersion >> 8) % 256) + "." + + ((mVersion) % 256)); + return versionToString; } public String getVersion() { @@ -89,9 +115,9 @@ public class OwnCloudVersion implements Comparable { : another.mVersion < mVersion ? 1 : -1; } - private void parseVersionString(String versionString) { + private void parseVersion(String version) { try { - mVersion = getParsedVersionString(versionString); + mVersion = getParsedVersion(version); mIsValid = true; } catch (Exception e) { @@ -99,37 +125,51 @@ public class OwnCloudVersion implements Comparable { } } - private int getParsedVersionString(String versionString) throws NumberFormatException { - int version = 0; + private int getParsedVersion(String version) throws NumberFormatException { + int versionValue = 0; // get only numeric part - versionString = versionString.replaceAll("[^\\d.]", ""); + version = version.replaceAll("[^\\d.]", ""); - String[] nums = versionString.split("\\."); - if (nums.length > 0) { - version += Integer.parseInt(nums[0]); + String[] nums = version.split("\\."); + for (int i = 0; i < nums.length; i++) { + versionValue += Integer.parseInt(nums[i]); + if (i< nums.length -1) { + versionValue = versionValue << 8; + } } - version = version << 8; - if (nums.length > 1) { - version += Integer.parseInt(nums[1]); - } - version = version << 8; - if (nums.length > 2) { - version += Integer.parseInt(nums[2]); - } - return version; + Log.d("OwnCloudVersion", " ---- version " + String.valueOf(versionValue)); + +// versionValue = 0; +// if (nums.length > 0) { +// versionValue += Integer.parseInt(nums[0]); +// } +// versionValue = versionValue << 8; +// if (nums.length > 1) { +// versionValue += Integer.parseInt(nums[1]); +// } +// versionValue = versionValue << 8; +// if (nums.length > 2) { +// versionValue += Integer.parseInt(nums[2]); +// } +// versionValue = versionValue << 8; +// if (nums.length > 3) { +// versionValue += Integer.parseInt(nums[3]); +// } +// Log.d("OwnCloudVersion", " -----version " + String.valueOf(versionValue)); + return versionValue; } public boolean isSharedSupported() { - int versionString = 0; - try { - versionString = getParsedVersionString(mVersionString); - - } catch (Exception e) { - // nothing to do here - } - return (versionString >= MINIMUM_VERSION_STRING_FOR_SHARING_API); +// int version = 0; +// try { +// version = getParsedVersion(mVersion); +// +// } catch (Exception e) { +// // nothing to do here +// } + return (mVersion >= MINIMUM_VERSION_FOR_SHARING_API); } From fc8191e26841dc25407dd74cb50738ff9a3157a6 Mon Sep 17 00:00:00 2001 From: masensio Date: Thu, 27 Mar 2014 18:01:13 +0100 Subject: [PATCH 2/5] Check the version number instead of the version string --- .../lib/common/accounts/AccountUtils.java | 5 --- .../status/GetRemoteStatusOperation.java | 2 - .../lib/resources/status/OwnCloudVersion.java | 44 ------------------- 3 files changed, 51 deletions(-) diff --git a/src/com/owncloud/android/lib/common/accounts/AccountUtils.java b/src/com/owncloud/android/lib/common/accounts/AccountUtils.java index 4b9c3d61..7f0cd351 100644 --- a/src/com/owncloud/android/lib/common/accounts/AccountUtils.java +++ b/src/com/owncloud/android/lib/common/accounts/AccountUtils.java @@ -81,7 +81,6 @@ public class AccountUtils { AccountManager ama = AccountManager.get(context); String baseurl = ama.getUserData(account, Constants.KEY_OC_BASE_URL); String version = ama.getUserData(account, Constants.KEY_OC_VERSION); - String versionString = ama.getUserData(account, Constants.KEY_OC_VERSION_STRING); boolean supportsOAuth = (ama.getUserData(account, Constants.KEY_SUPPORTS_OAUTH2) != null); boolean supportsSamlSso = (ama.getUserData(account, Constants.KEY_SUPPORTS_SAML_WEB_SSO) != null); OwnCloudVersion ver = new OwnCloudVersion(version); @@ -149,10 +148,6 @@ public class AccountUtils { * http://server/path or https://owncloud.server */ public static final String KEY_OC_BASE_URL = "oc_base_url"; - /** - * Version string as shown in the status.php resource in the server side - */ - public static final String KEY_OC_VERSION_STRING = "oc_version_string"; /** * Flag signaling if the ownCloud server can be accessed with OAuth2 access tokens. */ diff --git a/src/com/owncloud/android/lib/resources/status/GetRemoteStatusOperation.java b/src/com/owncloud/android/lib/resources/status/GetRemoteStatusOperation.java index 1cf369f1..052c7aae 100644 --- a/src/com/owncloud/android/lib/resources/status/GetRemoteStatusOperation.java +++ b/src/com/owncloud/android/lib/resources/status/GetRemoteStatusOperation.java @@ -56,7 +56,6 @@ public class GetRemoteStatusOperation extends RemoteOperation { private static final String NODE_INSTALLED = "installed"; private static final String NODE_VERSION = "version"; - private static final String NODE_VERSIONSTRING = "versionstring"; private String mUrl; private RemoteOperationResult mLatestResult; @@ -86,7 +85,6 @@ public class GetRemoteStatusOperation extends RemoteOperation { mLatestResult = new RemoteOperationResult(RemoteOperationResult.ResultCode.INSTANCE_NOT_CONFIGURED); } else { String version = json.getString(NODE_VERSION); - String versionString = json.getString(NODE_VERSIONSTRING); mOCVersion = new OwnCloudVersion(version); if (!mOCVersion.isVersionValid()) { mLatestResult = new RemoteOperationResult(RemoteOperationResult.ResultCode.BAD_OC_VERSION); diff --git a/src/com/owncloud/android/lib/resources/status/OwnCloudVersion.java b/src/com/owncloud/android/lib/resources/status/OwnCloudVersion.java index 737e21c6..ff14dbc5 100644 --- a/src/com/owncloud/android/lib/resources/status/OwnCloudVersion.java +++ b/src/com/owncloud/android/lib/resources/status/OwnCloudVersion.java @@ -25,8 +25,6 @@ package com.owncloud.android.lib.resources.status; -import android.util.Log; - public class OwnCloudVersion implements Comparable { public static final OwnCloudVersion owncloud_v1 = new OwnCloudVersion( 0x010000); @@ -61,39 +59,15 @@ public class OwnCloudVersion implements Comparable { mVersion = 0; mIsValid = false; mCountDots = version.length() - version.replace(".", "").length(); - Log.d("OwnCloudVersion", "VERSION "+ version + " Asign dots = " + String.valueOf(mCountDots)); parseVersion(version); } - -// public OwnCloudVersion(String version, String versionString) { -// mVersion = 0; -// mIsValid = false; -// //mCountDots = version.length() - version.replace(".", "").length(); -// mCountDots = 2; -// Log.d("OwnCloudVersion", "VERSION "+ version + " Asign dots = " + String.valueOf(mCountDots)); -// parseVersion(version); -// if (versionString != null && versionString.length() > 0) { -// mVersionString = versionString; -// -// } else if (mIsValid) { -// mVersionString = version; -// } -// } public String toString() { String versionToString = String.valueOf((mVersion >> (8*mCountDots)) % 256); - Log.d("OwnCloudVersion", " versionToString " + versionToString); for (int i = mCountDots - 1; i >= 0; i-- ) { - Log.d("OwnCloudVersion", "i = "+ i + " versionToString " + versionToString); versionToString = versionToString + "." + String.valueOf((mVersion >> (8*i)) % 256); } - //versionToString = versionToString + "." + String.valueOf((mVersion) % 256); - - Log.d("OwnCloudVersion", "dots = " + String.valueOf(mCountDots)); - Log.d("OwnCloudVersion", " versionToString " + versionToString); - Log.d("OwncloudVersion", ((mVersion >> 24) % 256) + "." + ((mVersion >> 16) % 256) + "." + ((mVersion >> 8) % 256) + "." - + ((mVersion) % 256)); return versionToString; } @@ -138,25 +112,7 @@ public class OwnCloudVersion implements Comparable { versionValue = versionValue << 8; } } - Log.d("OwnCloudVersion", " ---- version " + String.valueOf(versionValue)); -// versionValue = 0; -// if (nums.length > 0) { -// versionValue += Integer.parseInt(nums[0]); -// } -// versionValue = versionValue << 8; -// if (nums.length > 1) { -// versionValue += Integer.parseInt(nums[1]); -// } -// versionValue = versionValue << 8; -// if (nums.length > 2) { -// versionValue += Integer.parseInt(nums[2]); -// } -// versionValue = versionValue << 8; -// if (nums.length > 3) { -// versionValue += Integer.parseInt(nums[3]); -// } -// Log.d("OwnCloudVersion", " -----version " + String.valueOf(versionValue)); return versionValue; } From 5924b6abbc56a129e9712e55c57f0b021d3f6656 Mon Sep 17 00:00:00 2001 From: masensio Date: Fri, 28 Mar 2014 09:36:12 +0100 Subject: [PATCH 3/5] Save version with two dots, for the comparison with MINIMUM_VERSION_FOR_SHARING_API --- .../lib/resources/status/OwnCloudVersion.java | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/com/owncloud/android/lib/resources/status/OwnCloudVersion.java b/src/com/owncloud/android/lib/resources/status/OwnCloudVersion.java index ff14dbc5..40243709 100644 --- a/src/com/owncloud/android/lib/resources/status/OwnCloudVersion.java +++ b/src/com/owncloud/android/lib/resources/status/OwnCloudVersion.java @@ -44,6 +44,7 @@ public class OwnCloudVersion implements Comparable { // for version AA.BB.CC // ie version 2.0.3 will be stored as 0x020003 private int mVersion; + private int mShortVersion; // version with 2 dots or less, for comparing with _MINIMUM_VERSION_FOR_SHARING_API private boolean mIsValid; // not parsed, saved same value offered by the server private String mVersionString; @@ -51,12 +52,14 @@ public class OwnCloudVersion implements Comparable { protected OwnCloudVersion(int version) { mVersion = version; + mShortVersion= version; mIsValid = true; mVersionString = ""; } public OwnCloudVersion(String version){ mVersion = 0; + mShortVersion = 0; mIsValid = false; mCountDots = version.length() - version.replace(".", "").length(); parseVersion(version); @@ -100,32 +103,29 @@ public class OwnCloudVersion implements Comparable { } private int getParsedVersion(String version) throws NumberFormatException { - int versionValue = 0; - + int versionValue = 0; + // get only numeric part - version = version.replaceAll("[^\\d.]", ""); - - String[] nums = version.split("\\."); - for (int i = 0; i < nums.length; i++) { - versionValue += Integer.parseInt(nums[i]); - if (i< nums.length -1) { - versionValue = versionValue << 8; - } - } - - return versionValue; + version = version.replaceAll("[^\\d.]", ""); + + String[] nums = version.split("\\."); + for (int i = 0; i < nums.length; i++) { + versionValue += Integer.parseInt(nums[i]); + if ( i<=2 ) { + mShortVersion = versionValue; + } + + if (i < nums.length -1) { + versionValue = versionValue << 8; + } + } + + return versionValue; } public boolean isSharedSupported() { -// int version = 0; -// try { -// version = getParsedVersion(mVersion); -// -// } catch (Exception e) { -// // nothing to do here -// } - return (mVersion >= MINIMUM_VERSION_FOR_SHARING_API); + return (mShortVersion >= MINIMUM_VERSION_FOR_SHARING_API); } From 7426541883b6d4481deaabd0401732c52a4f3a48 Mon Sep 17 00:00:00 2001 From: masensio Date: Mon, 31 Mar 2014 14:53:29 +0200 Subject: [PATCH 4/5] Grant comparison between versions of 4 parts and version of less than 4 parts will be right in any possible situation --- .../lib/resources/status/OwnCloudVersion.java | 51 ++++++++----------- 1 file changed, 22 insertions(+), 29 deletions(-) diff --git a/src/com/owncloud/android/lib/resources/status/OwnCloudVersion.java b/src/com/owncloud/android/lib/resources/status/OwnCloudVersion.java index 40243709..a319fda1 100644 --- a/src/com/owncloud/android/lib/resources/status/OwnCloudVersion.java +++ b/src/com/owncloud/android/lib/resources/status/OwnCloudVersion.java @@ -27,48 +27,49 @@ package com.owncloud.android.lib.resources.status; public class OwnCloudVersion implements Comparable { public static final OwnCloudVersion owncloud_v1 = new OwnCloudVersion( - 0x010000); + 0x01000000); public static final OwnCloudVersion owncloud_v2 = new OwnCloudVersion( - 0x020000); + 0x02000000); public static final OwnCloudVersion owncloud_v3 = new OwnCloudVersion( - 0x030000); + 0x03000000); public static final OwnCloudVersion owncloud_v4 = new OwnCloudVersion( - 0x040000); + 0x04000000); public static final OwnCloudVersion owncloud_v4_5 = new OwnCloudVersion( - 0x040500); + 0x04050000); public static final int MINIMUM_VERSION_FOR_SHARING_API = 0x05001B; // 5.0.27 + private static final int MAX_DOTS = 3; + // format is in version - // 0xAABBCC - // for version AA.BB.CC - // ie version 2.0.3 will be stored as 0x020003 + // 0xAABBCCDD + // for version AA.BB.CC.DD + // ie version 2.0.3 will be stored as 0x02000300 private int mVersion; - private int mShortVersion; // version with 2 dots or less, for comparing with _MINIMUM_VERSION_FOR_SHARING_API private boolean mIsValid; - // not parsed, saved same value offered by the server - private String mVersionString; - private int mCountDots; protected OwnCloudVersion(int version) { mVersion = version; - mShortVersion= version; mIsValid = true; - mVersionString = ""; } public OwnCloudVersion(String version){ mVersion = 0; - mShortVersion = 0; mIsValid = false; - mCountDots = version.length() - version.replace(".", "").length(); + int countDots = version.length() - version.replace(".", "").length(); + + // Complete the version. Version must have 3 dots + for (int i = countDots; i < MAX_DOTS; i++) { + version = version + ".0"; + } + parseVersion(version); } public String toString() { - String versionToString = String.valueOf((mVersion >> (8*mCountDots)) % 256); - for (int i = mCountDots - 1; i >= 0; i-- ) { + String versionToString = String.valueOf((mVersion >> (8*MAX_DOTS)) % 256); + for (int i = MAX_DOTS - 1; i >= 0; i-- ) { versionToString = versionToString + "." + String.valueOf((mVersion >> (8*i)) % 256); } return versionToString; @@ -78,10 +79,6 @@ public class OwnCloudVersion implements Comparable { return toString(); } - public String getVersionString() { - return mVersionString; - } - public boolean isVersionValid() { return mIsValid; } @@ -109,13 +106,9 @@ public class OwnCloudVersion implements Comparable { version = version.replaceAll("[^\\d.]", ""); String[] nums = version.split("\\."); - for (int i = 0; i < nums.length; i++) { + for (int i = 0; i < nums.length && i <= MAX_DOTS; i++) { versionValue += Integer.parseInt(nums[i]); - if ( i<=2 ) { - mShortVersion = versionValue; - } - - if (i < nums.length -1) { + if (i < nums.length - 1) { versionValue = versionValue << 8; } } @@ -125,7 +118,7 @@ public class OwnCloudVersion implements Comparable { public boolean isSharedSupported() { - return (mShortVersion >= MINIMUM_VERSION_FOR_SHARING_API); + return (mVersion >= MINIMUM_VERSION_FOR_SHARING_API); } From 448f765ce09fd94a5363b9e2aa87d334f00a62bc Mon Sep 17 00:00:00 2001 From: masensio Date: Mon, 31 Mar 2014 15:02:16 +0200 Subject: [PATCH 5/5] Update MINIMUM_VERSION_FOR_SHARING_API --- .../owncloud/android/lib/resources/status/OwnCloudVersion.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/owncloud/android/lib/resources/status/OwnCloudVersion.java b/src/com/owncloud/android/lib/resources/status/OwnCloudVersion.java index a319fda1..48e49978 100644 --- a/src/com/owncloud/android/lib/resources/status/OwnCloudVersion.java +++ b/src/com/owncloud/android/lib/resources/status/OwnCloudVersion.java @@ -37,7 +37,7 @@ public class OwnCloudVersion implements Comparable { public static final OwnCloudVersion owncloud_v4_5 = new OwnCloudVersion( 0x04050000); - public static final int MINIMUM_VERSION_FOR_SHARING_API = 0x05001B; // 5.0.27 + public static final int MINIMUM_VERSION_FOR_SHARING_API = 0x05001B00; // 5.0.27 private static final int MAX_DOTS = 3;