Niedzielski has uploaded a new change for review.
https://gerrit.wikimedia.org/r/283701
Change subject: Add filename to Reading List page disk table
......................................................................
Add filename to Reading List page disk table
Add a filename column to the Reading List page disk database table. This
column is necessary to remember where files were stored.
The previous database schema has not been published through official
channels yet so the effort to upgrade from the previous to the new
has not been made. If you have installed a dev build with the current
schema, this change will cause a crash or undefined behavior. Please
clear your data.
Change-Id: I0e2c72e1b1d632b6be75bbd870d1b03ebcb690a7
---
M app/src/main/java/org/wikipedia/database/async/AsyncRow.java
M app/src/main/java/org/wikipedia/database/contract/ReadingListPageContract.java
M app/src/main/java/org/wikipedia/readinglist/page/ReadingListPage.java
M
app/src/main/java/org/wikipedia/readinglist/page/database/ReadingListPageDiskTable.java
M app/src/main/java/org/wikipedia/readinglist/page/database/disk/DiskRow.java
A
app/src/main/java/org/wikipedia/readinglist/page/database/disk/ReadingListDiskRow.java
M
app/src/main/java/org/wikipedia/readinglist/page/database/disk/ReadingListPageDiskRow.java
7 files changed, 85 insertions(+), 23 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia
refs/changes/01/283701/1
diff --git a/app/src/main/java/org/wikipedia/database/async/AsyncRow.java
b/app/src/main/java/org/wikipedia/database/async/AsyncRow.java
index 09a8f1b..20bbaf7 100644
--- a/app/src/main/java/org/wikipedia/database/async/AsyncRow.java
+++ b/app/src/main/java/org/wikipedia/database/async/AsyncRow.java
@@ -3,9 +3,10 @@
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
+import org.wikipedia.model.BaseModel;
import org.wikipedia.model.EnumCode;
-public class AsyncRow<Status extends EnumCode, Dat> {
+public class AsyncRow<Status extends EnumCode, Dat> extends BaseModel {
@Nullable private final Dat dat;
@NonNull private final String key;
@NonNull private Status status;
diff --git
a/app/src/main/java/org/wikipedia/database/contract/ReadingListPageContract.java
b/app/src/main/java/org/wikipedia/database/contract/ReadingListPageContract.java
index b8e2bdc..ed65b4d 100644
---
a/app/src/main/java/org/wikipedia/database/contract/ReadingListPageContract.java
+++
b/app/src/main/java/org/wikipedia/database/contract/ReadingListPageContract.java
@@ -78,15 +78,21 @@
}
public static final DiskColumns<ReadingListPageRow> DISK_COLS = new
DiskColumns<>(TABLE_DISK);
- public interface DiskCol {
- IdColumn ID = DISK_COLS.id();
- StrColumn KEY = DISK_COLS.key();
- CodeEnumColumn<DiskStatus> STATUS = DISK_COLS.status();
- LongColumn TIMESTAMP = DISK_COLS.timestamp();
- LongColumn TRANSACTION_ID = DISK_COLS.transactionId();
+ public static class DiskCol {
+ public static final IdColumn ID = DISK_COLS.id();
+ public static final StrColumn KEY = DISK_COLS.key();
+ public static final CodeEnumColumn<DiskStatus> STATUS =
DISK_COLS.status();
+ public static final LongColumn TIMESTAMP = DISK_COLS.timestamp();
+ public static final LongColumn TRANSACTION_ID =
DISK_COLS.transactionId();
+ public static final StrColumn FILENAME = new StrColumn(TABLE_DISK,
"filename", "text");
- String[] SELECTION = DISK_COLS.selection();
- String[] CONTENT = DISK_COLS.content();
+ public static final String[] SELECTION = DISK_COLS.selection();
+ public static final String[] CONTENT;
+ static {
+ CONTENT = new String[DISK_COLS.content().length + 1];
+ System.arraycopy(DISK_COLS.content(), 0, CONTENT, 0,
DISK_COLS.content().length);
+ CONTENT[DISK_COLS.content().length] = FILENAME.qualifiedName();
+ }
}
public interface Page extends PageCol {
@@ -114,8 +120,8 @@
String[] PROJECTION = null;
}
- public interface Disk extends DiskCol {
- String TABLES = TABLE_DISK;
+ public static final class Disk extends DiskCol {
+ public static final String TABLES = TABLE_DISK;
// HACK: Http has no real dependency on Option. However,
HttpWithOption is a composite of
// Option and Http and observers expect to be notified when
_either_ change. Making
@@ -123,10 +129,12 @@
// notifies Http clients when Option changes. More here:
// -
http://chalup.github.io/blog/2014/09/14/contentprovider-series-uris/
// - https://gist.github.com/chalup/4201307da02b9cfe4f40
- String PATH = Page.PATH + "/disk";
+ public static final String PATH = Page.PATH + "/disk";
- Uri URI =
Uri.withAppendedPath(AppContentProviderContract.AUTHORITY_BASE, PATH);
- String[] PROJECTION = null;
+ public static final Uri URI =
Uri.withAppendedPath(AppContentProviderContract.AUTHORITY_BASE, PATH);
+ public static final String[] PROJECTION = null;
+
+ private Disk() { }
}
public static final class HttpWithPage implements Page {
@@ -168,6 +176,7 @@
public static final CodeEnumColumn<DiskStatus> DISK_STATUS =
DiskCol.STATUS;
public static final LongColumn DISK_TIMESTAMP = DiskCol.TIMESTAMP;
public static final LongColumn DISK_TRANSACTION_ID =
DiskCol.TRANSACTION_ID;
+ public static final StrColumn DISK_FILENAME = DiskCol.FILENAME;
public static final String[] PROJECTION;
static {
@@ -193,6 +202,7 @@
public static final CodeEnumColumn<DiskStatus> DISK_STATUS =
DiskCol.STATUS;
public static final LongColumn DISK_TIMESTAMP = DiskCol.TIMESTAMP;
public static final LongColumn DISK_TRANSACTION_ID =
DiskCol.TRANSACTION_ID;
+ public static final StrColumn DISK_FILENAME = DiskCol.FILENAME;
public static final String[] PROJECTION;
static {
diff --git
a/app/src/main/java/org/wikipedia/readinglist/page/ReadingListPage.java
b/app/src/main/java/org/wikipedia/readinglist/page/ReadingListPage.java
index 4be22d5..08a381a 100644
--- a/app/src/main/java/org/wikipedia/readinglist/page/ReadingListPage.java
+++ b/app/src/main/java/org/wikipedia/readinglist/page/ReadingListPage.java
@@ -3,14 +3,14 @@
import android.database.Cursor;
import android.support.annotation.NonNull;
-import org.wikipedia.readinglist.page.database.disk.DiskRow;
import org.wikipedia.readinglist.page.database.disk.DiskStatus;
+import org.wikipedia.readinglist.page.database.disk.ReadingListDiskRow;
public final class ReadingListPage extends ReadingListPageRow {
@NonNull private final DiskStatus diskStatus;
public static ReadingListPage fromCursor(@NonNull Cursor cursor) {
- DiskRow<ReadingListPageRow> diskRow =
ReadingListPage.DISK_DATABASE_TABLE.fromCursor(cursor);
+ ReadingListDiskRow diskRow =
ReadingListPage.DISK_DATABASE_TABLE.fromCursor(cursor);
ReadingListPageRow row =
ReadingListPage.DATABASE_TABLE.fromCursor(cursor);
return builder()
.copy(row)
diff --git
a/app/src/main/java/org/wikipedia/readinglist/page/database/ReadingListPageDiskTable.java
b/app/src/main/java/org/wikipedia/readinglist/page/database/ReadingListPageDiskTable.java
index 5bed525..07aa27d 100644
---
a/app/src/main/java/org/wikipedia/readinglist/page/database/ReadingListPageDiskTable.java
+++
b/app/src/main/java/org/wikipedia/readinglist/page/database/ReadingListPageDiskTable.java
@@ -1,24 +1,52 @@
package org.wikipedia.readinglist.page.database;
+import android.content.ContentValues;
import android.database.Cursor;
import android.support.annotation.NonNull;
import org.wikipedia.database.async.AsyncTable;
+import org.wikipedia.database.column.Column;
import org.wikipedia.database.contract.ReadingListPageContract;
import org.wikipedia.readinglist.page.ReadingListPageRow;
import org.wikipedia.readinglist.page.database.disk.DiskRow;
import org.wikipedia.readinglist.page.database.disk.DiskStatus;
+import org.wikipedia.readinglist.page.database.disk.ReadingListDiskRow;
public class ReadingListPageDiskTable
extends AsyncTable<DiskStatus, ReadingListPageRow,
DiskRow<ReadingListPageRow>> {
private static final int DATABASE_VERSION = 12;
public ReadingListPageDiskTable() {
- super(ReadingListPageContract.TABLE_DISK,
ReadingListPageContract.Disk.URI, ReadingListPageContract.DISK_COLS);
+ super(ReadingListPageContract.TABLE_DISK,
ReadingListPageContract.Disk.URI,
+ ReadingListPageContract.DISK_COLS);
}
- @Override public DiskRow<ReadingListPageRow> fromCursor(@NonNull Cursor
cursor) {
- return ReadingListPageContract.DISK_COLS.val(cursor);
+ @Override public ReadingListDiskRow fromCursor(@NonNull Cursor cursor) {
+ DiskRow<ReadingListPageRow> diskRow =
ReadingListPageContract.DISK_COLS.val(cursor);
+ String filename = ReadingListPageContract.Disk.FILENAME.val(cursor);
+ return new ReadingListDiskRow(diskRow, null, filename);
+ }
+
+ @NonNull @Override public Column<?>[] getColumnsAdded(int version) {
+ switch (version) {
+ case DATABASE_VERSION:
+ Column<?>[] diskCols = super.getColumnsAdded(version);
+ Column<?>[] cols = new Column<?>[diskCols.length + 1];
+ System.arraycopy(diskCols, 0, cols, 0, diskCols.length);
+ cols[diskCols.length] =
ReadingListPageContract.DiskCol.FILENAME;
+ return cols;
+ default:
+ return super.getColumnsAdded(version);
+ }
+ }
+
+ @Override protected ContentValues toContentValues(@NonNull
DiskRow<ReadingListPageRow> row) {
+ ContentValues values =
ReadingListPageContract.DISK_COLS.toContentValues(row);
+ if (row instanceof ReadingListDiskRow) {
+ ReadingListDiskRow diskRow = (ReadingListDiskRow) row;
+ values.put(ReadingListPageContract.Disk.FILENAME.getName(),
diskRow.filename());
+ }
+ return values;
}
@Override protected int getDBVersionIntroducedAt() {
diff --git
a/app/src/main/java/org/wikipedia/readinglist/page/database/disk/DiskRow.java
b/app/src/main/java/org/wikipedia/readinglist/page/database/disk/DiskRow.java
index e2df0d1..800e0c8 100644
---
a/app/src/main/java/org/wikipedia/readinglist/page/database/disk/DiskRow.java
+++
b/app/src/main/java/org/wikipedia/readinglist/page/database/disk/DiskRow.java
@@ -12,8 +12,8 @@
super(key, DEFAULT_STATUS, dat);
}
- public DiskRow(@NonNull DiskRow<T> httpRow, @Nullable T dat) {
- super(httpRow, dat);
+ public DiskRow(@NonNull DiskRow<T> diskRow, @Nullable T dat) {
+ super(diskRow, dat);
}
public DiskRow(@NonNull String key, @NonNull DiskStatus status, long
timestamp,
diff --git
a/app/src/main/java/org/wikipedia/readinglist/page/database/disk/ReadingListDiskRow.java
b/app/src/main/java/org/wikipedia/readinglist/page/database/disk/ReadingListDiskRow.java
new file mode 100644
index 0000000..4a276b7
--- /dev/null
+++
b/app/src/main/java/org/wikipedia/readinglist/page/database/disk/ReadingListDiskRow.java
@@ -0,0 +1,23 @@
+package org.wikipedia.readinglist.page.database.disk;
+
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+
+import org.wikipedia.readinglist.page.ReadingListPageRow;
+
+// TODO: rename to ReadingListPageDiskRow. I'm not sure what to call the
current
+// ReadingListPageDiskRow which contains an optional page model in
addition to this class.
+public class ReadingListDiskRow extends DiskRow<ReadingListPageRow> {
+ @Nullable private final String filename;
+
+ public ReadingListDiskRow(@NonNull DiskRow<ReadingListPageRow> diskRow,
+ @Nullable ReadingListPageRow dat,
+ @Nullable String filename) {
+ super(diskRow, dat);
+ this.filename = filename;
+ }
+
+ @Nullable public String filename() {
+ return filename;
+ }
+}
\ No newline at end of file
diff --git
a/app/src/main/java/org/wikipedia/readinglist/page/database/disk/ReadingListPageDiskRow.java
b/app/src/main/java/org/wikipedia/readinglist/page/database/disk/ReadingListPageDiskRow.java
index 60ac749..c6bbdf5 100644
---
a/app/src/main/java/org/wikipedia/readinglist/page/database/disk/ReadingListPageDiskRow.java
+++
b/app/src/main/java/org/wikipedia/readinglist/page/database/disk/ReadingListPageDiskRow.java
@@ -10,7 +10,7 @@
public class ReadingListPageDiskRow extends DiskRow<ReadingListPageRow> {
public static ReadingListPageDiskRow fromCursor(@NonNull Cursor cursor) {
- DiskRow<ReadingListPageRow> diskRow =
ReadingListPage.DISK_DATABASE_TABLE.fromCursor(cursor);
+ ReadingListDiskRow diskRow =
ReadingListPage.DISK_DATABASE_TABLE.fromCursor(cursor);
boolean hasRow =
cursor.getColumnIndex(ReadingListPageContract.DiskWithPage.KEY.getName()) != -1;
ReadingListPageRow row = hasRow ?
ReadingListPage.DATABASE_TABLE.fromCursor(cursor) : null;
return new ReadingListPageDiskRow(diskRow, row);
@@ -20,7 +20,7 @@
super(row.key(), row);
}
- public ReadingListPageDiskRow(@NonNull DiskRow<ReadingListPageRow> diskRow,
+ public ReadingListPageDiskRow(@NonNull ReadingListDiskRow diskRow,
@Nullable ReadingListPageRow row) {
super(diskRow, row);
}
--
To view, visit https://gerrit.wikimedia.org/r/283701
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I0e2c72e1b1d632b6be75bbd870d1b03ebcb690a7
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Niedzielski <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits