Yuvipanda has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/100608


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.

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, 330 insertions(+), 11 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia 
refs/changes/08/100608/1

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..08ff4d4 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,28 @@
         }
     }
 
+    public void upsert(T obj) {
+        Uri uri = persistanceHelper.getBaseContentURI();
+        try {
+            if (false) {
+            int rowsUpdated = client.update(
+                    uri,
+                    persistanceHelper.toContentValues(obj),
+                    persistanceHelper.getPrimaryKeySelection(),
+                    persistanceHelper.getPrimaryKeySelectionArgs(obj)
+            );
+            }
+            if (true) {
+                // 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..1857700
--- /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 = ?, 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: newchange
Gerrit-Change-Id: I65c94258f5f1908edee6d6ceb8137570b0feb3a4
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Yuvipanda <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to