1fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller/*
2fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller * Copyright (C) 2017 The Android Open Source Project
3fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller *
4fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller * Licensed under the Apache License, Version 2.0 (the "License");
5fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller * you may not use this file except in compliance with the License.
6fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller * You may obtain a copy of the License at
7fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller *
8fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller *      http://www.apache.org/licenses/LICENSE-2.0
9fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller *
10fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller * Unless required by applicable law or agreed to in writing, software
11fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller * distributed under the License is distributed on an "AS IS" BASIS,
12fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller * See the License for the specific language governing permissions and
14fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller * limitations under the License.
15fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller */
16fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller
17fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fullerpackage android.app.timezone;
18fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller
19fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fullerimport android.os.Parcel;
20fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fullerimport android.os.Parcelable;
21fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller
22fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller/**
23fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller * Versioning information about a distro's format or a device's supported format.
24fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller *
25fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller * <p>The following properties are included:
26fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller * <dl>
27fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller *     <dt>majorVersion</dt>
28fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller *     <dd>the major distro format version. Major versions differences are not compatible - e.g.
29fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller *     2 is not compatible with 1 or 3.</dd>
30fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller *     <dt>minorVersion</dt>
31fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller *     <dd>the minor distro format version. Minor versions should be backwards compatible iff the
32fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller *     major versions match exactly, i.e. version 2.2 will be compatible with 2.1 devices but not
33fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller *     2.3 devices.</dd>
34fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller * </dl>
35fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller *
36fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller * @hide
37fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller */
38fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fullerpublic final class DistroFormatVersion implements Parcelable {
39fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller
40fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller    private final int mMajorVersion;
41fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller    private final int mMinorVersion;
42fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller
43fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller    public DistroFormatVersion(int majorVersion, int minorVersion) {
44fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller        mMajorVersion = Utils.validateVersion("major", majorVersion);
45fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller        mMinorVersion = Utils.validateVersion("minor", minorVersion);
46fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller    }
47fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller
48fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller    public static final Creator<DistroFormatVersion> CREATOR = new Creator<DistroFormatVersion>() {
49fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller        public DistroFormatVersion createFromParcel(Parcel in) {
50fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller            int majorVersion = in.readInt();
51fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller            int minorVersion = in.readInt();
52fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller            return new DistroFormatVersion(majorVersion, minorVersion);
53fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller        }
54fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller
55fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller        public DistroFormatVersion[] newArray(int size) {
56fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller            return new DistroFormatVersion[size];
57fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller        }
58fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller    };
59fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller
60fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller    public int getMajorVersion() {
61fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller        return mMajorVersion;
62fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller    }
63fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller
64fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller    public int getMinorVersion() {
65fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller        return mMinorVersion;
66fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller    }
67fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller
68fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller    @Override
69fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller    public int describeContents() {
70fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller        return 0;
71fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller    }
72fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller
73fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller    @Override
74fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller    public void writeToParcel(Parcel out, int flags) {
75fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller        out.writeInt(mMajorVersion);
76fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller        out.writeInt(mMinorVersion);
77fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller    }
78fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller
79fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller    /**
80fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller     * If this object describes a device's supported version and the parameter describes a distro's
81fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller     * version, this method returns whether the device would accept the distro.
82fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller     */
83fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller    public boolean supports(DistroFormatVersion distroFormatVersion) {
84fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller        return mMajorVersion == distroFormatVersion.mMajorVersion
85fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller                && mMinorVersion <= distroFormatVersion.mMinorVersion;
86fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller    }
87fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller
88fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller    @Override
89fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller    public boolean equals(Object o) {
90fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller        if (this == o) {
91fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller            return true;
92fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller        }
93fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller        if (o == null || getClass() != o.getClass()) {
94fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller            return false;
95fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller        }
96fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller
97fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller        DistroFormatVersion that = (DistroFormatVersion) o;
98fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller
99fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller        if (mMajorVersion != that.mMajorVersion) {
100fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller            return false;
101fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller        }
102fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller        return mMinorVersion == that.mMinorVersion;
103fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller    }
104fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller
105fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller    @Override
106fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller    public int hashCode() {
107fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller        int result = mMajorVersion;
108fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller        result = 31 * result + mMinorVersion;
109fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller        return result;
110fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller    }
111fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller
112fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller    @Override
113fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller    public String toString() {
114fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller        return "DistroFormatVersion{"
115fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller                + "mMajorVersion=" + mMajorVersion
116fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller                + ", mMinorVersion=" + mMinorVersion
117fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller                + '}';
118fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller    }
119fe6ec56cce981731be7d0bc0e61a0411d0a0d2cfNeil Fuller}
120