Skip to content

Commit 88fa3e4

Browse files
VitalyVPinchukashishkumar468
authored andcommitted
Get rid of HandlerService commons-app#3555 (commons-app#3671)
* [WIP] Removed HandlerService * [WIP] Added PublishProcessor for managing queue * Resolved conflicts after merge
1 parent 96d3723 commit 88fa3e4

File tree

4 files changed

+48
-56
lines changed

4 files changed

+48
-56
lines changed

app/src/main/java/fr/free/nrw/commons/contributions/ContributionsFragment.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import androidx.fragment.app.FragmentTransaction;
2525
import butterknife.BindView;
2626
import butterknife.ButterKnife;
27-
import fr.free.nrw.commons.HandlerService;
2827
import fr.free.nrw.commons.Media;
2928
import fr.free.nrw.commons.R;
3029
import fr.free.nrw.commons.campaigns.Campaign;
@@ -102,7 +101,7 @@ public class ContributionsFragment
102101
private ServiceConnection uploadServiceConnection = new ServiceConnection() {
103102
@Override
104103
public void onServiceConnected(ComponentName componentName, IBinder binder) {
105-
uploadService = (UploadService) ((HandlerService.HandlerServiceLocalBinder) binder)
104+
uploadService = (UploadService) ((UploadService.UploadServiceLocalBinder) binder)
106105
.getService();
107106
isUploadServiceConnected = true;
108107
}
@@ -587,7 +586,7 @@ public void showContributions(List<Contribution> contributionList) {
587586
private void retryUpload(Contribution contribution) {
588587
if (NetworkUtils.isInternetConnectionEstablished(getContext())) {
589588
if (contribution.getState() == STATE_FAILED && null != uploadService) {
590-
uploadService.queue(UploadService.ACTION_UPLOAD_FILE, contribution);
589+
uploadService.queue(contribution);
591590
Timber.d("Restarting for %s", contribution.toString());
592591
} else {
593592
Timber.d("Skipping re-upload for non-failed %s", contribution.toString());

app/src/main/java/fr/free/nrw/commons/upload/UploadController.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import android.os.IBinder;
1414
import android.provider.MediaStore;
1515
import android.text.TextUtils;
16-
import fr.free.nrw.commons.HandlerService;
1716
import fr.free.nrw.commons.Media;
1817
import fr.free.nrw.commons.R;
1918
import fr.free.nrw.commons.auth.SessionManager;
@@ -54,7 +53,7 @@ public UploadController(final SessionManager sessionManager,
5453
public ServiceConnection uploadServiceConnection = new ServiceConnection() {
5554
@Override
5655
public void onServiceConnected(final ComponentName componentName, final IBinder binder) {
57-
uploadService = (UploadService) ((HandlerService.HandlerServiceLocalBinder) binder).getService();
56+
uploadService = ((UploadService.UploadServiceLocalBinder) binder).getService();
5857
isUploadServiceConnected = true;
5958
}
6059

@@ -208,7 +207,7 @@ private Cursor dateTakenCursor(final ContentResolver contentResolver, final Medi
208207
*/
209208
private void upload(final Contribution contribution) {
210209
//Starts the upload. If commented out, user can proceed to next Fragment but upload doesn't happen
211-
uploadService.queue(UploadService.ACTION_UPLOAD_FILE, contribution);
210+
uploadService.queue(contribution);
212211
}
213212

214213

app/src/main/java/fr/free/nrw/commons/upload/UploadService.java

Lines changed: 42 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,27 @@
66
import android.content.Intent;
77
import android.graphics.BitmapFactory;
88
import android.net.Uri;
9+
import android.os.Binder;
910
import android.os.Bundle;
11+
import android.os.IBinder;
1012
import androidx.core.app.NotificationCompat;
1113
import androidx.core.app.NotificationManagerCompat;
1214
import fr.free.nrw.commons.BuildConfig;
1315
import fr.free.nrw.commons.CommonsApplication;
14-
import fr.free.nrw.commons.HandlerService;
1516
import fr.free.nrw.commons.R;
1617
import fr.free.nrw.commons.auth.SessionManager;
1718
import fr.free.nrw.commons.contributions.Contribution;
1819
import fr.free.nrw.commons.contributions.ContributionDao;
1920
import fr.free.nrw.commons.contributions.MainActivity;
2021
import fr.free.nrw.commons.di.CommonsApplicationModule;
22+
import fr.free.nrw.commons.di.CommonsDaggerService;
2123
import fr.free.nrw.commons.media.MediaClient;
2224
import fr.free.nrw.commons.utils.CommonsDateUtil;
2325
import fr.free.nrw.commons.wikidata.WikidataEditService;
2426
import io.reactivex.Observable;
2527
import io.reactivex.Scheduler;
2628
import io.reactivex.disposables.CompositeDisposable;
29+
import io.reactivex.processors.PublishProcessor;
2730
import io.reactivex.schedulers.Schedulers;
2831
import java.io.File;
2932
import java.io.IOException;
@@ -36,12 +39,10 @@
3639
import javax.inject.Named;
3740
import timber.log.Timber;
3841

39-
public class UploadService extends HandlerService<Contribution> {
42+
public class UploadService extends CommonsDaggerService {
4043

4144
private static final String EXTRA_PREFIX = "fr.free.nrw.commons.upload";
4245

43-
public static final int ACTION_UPLOAD_FILE = 1;
44-
4546
public static final String ACTION_START_SERVICE = EXTRA_PREFIX + ".upload";
4647
public static final String EXTRA_FILES = EXTRA_PREFIX + ".files";
4748
@Inject WikidataEditService wikidataEditService;
@@ -72,10 +73,6 @@ public class UploadService extends HandlerService<Contribution> {
7273
public static final int NOTIFICATION_UPLOAD_IN_PROGRESS = 1;
7374
public static final int NOTIFICATION_UPLOAD_FAILED = 3;
7475

75-
public UploadService() {
76-
super("UploadService");
77-
}
78-
7976
protected class NotificationUpdateProgressListener{
8077

8178
String notificationTag;
@@ -124,55 +121,57 @@ public void onDestroy() {
124121
Timber.d("UploadService.onDestroy; %s are yet to be uploaded", unfinishedUploads);
125122
}
126123

124+
public class UploadServiceLocalBinder extends Binder {
125+
public UploadService getService() {
126+
return UploadService.this;
127+
}
128+
}
129+
130+
private final IBinder localBinder = new UploadServiceLocalBinder();
131+
132+
private PublishProcessor<Contribution> contributionsToUpload;
133+
134+
@Override
135+
public IBinder onBind(Intent intent) {
136+
return localBinder;
137+
}
138+
127139
@Override
128140
public void onCreate() {
129141
super.onCreate();
130142
CommonsApplication.createNotificationChannel(getApplicationContext());
131143
compositeDisposable = new CompositeDisposable();
132144
notificationManager = NotificationManagerCompat.from(this);
133145
curNotification = getNotificationBuilder(CommonsApplication.NOTIFICATION_CHANNEL_ID_ALL);
146+
contributionsToUpload = PublishProcessor.create();
147+
compositeDisposable.add(contributionsToUpload.subscribe(this::handleUpload));
134148
}
135149

136-
@Override
137-
protected void handle(int what, Contribution contribution) {
138-
switch (what) {
139-
case ACTION_UPLOAD_FILE:
140-
uploadContribution(contribution);
141-
break;
142-
default:
143-
throw new IllegalArgumentException("Unknown value for what");
144-
}
145-
}
146-
147-
@Override
148-
public void queue(int what, Contribution contribution) {
149-
switch (what) {
150-
case ACTION_UPLOAD_FILE:
151-
152-
contribution.setState(Contribution.STATE_QUEUED);
153-
contribution.setTransferred(0);
154-
toUpload++;
155-
if (curNotification != null && toUpload != 1) {
156-
curNotification.setContentText(getResources().getQuantityString(R.plurals.uploads_pending_notification_indicator, toUpload, toUpload));
157-
Timber.d("%d uploads left", toUpload);
158-
notificationManager.notify(contribution.getLocalUri().toString(), NOTIFICATION_UPLOAD_IN_PROGRESS, curNotification.build());
159-
}
160-
compositeDisposable.add(contributionDao
161-
.save(contribution)
162-
.subscribeOn(ioThreadScheduler)
163-
.observeOn(mainThreadScheduler)
164-
.subscribe(aLong->{
165-
contribution.set_id(aLong);
166-
UploadService.super.queue(what, contribution);
167-
}, Throwable::printStackTrace));
168-
break;
169-
default:
170-
throw new IllegalArgumentException("Unknown value for what");
150+
public void handleUpload(Contribution contribution) {
151+
contribution.setState(Contribution.STATE_QUEUED);
152+
contribution.setTransferred(0);
153+
toUpload++;
154+
if (curNotification != null && toUpload != 1) {
155+
curNotification.setContentText(getResources().getQuantityString(R.plurals.uploads_pending_notification_indicator, toUpload, toUpload));
156+
Timber.d("%d uploads left", toUpload);
157+
notificationManager.notify(contribution.getLocalUri().toString(), NOTIFICATION_UPLOAD_IN_PROGRESS, curNotification.build());
171158
}
159+
compositeDisposable.add(contributionDao
160+
.save(contribution)
161+
.subscribeOn(ioThreadScheduler)
162+
.observeOn(mainThreadScheduler)
163+
.subscribe(aLong->{
164+
contribution.set_id(aLong);
165+
uploadContribution(contribution);
166+
}, Throwable::printStackTrace));
172167
}
173168

174169
private boolean freshStart = true;
175170

171+
public void queue(Contribution contribution) {
172+
contributionsToUpload.offer(contribution);
173+
}
174+
176175
@Override
177176
public int onStartCommand(Intent intent, int flags, int startId) {
178177
if (ACTION_START_SERVICE.equals(intent.getAction()) && freshStart) {

app/src/test/kotlin/fr/free/nrw/commons/upload/UploadControllerTest.kt

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@ package fr.free.nrw.commons.upload
22

33
import android.content.ComponentName
44
import android.content.Context
5-
import com.nhaarman.mockitokotlin2.mock
6-
import com.nhaarman.mockitokotlin2.whenever
7-
import fr.free.nrw.commons.Media
85
import fr.free.nrw.commons.auth.SessionManager
96
import fr.free.nrw.commons.contributions.Contribution
107
import fr.free.nrw.commons.kvstore.JsonKvStore
@@ -50,9 +47,7 @@ class UploadControllerTest {
5047
@Test
5148
fun startUpload() {
5249
val contribution = mock(Contribution::class.java)
53-
val media = mock<Media>()
54-
whenever(contribution.media).thenReturn(media)
55-
whenever(media.creator).thenReturn("Creator")
50+
`when`(contribution.getCreator()).thenReturn("Creator")
5651
uploadController!!.startUpload(contribution)
5752
}
58-
}
53+
}

0 commit comments

Comments
 (0)