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