From e1ea8270ca0a01c1239d680e90c39ab30cd1b637 Mon Sep 17 00:00:00 2001 From: Daniele Gobbetti Date: Thu, 24 Sep 2015 14:03:01 +0200 Subject: [PATCH] Add a progress notification for the activity data transfer. --- .../operations/FetchActivityOperation.java | 3 ++ .../freeyourgadget/gadgetbridge/util/GB.java | 41 +++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband/operations/FetchActivityOperation.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband/operations/FetchActivityOperation.java index ccc6e1d04..f89fd2f18 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband/operations/FetchActivityOperation.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband/operations/FetchActivityOperation.java @@ -195,8 +195,11 @@ public class FetchActivityOperation extends AbstractBTLEOperation } LOG.debug("activity data: length: " + value.length + ", remaining bytes: " + activityStruct.activityDataRemainingBytes); + GB.updateTransferNotification(getContext().getString(R.string.busy_task_fetch_activity_data), true, (int)(((float) (activityStruct.activityDataUntilNextHeader - activityStruct.activityDataRemainingBytes)) / activityStruct.activityDataUntilNextHeader * 100), getContext()); + if (activityStruct.isBlockFinished()) { sendAckDataTransfer(activityStruct.activityDataTimestampToAck, activityStruct.activityDataUntilNextHeader); + GB.updateTransferNotification("", false, 100, getContext()); } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/GB.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/GB.java index 1c7282bb3..1a1eddb68 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/GB.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/GB.java @@ -40,6 +40,7 @@ public class GB { public static final int NOTIFICATION_ID = 1; public static final int NOTIFICATION_ID_INSTALL = 2; public static final int NOTIFICATION_ID_LOW_BATTERY = 3; + public static final int NOTIFICATION_ID_TRANSFER = 4; private static final Logger LOG = LoggerFactory.getLogger(GB.class); public static final int INFO = 1; @@ -80,6 +81,11 @@ public class GB { nm.notify(id, notification); } + private static void removeNotification(int id, Context context) { + NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + nm.cancel(id); + } + public static void setReceiversEnableState(boolean enable, Context context) { LOG.info("Setting broadcast receivers to: " + enable); final Class[] receiverClasses = { @@ -275,6 +281,41 @@ public class GB { } } + private static Notification createTransferNotification(String text, boolean ongoing, + int percentage, Context context) { + Intent notificationIntent = new Intent(context, ControlCenter.class); + notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK + | Intent.FLAG_ACTIVITY_CLEAR_TASK); + PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, + notificationIntent, 0); + + NotificationCompat.Builder nb = new NotificationCompat.Builder(context) + .setVisibility(Notification.VISIBILITY_PUBLIC) + .setContentTitle(context.getString(R.string.app_name)) + .setContentText(text) + .setContentIntent(pendingIntent) + .setOngoing(ongoing); + + if (ongoing) { + nb.setProgress(100, percentage, percentage == 0); + nb.setSmallIcon(android.R.drawable.stat_sys_download); + } else { + nb.setProgress(0, 0, false); + nb.setSmallIcon(android.R.drawable.stat_sys_download_done); + } + + return nb.build(); + } + + public static void updateTransferNotification(String text, boolean ongoing, int percentage, Context context) { + if(percentage == 100) { + removeNotification(NOTIFICATION_ID_TRANSFER, context); + } else { + Notification notification = createTransferNotification(text, ongoing, percentage, context); + updateNotification(notification, NOTIFICATION_ID_TRANSFER, context); + } + } + private static Notification createInstallNotification(String text, boolean ongoing, int percentage, Context context) { Intent notificationIntent = new Intent(context, ControlCenter.class);