xref: /aosp_15_r20/external/android_onboarding/java/com/android/onboarding/versions/Versions.kt (revision c625018464ae97c56936c82b1b617e11aa899faa)
1 package com.android.onboarding.versions
2 
3 import android.content.Context
4 import android.content.pm.ApplicationInfo
5 import android.content.pm.PackageManager
6 
7 /** The meta-data key used to indicate compliance date. */
8 private const val COMPLIANCE_DATE_METADATA_KEY = "onboarding-compliance-date"
9 
10 /**
11  * Entry point to onboarding versions check.
12  *
13  * <p>Versioning works by each onboarding component including a meta data of the following form in
14  * their manifest:
15  * <pre>{@code
16  *   <meta-data android:name="onboarding-compliance-date" android:value="2023-07-10" />
17  * }</pre>
18  *
19  * <p>This indicates that this APK is compatible with onboarding APIs as of 2023-07-10. Breaking API
20  * changes should not be introduced from the point of view of this APK without that compliance date
21  * being increased.
22  *
23  * <p>Note that any single onboarding session will be made up of several APKs working to different
24  * compliance dates, so APKs should not assume that everyone is using the same APIs.
25  */
26 class Versions internal constructor(private val context: Context) {
<lambda>null27   val myComplianceDate: ComplianceDate by lazy {
28     val app: ApplicationInfo =
29       context.packageManager.getApplicationInfo(context.packageName, PackageManager.GET_META_DATA)
30 
31     val complianceDateString = app.metaData?.getString(COMPLIANCE_DATE_METADATA_KEY)
32 
33     complianceDateString?.let(::ComplianceDate) ?: ComplianceDate()
34   }
35 }
36