2024-01-10 18:54:00 +01:00
|
|
|
/* Copyright (C) 2017-2024 Andreas Shimokawa, Carsten Pfeiffer, Daniel
|
|
|
|
Dakhno, Michal Novotny
|
2017-03-16 17:36:15 +01:00
|
|
|
|
|
|
|
This file is part of Gadgetbridge.
|
|
|
|
|
|
|
|
Gadgetbridge is free software: you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU Affero General Public License as published
|
|
|
|
by the Free Software Foundation, either version 3 of the License, or
|
|
|
|
(at your option) any later version.
|
|
|
|
|
|
|
|
Gadgetbridge 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 Affero General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU Affero General Public License
|
2024-01-10 18:54:00 +01:00
|
|
|
along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
2017-03-14 23:45:30 +01:00
|
|
|
package nodomain.freeyourgadget.gadgetbridge.util;
|
|
|
|
|
2022-08-27 01:44:41 +02:00
|
|
|
import androidx.annotation.NonNull;
|
|
|
|
|
2017-03-14 23:45:30 +01:00
|
|
|
// http://stackoverflow.com/questions/198431/how-do-you-compare-two-version-strings-in-java
|
|
|
|
public class Version implements Comparable<Version> {
|
|
|
|
|
|
|
|
private String version;
|
|
|
|
|
|
|
|
public final String get() {
|
|
|
|
return this.version;
|
|
|
|
}
|
|
|
|
|
|
|
|
public Version(String version) {
|
|
|
|
if(version == null)
|
|
|
|
throw new IllegalArgumentException("Version can not be null");
|
2017-08-25 23:35:16 +02:00
|
|
|
|
|
|
|
version = version.trim();
|
|
|
|
if (!version.matches("[0-9]+(\\.[0-9]+)*"))
|
2017-03-14 23:45:30 +01:00
|
|
|
throw new IllegalArgumentException("Invalid version format");
|
|
|
|
this.version = version;
|
|
|
|
}
|
|
|
|
|
2021-12-26 17:58:47 +01:00
|
|
|
public boolean smallerOrEqualThan(Version that){
|
|
|
|
return !greaterThan(that);
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean greaterOrEqualThan(Version that){
|
|
|
|
return !smallerThan(that);
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean smallerThan(Version that){
|
|
|
|
return compareTo(that) == -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean greaterThan(Version that){
|
|
|
|
return compareTo(that) == 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean sameAs(Version that){
|
|
|
|
return compareTo(that) == 0;
|
|
|
|
}
|
|
|
|
|
2017-03-14 23:45:30 +01:00
|
|
|
@Override public int compareTo(Version that) {
|
|
|
|
if(that == null)
|
|
|
|
return 1;
|
|
|
|
String[] thisParts = this.get().split("\\.");
|
|
|
|
String[] thatParts = that.get().split("\\.");
|
|
|
|
int length = Math.max(thisParts.length, thatParts.length);
|
|
|
|
for(int i = 0; i < length; i++) {
|
|
|
|
int thisPart = i < thisParts.length ?
|
|
|
|
Integer.parseInt(thisParts[i]) : 0;
|
|
|
|
int thatPart = i < thatParts.length ?
|
|
|
|
Integer.parseInt(thatParts[i]) : 0;
|
|
|
|
if(thisPart < thatPart)
|
|
|
|
return -1;
|
|
|
|
if(thisPart > thatPart)
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override public boolean equals(Object that) {
|
|
|
|
if(this == that)
|
|
|
|
return true;
|
|
|
|
if(that == null)
|
|
|
|
return false;
|
|
|
|
if(this.getClass() != that.getClass())
|
|
|
|
return false;
|
|
|
|
return this.compareTo((Version) that) == 0;
|
|
|
|
}
|
2017-04-09 01:09:23 +02:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public int hashCode() {
|
|
|
|
return version.hashCode();
|
|
|
|
}
|
2022-08-27 01:44:41 +02:00
|
|
|
|
|
|
|
@NonNull
|
|
|
|
@Override
|
|
|
|
public String toString() {
|
|
|
|
return version;
|
|
|
|
}
|
2017-09-10 21:11:50 +02:00
|
|
|
}
|