diff options
-rwxr-xr-x | src/com/android/providers/downloads/DownloadNotifier.java | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/src/com/android/providers/downloads/DownloadNotifier.java b/src/com/android/providers/downloads/DownloadNotifier.java index 809347fd..bd4a5334 100755 --- a/src/com/android/providers/downloads/DownloadNotifier.java +++ b/src/com/android/providers/downloads/DownloadNotifier.java @@ -163,9 +163,19 @@ public class DownloadNotifier { } } + // Check error status about downloads. If error exists, will + // update icon and content title/content text in notification. + boolean hasErrorStatus = false; + for (DownloadInfo info : cluster) { + if (isErrorStatus(info.mStatus)) { + hasErrorStatus = true; + break; + } + } + // Show relevant icon if (type == TYPE_ACTIVE) { - if (hasPausedStatus) { + if (hasPausedStatus || hasErrorStatus) { builder.setSmallIcon(R.drawable.download_pause); } else { builder.setSmallIcon(android.R.drawable.stat_sys_download); @@ -220,9 +230,9 @@ public class DownloadNotifier { String remainingText = null; String percentText = null; String speedAsSizeText = null; + long total = 0; if (type == TYPE_ACTIVE) { long current = 0; - long total = 0; long speed = 0; synchronized (mDownloadSpeed) { for (DownloadInfo info : cluster) { @@ -283,6 +293,11 @@ public class DownloadNotifier { } else if (speedAsSizeText != null) { builder.setContentText(res.getString(R.string.download_speed_text, remainingText, speedAsSizeText)); + } else if (hasErrorStatus) { + builder.setContentText(res.getText( + R.string.notification_download_failed)); + if (total == 0) + builder.setProgress(100, 0, false); } builder.setContentInfo(percentText); @@ -311,6 +326,11 @@ public class DownloadNotifier { if (type == TYPE_ACTIVE) { if (hasPausedStatus) { builder.setContentTitle(res.getString(R.string.download_queued)); + } else if (hasErrorStatus) { + builder.setContentText(res.getText( + R.string.notification_download_failed)); + if (total == 0) + builder.setProgress(100, 0, false); } else { builder.setContentTitle(res.getQuantityString( R.plurals.notif_summary_active, cluster.size(), cluster.size())); @@ -416,4 +436,13 @@ public class DownloadNotifier { status == Downloads.Impl.STATUS_PAUSED_BY_MANUAL; } + private static boolean isErrorStatus(int status) { + boolean isErrorStatus = Downloads.Impl.isStatusError(status) + || Downloads.Impl.isStatusClientError(status) + || Downloads.Impl.isStatusServerError(status) + || status == Downloads.Impl.STATUS_INSUFFICIENT_SPACE_ERROR + || status == Downloads.Impl.STATUS_DEVICE_NOT_FOUND_ERROR; + return isErrorStatus; + } + } |