blob: 3fae1612fa88491c5a452acca1eca40895d9bcf2 [file] [log] [blame]
Neil Fullerbede17c2017-03-16 18:29:36 +00001/*
2 * Copyright (C) 2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.app.timezone;
18
19import static android.app.timezone.Utils.validateRulesVersion;
20import static android.app.timezone.Utils.validateVersion;
21
22import android.os.Parcel;
23import android.os.Parcelable;
24
25/**
26 * Versioning information about a set of time zone rules.
27 *
28 * <p>The following properties are included:
29 * <dl>
30 * <dt>rulesVersion</dt>
31 * <dd>the IANA rules version. e.g. "2017a"</dd>
32 * <dt>revision</dt>
33 * <dd>the revision for the rules. Allows there to be several revisions for a given IANA rules
34 * release. Numerically higher is newer.</dd>
35 * </dl>
36 *
37 * @hide
38 */
Neil Fullerbede17c2017-03-16 18:29:36 +000039public final class DistroRulesVersion implements Parcelable {
40
41 private final String mRulesVersion;
42 private final int mRevision;
43
44 public DistroRulesVersion(String rulesVersion, int revision) {
45 mRulesVersion = validateRulesVersion("rulesVersion", rulesVersion);
46 mRevision = validateVersion("revision", revision);
47 }
48
Jeff Sharkey9e8f83d2019-02-28 12:06:45 -070049 public static final @android.annotation.NonNull Creator<DistroRulesVersion> CREATOR = new Creator<DistroRulesVersion>() {
Neil Fullerbede17c2017-03-16 18:29:36 +000050 public DistroRulesVersion createFromParcel(Parcel in) {
51 String rulesVersion = in.readString();
52 int revision = in.readInt();
53 return new DistroRulesVersion(rulesVersion, revision);
54 }
55
56 public DistroRulesVersion[] newArray(int size) {
57 return new DistroRulesVersion[size];
58 }
59 };
60
61 public String getRulesVersion() {
62 return mRulesVersion;
63 }
64
65 public int getRevision() {
66 return mRevision;
67 }
68
69 /**
70 * Returns true if this DistroRulesVersion is older than the one supplied. It returns false if
71 * it is the same or newer. This method compares the {@code rulesVersion} and the
72 * {@code revision}.
73 */
74 public boolean isOlderThan(DistroRulesVersion distroRulesVersion) {
75 int rulesComparison = mRulesVersion.compareTo(distroRulesVersion.mRulesVersion);
76 if (rulesComparison < 0) {
77 return true;
78 }
79 if (rulesComparison > 0) {
80 return false;
81 }
82 return mRevision < distroRulesVersion.mRevision;
83 }
84
85 @Override
86 public int describeContents() {
87 return 0;
88 }
89
90 @Override
91 public void writeToParcel(Parcel out, int flags) {
92 out.writeString(mRulesVersion);
93 out.writeInt(mRevision);
94 }
95
96 @Override
97 public boolean equals(Object o) {
98 if (this == o) {
99 return true;
100 }
101 if (o == null || getClass() != o.getClass()) {
102 return false;
103 }
104
105 DistroRulesVersion that = (DistroRulesVersion) o;
106
107 if (mRevision != that.mRevision) {
108 return false;
109 }
110 return mRulesVersion.equals(that.mRulesVersion);
111 }
112
113 @Override
114 public int hashCode() {
115 int result = mRulesVersion.hashCode();
116 result = 31 * result + mRevision;
117 return result;
118 }
119
120 @Override
121 public String toString() {
122 return "DistroRulesVersion{"
123 + "mRulesVersion='" + mRulesVersion + '\''
124 + ", mRevision='" + mRevision + '\''
125 + '}';
126 }
Neil Fuller87b11282017-06-23 16:43:45 +0100127
128 public String toDumpString() {
129 return mRulesVersion + "," + mRevision;
130 }
Neil Fullerbede17c2017-03-16 18:29:36 +0000131}