From 17ffd07e36497be3f81b4874229a121f982b2a5e Mon Sep 17 00:00:00 2001 From: "David A. Velasco" Date: Mon, 2 Jun 2014 10:38:14 +0200 Subject: [PATCH] Cancelation of notifications on success moved to a separate thread --- .../android/files/services/FileDownloader.java | 11 ++++++-- .../android/files/services/FileUploader.java | 13 ++++----- .../NotificationBuilderWithProgressBar.java | 7 ++++- .../android/notifications/NotificationDelayer.java | 33 ++++++++++++++++++++++ 4 files changed, 54 insertions(+), 10 deletions(-) rename src/com/owncloud/android/{utils => notifications}/NotificationBuilderWithProgressBar.java (96%) create mode 100644 src/com/owncloud/android/notifications/NotificationDelayer.java diff --git a/src/com/owncloud/android/files/services/FileDownloader.java b/src/com/owncloud/android/files/services/FileDownloader.java index b525bc4a..ba9824ad 100644 --- a/src/com/owncloud/android/files/services/FileDownloader.java +++ b/src/com/owncloud/android/files/services/FileDownloader.java @@ -36,6 +36,8 @@ import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.lib.common.network.OnDatatransferProgressListener; import com.owncloud.android.lib.common.OwnCloudClientFactory; import com.owncloud.android.lib.common.OwnCloudClient; +import com.owncloud.android.notifications.NotificationBuilderWithProgressBar; +import com.owncloud.android.notifications.NotificationDelayer; import com.owncloud.android.operations.DownloadFileOperation; import com.owncloud.android.lib.common.operations.RemoteOperationResult; import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; @@ -46,7 +48,6 @@ import com.owncloud.android.ui.preview.PreviewImageActivity; import com.owncloud.android.ui.preview.PreviewImageFragment; import com.owncloud.android.utils.ErrorMessageAdapter; import com.owncloud.android.utils.Log_OC; -import com.owncloud.android.utils.NotificationBuilderWithProgressBar; import android.accounts.Account; import android.accounts.AccountsException; @@ -507,12 +508,18 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis // Remove success notification if (downloadResult.isSuccess()) { // Sleep 2 seconds, so show the notification before remove it + NotificationDelayer.cancelWithDelay( + mNotificationManager, + R.string.downloader_download_succeeded_ticker, + 2000); + /* Handler handler = new Handler(); handler.postDelayed(new Runnable() { public void run() { mNotificationManager.cancel(R.string.downloader_download_succeeded_ticker); } - }, 2000); + }, 2000); + */ } diff --git a/src/com/owncloud/android/files/services/FileUploader.java b/src/com/owncloud/android/files/services/FileUploader.java index 7a04a22d..731522cf 100644 --- a/src/com/owncloud/android/files/services/FileUploader.java +++ b/src/com/owncloud/android/files/services/FileUploader.java @@ -33,6 +33,8 @@ import com.owncloud.android.authentication.AuthenticatorActivity; import com.owncloud.android.datamodel.FileDataStorageManager; import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.db.DbHandler; +import com.owncloud.android.notifications.NotificationBuilderWithProgressBar; +import com.owncloud.android.notifications.NotificationDelayer; import com.owncloud.android.operations.CreateFolderOperation; import com.owncloud.android.lib.resources.files.RemoteFile; import com.owncloud.android.lib.common.operations.RemoteOperation; @@ -54,7 +56,6 @@ import com.owncloud.android.ui.activity.FileDisplayActivity; import com.owncloud.android.ui.activity.InstantUploadActivity; import com.owncloud.android.utils.ErrorMessageAdapter; import com.owncloud.android.utils.Log_OC; -import com.owncloud.android.utils.NotificationBuilderWithProgressBar; import android.accounts.Account; import android.accounts.AccountManager; @@ -809,12 +810,10 @@ public class FileUploader extends Service implements OnDatatransferProgressListe // Remove success notification if (uploadResult.isSuccess()) { // Sleep 2 seconds, so show the notification before remove it - Handler handler = new Handler(); - handler.postDelayed(new Runnable() { - public void run() { - mNotificationManager.cancel(R.string.uploader_upload_succeeded_ticker); - } - }, 2000); + NotificationDelayer.cancelWithDelay( + mNotificationManager, + R.string.uploader_upload_succeeded_ticker, + 2000); } } diff --git a/src/com/owncloud/android/utils/NotificationBuilderWithProgressBar.java b/src/com/owncloud/android/notifications/NotificationBuilderWithProgressBar.java similarity index 96% rename from src/com/owncloud/android/utils/NotificationBuilderWithProgressBar.java rename to src/com/owncloud/android/notifications/NotificationBuilderWithProgressBar.java index c47e469e..3b52f6e4 100644 --- a/src/com/owncloud/android/utils/NotificationBuilderWithProgressBar.java +++ b/src/com/owncloud/android/notifications/NotificationBuilderWithProgressBar.java @@ -15,13 +15,17 @@ * */ -package com.owncloud.android.utils; +package com.owncloud.android.notifications; import com.owncloud.android.R; import android.app.Notification; +import android.app.NotificationManager; import android.content.Context; import android.os.Build; +import android.os.Handler; +import android.os.HandlerThread; +import android.os.Process; import android.support.v4.app.NotificationCompat; import android.view.View; import android.widget.RemoteViews; @@ -128,4 +132,5 @@ public class NotificationBuilderWithProgressBar extends NotificationCompat.Build return result; } + } diff --git a/src/com/owncloud/android/notifications/NotificationDelayer.java b/src/com/owncloud/android/notifications/NotificationDelayer.java new file mode 100644 index 00000000..61cb07b2 --- /dev/null +++ b/src/com/owncloud/android/notifications/NotificationDelayer.java @@ -0,0 +1,33 @@ +package com.owncloud.android.notifications; + +import java.util.Random; + +import android.app.NotificationManager; +import android.os.Handler; +import android.os.HandlerThread; +import android.os.Process; + +public class NotificationDelayer { + + public static void cancelWithDelay( + final NotificationManager notificationManager, + final int notificationId, + long delayInMillis) { + + HandlerThread thread = new HandlerThread( + "NotificationDelayerThread_" + (new Random(System.currentTimeMillis())).nextInt(), + Process.THREAD_PRIORITY_BACKGROUND); + thread.start(); + + Handler handler = new Handler(thread.getLooper()); + handler.postDelayed(new Runnable() { + public void run() { + notificationManager.cancel(notificationId); + ((HandlerThread)Thread.currentThread()).getLooper().quitSafely(); + } + }, delayInMillis); + + } + + +} -- 2.11.0