Merge branch '2759-install-location' into 'master'

Set install location to AUTO for SessionInstaller

Closes #2759

See merge request fdroid/fdroidclient!1361
This commit is contained in:
Hans-Christoph Steiner
2024-03-13 07:46:00 +00:00

View File

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