Brion VIBBER has submitted this change and it was merged.
Change subject: Add thumbnail storage support
......................................................................
Add thumbnail storage support
- Display thumbnails in history view
- History Content provider joins tables with PageImages
- Page Images saved when a history entry is made. Will change
in the future to get the PageImage data with the mobileview
request itself, and avoid the extra request.
- Add 'upsert' feature to the Content Persisters
Change-Id: I65c94258f5f1908edee6d6ceb8137570b0feb3a4
---
M wikipedia-it/src/main/java/org/wikimedia/wikipedia/test/ParcelableTest.java
M wikipedia/AndroidManifest.xml
M wikipedia/res/layout/item_history_entry.xml
M wikipedia/src/main/java/org/wikimedia/wikipedia/PageViewFragment.java
M wikipedia/src/main/java/org/wikimedia/wikipedia/SearchArticlesFragment.java
M wikipedia/src/main/java/org/wikimedia/wikipedia/WikipediaApp.java
M wikipedia/src/main/java/org/wikimedia/wikipedia/data/ContentPersister.java
M wikipedia/src/main/java/org/wikimedia/wikipedia/data/DBOpenHelper.java
M wikipedia/src/main/java/org/wikimedia/wikipedia/data/PersistanceHelper.java
M
wikipedia/src/main/java/org/wikimedia/wikipedia/data/SQLiteContentProvider.java
M wikipedia/src/main/java/org/wikimedia/wikipedia/history/HistoryActivity.java
M
wikipedia/src/main/java/org/wikimedia/wikipedia/history/HistoryEntryContentProvider.java
M
wikipedia/src/main/java/org/wikimedia/wikipedia/history/HistoryEntryPersistanceHelper.java
A wikipedia/src/main/java/org/wikimedia/wikipedia/pageimages/PageImage.java
A
wikipedia/src/main/java/org/wikimedia/wikipedia/pageimages/PageImageContentProvider.java
A
wikipedia/src/main/java/org/wikimedia/wikipedia/pageimages/PageImagePersistanceHelper.java
A
wikipedia/src/main/java/org/wikimedia/wikipedia/pageimages/PageImagePersister.java
A
wikipedia/src/main/java/org/wikimedia/wikipedia/pageimages/PageImageSaveTask.java
R wikipedia/src/main/java/org/wikimedia/wikipedia/pageimages/PageImagesTask.java
19 files changed, 328 insertions(+), 11 deletions(-)
Approvals:
Brion VIBBER: Verified; Looks good to me, approved
diff --git
a/wikipedia-it/src/main/java/org/wikimedia/wikipedia/test/ParcelableTest.java
b/wikipedia-it/src/main/java/org/wikimedia/wikipedia/test/ParcelableTest.java
index 75d0688..3226fc8 100644
---
a/wikipedia-it/src/main/java/org/wikimedia/wikipedia/test/ParcelableTest.java
+++
b/wikipedia-it/src/main/java/org/wikimedia/wikipedia/test/ParcelableTest.java
@@ -5,6 +5,7 @@
import junit.framework.TestCase;
import org.wikimedia.wikipedia.*;
import org.wikimedia.wikipedia.history.HistoryEntry;
+import org.wikimedia.wikipedia.pageimages.PageImage;
import java.util.ArrayList;
import java.util.List;
@@ -76,4 +77,12 @@
parcelAndTestObjects(historyEntry);
}
+
+ public void testPageImage() throws Exception {
+ Site site = new Site("en.wikipedia.org");
+ PageTitle title = new PageTitle("Talk", "India", site);
+ PageImage pageImage = new PageImage(title, "Testing image");
+
+ parcelAndTestObjects(pageImage);
+ }
}
diff --git a/wikipedia/AndroidManifest.xml b/wikipedia/AndroidManifest.xml
index dde1660..72f9363 100644
--- a/wikipedia/AndroidManifest.xml
+++ b/wikipedia/AndroidManifest.xml
@@ -47,6 +47,11 @@
android:name=".history.HistoryEntryContentProvider"
/>
+ <provider
+ android:authorities="org.wikimedia.wikipedia.pageimages"
+ android:name=".pageimages.PageImageContentProvider"
+ />
+
</application>
</manifest>
\ No newline at end of file
diff --git a/wikipedia/res/layout/item_history_entry.xml
b/wikipedia/res/layout/item_history_entry.xml
index 9053d7e..7bc0793 100644
--- a/wikipedia/res/layout/item_history_entry.xml
+++ b/wikipedia/res/layout/item_history_entry.xml
@@ -30,7 +30,7 @@
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:layout_gravity="center_vertical"
- android:background="@android:color/background_dark"
+ android:background="@android:color/transparent"
/>
<TextView
diff --git
a/wikipedia/src/main/java/org/wikimedia/wikipedia/PageViewFragment.java
b/wikipedia/src/main/java/org/wikimedia/wikipedia/PageViewFragment.java
index f9f8f84..5c05127 100644
--- a/wikipedia/src/main/java/org/wikimedia/wikipedia/PageViewFragment.java
+++ b/wikipedia/src/main/java/org/wikimedia/wikipedia/PageViewFragment.java
@@ -16,6 +16,7 @@
import org.json.JSONObject;
import org.mediawiki.api.json.Api;
import org.wikimedia.wikipedia.history.HistoryEntry;
+import org.wikimedia.wikipedia.pageimages.PageImageSaveTask;
import java.io.IOException;
import java.util.ArrayList;
@@ -183,6 +184,7 @@
// Add history entry now
app.getPersister(HistoryEntry.class).persist(curEntry);
+ new PageImageSaveTask(app, api, title).execute();
}
@Override
diff --git
a/wikipedia/src/main/java/org/wikimedia/wikipedia/SearchArticlesFragment.java
b/wikipedia/src/main/java/org/wikimedia/wikipedia/SearchArticlesFragment.java
index 33bf076..b65fa57 100644
---
a/wikipedia/src/main/java/org/wikimedia/wikipedia/SearchArticlesFragment.java
+++
b/wikipedia/src/main/java/org/wikimedia/wikipedia/SearchArticlesFragment.java
@@ -15,6 +15,7 @@
import com.squareup.picasso.Picasso;
import org.wikimedia.wikipedia.events.NewWikiPageNavigationEvent;
import org.wikimedia.wikipedia.history.HistoryEntry;
+import org.wikimedia.wikipedia.pageimages.PageImagesTask;
import java.util.List;
import java.util.Map;
diff --git a/wikipedia/src/main/java/org/wikimedia/wikipedia/WikipediaApp.java
b/wikipedia/src/main/java/org/wikimedia/wikipedia/WikipediaApp.java
index bb2ac91..2872e35 100644
--- a/wikipedia/src/main/java/org/wikimedia/wikipedia/WikipediaApp.java
+++ b/wikipedia/src/main/java/org/wikimedia/wikipedia/WikipediaApp.java
@@ -10,6 +10,8 @@
import org.wikimedia.wikipedia.data.DBOpenHelper;
import org.wikimedia.wikipedia.history.HistoryEntry;
import org.wikimedia.wikipedia.history.HistoryEntryPersister;
+import org.wikimedia.wikipedia.pageimages.PageImage;
+import org.wikimedia.wikipedia.pageimages.PageImagePersister;
import java.util.HashMap;
@@ -80,6 +82,8 @@
ContentPersister persister;
if (cls.equals(HistoryEntry.class)) {
persister = new HistoryEntryPersister(this);
+ } else if (cls.equals(PageImage.class)) {
+ persister = new PageImagePersister(this);
} else {
throw new RuntimeException("No persister found for class " +
cls.getCanonicalName());
}
diff --git
a/wikipedia/src/main/java/org/wikimedia/wikipedia/data/ContentPersister.java
b/wikipedia/src/main/java/org/wikimedia/wikipedia/data/ContentPersister.java
index 0ea5833..bbfaa1c 100644
--- a/wikipedia/src/main/java/org/wikimedia/wikipedia/data/ContentPersister.java
+++ b/wikipedia/src/main/java/org/wikimedia/wikipedia/data/ContentPersister.java
@@ -14,10 +14,7 @@
}
public void persist(T obj) {
- Uri uri = Uri.parse("content://" +
-
SQLiteContentProvider.getAuthorityForTable(persistanceHelper.getTableName()) +
- "/" + persistanceHelper.getTableName());
-
+ Uri uri = persistanceHelper.getBaseContentURI();
try {
client.insert(uri, persistanceHelper.toContentValues(obj));
} catch (RemoteException e) {
@@ -40,6 +37,26 @@
}
}
+ public void upsert(T obj) {
+ Uri uri = persistanceHelper.getBaseContentURI();
+ try {
+ int rowsUpdated = client.update(
+ uri,
+ persistanceHelper.toContentValues(obj),
+ persistanceHelper.getPrimaryKeySelection(),
+ persistanceHelper.getPrimaryKeySelectionArgs(obj)
+ );
+ if (rowsUpdated == 0) {
+ // Insert!
+ persist(obj);
+ }
+ } catch (RemoteException e) {
+ throw new RuntimeException(e);
+ }
+
+ }
+
+
public void cleanup() {
this.client.release();
}
diff --git
a/wikipedia/src/main/java/org/wikimedia/wikipedia/data/DBOpenHelper.java
b/wikipedia/src/main/java/org/wikimedia/wikipedia/data/DBOpenHelper.java
index 48245f6..186bf7f 100644
--- a/wikipedia/src/main/java/org/wikimedia/wikipedia/data/DBOpenHelper.java
+++ b/wikipedia/src/main/java/org/wikimedia/wikipedia/data/DBOpenHelper.java
@@ -3,6 +3,7 @@
import android.content.*;
import android.database.sqlite.*;
import org.wikimedia.wikipedia.history.HistoryEntry;
+import org.wikimedia.wikipedia.pageimages.PageImage;
public class DBOpenHelper extends SQLiteOpenHelper{
@@ -16,6 +17,7 @@
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL(HistoryEntry.persistanceHelper.getSchema(DATABASE_VERSION));
+
sqLiteDatabase.execSQL(PageImage.persistanceHelper.getSchema(DATABASE_VERSION));
}
@Override
diff --git
a/wikipedia/src/main/java/org/wikimedia/wikipedia/data/PersistanceHelper.java
b/wikipedia/src/main/java/org/wikimedia/wikipedia/data/PersistanceHelper.java
index f3ff72d..75275c8 100644
---
a/wikipedia/src/main/java/org/wikimedia/wikipedia/data/PersistanceHelper.java
+++
b/wikipedia/src/main/java/org/wikimedia/wikipedia/data/PersistanceHelper.java
@@ -41,6 +41,9 @@
abstract public Column[] getColumnsAdded(int version);
+ protected abstract String getPrimaryKeySelection();
+ protected abstract String[] getPrimaryKeySelectionArgs(T obj);
+
public ArrayList<Column> getElements(int version) {
ArrayList<Column> columns = new ArrayList<Column>();
for (int i = 1; i <= version; i++) {
diff --git
a/wikipedia/src/main/java/org/wikimedia/wikipedia/data/SQLiteContentProvider.java
b/wikipedia/src/main/java/org/wikimedia/wikipedia/data/SQLiteContentProvider.java
index 7f1fd40..eaa3852 100644
---
a/wikipedia/src/main/java/org/wikimedia/wikipedia/data/SQLiteContentProvider.java
+++
b/wikipedia/src/main/java/org/wikimedia/wikipedia/data/SQLiteContentProvider.java
@@ -9,14 +9,14 @@
import android.net.Uri;
abstract public class SQLiteContentProvider<T> extends ContentProvider {
- private final PersistanceHelper<T> persistanceHelper;
+ protected final PersistanceHelper<T> persistanceHelper;
protected SQLiteContentProvider(PersistanceHelper<T> persistanceHelper) {
this.persistanceHelper = persistanceHelper;
}
abstract protected DBOpenHelper getDbOpenHelper();
- private final UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
+ protected final UriMatcher uriMatcher = new
UriMatcher(UriMatcher.NO_MATCH);
private static final int MATCH_ALL = 1;
@Override
@@ -91,7 +91,18 @@
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
- throw new IllegalArgumentException("Update functionality not
implemented");
+ int uriType = uriMatcher.match(uri);
+ SQLiteDatabase sqlDB = getDbOpenHelper().getWritableDatabase();
+ int modifiedRows;
+ switch (uriType) {
+ case MATCH_ALL:
+ modifiedRows = sqlDB.update(persistanceHelper.getTableName(),
values, selection, selectionArgs);
+ break;
+ default:
+ throw new IllegalArgumentException("Unknown URI: " + uri);
+ }
+ getContext().getContentResolver().notifyChange(uri, null);
+ return modifiedRows;
}
@Override
diff --git
a/wikipedia/src/main/java/org/wikimedia/wikipedia/history/HistoryActivity.java
b/wikipedia/src/main/java/org/wikimedia/wikipedia/history/HistoryActivity.java
index 72af4d4..ba1001b 100644
---
a/wikipedia/src/main/java/org/wikimedia/wikipedia/history/HistoryActivity.java
+++
b/wikipedia/src/main/java/org/wikimedia/wikipedia/history/HistoryActivity.java
@@ -6,6 +6,7 @@
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
+import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.LoaderManager;
@@ -14,10 +15,12 @@
import android.text.format.DateUtils;
import android.view.*;
import android.widget.*;
+import com.squareup.picasso.Picasso;
import org.wikimedia.wikipedia.PageActivity;
import org.wikimedia.wikipedia.R;
import org.wikimedia.wikipedia.WikipediaApp;
import org.wikimedia.wikipedia.events.NewWikiPageNavigationEvent;
+import org.wikimedia.wikipedia.pageimages.PageImage;
import java.text.DateFormat;
import java.util.Date;
@@ -62,8 +65,8 @@
public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
return new CursorLoader(
this,
- HistoryEntry.persistanceHelper.getBaseContentURI(),
- new String[] {"*"},
+
Uri.parse(HistoryEntry.persistanceHelper.getBaseContentURI().toString() + "/" +
PageImage.persistanceHelper.getTableName()),
+ new String[] {"history._id, history.site, history.title,
history.timestamp, history.source, pageimages.imageName" },
null,
null,
"timestamp DESC");
@@ -112,11 +115,18 @@
public void bindView(View view, Context context, Cursor cursor) {
TextView title = (TextView) view.findViewById(R.id.history_title);
ImageView source = (ImageView)
view.findViewById(R.id.history_source);
+ ImageView thumbnail = (ImageView)
view.findViewById(R.id.history_thumbnail);
HistoryEntry entry =
HistoryEntry.persistanceHelper.fromCursor(cursor);
title.setText(entry.getTitle().getDisplayText());
source.setImageResource(getImageForSource(entry.getSource()));
view.setTag(entry);
+ Picasso.with(HistoryActivity.this)
+ .load(cursor.getString(5))
+ .placeholder(R.drawable.ic_pageimage_placeholder)
+ .error(R.drawable.ic_pageimage_placeholder)
+ .into(thumbnail);
+
// Check the previous item, see if the times differe enough
// If they do, display the section header.
// Always do it this is the first item.
diff --git
a/wikipedia/src/main/java/org/wikimedia/wikipedia/history/HistoryEntryContentProvider.java
b/wikipedia/src/main/java/org/wikimedia/wikipedia/history/HistoryEntryContentProvider.java
index 84950d6..59bbdd4 100644
---
a/wikipedia/src/main/java/org/wikimedia/wikipedia/history/HistoryEntryContentProvider.java
+++
b/wikipedia/src/main/java/org/wikimedia/wikipedia/history/HistoryEntryContentProvider.java
@@ -1,16 +1,61 @@
package org.wikimedia.wikipedia.history;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteQueryBuilder;
+import android.net.Uri;
import org.wikimedia.wikipedia.WikipediaApp;
import org.wikimedia.wikipedia.data.DBOpenHelper;
import org.wikimedia.wikipedia.data.SQLiteContentProvider;
+import org.wikimedia.wikipedia.pageimages.PageImage;
+
+import java.util.HashMap;
public class HistoryEntryContentProvider extends
SQLiteContentProvider<HistoryEntry> {
+ private static final int MATCH_WITH_PAGEIMAGES = 64;
+
public HistoryEntryContentProvider() {
super(HistoryEntry.persistanceHelper);
}
@Override
+ public boolean onCreate() {
+ boolean ret = super.onCreate();
+ uriMatcher.addURI(getAuthority(),
+ persistanceHelper.getTableName() + "/" +
PageImage.persistanceHelper.getTableName(),
+ MATCH_WITH_PAGEIMAGES);
+ return ret;
+ }
+
+ @Override
protected DBOpenHelper getDbOpenHelper() {
return
((WikipediaApp)getContext().getApplicationContext()).getDbOpenHelper();
}
+
+ @Override
+ public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
+
+ SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
+
+ int uriType = uriMatcher.match(uri);
+
+ SQLiteDatabase db = getDbOpenHelper().getReadableDatabase();
+ Cursor cursor;
+
+ switch (uriType) {
+ case MATCH_WITH_PAGEIMAGES:
+ queryBuilder.setTables(
+ String.format("%1$s LEFT OUTER JOIN %2$s ON (%1$s.site
= %2$s.site and %1$s.title = %2$s.title)",
+ HistoryEntry.persistanceHelper.getTableName(),
PageImage.persistanceHelper.getTableName()
+ )
+ );
+ cursor = queryBuilder.query(db, projection, selection,
selectionArgs, null, null, sortOrder);
+ break;
+ default:
+ return super.query(uri, projection, selection, selectionArgs,
sortOrder);
+ }
+
+ cursor.setNotificationUri(getContext().getContentResolver(), uri);
+ return cursor;
+ }
}
diff --git
a/wikipedia/src/main/java/org/wikimedia/wikipedia/history/HistoryEntryPersistanceHelper.java
b/wikipedia/src/main/java/org/wikimedia/wikipedia/history/HistoryEntryPersistanceHelper.java
index 8e2264a..a2d894c 100644
---
a/wikipedia/src/main/java/org/wikimedia/wikipedia/history/HistoryEntryPersistanceHelper.java
+++
b/wikipedia/src/main/java/org/wikimedia/wikipedia/history/HistoryEntryPersistanceHelper.java
@@ -50,4 +50,16 @@
return new Column[0];
}
}
+
+ @Override
+ protected String getPrimaryKeySelection() {
+ throw new UnsupportedOperationException("No Primary Keys make sense
for History");
+ }
+
+ @Override
+ protected String[] getPrimaryKeySelectionArgs(HistoryEntry obj) {
+ throw new UnsupportedOperationException("No Primary Keys make sense
for History");
+ }
+
+
}
diff --git
a/wikipedia/src/main/java/org/wikimedia/wikipedia/pageimages/PageImage.java
b/wikipedia/src/main/java/org/wikimedia/wikipedia/pageimages/PageImage.java
new file mode 100644
index 0000000..fa356dd
--- /dev/null
+++ b/wikipedia/src/main/java/org/wikimedia/wikipedia/pageimages/PageImage.java
@@ -0,0 +1,62 @@
+package org.wikimedia.wikipedia.pageimages;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+import org.wikimedia.wikipedia.PageTitle;
+
+public class PageImage implements Parcelable {
+ public static final PageImagePersistanceHelper persistanceHelper = new
PageImagePersistanceHelper();
+
+ private final PageTitle title;
+ private final String imageName;
+
+ public PageImage(PageTitle title, String imageName) {
+ this.title = title;
+ this.imageName = imageName;
+ }
+
+ public PageTitle getTitle() {
+ return title;
+ }
+
+ public String getImageName() {
+ return imageName;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (!(o instanceof PageImage)) {
+ return false;
+ }
+ PageImage other = (PageImage) o;
+ return getTitle().equals(other.getTitle())
+ && getImageName().equals(other.getImageName());
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeParcelable(getTitle(), flags);
+ dest.writeString(getImageName());
+ }
+
+ private PageImage(Parcel in) {
+ this.title = in.readParcelable(PageTitle.class.getClassLoader());
+ this.imageName = in.readString();
+ }
+
+ public static final Parcelable.Creator<PageImage> CREATOR
+ = new Parcelable.Creator<PageImage>() {
+ public PageImage createFromParcel(Parcel in) {
+ return new PageImage(in);
+ }
+
+ public PageImage[] newArray(int size) {
+ return new PageImage[size];
+ }
+ };
+}
diff --git
a/wikipedia/src/main/java/org/wikimedia/wikipedia/pageimages/PageImageContentProvider.java
b/wikipedia/src/main/java/org/wikimedia/wikipedia/pageimages/PageImageContentProvider.java
new file mode 100644
index 0000000..1dd0b3f
--- /dev/null
+++
b/wikipedia/src/main/java/org/wikimedia/wikipedia/pageimages/PageImageContentProvider.java
@@ -0,0 +1,17 @@
+package org.wikimedia.wikipedia.pageimages;
+
+import org.wikimedia.wikipedia.WikipediaApp;
+import org.wikimedia.wikipedia.data.DBOpenHelper;
+import org.wikimedia.wikipedia.data.SQLiteContentProvider;
+import org.wikimedia.wikipedia.history.HistoryEntry;
+
+public class PageImageContentProvider extends SQLiteContentProvider<PageImage>
{
+ public PageImageContentProvider() {
+ super(PageImage.persistanceHelper);
+ }
+
+ @Override
+ protected DBOpenHelper getDbOpenHelper() {
+ return
((WikipediaApp)getContext().getApplicationContext()).getDbOpenHelper();
+ }
+}
diff --git
a/wikipedia/src/main/java/org/wikimedia/wikipedia/pageimages/PageImagePersistanceHelper.java
b/wikipedia/src/main/java/org/wikimedia/wikipedia/pageimages/PageImagePersistanceHelper.java
new file mode 100644
index 0000000..5c3446e
--- /dev/null
+++
b/wikipedia/src/main/java/org/wikimedia/wikipedia/pageimages/PageImagePersistanceHelper.java
@@ -0,0 +1,64 @@
+package org.wikimedia.wikipedia.pageimages;
+
+import android.content.ContentValues;
+import android.database.Cursor;
+import org.wikimedia.wikipedia.PageTitle;
+import org.wikimedia.wikipedia.Site;
+import org.wikimedia.wikipedia.data.PersistanceHelper;
+import org.wikimedia.wikipedia.history.HistoryEntry;
+
+import java.util.Date;
+
+public class PageImagePersistanceHelper extends PersistanceHelper<PageImage> {
+ @Override
+ public PageImage fromCursor(Cursor c) {
+ // Carefully, get them back by using position only
+ Site site = new Site(c.getString(1));
+ // FIXME: Does not handle non mainspace pages
+ PageTitle title = new PageTitle(null, c.getString(2), site);
+ String imageName = c.getString(3);
+ return new PageImage(title, imageName);
+ }
+
+ @Override
+ protected ContentValues toContentValues(PageImage obj) {
+ ContentValues contentValues = new ContentValues();
+ contentValues.put("site", obj.getTitle().getSite().getDomain());
+ contentValues.put("title", obj.getTitle().getPrefixedText());
+ contentValues.put("imageName", obj.getImageName());
+ return contentValues;
+ }
+
+ @Override
+ public String getTableName() {
+ return "pageimages";
+ }
+
+ @Override
+ public Column[] getColumnsAdded(int version) {
+ switch (version) {
+ case 1:
+ return new Column[] {
+ new Column("_id", "integer primary key"),
+ new Column("site", "string"),
+ new Column("title", "string"),
+ new Column("imageName", "string"),
+ };
+ default:
+ return new Column[0];
+ }
+ }
+
+ @Override
+ protected String getPrimaryKeySelection() {
+ return "site = ? AND title = ?";
+ }
+
+ @Override
+ protected String[] getPrimaryKeySelectionArgs(PageImage obj) {
+ return new String[] {
+ obj.getTitle().getSite().getDomain(),
+ obj.getTitle().getPrefixedText()
+ };
+ }
+}
diff --git
a/wikipedia/src/main/java/org/wikimedia/wikipedia/pageimages/PageImagePersister.java
b/wikipedia/src/main/java/org/wikimedia/wikipedia/pageimages/PageImagePersister.java
new file mode 100644
index 0000000..fe01982
--- /dev/null
+++
b/wikipedia/src/main/java/org/wikimedia/wikipedia/pageimages/PageImagePersister.java
@@ -0,0 +1,18 @@
+package org.wikimedia.wikipedia.pageimages;
+
+import android.content.Context;
+import org.wikimedia.wikipedia.data.ContentPersister;
+import org.wikimedia.wikipedia.data.SQLiteContentProvider;
+import org.wikimedia.wikipedia.history.HistoryEntry;
+
+public class PageImagePersister extends ContentPersister<PageImage> {
+ public PageImagePersister(Context context) {
+ // lolJava
+ super(
+ context.getContentResolver().acquireContentProviderClient(
+ PageImage.persistanceHelper.getBaseContentURI()
+ ),
+ PageImage.persistanceHelper
+ );
+ }
+}
diff --git
a/wikipedia/src/main/java/org/wikimedia/wikipedia/pageimages/PageImageSaveTask.java
b/wikipedia/src/main/java/org/wikimedia/wikipedia/pageimages/PageImageSaveTask.java
new file mode 100644
index 0000000..b7ff9ed
--- /dev/null
+++
b/wikipedia/src/main/java/org/wikimedia/wikipedia/pageimages/PageImageSaveTask.java
@@ -0,0 +1,25 @@
+package org.wikimedia.wikipedia.pageimages;
+
+import org.mediawiki.api.json.Api;
+import org.wikimedia.wikipedia.PageTitle;
+import org.wikimedia.wikipedia.WikipediaApp;
+import org.wikimedia.wikipedia.concurrency.ExecutorService;
+
+import java.util.Arrays;
+import java.util.Map;
+
+public class PageImageSaveTask extends PageImagesTask {
+ private final WikipediaApp app;
+ public PageImageSaveTask(WikipediaApp app, Api api, PageTitle title) {
+
super(ExecutorService.getSingleton().getExecutor(PageImageSaveTask.class, 2),
api, title.getSite(), Arrays.asList(new PageTitle[] {title}), 96);
+ this.app = app;
+ }
+
+ @Override
+ public void onFinish(Map<PageTitle, String> result) {
+ for (Map.Entry<PageTitle, String> item : result.entrySet()) {
+ PageImage pi = new PageImage(item.getKey(), item.getValue());
+ app.getPersister(PageImage.class).upsert(pi);
+ }
+ }
+}
diff --git
a/wikipedia/src/main/java/org/wikimedia/wikipedia/PageImagesTask.java
b/wikipedia/src/main/java/org/wikimedia/wikipedia/pageimages/PageImagesTask.java
similarity index 74%
rename from wikipedia/src/main/java/org/wikimedia/wikipedia/PageImagesTask.java
rename to
wikipedia/src/main/java/org/wikimedia/wikipedia/pageimages/PageImagesTask.java
index 5418a01..4665c1a 100644
--- a/wikipedia/src/main/java/org/wikimedia/wikipedia/PageImagesTask.java
+++
b/wikipedia/src/main/java/org/wikimedia/wikipedia/pageimages/PageImagesTask.java
@@ -1,17 +1,27 @@
-package org.wikimedia.wikipedia;
+package org.wikimedia.wikipedia.pageimages;
import android.util.Log;
import org.json.JSONObject;
import org.mediawiki.api.json.Api;
import org.mediawiki.api.json.RequestBuilder;
+import org.wikimedia.wikipedia.PageQueryTask;
+import org.wikimedia.wikipedia.PageTitle;
+import org.wikimedia.wikipedia.Site;
import org.wikimedia.wikipedia.concurrency.ExecutorService;
import java.util.List;
+import java.util.concurrent.Executor;
public class PageImagesTask extends PageQueryTask<String> {
private final int thumbSize;
private final int thumbsCount;
+ protected PageImagesTask(Executor executor, Api api, Site site,
List<PageTitle> titles, int thumbSize) {
+ super(executor, api, site, titles);
+ this.thumbSize = thumbSize;
+ this.thumbsCount = titles.size();
+ }
+
public PageImagesTask(Api api, Site site, List<PageTitle> titles, int
thumbSize) {
super(ExecutorService.getSingleton().getExecutor(PageImagesTask.class,
2), api, site, titles);
this.thumbSize = thumbSize;
--
To view, visit https://gerrit.wikimedia.org/r/100608
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I65c94258f5f1908edee6d6ceb8137570b0feb3a4
Gerrit-PatchSet: 2
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Yuvipanda <[email protected]>
Gerrit-Reviewer: Brion VIBBER <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits