From 7f1155816e4ac4c7d2fb1a52e111a9b72af61c25 Mon Sep 17 00:00:00 2001
From: Peter Serwylo <peter@serwylo.com>
Date: Thu, 21 Apr 2016 15:23:36 +1000
Subject: [PATCH] Show name of app being downloaded in notification.

If a non-apk download is taking place, revert to the current generic
"Downloading..." message.
---
 .../fdroid/fdroid/net/DownloaderService.java  | 21 ++++++++++++++++++-
 app/src/main/res/values/strings.xml           |  1 +
 2 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/app/src/main/java/org/fdroid/fdroid/net/DownloaderService.java b/app/src/main/java/org/fdroid/fdroid/net/DownloaderService.java
index 152f881e4..f72ec99c5 100644
--- a/app/src/main/java/org/fdroid/fdroid/net/DownloaderService.java
+++ b/app/src/main/java/org/fdroid/fdroid/net/DownloaderService.java
@@ -45,6 +45,8 @@ import org.fdroid.fdroid.FDroid;
 import org.fdroid.fdroid.Preferences;
 import org.fdroid.fdroid.R;
 import org.fdroid.fdroid.Utils;
+import org.fdroid.fdroid.data.App;
+import org.fdroid.fdroid.data.AppProvider;
 import org.fdroid.fdroid.data.SanitizedFile;
 
 import java.io.File;
@@ -168,12 +170,29 @@ public class DownloaderService extends Service {
         return new NotificationCompat.Builder(this)
                 .setAutoCancel(true)
                 .setContentIntent(createAppDetailsIntent(this, 0, packageName))
-                .setContentTitle(getString(R.string.downloading))
+                .setContentTitle(getNotificationTitle(packageName))
                 .setSmallIcon(android.R.drawable.stat_sys_download)
                 .setContentText(urlString)
                 .setProgress(100, 0, true);
     }
 
+    /**
+     * If downloading an apk (i.e. <code>packageName != null</code>) then the title will indicate
+     * the name of the app which the apk belongs to. Otherwise, it will be a generic "Downloading..."
+     * message.
+     */
+    private String getNotificationTitle(@Nullable String packageName) {
+        String title;
+        if (packageName != null) {
+            App app = AppProvider.Helper.findByPackageName(
+                    getContentResolver(), packageName, new String[] { AppProvider.DataColumns.NAME });
+            title = getString(R.string.downloading_apk, app.name);
+        } else {
+            title = getString(R.string.downloading);
+        }
+        return title;
+    }
+
     public static PendingIntent createAppDetailsIntent(@NonNull Context context, int requestCode, @Nullable String packageName) {
         TaskStackBuilder stackBuilder;
         if (packageName != null) {
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 29a42b952..20d0988a3 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -372,6 +372,7 @@
     <string name="perms_new_perm_prefix">New: </string>
     <string name="perms_description_app">Provided by %1$s.</string>
     <string name="downloading">Downloading…</string>
+    <string name="downloading_apk">Downloading %1$s</string>
 
     <string name="interval_never">Never</string>
     <string name="interval_1h">Hourly</string>