• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022 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 package android.car;
17 
18 import android.annotation.NonNull;
19 import android.car.annotation.ApiRequirements;
20 import android.car.annotation.ApiRequirements.CarVersion;
21 import android.os.Build;
22 import android.os.Parcel;
23 import android.os.Parcelable;
24 
25 /**
26  * Represents the API version of the standard Android SDK.
27  */
28 @ApiRequirements(minCarVersion = CarVersion.TIRAMISU_1,
29         minPlatformVersion = ApiRequirements.PlatformVersion.TIRAMISU_0)
30 public final class PlatformVersion extends ApiVersion<PlatformVersion> implements Parcelable {
31 
32     private static final String CODENAME_REL = "REL";
33 
34     /**
35      * Contains pre-defined versions matching Car releases.
36      */
37     @ApiRequirements(minCarVersion = CarVersion.TIRAMISU_1,
38             minPlatformVersion = ApiRequirements.PlatformVersion.TIRAMISU_0)
39     public static class VERSION_CODES {
40 
41         /**
42          * Helper object for main version of Android 13.
43          */
44         @ApiRequirements(minCarVersion = CarVersion.TIRAMISU_1,
45                 minPlatformVersion = ApiRequirements.PlatformVersion.TIRAMISU_0)
46         @NonNull
47         public static final PlatformVersion TIRAMISU_0 =
48                 new PlatformVersion("TIRAMISU_0", Build.VERSION_CODES.TIRAMISU, 0);
49 
50         /**
51          * Helper object for first minor upgrade of Android 13.
52          */
53         @ApiRequirements(minCarVersion = CarVersion.TIRAMISU_1,
54                 minPlatformVersion = ApiRequirements.PlatformVersion.TIRAMISU_0)
55         @NonNull
56         public static final PlatformVersion TIRAMISU_1 =
57                 new PlatformVersion("TIRAMISU_1", Build.VERSION_CODES.TIRAMISU, 1);
58 
59         /**
60          * Helper object for second minor upgrade of Android 13.
61          */
62         @ApiRequirements(minCarVersion = CarVersion.TIRAMISU_2,
63                 minPlatformVersion = ApiRequirements.PlatformVersion.TIRAMISU_0)
64         @NonNull
65         public static final PlatformVersion TIRAMISU_2 =
66                 new PlatformVersion("TIRAMISU_2", Build.VERSION_CODES.TIRAMISU, 2);
67 
68         /**
69          * Helper object for third minor upgrade of Android 13.
70          */
71         @ApiRequirements(minCarVersion = CarVersion.TIRAMISU_3,
72                 minPlatformVersion = ApiRequirements.PlatformVersion.TIRAMISU_0)
73         @NonNull
74         public static final PlatformVersion TIRAMISU_3 =
75                 new PlatformVersion("TIRAMISU_3", Build.VERSION_CODES.TIRAMISU, 3);
76 
77         /**
78          * Helper object for main version of Android 14.
79          */
80         @ApiRequirements(minCarVersion = CarVersion.UPSIDE_DOWN_CAKE_0,
81                 minPlatformVersion = ApiRequirements.PlatformVersion.TIRAMISU_0)
82         @NonNull
83         public static final PlatformVersion UPSIDE_DOWN_CAKE_0 =
84                 new PlatformVersion("UPSIDE_DOWN_CAKE_0", Build.VERSION_CODES.UPSIDE_DOWN_CAKE, 0);
85 
86         /**
87          * Helper object for first minor upgrade of Android 14.
88          */
89         @ApiRequirements(minCarVersion = CarVersion.UPSIDE_DOWN_CAKE_1,
90                 minPlatformVersion = ApiRequirements.PlatformVersion.TIRAMISU_0)
91         @NonNull
92         public static final PlatformVersion UPSIDE_DOWN_CAKE_1 =
93                 new PlatformVersion("UPSIDE_DOWN_CAKE_1", Build.VERSION_CODES.UPSIDE_DOWN_CAKE, 1);
94 
95         // DO NOT ADD minor UPSIDE_DOWN_CAKE version until lint tool is working. (b/275125924)
96 
VERSION_CODES()97         private VERSION_CODES() {
98             throw new UnsupportedOperationException("Only provide constants");
99         }
100     }
101 
102     /**
103      * Creates a named instance with the given major and minor versions.
104      */
105     // TODO(b/243429779): should not need @ApiRequirements as it's package-protected
newInstance(String versionName, int majorVersion, int minorVersion)106     static PlatformVersion newInstance(String versionName, int majorVersion, int minorVersion) {
107         return new PlatformVersion(versionName, majorVersion, minorVersion);
108     }
109 
110     /**
111      * Returns the current platform version with given {@code minorVersion}.
112      */
getCurrentPlatformVersionForMinor(String versionName, int minorVersion)113     static PlatformVersion getCurrentPlatformVersionForMinor(String versionName, int minorVersion) {
114         // For un-released version, CUR_DEVELOPMENT should be used instead of SDK_INT.
115         // ex) VERSION_CODES.T is CUR_DEVELOPMENT first then becomes 33 (=SDK_INT) when SDK is
116         // finalized.
117         return new PlatformVersion(versionName,
118                 CODENAME_REL.equals(Build.VERSION.CODENAME) ? Build.VERSION.SDK_INT
119                         : Build.VERSION_CODES.CUR_DEVELOPMENT, minorVersion);
120     }
121     /**
122      * Creates a new instance with the given major and minor versions.
123      */
124     @ApiRequirements(minCarVersion = CarVersion.TIRAMISU_1,
125             minPlatformVersion = ApiRequirements.PlatformVersion.TIRAMISU_0)
126     @NonNull
forMajorAndMinorVersions(int majorVersion, int minorVersion)127     public static PlatformVersion forMajorAndMinorVersions(int majorVersion, int minorVersion) {
128         return new PlatformVersion(majorVersion, minorVersion);
129     }
130 
131     /**
132      * Creates a new instance for a major version (i.e., the minor version will be {@code 0}.
133      */
134     @ApiRequirements(minCarVersion = CarVersion.TIRAMISU_1,
135             minPlatformVersion = ApiRequirements.PlatformVersion.TIRAMISU_0)
136     @NonNull
forMajorVersion(int majorVersion)137     public static PlatformVersion forMajorVersion(int majorVersion) {
138         return new PlatformVersion(majorVersion, /* minorVersion= */ 0);
139     }
140 
PlatformVersion(String name, int majorVersion, int minorVersion)141     private PlatformVersion(String name, int majorVersion, int minorVersion) {
142         super(name, majorVersion, minorVersion);
143     }
144 
PlatformVersion(int majorVersion, int minorVersion)145     private PlatformVersion(int majorVersion, int minorVersion) {
146         super(majorVersion, minorVersion);
147     }
148 
149     @ApiRequirements(minCarVersion = CarVersion.TIRAMISU_1,
150             minPlatformVersion = ApiRequirements.PlatformVersion.TIRAMISU_0)
151     @Override
describeContents()152     public int describeContents() {
153         return 0;
154     }
155 
156     @ApiRequirements(minCarVersion = CarVersion.TIRAMISU_1,
157             minPlatformVersion = ApiRequirements.PlatformVersion.TIRAMISU_0)
158     @Override
writeToParcel(@onNull Parcel dest, int flags)159     public void writeToParcel(@NonNull Parcel dest, int flags) {
160         writeToParcel(dest);
161     }
162 
163     @ApiRequirements(minCarVersion = CarVersion.TIRAMISU_1,
164             minPlatformVersion = ApiRequirements.PlatformVersion.TIRAMISU_0)
165     @NonNull
166     public static final Parcelable.Creator<PlatformVersion> CREATOR =
167             new Parcelable.Creator<PlatformVersion>() {
168 
169         @Override
170         public PlatformVersion createFromParcel(Parcel source) {
171             return ApiVersion.readFromParcel(source,
172                     (name, major, minor) -> new PlatformVersion(name, major, minor));
173         }
174 
175         @Override
176         public PlatformVersion[] newArray(int size) {
177             return new PlatformVersion[size];
178         }
179     };
180 }
181