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.network.OnDatatransferProgressListener;
import com.owncloud.android.lib.common.OwnCloudClientFactory; import com.owncloud.android.lib.common.OwnCloudClientFactory;
import com.owncloud.android.lib.common.OwnCloudClient; 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.operations.DownloadFileOperation;
import com.owncloud.android.lib.common.operations.RemoteOperationResult; import com.owncloud.android.lib.common.operations.RemoteOperationResult;
import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; 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.ui.preview.PreviewImageFragment;
import com.owncloud.android.utils.ErrorMessageAdapter; import com.owncloud.android.utils.ErrorMessageAdapter;
import com.owncloud.android.utils.Log_OC; import com.owncloud.android.utils.Log_OC;
import com.owncloud.android.utils.NotificationBuilderWithProgressBar;
import android.accounts.Account; import android.accounts.Account;
import android.accounts.AccountsException; import android.accounts.AccountsException;
@ -494,29 +495,25 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis
mDownloadClient = null; // grant that future retries on the same account will get the fresh credentials mDownloadClient = null; // grant that future retries on the same account will get the fresh credentials
} else { } else {
Intent showDetailsIntent = null; // TODO put something smart in showDetailsIntent
if (downloadResult.isSuccess()) { Intent showDetailsIntent = new Intent();
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();
}
mNotificationBuilder mNotificationBuilder
.setContentIntent(PendingIntent.getActivity( .setContentIntent(PendingIntent.getActivity(
this, (int) System.currentTimeMillis(), showDetailsIntent, 0)); this, (int) System.currentTimeMillis(), showDetailsIntent, 0));
} }
mNotificationBuilder.setContentText(ErrorMessageAdapter.getErrorCauseMessage(downloadResult, download, getResources())); mNotificationBuilder.setContentText(ErrorMessageAdapter.getErrorCauseMessage(downloadResult, download, getResources()));
mNotificationManager.notify(tickerId, mNotificationBuilder.build()); 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.FileDataStorageManager;
import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.db.DbHandler; 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.operations.CreateFolderOperation;
import com.owncloud.android.lib.resources.files.RemoteFile; import com.owncloud.android.lib.resources.files.RemoteFile;
import com.owncloud.android.lib.common.operations.RemoteOperation; 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.FileActivity;
import com.owncloud.android.ui.activity.FileDisplayActivity; import com.owncloud.android.ui.activity.FileDisplayActivity;
import com.owncloud.android.ui.activity.InstantUploadActivity; 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.ErrorMessageAdapter;
import com.owncloud.android.utils.Log_OC; import com.owncloud.android.utils.Log_OC;
import com.owncloud.android.utils.NotificationBuilderWithProgressBar;
import android.accounts.Account; import android.accounts.Account;
import android.accounts.AccountManager; import android.accounts.AccountManager;
@ -725,48 +724,15 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
*/ */
private void notifyUploadResult(RemoteOperationResult uploadResult, UploadFileOperation upload) { private void notifyUploadResult(RemoteOperationResult uploadResult, UploadFileOperation upload) {
Log_OC.d(TAG, "NotifyUploadResult with resultCode: " + uploadResult.getCode()); Log_OC.d(TAG, "NotifyUploadResult with resultCode: " + uploadResult.getCode());
if (uploadResult.isCancelled()) { // / cancelled operation or success -> silent removal of progress notification
// / cancelled operation -> silent removal of progress notification mNotificationManager.cancel(R.string.uploader_upload_in_progress_ticker);
mNotificationManager.cancel(R.string.uploader_upload_in_progress_ticker);
// Show the result: success or fail notification
} else if (uploadResult.isSuccess()) { if (!uploadResult.isCancelled()) {
// / success -> silent update of progress notification to success int tickerId = (uploadResult.isSuccess()) ? R.string.uploader_upload_succeeded_ticker :
// message R.string.uploader_upload_failed_ticker;
mNotificationBuilder
.setOngoing(false)
.setAutoCancel(true)
.setProgress(0, 0, false);
/// includes a pending intent in the notification showing the details view of the file NotificationCompat.Builder resultBuilder = new NotificationCompat.Builder(this);
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);
String content = null; String content = null;
@ -774,10 +740,10 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
boolean needsToUpdateCredentials = (uploadResult.getCode() == ResultCode.UNAUTHORIZED || boolean needsToUpdateCredentials = (uploadResult.getCode() == ResultCode.UNAUTHORIZED ||
(uploadResult.isIdPRedirection() && (uploadResult.isIdPRedirection() &&
mUploadClient.getCredentials() == null)); mUploadClient.getCredentials() == null));
int tickerId = (needsToUpdateCredentials) ? tickerId = (needsToUpdateCredentials) ?
R.string.uploader_upload_failed_credentials_error : R.string.uploader_upload_failed_ticker; R.string.uploader_upload_failed_credentials_error : tickerId;
errorBuilder resultBuilder
.setSmallIcon(R.drawable.notification_icon) .setSmallIcon(R.drawable.notification_icon)
.setTicker(getString(tickerId)) .setTicker(getString(tickerId))
.setContentTitle(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_NEW_TASK);
updateAccountCredentials.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); updateAccountCredentials.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
updateAccountCredentials.addFlags(Intent.FLAG_FROM_BACKGROUND); updateAccountCredentials.addFlags(Intent.FLAG_FROM_BACKGROUND);
errorBuilder.setContentIntent(PendingIntent.getActivity( resultBuilder.setContentIntent(PendingIntent.getActivity(
this, (int) System.currentTimeMillis(), updateAccountCredentials, PendingIntent.FLAG_ONE_SHOT 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 = new Intent(this, FailedUploadActivity.class);
detailUploadIntent.putExtra(FailedUploadActivity.MESSAGE, content); detailUploadIntent.putExtra(FailedUploadActivity.MESSAGE, content);
} }
errorBuilder resultBuilder
.setContentIntent(PendingIntent.getActivity( .setContentIntent(PendingIntent.getActivity(
this, (int) System.currentTimeMillis(), detailUploadIntent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_ONE_SHOT 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); resultBuilder.setContentText(content);
mNotificationManager.notify(tickerId, errorBuilder.build()); 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 com.owncloud.android.R;
import android.app.Notification; import android.app.Notification;
import android.app.NotificationManager;
import android.content.Context; import android.content.Context;
import android.os.Build; import android.os.Build;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Process;
import android.support.v4.app.NotificationCompat; import android.support.v4.app.NotificationCompat;
import android.view.View; import android.view.View;
import android.widget.RemoteViews; import android.widget.RemoteViews;
@ -128,4 +132,5 @@ public class NotificationBuilderWithProgressBar extends NotificationCompat.Build
return result; 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);
}
}