mirror of
https://github.com/nextcloud/android.git
synced 2024-11-28 02:17:43 +03:00
Merge pull request #508 from owncloud/vanish_notifications
Vanish succesful notifications
This commit is contained in:
commit
cc7366348d
4 changed files with 84 additions and 70 deletions
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
|
||||||
|
|
||||||
} else if (uploadResult.isSuccess()) {
|
// Show the result: success or fail notification
|
||||||
// / success -> silent update of progress notification to success
|
if (!uploadResult.isCancelled()) {
|
||||||
// message
|
int tickerId = (uploadResult.isSuccess()) ? R.string.uploader_upload_succeeded_ticker :
|
||||||
mNotificationBuilder
|
R.string.uploader_upload_failed_ticker;
|
||||||
.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);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in a new issue