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