diff --git a/app/src/main/java/org/fdroid/fdroid/views/updates/items/KnownVulnAppListItemController.java b/app/src/main/java/org/fdroid/fdroid/views/updates/items/KnownVulnAppListItemController.java
index 1641001d9..a466ae98e 100644
--- a/app/src/main/java/org/fdroid/fdroid/views/updates/items/KnownVulnAppListItemController.java
+++ b/app/src/main/java/org/fdroid/fdroid/views/updates/items/KnownVulnAppListItemController.java
@@ -12,6 +12,7 @@ import android.view.View;
import org.fdroid.fdroid.AppUpdateStatusManager;
import org.fdroid.fdroid.R;
+import org.fdroid.fdroid.data.Apk;
import org.fdroid.fdroid.data.App;
import org.fdroid.fdroid.data.AppProvider;
import org.fdroid.fdroid.installer.Installer;
@@ -33,23 +34,46 @@ public class KnownVulnAppListItemController extends AppListItemController {
@Override
protected AppListItemState getCurrentViewState(
@NonNull App app, @Nullable AppUpdateStatusManager.AppUpdateStatus appStatus) {
+ String mainText;
+ String actionButtonText;
+
+ // TODO: Take into account signature when multi-sig stuff is merged.
+ if (app.installedVersionCode < app.suggestedVersionCode) {
+ mainText = activity.getString(R.string.updates__app_with_known_vulnerability__upgrade, app.name);
+ actionButtonText = activity.getString(R.string.menu_upgrade);
+ } else {
+ mainText = activity.getString(R.string.updates__app_with_known_vulnerability__uninstall, app.name);
+ actionButtonText = activity.getString(R.string.menu_uninstall);
+ }
+
return new AppListItemState(app)
- .setMainText(activity.getString(R.string.updates__app_with_known_vulnerability__uninstall, app.name))
- .showActionButton(activity.getString(R.string.menu_uninstall));
+ .setMainText(mainText)
+ .showActionButton(actionButtonText);
}
@Override
protected void onActionButtonPressed(@NonNull App app) {
- LocalBroadcastManager.getInstance(activity).registerReceiver(uninstallReceiver,
- Installer.getUninstallIntentFilter(app.packageName));
- InstallerService.uninstall(activity, app.getInstalledApk(activity));
+ Apk installedApk = app.getInstalledApk(activity);
+ if (installedApk == null) {
+ throw new IllegalStateException(
+ "Tried to upgrade or uninstall app with known vulnerability but it doesn't seem to be installed");
+ }
+
+ // TODO: Take into account signature when multi-sig stuff is merged.
+ if (app.installedVersionCode < app.suggestedVersionCode) {
+ LocalBroadcastManager manager = LocalBroadcastManager.getInstance(activity);
+ manager.registerReceiver(installReceiver, Installer.getUninstallIntentFilter(app.packageName));
+ InstallerService.uninstall(activity, installedApk);
+ } else {
+ InstallerService.uninstall(activity, installedApk);
+ }
}
private void unregisterUninstallReceiver() {
- LocalBroadcastManager.getInstance(activity).unregisterReceiver(uninstallReceiver);
+ LocalBroadcastManager.getInstance(activity).unregisterReceiver(installReceiver);
}
- private final BroadcastReceiver uninstallReceiver = new BroadcastReceiver() {
+ private final BroadcastReceiver installReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
switch (intent.getAction()) {
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index a14d9cc05..3ad55ce16 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -98,6 +98,7 @@ This often occurs with apps installed via Google Play or other sources, if they
Download all updates
We found a vulnerability with %1$s. We recommend uninstalling this app immediately.
+ We found a vulnerability with %1$s. We recommend upgrading to the newest version immediately.
Hide apps
Show apps