Injected the ModifierSequenceDao where needed.

This commit is contained in:
Paul Hawke 2018-01-05 13:01:20 -06:00
parent 9927879680
commit 874627e3f5
9 changed files with 49 additions and 32 deletions

View file

@ -14,7 +14,7 @@ import static android.accounts.AccountManager.ERROR_CODE_REMOTE_EXCEPTION;
import static android.accounts.AccountManager.KEY_ACCOUNT_NAME;
import static android.accounts.AccountManager.KEY_ACCOUNT_TYPE;
import static fr.free.nrw.commons.contributions.ContributionsContentProvider.CONTRIBUTION_AUTHORITY;
import static fr.free.nrw.commons.modifications.ModificationsContentProvider.AUTHORITY;
import static fr.free.nrw.commons.modifications.ModificationsContentProvider.MODIFICATIONS_AUTHORITY;
public class AccountUtil {
@ -52,7 +52,7 @@ public class AccountUtil {
// FIXME: If the user turns it off, it shouldn't be auto turned back on
ContentResolver.setSyncAutomatically(account, CONTRIBUTION_AUTHORITY, true); // Enable sync by default!
ContentResolver.setSyncAutomatically(account, AUTHORITY, true); // Enable sync by default!
ContentResolver.setSyncAutomatically(account, MODIFICATIONS_AUTHORITY, true); // Enable sync by default!
}
private AccountManager accountManager() {

View file

@ -24,6 +24,7 @@ import fr.free.nrw.commons.upload.UploadController;
import static android.content.Context.MODE_PRIVATE;
import static fr.free.nrw.commons.contributions.ContributionsContentProvider.CONTRIBUTION_AUTHORITY;
import static fr.free.nrw.commons.modifications.ModificationsContentProvider.MODIFICATIONS_AUTHORITY;
@Module
@SuppressWarnings({"WeakerAccess", "unused"})
@ -53,6 +54,12 @@ public class CommonsApplicationModule {
return application.getContentResolver().acquireContentProviderClient(CONTRIBUTION_AUTHORITY);
}
@Provides
@Named("modification")
public ContentProviderClient provideModificationContentProviderClient() {
return application.getContentResolver().acquireContentProviderClient(MODIFICATIONS_AUTHORITY);
}
@Provides
@Named("application_preferences")
public SharedPreferences providesApplicationSharedPreferences() {

View file

@ -23,15 +23,15 @@ public class ModificationsContentProvider extends ContentProvider {
private static final int MODIFICATIONS = 1;
private static final int MODIFICATIONS_ID = 2;
public static final String AUTHORITY = "fr.free.nrw.commons.modifications.contentprovider";
public static final String MODIFICATIONS_AUTHORITY = "fr.free.nrw.commons.modifications.contentprovider";
public static final String BASE_PATH = "modifications";
public static final Uri BASE_URI = Uri.parse("content://" + AUTHORITY + "/" + BASE_PATH);
public static final Uri BASE_URI = Uri.parse("content://" + MODIFICATIONS_AUTHORITY + "/" + BASE_PATH);
private static final UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
static {
uriMatcher.addURI(AUTHORITY, BASE_PATH, MODIFICATIONS);
uriMatcher.addURI(AUTHORITY, BASE_PATH + "/#", MODIFICATIONS_ID);
uriMatcher.addURI(MODIFICATIONS_AUTHORITY, BASE_PATH, MODIFICATIONS);
uriMatcher.addURI(MODIFICATIONS_AUTHORITY, BASE_PATH + "/#", MODIFICATIONS_ID);
}
public static Uri uriForId(int id) {

View file

@ -27,6 +27,7 @@ public class ModificationsSyncAdapter extends AbstractThreadedSyncAdapter {
@Inject MediaWikiApi mwApi;
@Inject ContributionDao contributionDao;
@Inject ModifierSequenceDao modifierSequenceDao;
public ModificationsSyncAdapter(Context context, boolean autoInitialize) {
super(context, autoInitialize);
@ -84,8 +85,7 @@ public class ModificationsSyncAdapter extends AbstractThreadedSyncAdapter {
contributionsClient = getContext().getContentResolver().acquireContentProviderClient(ContributionsContentProvider.CONTRIBUTION_AUTHORITY);
while (!allModifications.isAfterLast()) {
ModifierSequence sequence = ModifierSequenceDao.fromCursor(allModifications);
ModifierSequenceDao dao = new ModifierSequenceDao(contributionsClient);
ModifierSequence sequence = modifierSequenceDao.fromCursor(allModifications);
Contribution contrib;
Cursor contributionCursor;
@ -123,7 +123,7 @@ public class ModificationsSyncAdapter extends AbstractThreadedSyncAdapter {
// FIXME: Log this somewhere else
Timber.d("Non success result! %s", editResult);
} else {
dao.delete(sequence);
modifierSequenceDao.delete(sequence);
}
}
allModifications.moveToNext();

View file

@ -11,15 +11,20 @@ import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Provider;
public class ModifierSequenceDao {
private final ContentProviderClient client;
private final Provider<ContentProviderClient> clientProvider;
public ModifierSequenceDao(ContentProviderClient client) {
this.client = client;
@Inject
public ModifierSequenceDao(@Named("modification") Provider<ContentProviderClient> clientProvider) {
this.clientProvider = clientProvider;
}
public static ModifierSequence fromCursor(Cursor cursor) {
public ModifierSequence fromCursor(Cursor cursor) {
// Hardcoding column positions!
ModifierSequence ms = null;
try {
@ -34,22 +39,28 @@ public class ModifierSequenceDao {
}
public void save(ModifierSequence sequence) {
ContentProviderClient db = clientProvider.get();
try {
if (sequence.getContentUri() == null) {
sequence.setContentUri(client.insert(ModificationsContentProvider.BASE_URI, toContentValues(sequence)));
sequence.setContentUri(db.insert(ModificationsContentProvider.BASE_URI, toContentValues(sequence)));
} else {
client.update(sequence.getContentUri(), toContentValues(sequence), null, null);
db.update(sequence.getContentUri(), toContentValues(sequence), null, null);
}
} catch (RemoteException e) {
throw new RuntimeException(e);
} finally {
db.release();
}
}
public void delete(ModifierSequence sequence) {
ContentProviderClient db = clientProvider.get();
try {
client.delete(sequence.getContentUri(), null, null);
db.delete(sequence.getContentUri(), null, null);
} catch (RemoteException e) {
throw new RuntimeException(e);
} finally {
db.release();
}
}

View file

@ -2,7 +2,6 @@ package fr.free.nrw.commons.upload;
import android.Manifest;
import android.app.ProgressDialog;
import android.content.ContentProviderClient;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
@ -55,6 +54,7 @@ public class MultipleShareActivity extends AuthenticatedActivity
@Inject MediaWikiApi mwApi;
@Inject SessionManager sessionManager;
@Inject UploadController uploadController;
@Inject ModifierSequenceDao modifierSequenceDao;
@Inject @Named("default_preferences") SharedPreferences prefs;
private ArrayList<Contribution> photosList = null;
@ -166,19 +166,18 @@ public class MultipleShareActivity extends AuthenticatedActivity
@Override
public void onCategoriesSave(List<String> categories) {
if (categories.size() > 0) {
ModifierSequenceDao dao = new ModifierSequenceDao(getContentResolver().acquireContentProviderClient(ModificationsContentProvider.AUTHORITY));
for (Contribution contribution : photosList) {
ModifierSequence categoriesSequence = new ModifierSequence(contribution.getContentUri());
categoriesSequence.queueModifier(new CategoryModifier(categories.toArray(new String[]{})));
categoriesSequence.queueModifier(new TemplateRemoveModifier("Uncategorized"));
dao.save(categoriesSequence);
modifierSequenceDao.save(categoriesSequence);
}
}
// FIXME: Make sure that the content provider is up
// This is the wrong place for it, but bleh - better than not having it turned on by default for people who don't go throughl ogin
ContentResolver.setSyncAutomatically(sessionManager.getCurrentAccount(), ModificationsContentProvider.AUTHORITY, true); // Enable sync by default!
ContentResolver.setSyncAutomatically(sessionManager.getCurrentAccount(), ModificationsContentProvider.MODIFICATIONS_AUTHORITY, true); // Enable sync by default!
finish();
}

View file

@ -76,6 +76,7 @@ public class ShareActivity
@Inject CacheController cacheController;
@Inject SessionManager sessionManager;
@Inject UploadController uploadController;
@Inject ModifierSequenceDao modifierSequenceDao;
@Inject @Named("default_preferences") SharedPreferences prefs;
private String source;
@ -166,13 +167,12 @@ public class ShareActivity
categoriesSequence.queueModifier(new CategoryModifier(categories.toArray(new String[]{})));
categoriesSequence.queueModifier(new TemplateRemoveModifier("Uncategorized"));
ModifierSequenceDao dao = new ModifierSequenceDao(getContentResolver().acquireContentProviderClient(ModificationsContentProvider.AUTHORITY));
dao.save(categoriesSequence);
modifierSequenceDao.save(categoriesSequence);
}
// FIXME: Make sure that the content provider is up
// This is the wrong place for it, but bleh - better than not having it turned on by default for people who don't go throughl ogin
ContentResolver.setSyncAutomatically(sessionManager.getCurrentAccount(), ModificationsContentProvider.AUTHORITY, true); // Enable sync by default!
ContentResolver.setSyncAutomatically(sessionManager.getCurrentAccount(), ModificationsContentProvider.MODIFICATIONS_AUTHORITY, true); // Enable sync by default!
finish();
}

View file

@ -273,7 +273,7 @@ public class UploadService extends HandlerService<Contribution> {
toUpload--;
if (toUpload == 0) {
// Sync modifications right after all uplaods are processed
ContentResolver.requestSync(sessionManager.getCurrentAccount(), ModificationsContentProvider.AUTHORITY, new Bundle());
ContentResolver.requestSync(sessionManager.getCurrentAccount(), ModificationsContentProvider.MODIFICATIONS_AUTHORITY, new Bundle());
stopForeground(true);
}
}

View file

@ -52,14 +52,14 @@ public class ModifierSequenceDaoTest {
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
testObject = new ModifierSequenceDao(client);
testObject = new ModifierSequenceDao(() -> client);
}
@Test
public void createFromCursorWithEmptyModifiers() {
MatrixCursor cursor = createCursor("");
ModifierSequence seq = ModifierSequenceDao.fromCursor(cursor);
ModifierSequence seq = testObject.fromCursor(cursor);
assertEquals(EXPECTED_MEDIA_URI, seq.getMediaUri().toString());
assertEquals(BASE_URI.buildUpon().appendPath("1").toString(), seq.getContentUri().toString());
@ -70,7 +70,7 @@ public class ModifierSequenceDaoTest {
public void createFromCursorWtihCategoryModifier() {
MatrixCursor cursor = createCursor("{\"name\": \"CategoriesModifier\", \"data\": {}}");
ModifierSequence seq = ModifierSequenceDao.fromCursor(cursor);
ModifierSequence seq = testObject.fromCursor(cursor);
assertEquals(1, seq.getModifiers().size());
assertTrue(seq.getModifiers().get(0) instanceof CategoryModifier);
@ -80,7 +80,7 @@ public class ModifierSequenceDaoTest {
public void createFromCursorWithRemoveModifier() {
MatrixCursor cursor = createCursor("{\"name\": \"TemplateRemoverModifier\", \"data\": {}}");
ModifierSequence seq = ModifierSequenceDao.fromCursor(cursor);
ModifierSequence seq = testObject.fromCursor(cursor);
assertEquals(1, seq.getModifiers().size());
assertTrue(seq.getModifiers().get(0) instanceof TemplateRemoveModifier);
@ -89,7 +89,7 @@ public class ModifierSequenceDaoTest {
@Test
public void deleteSequence() throws Exception {
when(client.delete(isA(Uri.class), isNull(String.class), isNull(String[].class))).thenReturn(1);
ModifierSequence seq = ModifierSequenceDao.fromCursor(createCursor(""));
ModifierSequence seq = testObject.fromCursor(createCursor(""));
testObject.delete(seq);
@ -99,7 +99,7 @@ public class ModifierSequenceDaoTest {
@Test(expected = RuntimeException.class)
public void deleteTranslatesRemoteExceptions() throws Exception {
when(client.delete(isA(Uri.class), isNull(String.class), isNull(String[].class))).thenThrow(new RemoteException(""));
ModifierSequence seq = ModifierSequenceDao.fromCursor(createCursor(""));
ModifierSequence seq = testObject.fromCursor(createCursor(""));
testObject.delete(seq);
}
@ -110,9 +110,9 @@ public class ModifierSequenceDaoTest {
String expectedData = "{\"modifiers\":[" + modifierJson + "]}";
MatrixCursor cursor = createCursor(modifierJson);
testObject.save(ModifierSequenceDao.fromCursor(cursor));
testObject.save(testObject.fromCursor(cursor));
verify(client).update(eq(ModifierSequenceDao.fromCursor(cursor).getContentUri()), contentValuesCaptor.capture(), isNull(String.class), isNull(String[].class));
verify(client).update(eq(testObject.fromCursor(cursor).getContentUri()), contentValuesCaptor.capture(), isNull(String.class), isNull(String[].class));
ContentValues cv = contentValuesCaptor.getValue();
assertEquals(2, cv.size());
assertEquals(EXPECTED_MEDIA_URI, cv.get(ModifierSequenceDao.Table.COLUMN_MEDIA_URI));