From bbc73cb3e3e6169300487a38bc3b4c6e4257f7d9 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Fri, 8 Mar 2024 14:49:08 -0300 Subject: [PATCH] [app] Set install location to AUTO for SessionInstaller --- .../installer/SessionInstallManager.java | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/installer/SessionInstallManager.java b/app/src/main/java/org/fdroid/fdroid/installer/SessionInstallManager.java index 08c740fc1..17c0de998 100644 --- a/app/src/main/java/org/fdroid/fdroid/installer/SessionInstallManager.java +++ b/app/src/main/java/org/fdroid/fdroid/installer/SessionInstallManager.java @@ -7,12 +7,14 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.IntentSender; +import android.content.pm.PackageInfo; import android.content.pm.PackageInstaller; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.util.Log; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.WorkerThread; import androidx.core.content.ContextCompat; @@ -71,16 +73,7 @@ public class SessionInstallManager extends BroadcastReceiver { public void install(App app, Apk apk, Uri localApkUri, Uri canonicalUri) { DocumentFile documentFile = ObjectsCompat.requireNonNull(DocumentFile.fromSingleUri(context, localApkUri)); long size = documentFile.length(); - PackageInstaller.SessionParams params = - new PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL); - params.setAppPackageName(app.packageName); - params.setSize(size); - if (Build.VERSION.SDK_INT >= 31) { - params.setRequireUserAction(PackageInstaller.SessionParams.USER_ACTION_NOT_REQUIRED); - } - if (Build.VERSION.SDK_INT >= 33) { - params.setPackageSource(PackageInstaller.PACKAGE_SOURCE_STORE); - } + PackageInstaller.SessionParams params = getSessionParams(app, size); PackageInstaller installer = context.getPackageManager().getPackageInstaller(); try { int sessionId = installer.createSession(params); @@ -101,6 +94,22 @@ public class SessionInstallManager extends BroadcastReceiver { } } + @NonNull + private static PackageInstaller.SessionParams getSessionParams(App app, long size) { + PackageInstaller.SessionParams params = + new PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL); + params.setAppPackageName(app.packageName); + params.setSize(size); + params.setInstallLocation(PackageInfo.INSTALL_LOCATION_AUTO); + if (Build.VERSION.SDK_INT >= 31) { + params.setRequireUserAction(PackageInstaller.SessionParams.USER_ACTION_NOT_REQUIRED); + } + if (Build.VERSION.SDK_INT >= 33) { + params.setPackageSource(PackageInstaller.PACKAGE_SOURCE_STORE); + } + return params; + } + @WorkerThread public void uninstall(String packageName) { PackageInstaller installer = context.getPackageManager().getPackageInstaller();