From a2be7d9013c9bcf696763ae7a0d0011c0f0d7896 Mon Sep 17 00:00:00 2001
From: Peter Serwylo <peter@serwylo.com>
Date: Wed, 1 Apr 2015 15:39:13 +1100
Subject: [PATCH] Fix update count, breakage from rebase, and broken tests.

The update count was broken because I added the join onto the
apk table, and in the process, forced a GROUP BY on the AppProvider
queries. This group by made the COUNT(*) actually count the number
of apks for each app, not the total rows.
---
 F-Droid/src/org/fdroid/fdroid/Utils.java            | 4 +---
 F-Droid/src/org/fdroid/fdroid/data/AppProvider.java | 7 +++++--
 F-Droid/test/src/org/fdroid/fdroid/TestUtils.java   | 7 +++++--
 3 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/F-Droid/src/org/fdroid/fdroid/Utils.java b/F-Droid/src/org/fdroid/fdroid/Utils.java
index 164faf3d3..9b24dfb71 100644
--- a/F-Droid/src/org/fdroid/fdroid/Utils.java
+++ b/F-Droid/src/org/fdroid/fdroid/Utils.java
@@ -61,7 +61,7 @@ import java.util.Locale;
 public final class Utils {
 
     @SuppressWarnings("UnusedDeclaration")
-    private static final String TAG = "org.fdroid.fdroid.Utils";
+    private static final String TAG = "fdroid.Utils";
 
     public static final int BUFFER_SIZE = 4096;
 
@@ -75,8 +75,6 @@ public final class Utils {
     public static final SimpleDateFormat LOG_DATE_FORMAT =
             new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH);
 
-    private static final String TAG = "fdroid.Utils";
-
     public static String getIconsDir(Context context) {
         DisplayMetrics metrics = context.getResources().getDisplayMetrics();
         String iconsDir;
diff --git a/F-Droid/src/org/fdroid/fdroid/data/AppProvider.java b/F-Droid/src/org/fdroid/fdroid/data/AppProvider.java
index 189220433..69bf31424 100644
--- a/F-Droid/src/org/fdroid/fdroid/data/AppProvider.java
+++ b/F-Droid/src/org/fdroid/fdroid/data/AppProvider.java
@@ -259,6 +259,7 @@ public class AppProvider extends FDroidProvider {
         private boolean isSuggestedApkTableAdded = false;
         private boolean requiresInstalledTable = false;
         private boolean categoryFieldAdded = false;
+        private boolean countFieldAppended = false;
 
         @Override
         protected String getRequiredTables() {
@@ -278,7 +279,8 @@ public class AppProvider extends FDroidProvider {
 
         @Override
         protected String groupBy() {
-            return DBHelper.TABLE_APP + ".id";
+            // If the count field has been requested, then we want to group all rows together.
+            return countFieldAppended ? null : DBHelper.TABLE_APP + ".id";
         }
 
         public void addSelection(AppQuerySelection selection) {
@@ -329,7 +331,8 @@ public class AppProvider extends FDroidProvider {
         }
 
         private void appendCountField() {
-            appendField("COUNT(*) AS " + DataColumns._COUNT);
+            countFieldAppended = true;
+            appendField("COUNT( DISTINCT fdroid_app.id ) AS " + DataColumns._COUNT);
         }
 
         private void addSuggestedApkVersionField() {
diff --git a/F-Droid/test/src/org/fdroid/fdroid/TestUtils.java b/F-Droid/test/src/org/fdroid/fdroid/TestUtils.java
index d33dcc4db..2bb7e89ca 100644
--- a/F-Droid/test/src/org/fdroid/fdroid/TestUtils.java
+++ b/F-Droid/test/src/org/fdroid/fdroid/TestUtils.java
@@ -11,6 +11,9 @@ import mock.MockContextSwappableComponents;
 import mock.MockInstallablePackageManager;
 import org.fdroid.fdroid.data.ApkProvider;
 import org.fdroid.fdroid.data.AppProvider;
+import org.fdroid.fdroid.receiver.PackageAddedReceiver;
+import org.fdroid.fdroid.receiver.PackageRemovedReceiver;
+import org.fdroid.fdroid.receiver.PackageUpgradedReceiver;
 
 import java.io.*;
 import java.util.ArrayList;
@@ -19,7 +22,7 @@ import java.util.List;
 
 public class TestUtils {
 
-    private static final String TAG = "org.fdroid.fdroid.TestUtils";
+    private static final String TAG = "fdroid.TestUtils";
 
     public static <T extends Comparable> void assertContainsOnly(List<T> actualList, T[] expectedArray) {
         List<T> expectedList = new ArrayList<T>(expectedArray.length);
@@ -134,7 +137,7 @@ public class TestUtils {
 
     /**
      * Will tell {@code pm} that we are installing {@code appId}, and then alert the
-     * {@link org.fdroid.fdroid.PackageAddedReceiver}. This will in turn update the
+     * {@link org.fdroid.fdroid.receiver.PackageAddedReceiver}. This will in turn update the
      * "installed apps" table in the database.
      */
     public static void installAndBroadcast(