From 1b7660a77ae780606ec8b2e0f9c8ac7a3aad9b9d Mon Sep 17 00:00:00 2001 From: SayantanRC Date: Mon, 4 Apr 2022 20:49:40 +0530 Subject: [PATCH] App lounge: (issue_2237) Set installer to FakeStore "com.android.vending" if origin is GPLAY --- .../e/apps/manager/pkg/PkgManagerBR.kt | 4 +++ .../e/apps/manager/pkg/PkgManagerModule.kt | 32 ++++++++++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/foundation/e/apps/manager/pkg/PkgManagerBR.kt b/app/src/main/java/foundation/e/apps/manager/pkg/PkgManagerBR.kt index ec4bb4b0f..d80a32afe 100644 --- a/app/src/main/java/foundation/e/apps/manager/pkg/PkgManagerBR.kt +++ b/app/src/main/java/foundation/e/apps/manager/pkg/PkgManagerBR.kt @@ -42,6 +42,9 @@ open class PkgManagerBR : BroadcastReceiver() { @Inject lateinit var fusedManagerRepository: FusedManagerRepository + @Inject + lateinit var pkgManagerModule: PkgManagerModule + override fun onReceive(context: Context?, intent: Intent?) { val action = intent?.action if (context != null && action != null) { @@ -86,6 +89,7 @@ open class PkgManagerBR : BroadcastReceiver() { } GlobalScope.launch { val fusedDownload = fusedManagerRepository.getFusedDownload(packageName = pkgName) + pkgManagerModule.setFakeStoreAsInstallerIfNeeded(fusedDownload) fusedManagerRepository.updateDownloadStatus(fusedDownload, Status.INSTALLED) } } diff --git a/app/src/main/java/foundation/e/apps/manager/pkg/PkgManagerModule.kt b/app/src/main/java/foundation/e/apps/manager/pkg/PkgManagerModule.kt index e88620d3d..24f60bc12 100644 --- a/app/src/main/java/foundation/e/apps/manager/pkg/PkgManagerModule.kt +++ b/app/src/main/java/foundation/e/apps/manager/pkg/PkgManagerModule.kt @@ -30,7 +30,10 @@ import android.os.Build import android.util.Log import androidx.core.content.pm.PackageInfoCompat import dagger.hilt.android.qualifiers.ApplicationContext +import foundation.e.apps.manager.database.fusedDownload.FusedDownload +import foundation.e.apps.utils.enums.Origin import foundation.e.apps.utils.enums.Status +import foundation.e.apps.utils.enums.Type import kotlinx.coroutines.DelicateCoroutinesApi import java.io.File import javax.inject.Inject @@ -87,9 +90,36 @@ class PkgManagerModule @Inject constructor( } } + /** + * Sets an installed app's installer as FakeStore if its source / origin is from Google play. + * If the origin is not Google play, no operation is performed. + * + * [See issue 2237](https://gitlab.e.foundation/e/backlog/-/issues/2237) + * + * Surrounded by try-catch to prevent exception is case App Lounge and FakeStore's + * signing certificate is not the same. + */ + fun setFakeStoreAsInstallerIfNeeded(fusedDownload: FusedDownload?) { + if (fusedDownload == null || fusedDownload.package_name.isBlank()) { + return + } + if (fusedDownload.origin == Origin.GPLAY) { + val fakeStorePackageName = "com.android.vending" + if (fusedDownload.type == Type.NATIVE && isInstalled(fakeStorePackageName)) { + val targetPackage = fusedDownload.package_name + try { + packageManager.setInstallerPackageName(targetPackage, fakeStorePackageName) + Log.d(TAG, "Changed installer to $fakeStorePackageName for $targetPackage") + } catch (e: Exception) { + e.printStackTrace() + } + } + } + } + /** * Installs the given package using system API - * @param file An instance of [File] + * @param list List of [File] to be written to install session. */ @OptIn(DelicateCoroutinesApi::class) fun installApplication(list: List, packageName: String) { -- GitLab