From 4ae3da15f0434ad74ecab40144ef1d3e038757f0 Mon Sep 17 00:00:00 2001 From: Isira Seneviratne Date: Thu, 1 Dec 2022 07:30:45 +0530 Subject: [PATCH] Use PackageInfoCompat.getLongVersionCode(). --- .../java/org/fdroid/database/AppListItemsTest.kt | 15 +++++++++++---- .../src/main/java/org/fdroid/database/AppDao.kt | 3 ++- .../java/org/fdroid/database/DbUpdateChecker.kt | 13 ++----------- .../kotlin/org/fdroid/UpdateChecker.kt | 4 ++-- .../kotlin/org/fdroid/index/IndexCreator.kt | 6 +++--- .../kotlin/org/fdroid/index/IndexUtils.kt | 13 ------------- .../kotlin/org/fdroid/index/v1/IndexV1Creator.kt | 8 +++++--- 7 files changed, 25 insertions(+), 37 deletions(-) diff --git a/libs/database/src/dbTest/java/org/fdroid/database/AppListItemsTest.kt b/libs/database/src/dbTest/java/org/fdroid/database/AppListItemsTest.kt index 14336bf0e..be1ea9daf 100644 --- a/libs/database/src/dbTest/java/org/fdroid/database/AppListItemsTest.kt +++ b/libs/database/src/dbTest/java/org/fdroid/database/AppListItemsTest.kt @@ -2,6 +2,7 @@ package org.fdroid.database import android.content.pm.PackageInfo import android.content.pm.PackageManager +import androidx.core.content.pm.PackageInfoCompat import androidx.test.ext.junit.runners.AndroidJUnit4 import io.mockk.every import io.mockk.mockk @@ -64,7 +65,7 @@ internal class AppListItemsTest : AppTest() { appDao.getAppListItems(pm, "Two", NAME).getOrFail().let { apps -> assertEquals(1, apps.size) assertEquals(app2, apps[0]) - assertEquals(packageInfo2.getVersionCode(), apps[0].installedVersionCode) + assertEquals(PackageInfoCompat.getLongVersionCode(packageInfo2), apps[0].installedVersionCode) assertEquals(packageInfo2.versionName, apps[0].installedVersionName) } @@ -117,7 +118,7 @@ internal class AppListItemsTest : AppTest() { appDao.getAppListItems(pm, "A", "Two", NAME).getOrFail().let { apps -> assertEquals(1, apps.size) assertEquals(app2, apps[0]) - assertEquals(packageInfo2.getVersionCode(), apps[0].installedVersionCode) + assertEquals(PackageInfoCompat.getLongVersionCode(packageInfo2), apps[0].installedVersionCode) assertEquals(packageInfo2.versionName, apps[0].installedVersionName) } @@ -225,7 +226,10 @@ internal class AppListItemsTest : AppTest() { val installed = if (apps[0].packageName == packageName1) apps[1] else apps[0] val other = if (apps[0].packageName == packageName1) apps[0] else apps[1] assertEquals(packageInfo2.versionName, installed.installedVersionName) - assertEquals(packageInfo2.getVersionCode(), installed.installedVersionCode) + assertEquals( + PackageInfoCompat.getLongVersionCode(packageInfo2), + installed.installedVersionCode + ) assertNull(other.installedVersionName) assertNull(other.installedVersionCode) } @@ -406,7 +410,10 @@ internal class AppListItemsTest : AppTest() { assertEquals(1, apps.size) assertEquals(app1, apps[0]) // version code and version name gets taken from supplied packageInfo - assertEquals(packageInfo1.getVersionCode(), apps[0].installedVersionCode) + assertEquals( + PackageInfoCompat.getLongVersionCode(packageInfo1), + apps[0].installedVersionCode + ) assertEquals(packageInfo1.versionName, apps[0].installedVersionName) } diff --git a/libs/database/src/main/java/org/fdroid/database/AppDao.kt b/libs/database/src/main/java/org/fdroid/database/AppDao.kt index c9b86b935..9bb299934 100644 --- a/libs/database/src/main/java/org/fdroid/database/AppDao.kt +++ b/libs/database/src/main/java/org/fdroid/database/AppDao.kt @@ -4,6 +4,7 @@ import android.content.pm.PackageInfo import android.content.pm.PackageManager import android.content.res.Resources import androidx.annotation.VisibleForTesting +import androidx.core.content.pm.PackageInfoCompat import androidx.core.os.ConfigurationCompat.getLocales import androidx.core.os.LocaleListCompat import androidx.lifecycle.LiveData @@ -396,7 +397,7 @@ internal interface AppDaoInt : AppDao { val packageInfo = installedPackages[item.packageName] if (packageInfo == null) item else item.copy( installedVersionName = packageInfo.versionName, - installedVersionCode = packageInfo.getVersionCode(), + installedVersionCode = PackageInfoCompat.getLongVersionCode(packageInfo), ) } } diff --git a/libs/database/src/main/java/org/fdroid/database/DbUpdateChecker.kt b/libs/database/src/main/java/org/fdroid/database/DbUpdateChecker.kt index 468fa9daf..76e0febea 100644 --- a/libs/database/src/main/java/org/fdroid/database/DbUpdateChecker.kt +++ b/libs/database/src/main/java/org/fdroid/database/DbUpdateChecker.kt @@ -4,7 +4,7 @@ import android.annotation.SuppressLint import android.content.pm.PackageInfo import android.content.pm.PackageManager import android.content.pm.PackageManager.GET_SIGNATURES -import android.os.Build +import androidx.core.content.pm.PackageInfoCompat import org.fdroid.CompatibilityChecker import org.fdroid.CompatibilityCheckerImpl import org.fdroid.PackagePreference @@ -42,7 +42,7 @@ public class DbUpdateChecker @JvmOverloads constructor( val versions = versionsByPackage[packageName] ?: return@forEach // continue val version = getVersion(versions, packageName, packageInfo, null, releaseChannels) if (version != null) { - val versionCode = packageInfo.getVersionCode() + val versionCode = PackageInfoCompat.getLongVersionCode(packageInfo) val app = getUpdatableApp(version, versionCode) if (app != null) updatableApps.add(app) } @@ -127,12 +127,3 @@ public class DbUpdateChecker @JvmOverloads constructor( ) } } - -internal fun PackageInfo.getVersionCode(): Long { - return if (Build.VERSION.SDK_INT >= 28) { - longVersionCode - } else { - @Suppress("DEPRECATION") // we use the new one above, if available - versionCode.toLong() - } -} diff --git a/libs/index/src/androidMain/kotlin/org/fdroid/UpdateChecker.kt b/libs/index/src/androidMain/kotlin/org/fdroid/UpdateChecker.kt index 85799b9c9..5f1a91bfb 100644 --- a/libs/index/src/androidMain/kotlin/org/fdroid/UpdateChecker.kt +++ b/libs/index/src/androidMain/kotlin/org/fdroid/UpdateChecker.kt @@ -2,8 +2,8 @@ package org.fdroid import android.content.pm.PackageInfo import android.content.pm.PackageManager.GET_SIGNING_CERTIFICATES +import androidx.core.content.pm.PackageInfoCompat import org.fdroid.index.IndexUtils.getPackageSignature -import org.fdroid.index.IndexUtils.getVersionCode import org.fdroid.index.v2.PackageVersion public interface PackagePreference { @@ -40,7 +40,7 @@ public class UpdateChecker( @Suppress("DEPRECATION") packageInfo.signatures.map { getPackageSignature(it.toByteArray()) }.toSet() }, - installedVersionCode = packageInfo.getVersionCode(), + installedVersionCode = PackageInfoCompat.getLongVersionCode(packageInfo), allowedReleaseChannels = releaseChannels, preferencesGetter = preferencesGetter, ) diff --git a/libs/index/src/androidMain/kotlin/org/fdroid/index/IndexCreator.kt b/libs/index/src/androidMain/kotlin/org/fdroid/index/IndexCreator.kt index efa691c53..5ee9e14fc 100644 --- a/libs/index/src/androidMain/kotlin/org/fdroid/index/IndexCreator.kt +++ b/libs/index/src/androidMain/kotlin/org/fdroid/index/IndexCreator.kt @@ -8,7 +8,7 @@ import android.graphics.Bitmap.Config.ARGB_8888 import android.graphics.Canvas import android.graphics.drawable.BitmapDrawable import android.system.Os.symlink -import org.fdroid.index.IndexUtils.getVersionCode +import androidx.core.content.pm.PackageInfoCompat import org.fdroid.index.IndexUtils.toHex import java.io.File import java.io.IOException @@ -50,7 +50,7 @@ public abstract class IndexCreator( */ protected fun copyIconToRepo(packageInfo: PackageInfo): String { val packageName = packageInfo.packageName - val versionCode = packageInfo.getVersionCode() + val versionCode = PackageInfoCompat.getLongVersionCode(packageInfo) val drawable = packageInfo.applicationInfo.loadIcon(packageManager) val bitmap: Bitmap if (drawable is BitmapDrawable) { @@ -79,7 +79,7 @@ public abstract class IndexCreator( */ protected fun copyApkToRepo(packageInfo: PackageInfo): File { val packageName = packageInfo.packageName - val versionCode = packageInfo.getVersionCode() + val versionCode = PackageInfoCompat.getLongVersionCode(packageInfo) val apkName = "${packageName}_$versionCode.apk" val apkFile = File(repoDir, apkName) symlink(packageInfo.applicationInfo.publicSourceDir, apkFile.absolutePath) diff --git a/libs/index/src/androidMain/kotlin/org/fdroid/index/IndexUtils.kt b/libs/index/src/androidMain/kotlin/org/fdroid/index/IndexUtils.kt index c2a670c70..54e1a2932 100644 --- a/libs/index/src/androidMain/kotlin/org/fdroid/index/IndexUtils.kt +++ b/libs/index/src/androidMain/kotlin/org/fdroid/index/IndexUtils.kt @@ -1,12 +1,9 @@ package org.fdroid.index -import android.content.pm.PackageInfo -import android.os.Build import java.security.MessageDigest import java.security.NoSuchAlgorithmException public object IndexUtils { - public fun getFingerprint(certificate: String): String { return sha256(certificate.decodeHex()).toHex() } @@ -35,14 +32,4 @@ public object IndexUtils { messageDigest.update(bytes) return messageDigest.digest() } - - public fun PackageInfo.getVersionCode(): Long { - return if (Build.VERSION.SDK_INT >= 28) { - longVersionCode - } else { - @Suppress("DEPRECATION") // we use the new one above, if available - versionCode.toLong() - } - } - } diff --git a/libs/index/src/androidMain/kotlin/org/fdroid/index/v1/IndexV1Creator.kt b/libs/index/src/androidMain/kotlin/org/fdroid/index/v1/IndexV1Creator.kt index 8f4d2eed3..5a40cd342 100644 --- a/libs/index/src/androidMain/kotlin/org/fdroid/index/v1/IndexV1Creator.kt +++ b/libs/index/src/androidMain/kotlin/org/fdroid/index/v1/IndexV1Creator.kt @@ -5,12 +5,12 @@ import android.content.pm.PackageManager import android.content.pm.PackageManager.GET_PERMISSIONS import android.content.pm.PackageManager.GET_SIGNATURES import android.os.Build.VERSION.SDK_INT +import androidx.core.content.pm.PackageInfoCompat import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.json.encodeToStream import org.fdroid.index.IndexCreator import org.fdroid.index.IndexParser import org.fdroid.index.IndexUtils.getPackageSignature -import org.fdroid.index.IndexUtils.getVersionCode import java.io.File import java.io.IOException @@ -85,8 +85,10 @@ public class IndexV1Creator( val signer = getPackageSignature(packageInfo.signatures[0].toByteArray()) return PackageV1( packageName = packageInfo.packageName, - versionCode = packageInfo.getVersionCode(), - versionName = packageInfo.versionName ?: packageInfo.getVersionCode().toString(), + versionCode = PackageInfoCompat.getLongVersionCode(packageInfo), + versionName = packageInfo.versionName ?: PackageInfoCompat.getLongVersionCode( + packageInfo + ).toString(), apkName = apkName, hash = hash, hashType = "sha256",