diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/DiscoverNewsFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/DiscoverNewsFragment.java index e4948bb22..a63d94ead 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/DiscoverNewsFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/DiscoverNewsFragment.java @@ -219,7 +219,7 @@ public class DiscoverNewsFragment extends BaseRecyclerFragment im public void onClick(){ //TODO: enable timeline for all servers once 4.3.0 is released if(getInstance().isEmpty() || - !getInstance().get().version.contains("4.3.0")){ + !getInstance().get().checkVersion(4,3,0)){ UiUtils.launchWebBrowser(getActivity(), item.url); return; } diff --git a/mastodon/src/main/java/org/joinmastodon/android/model/Instance.java b/mastodon/src/main/java/org/joinmastodon/android/model/Instance.java index ed91e59cf..c493c2731 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/model/Instance.java +++ b/mastodon/src/main/java/org/joinmastodon/android/model/Instance.java @@ -1,6 +1,7 @@ package org.joinmastodon.android.model; import android.text.Html; +import android.util.Log; import org.joinmastodon.android.api.ObjectValidationException; import org.joinmastodon.android.api.RequiredField; @@ -8,6 +9,7 @@ import org.joinmastodon.android.model.catalog.CatalogInstance; import org.parceler.Parcel; import java.net.IDN; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; @@ -166,6 +168,31 @@ public class Instance extends BaseModel{ .orElse(false); }; } + /** + * Returns true if the instance version is the same as or newer than the passed in version. + * @param major: The major version to check for. + * @param minor: the minor version to check for. + * @param patch: The patch version to check for. + */ + public boolean checkVersion(int major, int minor, int patch) { + try{ + String[] parts=version.split("-", 2); + String[] numbers=parts[0].split("\\.", 3); + if(numbers.length < 3) + throw new IllegalArgumentException("Invalid version format. Expected format: major.minor.micro"); + + int majorVersion=Integer.parseInt(numbers[0]); + int minorVersion=Integer.parseInt(numbers[1]); + int patchVersion=Integer.parseInt(numbers[2]); + return (majorVersion > major || + (majorVersion == major && minorVersion > minor) || + (majorVersion == major && minorVersion == minor && + patchVersion>= patch)); + } catch(Exception e) { + Log.w("Instance", "checkVersion: failed to parse " + version + ", " + e); + return false; + } + } public enum Feature { BUBBLE_TIMELINE,