Merge pull request #508 from owncloud/vanish_notifications

Vanish succesful notifications
This commit is contained in:
David A. Velasco 2014-06-03 14:50:48 +02:00
commit cc7366348d
4 changed files with 84 additions and 70 deletions

View file

@ -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;
@ -493,30 +494,26 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis
mDownloadClient = null; // grant that future retries on the same account will get the fresh credentials
} else {
Intent showDetailsIntent = null;
if (downloadResult.isSuccess()) {
if (PreviewImageFragment.canBePreviewed(download.getFile())) {
showDetailsIntent = new Intent(this, PreviewImageActivity.class);
} else {
showDetailsIntent = new Intent(this, FileDisplayActivity.class);
}
showDetailsIntent.putExtra(FileActivity.EXTRA_FILE, download.getFile());
showDetailsIntent.putExtra(FileActivity.EXTRA_ACCOUNT, download.getAccount());
showDetailsIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
} else {
// TODO put something smart in showDetailsIntent
showDetailsIntent = new Intent();
}
Intent showDetailsIntent = new Intent();
mNotificationBuilder
.setContentIntent(PendingIntent.getActivity(
this, (int) System.currentTimeMillis(), showDetailsIntent, 0));
}
mNotificationBuilder.setContentText(ErrorMessageAdapter.getErrorCauseMessage(downloadResult, download, getResources()));
mNotificationManager.notify(tickerId, mNotificationBuilder.build());
// 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);
}
}
}

View file

@ -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;
@ -52,11 +54,8 @@ import com.owncloud.android.ui.activity.FailedUploadActivity;
import com.owncloud.android.ui.activity.FileActivity;
import com.owncloud.android.ui.activity.FileDisplayActivity;
import com.owncloud.android.ui.activity.InstantUploadActivity;
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.AccountManager;
@ -725,48 +724,15 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
*/
private void notifyUploadResult(RemoteOperationResult uploadResult, UploadFileOperation upload) {
Log_OC.d(TAG, "NotifyUploadResult with resultCode: " + uploadResult.getCode());
if (uploadResult.isCancelled()) {
// / cancelled operation -> silent removal of progress notification
// / cancelled operation or success -> silent removal of progress notification
mNotificationManager.cancel(R.string.uploader_upload_in_progress_ticker);
} else if (uploadResult.isSuccess()) {
// / success -> silent update of progress notification to success
// message
mNotificationBuilder
.setOngoing(false)
.setAutoCancel(true)
.setProgress(0, 0, false);
// Show the result: success or fail notification
if (!uploadResult.isCancelled()) {
int tickerId = (uploadResult.isSuccess()) ? R.string.uploader_upload_succeeded_ticker :
R.string.uploader_upload_failed_ticker;
/// includes a pending intent in the notification showing the details view of the file
Intent showDetailsIntent = null;
if (PreviewImageFragment.canBePreviewed(upload.getFile())) {
showDetailsIntent = new Intent(this, PreviewImageActivity.class);
} else {
showDetailsIntent = new Intent(this, FileDisplayActivity.class);
}
showDetailsIntent.putExtra(FileActivity.EXTRA_FILE, upload.getFile());
showDetailsIntent.putExtra(FileActivity.EXTRA_ACCOUNT, upload.getAccount());
showDetailsIntent.putExtra(FileActivity.EXTRA_FROM_NOTIFICATION, true);;
mNotificationBuilder
.setContentIntent(PendingIntent.getActivity(
this, (int) System.currentTimeMillis(), showDetailsIntent, 0
))
.setTicker(getString(R.string.uploader_upload_succeeded_ticker))
.setContentTitle(getString(R.string.uploader_upload_succeeded_ticker))
.setContentText(ErrorMessageAdapter.getErrorCauseMessage(uploadResult, upload, getResources()));
mNotificationManager.notify(R.string.uploader_upload_in_progress_ticker, mNotificationBuilder.build()); // NOT
// AN
DbHandler db = new DbHandler(this.getBaseContext());
db.removeIUPendingFile(mCurrentUpload.getOriginalStoragePath());
db.close();
} else {
// / fail -> explicit failure notification
mNotificationManager.cancel(R.string.uploader_upload_in_progress_ticker);
NotificationCompat.Builder errorBuilder = new NotificationCompat.Builder(this);
NotificationCompat.Builder resultBuilder = new NotificationCompat.Builder(this);
String content = null;
@ -774,10 +740,10 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
boolean needsToUpdateCredentials = (uploadResult.getCode() == ResultCode.UNAUTHORIZED ||
(uploadResult.isIdPRedirection() &&
mUploadClient.getCredentials() == null));
int tickerId = (needsToUpdateCredentials) ?
R.string.uploader_upload_failed_credentials_error : R.string.uploader_upload_failed_ticker;
tickerId = (needsToUpdateCredentials) ?
R.string.uploader_upload_failed_credentials_error : tickerId;
errorBuilder
resultBuilder
.setSmallIcon(R.drawable.notification_icon)
.setTicker(getString(tickerId))
.setContentTitle(getString(tickerId))
@ -793,7 +759,7 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
updateAccountCredentials.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
updateAccountCredentials.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
updateAccountCredentials.addFlags(Intent.FLAG_FROM_BACKGROUND);
errorBuilder.setContentIntent(PendingIntent.getActivity(
resultBuilder.setContentIntent(PendingIntent.getActivity(
this, (int) System.currentTimeMillis(), updateAccountCredentials, PendingIntent.FLAG_ONE_SHOT
));
@ -811,7 +777,7 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
detailUploadIntent = new Intent(this, FailedUploadActivity.class);
detailUploadIntent.putExtra(FailedUploadActivity.MESSAGE, content);
}
errorBuilder
resultBuilder
.setContentIntent(PendingIntent.getActivity(
this, (int) System.currentTimeMillis(), detailUploadIntent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_ONE_SHOT
))
@ -838,10 +804,23 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
}
}
errorBuilder.setContentText(content);
mNotificationManager.notify(tickerId, errorBuilder.build());
}
resultBuilder.setContentText(content);
mNotificationManager.notify(tickerId, resultBuilder.build());
if (uploadResult.isSuccess()) {
DbHandler db = new DbHandler(this.getBaseContext());
db.removeIUPendingFile(mCurrentUpload.getOriginalStoragePath());
db.close();
// remove success notification, with a delay of 2 seconds
NotificationDelayer.cancelWithDelay(
mNotificationManager,
R.string.uploader_upload_succeeded_ticker,
2000);
}
}
}
/**

View file

@ -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;
}
}

View file

@ -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().quit();
}
}, delayInMillis);
}
}