diff --git a/app/build.gradle b/app/build.gradle index 1d6e56b11..e8762ddae 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -27,10 +27,10 @@ android { vectorDrawables.useSupportLibrary = true resValue "string", "app_name", "Wulkanowy" - buildConfigField "long", "BUILD_TIMESTAMP", String.valueOf(System.currentTimeMillis()) manifestPlaceholders = [ - firebase_enabled: project.hasProperty("enableFirebase") + firebase_enabled: project.hasProperty("enableFirebase"), + buildTimestamp: String.valueOf(System.currentTimeMillis()) ] javaCompileOptions { annotationProcessorOptions { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 84c50523c..bebe33c62 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -106,7 +106,8 @@ </service> <service android:name=".services.messaging.AppMessagingService" - android:exported="false"> + android:exported="false" + tools:ignore="MissingClass"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> @@ -152,6 +153,10 @@ android:resource="@xml/provider_paths" /> </provider> + <meta-data + android:name="buildTimestamp" + android:value="${buildTimestamp}" /> + <meta-data android:name="install_channel" android:value="${install_channel}" /> @@ -162,7 +167,8 @@ android:name="com.google.firebase.provider.FirebaseInitProvider" android:authorities="${applicationId}.firebaseinitprovider" android:enabled="${firebase_enabled}" - android:exported="false" /> + android:exported="false" + tools:ignore="MissingClass" /> <meta-data android:name="firebase_analytics_collection_enabled" diff --git a/app/src/main/java/io/github/wulkanowy/utils/AppInfo.kt b/app/src/main/java/io/github/wulkanowy/utils/AppInfo.kt index a3961aed8..4875425f1 100644 --- a/app/src/main/java/io/github/wulkanowy/utils/AppInfo.kt +++ b/app/src/main/java/io/github/wulkanowy/utils/AppInfo.kt @@ -1,10 +1,12 @@ package io.github.wulkanowy.utils +import android.content.Context +import android.content.pm.PackageManager import android.content.res.Resources import android.os.Build.MANUFACTURER import android.os.Build.MODEL import android.os.Build.VERSION.SDK_INT -import io.github.wulkanowy.BuildConfig.BUILD_TIMESTAMP +import dagger.hilt.android.qualifiers.ApplicationContext import io.github.wulkanowy.BuildConfig.DEBUG import io.github.wulkanowy.BuildConfig.FLAVOR import io.github.wulkanowy.BuildConfig.VERSION_CODE @@ -13,13 +15,21 @@ import javax.inject.Inject import javax.inject.Singleton @Singleton -open class AppInfo @Inject constructor() { +open class AppInfo @Inject constructor( + @ApplicationContext private val context: Context, +) { open val isDebug get() = DEBUG open val versionCode get() = VERSION_CODE - open val buildTimestamp get() = BUILD_TIMESTAMP + open val buildTimestamp: Long + get() { + val info = context.packageManager.getApplicationInfo( + context.packageName, PackageManager.GET_META_DATA, + ) + return info.metaData?.getFloat("buildTimestamp")?.toLong() ?: 0 + } open val buildFlavor get() = FLAVOR diff --git a/app/src/test/java/io/github/wulkanowy/data/db/migrations/AbstractMigrationTest.kt b/app/src/test/java/io/github/wulkanowy/data/db/migrations/AbstractMigrationTest.kt index f9fc76311..5897af738 100644 --- a/app/src/test/java/io/github/wulkanowy/data/db/migrations/AbstractMigrationTest.kt +++ b/app/src/test/java/io/github/wulkanowy/data/db/migrations/AbstractMigrationTest.kt @@ -16,6 +16,8 @@ abstract class AbstractMigrationTest { val dbName = "migration-test" + val context: Context get() = ApplicationProvider.getApplicationContext<Context>() + @get:Rule val helper: MigrationTestHelper = MigrationTestHelper( InstrumentationRegistry.getInstrumentation(), @@ -24,7 +26,6 @@ abstract class AbstractMigrationTest { ) fun getMigratedRoomDatabase(): AppDatabase { - val context = ApplicationProvider.getApplicationContext<Context>() val database = Room.databaseBuilder( ApplicationProvider.getApplicationContext(), AppDatabase::class.java, @@ -32,7 +33,7 @@ abstract class AbstractMigrationTest { ).addMigrations( *AppDatabase.getMigrations( SharedPrefProvider(PreferenceManager.getDefaultSharedPreferences(context)), - AppInfo() + AppInfo(context) ) ).build() // close the database and release any stream resources when the test finishes diff --git a/app/src/test/java/io/github/wulkanowy/data/db/migrations/Migration35Test.kt b/app/src/test/java/io/github/wulkanowy/data/db/migrations/Migration35Test.kt index 883cdb81c..9a38f4286 100644 --- a/app/src/test/java/io/github/wulkanowy/data/db/migrations/Migration35Test.kt +++ b/app/src/test/java/io/github/wulkanowy/data/db/migrations/Migration35Test.kt @@ -29,15 +29,15 @@ class Migration35Test : AbstractMigrationTest() { close() } - helper.runMigrationsAndValidate(dbName, 35, true, Migration35(AppInfo())) + helper.runMigrationsAndValidate(dbName, 35, true, Migration35(AppInfo(context))) val db = getMigratedRoomDatabase() val students = runBlocking { db.studentDao.loadAll() } assertEquals(2, students.size) - assertTrue { students[0].avatarColor in AppInfo().defaultColorsForAvatar } - assertTrue { students[1].avatarColor in AppInfo().defaultColorsForAvatar } + assertTrue { students[0].avatarColor in AppInfo(context).defaultColorsForAvatar } + assertTrue { students[1].avatarColor in AppInfo(context).defaultColorsForAvatar } } private fun createStudent(db: SupportSQLiteDatabase, id: Long) { diff --git a/app/src/test/java/io/github/wulkanowy/data/repositories/StudentTest.kt b/app/src/test/java/io/github/wulkanowy/data/repositories/StudentTest.kt index b34bbf1b2..39ebb4a19 100644 --- a/app/src/test/java/io/github/wulkanowy/data/repositories/StudentTest.kt +++ b/app/src/test/java/io/github/wulkanowy/data/repositories/StudentTest.kt @@ -32,13 +32,13 @@ class StudentTest { fun initApi() { MockKAnnotations.init(this) studentRepository = StudentRepository( - mockk(), - TestDispatchersProvider(), - studentDb, - semesterDb, - mockSdk, - AppInfo(), - mockk() + context = mockk(), + dispatchers = TestDispatchersProvider(), + studentDb = studentDb, + semesterDb = semesterDb, + sdk = mockSdk, + appInfo = AppInfo(mockk()), + appDatabase = mockk() ) }