From e2e1d3111c4843ca5305e16a46fc4261a04414f2 Mon Sep 17 00:00:00 2001 From: Peter Serwylo Date: Thu, 13 Oct 2016 06:20:04 +1100 Subject: [PATCH] Extract code to check for ACRA process into method Makes it easier to document the code and simplifies FDroidApp#onCreate(). --- .../java/org/fdroid/fdroid/FDroidApp.java | 29 ++++++++++++++----- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/FDroidApp.java b/app/src/main/java/org/fdroid/fdroid/FDroidApp.java index c4a9369c2..004ada921 100644 --- a/app/src/main/java/org/fdroid/fdroid/FDroidApp.java +++ b/app/src/main/java/org/fdroid/fdroid/FDroidApp.java @@ -209,13 +209,8 @@ public class FDroidApp extends Application { updateLanguage(); ACRA.init(this); - // if this is the ACRA process, do not run the rest of onCreate() - int pid = android.os.Process.myPid(); - ActivityManager manager = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE); - for (RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()) { - if (processInfo.pid == pid && "org.fdroid.fdroid:acra".equals(processInfo.processName)) { - return; - } + if (isAcraProcess()) { + return; } PRNGFixes.apply(); @@ -317,6 +312,26 @@ public class FDroidApp extends Application { } } + /** + * Asks if the current process is "org.fdroid.fdroid:acra". Note that it is not perfect, because + * some devices seem to not provide a list of running app processes when asked. + * + * The `android:process` statement in AndroidManifest.xml causes another process to be created + * to run {@link org.fdroid.fdroid.acra.CrashReportActivity}. This was causing lots of things + * to be started/run twice including {@link CleanCacheService} and {@link WifiStateChangeService}. + */ + private boolean isAcraProcess() { + int pid = android.os.Process.myPid(); + ActivityManager manager = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE); + for (RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()) { + if (processInfo.pid == pid && "org.fdroid.fdroid:acra".equals(processInfo.processName)) { + return true; + } + } + + return false; + } + @TargetApi(18) private BluetoothAdapter getBluetoothAdapter() { // to use the new, recommended way of getting the adapter