From d2291b2134002bc9225cf21a6a1bc51cf995a3cd Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Tue, 20 Sep 2016 11:47:49 +0200 Subject: [PATCH] send Installer.ACTION_INSTALL_STARTED consistently ACTION_INSTALL_STARTED was being sent twice per transaction with the default installer. Also, it should be sent as the first step of the install process. --- .../fdroid/installer/DefaultInstaller.java | 9 ++------- .../installer/DefaultInstallerActivity.java | 4 ++-- .../fdroid/installer/InstallManagerService.java | 5 ++++- .../org/fdroid/fdroid/installer/Installer.java | 17 ++++++++--------- .../fdroid/installer/PrivilegedInstaller.java | 2 -- 5 files changed, 16 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/installer/DefaultInstaller.java b/app/src/main/java/org/fdroid/fdroid/installer/DefaultInstaller.java index fa202dda5..6fba6ec6a 100644 --- a/app/src/main/java/org/fdroid/fdroid/installer/DefaultInstaller.java +++ b/app/src/main/java/org/fdroid/fdroid/installer/DefaultInstaller.java @@ -1,5 +1,6 @@ /* * Copyright (C) 2016 Dominik Schürmann + * Copyright (C) 2016 Blue Jay Wireless * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -25,11 +26,8 @@ import android.content.Intent; import android.net.Uri; import android.os.Build; -import org.fdroid.fdroid.Utils; import org.fdroid.fdroid.data.Apk; -import java.io.File; - /** * The default installer of F-Droid. It uses the normal Intents APIs of Android * to install apks. Its main inner workings are encapsulated in DefaultInstallerActivity. @@ -39,7 +37,7 @@ import java.io.File; */ public class DefaultInstaller extends Installer { - private static final String TAG = "DefaultInstaller"; + public static final String TAG = "DefaultInstaller"; DefaultInstaller(Context context, Apk apk) { super(context, apk); @@ -47,9 +45,6 @@ public class DefaultInstaller extends Installer { @Override protected void installPackageInternal(Uri localApkUri, Uri downloadUri, Apk apk) { - sendBroadcastInstall(downloadUri, Installer.ACTION_INSTALL_STARTED); - - Utils.debugLog(TAG, "DefaultInstaller uri: " + localApkUri + " file: " + new File(localApkUri.getPath())); Intent installIntent = new Intent(context, DefaultInstallerActivity.class); installIntent.setAction(DefaultInstallerActivity.ACTION_INSTALL_PACKAGE); diff --git a/app/src/main/java/org/fdroid/fdroid/installer/DefaultInstallerActivity.java b/app/src/main/java/org/fdroid/fdroid/installer/DefaultInstallerActivity.java index 04efb2087..9c53800f2 100644 --- a/app/src/main/java/org/fdroid/fdroid/installer/DefaultInstallerActivity.java +++ b/app/src/main/java/org/fdroid/fdroid/installer/DefaultInstallerActivity.java @@ -1,5 +1,6 @@ /* * Copyright (C) 2014-2016 Dominik Schürmann + * Copyright (C) 2016 Blue Jay Wireless * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -37,7 +38,7 @@ import org.fdroid.fdroid.data.Apk; * A transparent activity as a wrapper around Android's PackageInstaller Intents */ public class DefaultInstallerActivity extends FragmentActivity { - private static final String TAG = "AndroidInstallerAct"; + private static final String TAG = "DefaultInstallerActivit"; static final String ACTION_INSTALL_PACKAGE = "org.fdroid.fdroid.installer.DefaultInstaller.action.INSTALL_PACKAGE"; static final String ACTION_UNINSTALL_PACKAGE = "org.fdroid.fdroid.installer.DefaultInstaller.action.UNINSTALL_PACKAGE"; @@ -121,7 +122,6 @@ public class DefaultInstallerActivity extends FragmentActivity { "This Android rom does not support ACTION_INSTALL_PACKAGE!"); finish(); } - installer.sendBroadcastInstall(downloadUri, Installer.ACTION_INSTALL_STARTED); } private void uninstallPackage(String packageName) { diff --git a/app/src/main/java/org/fdroid/fdroid/installer/InstallManagerService.java b/app/src/main/java/org/fdroid/fdroid/installer/InstallManagerService.java index 62b1b0d88..2e3564507 100644 --- a/app/src/main/java/org/fdroid/fdroid/installer/InstallManagerService.java +++ b/app/src/main/java/org/fdroid/fdroid/installer/InstallManagerService.java @@ -462,10 +462,13 @@ public class InstallManagerService extends Service { */ public static void queue(Context context, App app, Apk apk) { String urlString = apk.getUrl(); + Uri downloadUri = Uri.parse(urlString); + Installer.sendBroadcastInstall(context, downloadUri, Installer.ACTION_INSTALL_STARTED, apk, + null, null); Utils.debugLog(TAG, "queue " + app.packageName + " " + apk.versionCode + " from " + urlString); Intent intent = new Intent(context, InstallManagerService.class); intent.setAction(ACTION_INSTALL); - intent.setData(Uri.parse(urlString)); + intent.setData(downloadUri); intent.putExtra(EXTRA_APP, app); intent.putExtra(EXTRA_APK, apk); context.startService(intent); diff --git a/app/src/main/java/org/fdroid/fdroid/installer/Installer.java b/app/src/main/java/org/fdroid/fdroid/installer/Installer.java index bdcf2a271..ffa50fe41 100644 --- a/app/src/main/java/org/fdroid/fdroid/installer/Installer.java +++ b/app/src/main/java/org/fdroid/fdroid/installer/Installer.java @@ -47,7 +47,6 @@ public abstract class Installer { final Context context; final Apk apk; - private final LocalBroadcastManager localBroadcastManager; public static final String ACTION_INSTALL_STARTED = "org.fdroid.fdroid.installer.Installer.action.INSTALL_STARTED"; public static final String ACTION_INSTALL_COMPLETE = "org.fdroid.fdroid.installer.Installer.action.INSTALL_COMPLETE"; @@ -79,7 +78,6 @@ public abstract class Installer { Installer(Context context, Apk apk) { this.context = context; this.apk = apk; - localBroadcastManager = LocalBroadcastManager.getInstance(context); } /** @@ -148,19 +146,20 @@ public abstract class Installer { } void sendBroadcastInstall(Uri downloadUri, String action, PendingIntent pendingIntent) { - sendBroadcastInstall(downloadUri, action, pendingIntent, null); + sendBroadcastInstall(context, downloadUri, action, apk, pendingIntent, null); } void sendBroadcastInstall(Uri downloadUri, String action) { - sendBroadcastInstall(downloadUri, action, null, null); + sendBroadcastInstall(context, downloadUri, action, apk, null, null); } void sendBroadcastInstall(Uri downloadUri, String action, String errorMessage) { - sendBroadcastInstall(downloadUri, action, null, errorMessage); + sendBroadcastInstall(context, downloadUri, action, apk, null, errorMessage); } - void sendBroadcastInstall(Uri downloadUri, String action, - PendingIntent pendingIntent, String errorMessage) { + static void sendBroadcastInstall(Context context, + Uri downloadUri, String action, Apk apk, + PendingIntent pendingIntent, String errorMessage) { Intent intent = new Intent(action); intent.setData(downloadUri); intent.putExtra(Installer.EXTRA_USER_INTERACTION_PI, pendingIntent); @@ -168,7 +167,7 @@ public abstract class Installer { if (!TextUtils.isEmpty(errorMessage)) { intent.putExtra(Installer.EXTRA_ERROR_MESSAGE, errorMessage); } - localBroadcastManager.sendBroadcast(intent); + LocalBroadcastManager.getInstance(context).sendBroadcast(intent); } void sendBroadcastUninstall(String action, String errorMessage) { @@ -193,7 +192,7 @@ public abstract class Installer { if (!TextUtils.isEmpty(errorMessage)) { intent.putExtra(Installer.EXTRA_ERROR_MESSAGE, errorMessage); } - localBroadcastManager.sendBroadcast(intent); + LocalBroadcastManager.getInstance(context).sendBroadcast(intent); } /** diff --git a/app/src/main/java/org/fdroid/fdroid/installer/PrivilegedInstaller.java b/app/src/main/java/org/fdroid/fdroid/installer/PrivilegedInstaller.java index c1f7ac64a..11c6f984e 100644 --- a/app/src/main/java/org/fdroid/fdroid/installer/PrivilegedInstaller.java +++ b/app/src/main/java/org/fdroid/fdroid/installer/PrivilegedInstaller.java @@ -308,8 +308,6 @@ public class PrivilegedInstaller extends Installer { @Override protected void installPackageInternal(final Uri localApkUri, final Uri downloadUri, Apk apk) { - sendBroadcastInstall(downloadUri, Installer.ACTION_INSTALL_STARTED); - ServiceConnection mServiceConnection = new ServiceConnection() { public void onServiceConnected(ComponentName name, IBinder service) { IPrivilegedService privService = IPrivilegedService.Stub.asInterface(service);