diff --git a/src/com/owncloud/android/lib/common/accounts/AccountUtils.java b/src/com/owncloud/android/lib/common/accounts/AccountUtils.java index b6cbb30c..7f0cd351 100644 --- a/src/com/owncloud/android/lib/common/accounts/AccountUtils.java +++ b/src/com/owncloud/android/lib/common/accounts/AccountUtils.java @@ -81,10 +81,9 @@ 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, versionString); + OwnCloudVersion ver = new OwnCloudVersion(version); String webdavpath = getWebdavPath(ver, supportsOAuth, supportsSamlSso); if (baseurl == null || webdavpath == null) @@ -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 bc8b92e1..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,8 +85,7 @@ 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, 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..48e49978 100644 --- a/src/com/owncloud/android/lib/resources/status/OwnCloudVersion.java +++ b/src/com/owncloud/android/lib/resources/status/OwnCloudVersion.java @@ -27,58 +27,58 @@ 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_STRING_FOR_SHARING_API = 0x05000D; + public static final int MINIMUM_VERSION_FOR_SHARING_API = 0x05001B00; // 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 boolean mIsValid; - // not parsed, saved same value offered by the server - private String mVersionString; protected OwnCloudVersion(int version) { mVersion = version; mIsValid = true; - mVersionString = ""; } + + public OwnCloudVersion(String version){ + mVersion = 0; + mIsValid = false; + 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 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 String toString() { - return ((mVersion >> 16) % 256) + "." + ((mVersion >> 8) % 256) + "." - + ((mVersion) % 256); + 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; } public String getVersion() { return toString(); } - public String getVersionString() { - return mVersionString; - } - public boolean isVersionValid() { return mIsValid; } @@ -89,9 +89,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 +99,26 @@ 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.]", ""); - - String[] nums = versionString.split("\\."); - if (nums.length > 0) { - version += Integer.parseInt(nums[0]); - } - 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; + version = version.replaceAll("[^\\d.]", ""); + + String[] nums = version.split("\\."); + for (int i = 0; i < nums.length && i <= MAX_DOTS; i++) { + versionValue += Integer.parseInt(nums[i]); + if (i < nums.length - 1) { + versionValue = versionValue << 8; + } + } + + 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); + return (mVersion >= MINIMUM_VERSION_FOR_SHARING_API); }