Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

With lazy loading of contributions #3566

Merged
merged 48 commits into from
May 28, 2020
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
3adf1e3
With lazy loading of contributions
maskaravivek Mar 23, 2020
27a8352
With contribution fetch
maskaravivek Mar 23, 2020
0537470
fix display of contributions
maskaravivek Apr 16, 2020
5dd362c
more changes
maskaravivek Apr 17, 2020
b9ed4e5
Bugfix/contributions pagination (#5)
ashishkumar468 Apr 20, 2020
6e3c61a
Merge branch 'master' into lazyContributions
maskaravivek Apr 20, 2020
d0b127b
Merge branch 'lazyContributions' of https://github.com/maskaravivek/a…
maskaravivek Apr 20, 2020
25884ca
Merge branch 'master' into lazyContributions
maskaravivek Apr 21, 2020
2c1e271
Fix build
maskaravivek Apr 21, 2020
1e12d31
minor fixes
maskaravivek Apr 21, 2020
22fd8e9
Delete and save contribution with correct pageid when upload succeeds
maskaravivek Apr 23, 2020
854ab5c
Merge branch 'master' into lazyContributions
maskaravivek Apr 26, 2020
5d2216b
fix build
maskaravivek Apr 26, 2020
da1b3cc
Code review comments
maskaravivek May 7, 2020
e93e491
With paging library added
maskaravivek May 7, 2020
d2f9029
Address code review comments
maskaravivek May 7, 2020
6c54e35
Add boundary callback
maskaravivek May 8, 2020
8d62704
Minor changes
maskaravivek May 8, 2020
26cf097
Minor changes
maskaravivek May 9, 2020
abba64d
Merge branch 'master' into lazyContributions
maskaravivek May 9, 2020
971cb29
Minor fixes
maskaravivek May 9, 2020
050dd87
Fix test case
maskaravivek May 9, 2020
5f32477
Minor
maskaravivek May 9, 2020
6ba2736
update saved state
maskaravivek May 9, 2020
3fb265a
Fix test
maskaravivek May 10, 2020
def6ecc
With more test cases
maskaravivek May 10, 2020
34bd6f6
With java docs
maskaravivek May 10, 2020
0842da7
With code review comments
maskaravivek May 11, 2020
ee70c21
With build fix
maskaravivek May 11, 2020
ab97455
Minor changes
maskaravivek May 12, 2020
aa88926
Merge branch 'master' into lazyContributions
maskaravivek May 12, 2020
d23115b
Address code review comments
maskaravivek May 13, 2020
85f48a9
Minor
maskaravivek May 14, 2020
bb4f91c
Use ktx library
maskaravivek May 14, 2020
edb828e
Fix loading of contributions on upload
maskaravivek May 14, 2020
ee6f5bf
Merge branch 'master' into lazyContributions
maskaravivek May 20, 2020
e1e761b
Fix test
maskaravivek May 20, 2020
193ed2a
Merge branch 'lazyContributions' of github.com:maskaravivek/apps-andr…
maskaravivek May 20, 2020
9ca4662
Handle end of list for user media
maskaravivek May 20, 2020
66ec641
Init continuation exists
maskaravivek May 21, 2020
cf0393c
More changes
maskaravivek May 24, 2020
6b7ac2b
Fix minor UI issues
maskaravivek May 26, 2020
a4dfc1d
Merge branch 'master' into lazyContributions
maskaravivek May 26, 2020
92336f5
With minor
maskaravivek May 26, 2020
3260bc7
Fix test
maskaravivek May 26, 2020
ac2898b
Replace direct scheduler with completable
maskaravivek May 26, 2020
2eb67c5
Fix code review comments
maskaravivek May 27, 2020
5f12c5f
Merge branch 'master' into lazyContributions
maskaravivek May 27, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@
import androidx.room.Update;
import io.reactivex.Completable;
import io.reactivex.Single;
import io.reactivex.functions.Action;
import java.util.List;
import java.util.concurrent.Callable;

@Dao
public abstract class ContributionDao {
Expand All @@ -20,20 +22,36 @@ public abstract class ContributionDao {
abstract DataSource.Factory<Integer, Contribution> fetchContributions();

@Insert(onConflict = OnConflictStrategy.REPLACE)
public abstract void save(Contribution contribution);
public abstract void saveSyncronous(Contribution contribution);
macgills marked this conversation as resolved.
Show resolved Hide resolved

public Completable save(final Contribution contribution) {
return Completable
.fromAction(() -> saveSyncronous(contribution));
}

@Transaction
public void deleteAndSaveContribution(final Contribution oldContribution,
final Contribution newContribution) {
delete(oldContribution);
save(newContribution);
deleteSyncronous(oldContribution);
saveSyncronous(newContribution);
}

public Completable saveAndDelete(final Contribution oldContribution,
final Contribution newContribution) {
return Completable
.fromAction(() -> deleteAndSaveContribution(oldContribution, newContribution));
}

@Insert(onConflict = OnConflictStrategy.REPLACE)
public abstract Single<List<Long>> save(List<Contribution> contribution);

@Delete
public abstract void delete(Contribution contribution);
public abstract void deleteSyncronous(Contribution contribution);

public Completable delete(final Contribution contribution) {
return Completable
.fromAction(() -> deleteSyncronous(contribution));
}

@Query("SELECT * from contribution WHERE filename=:fileName")
public abstract List<Contribution> getContributionWithTitle(String fileName);
Expand All @@ -45,5 +63,10 @@ public void deleteAndSaveContribution(final Contribution oldContribution,
public abstract void deleteAll();

@Update
public abstract void update(Contribution contribution);
public abstract void updateSyncronous(Contribution contribution);

public Completable update(final Contribution contribution) {
return Completable
.fromAction(() -> updateSyncronous(contribution));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,9 @@ public void onAttachView(final ContributionsListContract.View view) {
}

/**
* Setup the paged list.
* This method sets the configuration for paged list and ties it up with the live data object.
* This method can be tweaked to update the lazy loading behavior of the contributions list
* Setup the paged list. This method sets the configuration for paged list and ties it up with the
* live data object. This method can be tweaked to update the lazy loading behavior of the
* contributions list
*/
void setup() {
final PagedList.Config pagedListConfig =
Expand All @@ -62,7 +62,10 @@ public void onDetachView() {
*/
@Override
public void deleteUpload(final Contribution contribution) {
ioThreadScheduler.scheduleDirect(() -> repository.deleteContributionFromDB(contribution));
compositeDisposable.add(repository
.deleteContributionFromDB(contribution)
.subscribeOn(ioThreadScheduler)
.subscribe());
}

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package fr.free.nrw.commons.contributions;

import androidx.paging.DataSource.Factory;
import io.reactivex.Completable;
import java.util.List;

import javax.inject.Inject;
Expand Down Expand Up @@ -57,8 +58,8 @@ public Contribution getContributionWithFileName(String uri) {
* @param contribution
* @return
*/
public void deleteContribution(Contribution contribution) {
contributionDao.delete(contribution);
public Completable deleteContribution(Contribution contribution) {
return contributionDao.delete(contribution);
}

public Factory<Integer, Contribution> getContributions() {
Expand All @@ -73,7 +74,7 @@ public void set(String key, long value) {
defaultKVStore.putLong(key,value);
}

public void updateContribution(Contribution contribution) {
contributionDao.update(contribution);
public Completable updateContribution(Contribution contribution) {
return contributionDao.update(contribution);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -72,12 +72,18 @@ public Contribution getContributionsWithTitle(String title) {
*/
@Override
public void deleteUpload(Contribution contribution) {
ioThreadScheduler.scheduleDirect(() -> repository.deleteContributionFromDB(contribution));
compositeDisposable.add(repository
.deleteContributionFromDB(contribution)
.subscribeOn(ioThreadScheduler)
.subscribe());
}

@Override
public void updateContribution(Contribution contribution) {
ioThreadScheduler.scheduleDirect(() -> repository.updateContribution(contribution));
compositeDisposable.add(repository
.updateContribution(contribution)
.subscribeOn(ioThreadScheduler)
.subscribe());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package fr.free.nrw.commons.contributions;

import androidx.paging.DataSource.Factory;
import io.reactivex.Completable;
import java.util.List;

import javax.inject.Inject;
Expand Down Expand Up @@ -31,8 +32,8 @@ public String getString(String key) {
* @param contribution
* @return
*/
public void deleteContributionFromDB(Contribution contribution) {
localDataSource.deleteContribution(contribution);
public Completable deleteContributionFromDB(Contribution contribution) {
return localDataSource.deleteContribution(contribution);
}

/**
Expand All @@ -56,7 +57,7 @@ public void set(String key, long value) {
localDataSource.set(key,value);
}

public void updateContribution(Contribution contribution) {
localDataSource.updateContribution(contribution);
public Completable updateContribution(Contribution contribution) {
return localDataSource.updateContribution(contribution);
}
}
24 changes: 13 additions & 11 deletions app/src/main/java/fr/free/nrw/commons/upload/UploadService.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import io.reactivex.Single;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Action;
import io.reactivex.functions.Consumer;
import io.reactivex.processors.PublishProcessor;
import io.reactivex.schedulers.Schedulers;
Expand Down Expand Up @@ -112,9 +113,9 @@ public void onProgress(long transferred, long total) {

contribution.setTransferred(transferred);

ioThreadScheduler.scheduleDirect(() -> {
contributionDao.update(contribution);
});
compositeDisposable.add(contributionDao.update(contribution)
.subscribeOn(ioThreadScheduler)
.subscribe());
}

}
Expand Down Expand Up @@ -162,10 +163,10 @@ public void handleUpload(Contribution contribution) {
notificationManager.notify(contribution.getLocalUri().toString(), NOTIFICATION_UPLOAD_IN_PROGRESS, curNotification.build());
}

ioThreadScheduler.scheduleDirect(() -> {
contributionDao.save(contribution);
uploadContribution(contribution);
});
compositeDisposable.add(contributionDao
.save(contribution)
.subscribeOn(ioThreadScheduler)
.subscribe(() -> uploadContribution(contribution)));
}

private boolean freshStart = true;
Expand Down Expand Up @@ -297,7 +298,7 @@ private void onSuccessfulUpload(Contribution contribution, UploadResult uploadRe
private void saveCompletedContribution(Contribution contribution, UploadResult uploadResult) {
compositeDisposable.add(mediaClient.getMedia("File:" + uploadResult.getFilename())
.map(media -> new Contribution(media, Contribution.STATE_COMPLETED))
.subscribe(newContribution -> contributionDao.deleteAndSaveContribution(contribution, newContribution)));
.subscribe(newContribution -> contributionDao.saveAndDelete(contribution, newContribution)));
macgills marked this conversation as resolved.
Show resolved Hide resolved
}

@SuppressLint("StringFormatInvalid")
Expand All @@ -312,9 +313,10 @@ private void showFailedNotification(Contribution contribution) {

contribution.setState(Contribution.STATE_FAILED);

ioThreadScheduler.scheduleDirect(() -> {
contributionDao.update(contribution);
});
compositeDisposable.add(contributionDao
.update(contribution)
.subscribeOn(ioThreadScheduler)
.subscribe());
}

private String findUniqueFilename(String fileName) throws IOException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import com.nhaarman.mockitokotlin2.whenever
import fr.free.nrw.commons.Media
import fr.free.nrw.commons.auth.SessionManager
import fr.free.nrw.commons.media.MediaClient
import io.reactivex.Completable
import io.reactivex.Scheduler
import io.reactivex.Single
import io.reactivex.schedulers.Schedulers
Expand Down Expand Up @@ -53,6 +54,8 @@ class ContributionsListPresenterTest {

@Test
fun testDeleteUpload() {
whenever(repository.deleteContributionFromDB(any<Contribution>()))
.thenReturn(Completable.complete())
contributionsListPresenter.deleteUpload(mock(Contribution::class.java))
verify(repository, times(1))
.deleteContributionFromDB(ArgumentMatchers.any(Contribution::class.java));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,19 @@ import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.loader.content.CursorLoader
import androidx.loader.content.Loader
import com.nhaarman.mockitokotlin2.any
import com.nhaarman.mockitokotlin2.mock
import com.nhaarman.mockitokotlin2.verify
import com.nhaarman.mockitokotlin2.whenever
import io.reactivex.Completable
import io.reactivex.Scheduler
import io.reactivex.Single
import io.reactivex.schedulers.TestScheduler
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.mockito.ArgumentMatchers
import org.mockito.ArgumentMatchers.*
import org.mockito.Mock
import org.mockito.Mockito
import org.mockito.MockitoAnnotations
Expand Down Expand Up @@ -66,8 +69,9 @@ class ContributionsPresenterTest {
*/
@Test
fun testDeleteContribution() {
whenever(repository.deleteContributionFromDB(ArgumentMatchers.any<Contribution>()))
.thenReturn(Completable.complete())
contributionsPresenter.deleteUpload(contribution)
scheduler.advanceTimeBy(1000, TimeUnit.MILLISECONDS)
verify(repository).deleteContributionFromDB(contribution)
}

Expand Down