Add cancel action to download notification (#6353)

This commit is contained in:
ByteHamster 2023-02-25 16:30:58 +01:00 committed by GitHub
parent 34553475d9
commit 3e077e5653
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 39 additions and 9 deletions

View File

@ -39,9 +39,8 @@ public class DownloadServiceNotification {
.setOnlyAlertOnce(true) .setOnlyAlertOnce(true)
.setShowWhen(false) .setShowWhen(false)
.setContentIntent(getNotificationContentIntent(context)) .setContentIntent(getNotificationContentIntent(context))
.setSmallIcon(R.drawable.ic_notification_sync); .setSmallIcon(R.drawable.ic_notification_sync)
notificationCompatBuilder.setVisibility(NotificationCompat.VISIBILITY_PUBLIC); .setVisibility(NotificationCompat.VISIBILITY_PUBLIC);
Log.d(TAG, "Notification set up"); Log.d(TAG, "Notification set up");
} }
@ -62,12 +61,27 @@ public class DownloadServiceNotification {
} else { } else {
contentTitle = context.getString(R.string.download_notification_title); contentTitle = context.getString(R.string.download_notification_title);
} }
String contentText = (downloads.size() > 0)
? context.getResources().getQuantityString(R.plurals.downloads_left, downloads.size(), downloads.size()) int numDownloads = getNumberOfRunningDownloads(downloads);
: context.getString(R.string.completing); String contentText = context.getString(R.string.completing);
String bigText = compileNotificationString(downloads); String bigText = context.getString(R.string.completing);
if (!bigText.contains("\n")) { notificationCompatBuilder.clearActions();
contentText = bigText; if (numDownloads > 0) {
bigText = compileNotificationString(downloads);
if (numDownloads == 1) {
contentText = bigText;
} else {
contentText = context.getResources().getQuantityString(R.plurals.downloads_left,
numDownloads, numDownloads);
}
Intent cancelDownloadsIntent = new Intent(DownloadService.ACTION_CANCEL_ALL_DOWNLOADS);
cancelDownloadsIntent.setPackage(context.getPackageName());
PendingIntent cancelPendingIntent = PendingIntent.getBroadcast(context,
R.id.pending_intent_download_cancel_all, cancelDownloadsIntent, PendingIntent.FLAG_UPDATE_CURRENT
| (Build.VERSION.SDK_INT >= 23 ? PendingIntent.FLAG_IMMUTABLE : 0));
notificationCompatBuilder.addAction(new NotificationCompat.Action(
R.drawable.ic_notification_cancel, context.getString(R.string.cancel_label), cancelPendingIntent));
} }
notificationCompatBuilder.setContentTitle(contentTitle); notificationCompatBuilder.setContentTitle(contentTitle);
@ -76,6 +90,16 @@ public class DownloadServiceNotification {
return notificationCompatBuilder.build(); return notificationCompatBuilder.build();
} }
private int getNumberOfRunningDownloads(List<Downloader> downloads) {
int running = 0;
for (Downloader downloader : downloads) {
if (!downloader.cancelled && !downloader.isFinished()) {
running++;
}
}
return running;
}
private boolean typeIsOnly(List<Downloader> downloads, int feedFileType) { private boolean typeIsOnly(List<Downloader> downloads, int feedFileType) {
for (Downloader downloader : downloads) { for (Downloader downloader : downloads) {
if (downloader.cancelled) { if (downloader.cancelled) {

View File

@ -2,6 +2,7 @@
<resources> <resources>
<item name="pending_intent_download_service_notification" type="id"/> <item name="pending_intent_download_service_notification" type="id"/>
<item name="pending_intent_download_service_retry" type="id"/> <item name="pending_intent_download_service_retry" type="id"/>
<item name="pending_intent_download_cancel_all" type="id"/>
<item name="pending_intent_download_service_auth" type="id"/> <item name="pending_intent_download_service_auth" type="id"/>
<item name="pending_intent_download_service_report" type="id"/> <item name="pending_intent_download_service_report" type="id"/>
<item name="pending_intent_download_service_autodownload_report" type="id"/> <item name="pending_intent_download_service_autodownload_report" type="id"/>

View File

@ -0,0 +1,5 @@
<vector android:height="24dp"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FFFFFFFF" android:pathData="M12,2C6.47,2 2,6.47 2,12s4.47,10 10,10 10,-4.47 10,-10S17.53,2 12,2zM17,15.59L15.59,17 12,13.41 8.41,17 7,15.59 10.59,12 7,8.41 8.41,7 12,10.59 15.59,7 17,8.41 13.41,12 17,15.59z"/>
</vector>