16788212d17f54475ca9c3dd689a863e031db868fSvet Ganov/*
26788212d17f54475ca9c3dd689a863e031db868fSvet Ganov * Copyright (C) 2017 The Android Open Source Project
36788212d17f54475ca9c3dd689a863e031db868fSvet Ganov *
46788212d17f54475ca9c3dd689a863e031db868fSvet Ganov * Licensed under the Apache License, Version 2.0 (the "License");
56788212d17f54475ca9c3dd689a863e031db868fSvet Ganov * you may not use this file except in compliance with the License.
66788212d17f54475ca9c3dd689a863e031db868fSvet Ganov * You may obtain a copy of the License at
76788212d17f54475ca9c3dd689a863e031db868fSvet Ganov *
86788212d17f54475ca9c3dd689a863e031db868fSvet Ganov *      http://www.apache.org/licenses/LICENSE-2.0
96788212d17f54475ca9c3dd689a863e031db868fSvet Ganov *
106788212d17f54475ca9c3dd689a863e031db868fSvet Ganov * Unless required by applicable law or agreed to in writing, software
116788212d17f54475ca9c3dd689a863e031db868fSvet Ganov * distributed under the License is distributed on an "AS IS" BASIS,
126788212d17f54475ca9c3dd689a863e031db868fSvet Ganov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136788212d17f54475ca9c3dd689a863e031db868fSvet Ganov * See the License for the specific language governing permissions and
146788212d17f54475ca9c3dd689a863e031db868fSvet Ganov * limitations under the License.
156788212d17f54475ca9c3dd689a863e031db868fSvet Ganov */
166788212d17f54475ca9c3dd689a863e031db868fSvet Ganovpackage android.content.pm;
176788212d17f54475ca9c3dd689a863e031db868fSvet Ganov
186788212d17f54475ca9c3dd689a863e031db868fSvet Ganovimport android.annotation.IntRange;
196788212d17f54475ca9c3dd689a863e031db868fSvet Ganovimport android.annotation.NonNull;
206788212d17f54475ca9c3dd689a863e031db868fSvet Ganovimport android.os.Parcel;
216788212d17f54475ca9c3dd689a863e031db868fSvet Ganovimport android.os.Parcelable;
226788212d17f54475ca9c3dd689a863e031db868fSvet Ganov
236788212d17f54475ca9c3dd689a863e031db868fSvet Ganovimport java.lang.annotation.Retention;
246788212d17f54475ca9c3dd689a863e031db868fSvet Ganovimport java.lang.annotation.RetentionPolicy;
256788212d17f54475ca9c3dd689a863e031db868fSvet Ganov
266788212d17f54475ca9c3dd689a863e031db868fSvet Ganov/**
276788212d17f54475ca9c3dd689a863e031db868fSvet Ganov * Encapsulates a package and its version code.
286788212d17f54475ca9c3dd689a863e031db868fSvet Ganov */
296788212d17f54475ca9c3dd689a863e031db868fSvet Ganovpublic final class VersionedPackage implements Parcelable {
306788212d17f54475ca9c3dd689a863e031db868fSvet Ganov    private final String mPackageName;
31f965b87a781c6d77567c3fa7a5c6e4d3361dc6dcSvet Ganov    private final int mVersionCode;
326788212d17f54475ca9c3dd689a863e031db868fSvet Ganov
336788212d17f54475ca9c3dd689a863e031db868fSvet Ganov    /** @hide */
346788212d17f54475ca9c3dd689a863e031db868fSvet Ganov    @Retention(RetentionPolicy.SOURCE)
356788212d17f54475ca9c3dd689a863e031db868fSvet Ganov    @IntRange(from = PackageManager.VERSION_CODE_HIGHEST)
366788212d17f54475ca9c3dd689a863e031db868fSvet Ganov    public @interface VersionCode{}
376788212d17f54475ca9c3dd689a863e031db868fSvet Ganov
386788212d17f54475ca9c3dd689a863e031db868fSvet Ganov    /**
396788212d17f54475ca9c3dd689a863e031db868fSvet Ganov     * Creates a new instance. Use {@link PackageManager#VERSION_CODE_HIGHEST}
406788212d17f54475ca9c3dd689a863e031db868fSvet Ganov     * to refer to the highest version code of this package.
416788212d17f54475ca9c3dd689a863e031db868fSvet Ganov     * @param packageName The package name.
426788212d17f54475ca9c3dd689a863e031db868fSvet Ganov     * @param versionCode The version code.
436788212d17f54475ca9c3dd689a863e031db868fSvet Ganov     */
446788212d17f54475ca9c3dd689a863e031db868fSvet Ganov    public VersionedPackage(@NonNull String packageName,
456788212d17f54475ca9c3dd689a863e031db868fSvet Ganov            @VersionCode int versionCode) {
466788212d17f54475ca9c3dd689a863e031db868fSvet Ganov        mPackageName = packageName;
476788212d17f54475ca9c3dd689a863e031db868fSvet Ganov        mVersionCode = versionCode;
486788212d17f54475ca9c3dd689a863e031db868fSvet Ganov    }
496788212d17f54475ca9c3dd689a863e031db868fSvet Ganov
506788212d17f54475ca9c3dd689a863e031db868fSvet Ganov    private VersionedPackage(Parcel parcel) {
516788212d17f54475ca9c3dd689a863e031db868fSvet Ganov        mPackageName = parcel.readString();
52f965b87a781c6d77567c3fa7a5c6e4d3361dc6dcSvet Ganov        mVersionCode = parcel.readInt();
536788212d17f54475ca9c3dd689a863e031db868fSvet Ganov    }
546788212d17f54475ca9c3dd689a863e031db868fSvet Ganov
556788212d17f54475ca9c3dd689a863e031db868fSvet Ganov    /**
566788212d17f54475ca9c3dd689a863e031db868fSvet Ganov     * Gets the package name.
576788212d17f54475ca9c3dd689a863e031db868fSvet Ganov     *
586788212d17f54475ca9c3dd689a863e031db868fSvet Ganov     * @return The package name.
596788212d17f54475ca9c3dd689a863e031db868fSvet Ganov     */
606788212d17f54475ca9c3dd689a863e031db868fSvet Ganov    public @NonNull String getPackageName() {
616788212d17f54475ca9c3dd689a863e031db868fSvet Ganov        return mPackageName;
626788212d17f54475ca9c3dd689a863e031db868fSvet Ganov    }
636788212d17f54475ca9c3dd689a863e031db868fSvet Ganov
646788212d17f54475ca9c3dd689a863e031db868fSvet Ganov    /**
656788212d17f54475ca9c3dd689a863e031db868fSvet Ganov     * Gets the version code.
666788212d17f54475ca9c3dd689a863e031db868fSvet Ganov     *
676788212d17f54475ca9c3dd689a863e031db868fSvet Ganov     * @return The version code.
686788212d17f54475ca9c3dd689a863e031db868fSvet Ganov     */
69f965b87a781c6d77567c3fa7a5c6e4d3361dc6dcSvet Ganov    public @VersionCode int getVersionCode() {
706788212d17f54475ca9c3dd689a863e031db868fSvet Ganov        return mVersionCode;
716788212d17f54475ca9c3dd689a863e031db868fSvet Ganov    }
726788212d17f54475ca9c3dd689a863e031db868fSvet Ganov
736788212d17f54475ca9c3dd689a863e031db868fSvet Ganov    @Override
746788212d17f54475ca9c3dd689a863e031db868fSvet Ganov    public String toString() {
756788212d17f54475ca9c3dd689a863e031db868fSvet Ganov        return "VersionedPackage[" + mPackageName + "/" + mVersionCode + "]";
766788212d17f54475ca9c3dd689a863e031db868fSvet Ganov    }
776788212d17f54475ca9c3dd689a863e031db868fSvet Ganov
786788212d17f54475ca9c3dd689a863e031db868fSvet Ganov    @Override
796788212d17f54475ca9c3dd689a863e031db868fSvet Ganov    public int describeContents() {
806788212d17f54475ca9c3dd689a863e031db868fSvet Ganov        return 0;
816788212d17f54475ca9c3dd689a863e031db868fSvet Ganov    }
826788212d17f54475ca9c3dd689a863e031db868fSvet Ganov
836788212d17f54475ca9c3dd689a863e031db868fSvet Ganov    @Override
846788212d17f54475ca9c3dd689a863e031db868fSvet Ganov    public void writeToParcel(Parcel parcel, int flags) {
856788212d17f54475ca9c3dd689a863e031db868fSvet Ganov        parcel.writeString(mPackageName);
86f965b87a781c6d77567c3fa7a5c6e4d3361dc6dcSvet Ganov        parcel.writeInt(mVersionCode);
876788212d17f54475ca9c3dd689a863e031db868fSvet Ganov    }
886788212d17f54475ca9c3dd689a863e031db868fSvet Ganov
896788212d17f54475ca9c3dd689a863e031db868fSvet Ganov    public static final Creator<VersionedPackage> CREATOR = new Creator<VersionedPackage>() {
906788212d17f54475ca9c3dd689a863e031db868fSvet Ganov        @Override
916788212d17f54475ca9c3dd689a863e031db868fSvet Ganov        public VersionedPackage createFromParcel(Parcel source) {
926788212d17f54475ca9c3dd689a863e031db868fSvet Ganov            return new VersionedPackage(source);
936788212d17f54475ca9c3dd689a863e031db868fSvet Ganov        }
946788212d17f54475ca9c3dd689a863e031db868fSvet Ganov
956788212d17f54475ca9c3dd689a863e031db868fSvet Ganov        @Override
966788212d17f54475ca9c3dd689a863e031db868fSvet Ganov        public VersionedPackage[] newArray(int size) {
976788212d17f54475ca9c3dd689a863e031db868fSvet Ganov            return new VersionedPackage[size];
986788212d17f54475ca9c3dd689a863e031db868fSvet Ganov        }
996788212d17f54475ca9c3dd689a863e031db868fSvet Ganov    };
1006788212d17f54475ca9c3dd689a863e031db868fSvet Ganov}
101