From 5c6e777b37744e67b9b2418f9c17a5a2acb10adb Mon Sep 17 00:00:00 2001 From: Vivek Maskara Date: Mon, 14 Dec 2020 05:55:17 -0700 Subject: [PATCH] Fix issue where upload notification shows up on app start (#4099) --- .../contributions/ContributionDao.java | 3 ++ .../nrw/commons/upload/UploadService.java | 32 +++++++++++++------ 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionDao.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionDao.java index 437521b76..7aeb7558b 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionDao.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionDao.java @@ -68,6 +68,9 @@ public abstract class ContributionDao { @Query("UPDATE contribution SET state=:state WHERE state in (:toUpdateStates)") public abstract Single updateStates(int state, int[] toUpdateStates); + @Query("SELECT COUNT(*) from contribution WHERE state in (:toUpdateStates)") + public abstract Single getPendingUploads(int[] toUpdateStates); + @Query("Delete FROM contribution") public abstract void deleteAll() throws SQLiteException; diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadService.java b/app/src/main/java/fr/free/nrw/commons/upload/UploadService.java index c842a5923..9feb96a06 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadService.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadService.java @@ -224,8 +224,7 @@ public class UploadService extends CommonsDaggerService { @Override public int onStartCommand(Intent intent, int flags, int startId) { - startForeground(NOTIFICATION_UPLOAD_IN_PROGRESS, - curNotification.setContentText(getText(R.string.starting_uploads)).build()); + showUploadNotification(); if (ACTION_START_SERVICE.equals(intent.getAction()) && freshStart) { compositeDisposable.add(contributionDao.updateStates(Contribution.STATE_FAILED, new int[]{Contribution.STATE_QUEUED, Contribution.STATE_IN_PROGRESS}) @@ -234,19 +233,32 @@ public class UploadService extends CommonsDaggerService { .subscribe()); freshStart = false; } else if (PROCESS_PENDING_LIMITED_CONNECTION_MODE_UPLOADS.equals(intent.getAction())) { - contributionDao.getContribution(Contribution.STATE_QUEUED_LIMITED_CONNECTION_MODE) - .flatMapObservable( - (Function, ObservableSource>) contributions -> Observable.fromIterable(contributions)) - .concatMapCompletable(contribution -> Completable.fromAction(() -> queue(contribution))) - .subscribeOn(ioThreadScheduler) - .subscribe(); - } + contributionDao.getContribution(Contribution.STATE_QUEUED_LIMITED_CONNECTION_MODE) + .flatMapObservable( + (Function, ObservableSource>) contributions -> Observable + .fromIterable(contributions)) + .concatMapCompletable(contribution -> Completable.fromAction(() -> queue(contribution))) + .subscribeOn(ioThreadScheduler) + .subscribe(); + } return START_REDELIVER_INTENT; } + private void showUploadNotification() { + compositeDisposable.add(contributionDao + .getPendingUploads(new int[]{Contribution.STATE_IN_PROGRESS, Contribution.STATE_QUEUED}) + .subscribe(count -> { + if (count > 0) { + startForeground(NOTIFICATION_UPLOAD_IN_PROGRESS, + curNotification.setContentText(getText(R.string.starting_uploads)).build()); + } + })); + } + @SuppressLint("StringFormatInvalid") private NotificationCompat.Builder getNotificationBuilder(String channelId) { - return new NotificationCompat.Builder(this, channelId).setAutoCancel(true) + return new NotificationCompat.Builder(this, channelId) + .setAutoCancel(true) .setSmallIcon(R.drawable.ic_launcher) .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher)) .setAutoCancel(true)