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();