|
|
|
@ -24,29 +24,28 @@ import java.util.* |
|
|
|
|
*/ |
|
|
|
|
class ReaderProvider : ContentProvider() { |
|
|
|
|
private enum class RequestCode { |
|
|
|
|
saveSource, saveSources, saveBook, deleteSources, getSource, getSources, getBookshelf, getChapterList, getBookContent |
|
|
|
|
SaveSource, SaveSources, SaveBook, DeleteSources, GetSource, GetSources, GetBookshelf, GetChapterList, GetBookContent |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private val postBodyKey = "json" |
|
|
|
|
private val sMatcher by lazy { |
|
|
|
|
val uriMatcher = UriMatcher(UriMatcher.NO_MATCH) |
|
|
|
|
val authority = "${context?.applicationInfo?.packageName}.readerProvider" |
|
|
|
|
uriMatcher.addURI(authority, "source/insert", RequestCode.saveSource.ordinal) |
|
|
|
|
uriMatcher.addURI(authority, "sources/insert", RequestCode.saveSources.ordinal) |
|
|
|
|
uriMatcher.addURI(authority, "book/insert", RequestCode.saveBook.ordinal) |
|
|
|
|
uriMatcher.addURI(authority, "sources/delete", RequestCode.deleteSources.ordinal) |
|
|
|
|
uriMatcher.addURI(authority, "source/query", RequestCode.getSource.ordinal) |
|
|
|
|
uriMatcher.addURI(authority, "sources/query", RequestCode.getSources.ordinal) |
|
|
|
|
uriMatcher.addURI(authority, "books/query", RequestCode.getBookshelf.ordinal) |
|
|
|
|
uriMatcher.addURI(authority, "book/chapter/query", RequestCode.getChapterList.ordinal) |
|
|
|
|
uriMatcher.addURI(authority, "book/content/query", RequestCode.getBookContent.ordinal) |
|
|
|
|
return@lazy uriMatcher |
|
|
|
|
UriMatcher(UriMatcher.NO_MATCH).apply { |
|
|
|
|
"${context?.applicationInfo?.packageName}.readerProvider".also { authority -> |
|
|
|
|
addURI(authority, "source/insert", RequestCode.SaveSource.ordinal) |
|
|
|
|
addURI(authority, "sources/insert", RequestCode.SaveSources.ordinal) |
|
|
|
|
addURI(authority, "book/insert", RequestCode.SaveBook.ordinal) |
|
|
|
|
addURI(authority, "sources/delete", RequestCode.DeleteSources.ordinal) |
|
|
|
|
addURI(authority, "source/query", RequestCode.GetSource.ordinal) |
|
|
|
|
addURI(authority, "sources/query", RequestCode.GetSources.ordinal) |
|
|
|
|
addURI(authority, "books/query", RequestCode.GetBookshelf.ordinal) |
|
|
|
|
addURI(authority, "book/chapter/query", RequestCode.GetChapterList.ordinal) |
|
|
|
|
addURI(authority, "book/content/query", RequestCode.GetBookContent.ordinal) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override fun onCreate(): Boolean { |
|
|
|
|
return false |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override fun onCreate() = false |
|
|
|
|
|
|
|
|
|
override fun delete( |
|
|
|
|
uri: Uri, |
|
|
|
|
selection: String?, |
|
|
|
@ -54,7 +53,7 @@ class ReaderProvider : ContentProvider() { |
|
|
|
|
): Int { |
|
|
|
|
if (sMatcher.match(uri) < 0) return -1 |
|
|
|
|
when (RequestCode.values()[sMatcher.match(uri)]) { |
|
|
|
|
RequestCode.deleteSources -> SourceController.deleteSources(selection) |
|
|
|
|
RequestCode.DeleteSources -> SourceController.deleteSources(selection) |
|
|
|
|
else -> throw IllegalStateException( |
|
|
|
|
"Unexpected value: " + RequestCode.values()[sMatcher.match(uri)].name |
|
|
|
|
) |
|
|
|
@ -62,20 +61,18 @@ class ReaderProvider : ContentProvider() { |
|
|
|
|
return 0 |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override fun getType(uri: Uri): String? { |
|
|
|
|
throw UnsupportedOperationException("Not yet implemented") |
|
|
|
|
} |
|
|
|
|
override fun getType(uri: Uri) = throw UnsupportedOperationException("Not yet implemented") |
|
|
|
|
|
|
|
|
|
override fun insert(uri: Uri, values: ContentValues?): Uri? { |
|
|
|
|
if (sMatcher.match(uri) < 0) return null |
|
|
|
|
when (RequestCode.values()[sMatcher.match(uri)]) { |
|
|
|
|
RequestCode.saveSource -> values?.let { |
|
|
|
|
RequestCode.SaveSource -> values?.let { |
|
|
|
|
SourceController.saveSource(values.getAsString(postBodyKey)) |
|
|
|
|
} |
|
|
|
|
RequestCode.saveBook -> values?.let { |
|
|
|
|
RequestCode.SaveBook -> values?.let { |
|
|
|
|
BookshelfController.saveBook(values.getAsString(postBodyKey)) |
|
|
|
|
} |
|
|
|
|
RequestCode.saveSources -> values?.let { |
|
|
|
|
RequestCode.SaveSources -> values?.let { |
|
|
|
|
SourceController.saveSources(values.getAsString(postBodyKey)) |
|
|
|
|
} |
|
|
|
|
else -> throw IllegalStateException( |
|
|
|
@ -97,11 +94,11 @@ class ReaderProvider : ContentProvider() { |
|
|
|
|
map["index"] = arrayListOf(it) |
|
|
|
|
} |
|
|
|
|
return if (sMatcher.match(uri) < 0) null else when (RequestCode.values()[sMatcher.match(uri)]) { |
|
|
|
|
RequestCode.getSource -> SimpleCursor(SourceController.getSource(map)) |
|
|
|
|
RequestCode.getSources -> SimpleCursor(SourceController.sources) |
|
|
|
|
RequestCode.getBookshelf -> SimpleCursor(BookshelfController.bookshelf) |
|
|
|
|
RequestCode.getBookContent -> SimpleCursor(BookshelfController.getBookContent(map)) |
|
|
|
|
RequestCode.getChapterList -> SimpleCursor(BookshelfController.getChapterList(map)) |
|
|
|
|
RequestCode.GetSource -> SimpleCursor(SourceController.getSource(map)) |
|
|
|
|
RequestCode.GetSources -> SimpleCursor(SourceController.sources) |
|
|
|
|
RequestCode.GetBookshelf -> SimpleCursor(BookshelfController.bookshelf) |
|
|
|
|
RequestCode.GetBookContent -> SimpleCursor(BookshelfController.getBookContent(map)) |
|
|
|
|
RequestCode.GetChapterList -> SimpleCursor(BookshelfController.getChapterList(map)) |
|
|
|
|
else -> throw IllegalStateException( |
|
|
|
|
"Unexpected value: " + RequestCode.values()[sMatcher.match(uri)].name |
|
|
|
|
) |
|
|
|
@ -111,9 +108,8 @@ class ReaderProvider : ContentProvider() { |
|
|
|
|
override fun update( |
|
|
|
|
uri: Uri, values: ContentValues?, selection: String?, |
|
|
|
|
selectionArgs: Array<String>? |
|
|
|
|
): Int { |
|
|
|
|
throw UnsupportedOperationException("Not yet implemented") |
|
|
|
|
} |
|
|
|
|
) = throw UnsupportedOperationException("Not yet implemented") |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Simple inner class to deliver json callback data. |
|
|
|
@ -124,82 +120,46 @@ class ReaderProvider : ContentProvider() { |
|
|
|
|
|
|
|
|
|
private val mData: String = Gson().toJson(data) |
|
|
|
|
|
|
|
|
|
override fun getCount(): Int { |
|
|
|
|
return 1 |
|
|
|
|
} |
|
|
|
|
override fun getCount() = 1 |
|
|
|
|
|
|
|
|
|
override fun getPosition(): Int { |
|
|
|
|
return 0 |
|
|
|
|
} |
|
|
|
|
override fun getPosition() = 0 |
|
|
|
|
|
|
|
|
|
override fun move(i: Int): Boolean { |
|
|
|
|
return true |
|
|
|
|
} |
|
|
|
|
override fun move(i: Int) = true |
|
|
|
|
|
|
|
|
|
override fun moveToPosition(i: Int): Boolean { |
|
|
|
|
return true |
|
|
|
|
} |
|
|
|
|
override fun moveToPosition(i: Int) = true |
|
|
|
|
|
|
|
|
|
override fun moveToFirst(): Boolean { |
|
|
|
|
return true |
|
|
|
|
} |
|
|
|
|
override fun moveToFirst() = true |
|
|
|
|
|
|
|
|
|
override fun moveToLast(): Boolean { |
|
|
|
|
return true |
|
|
|
|
} |
|
|
|
|
override fun moveToLast() = true |
|
|
|
|
|
|
|
|
|
override fun moveToNext(): Boolean { |
|
|
|
|
return true |
|
|
|
|
} |
|
|
|
|
override fun moveToNext() = true |
|
|
|
|
|
|
|
|
|
override fun moveToPrevious(): Boolean { |
|
|
|
|
return true |
|
|
|
|
} |
|
|
|
|
override fun moveToPrevious() = true |
|
|
|
|
|
|
|
|
|
override fun isFirst(): Boolean { |
|
|
|
|
return true |
|
|
|
|
} |
|
|
|
|
override fun isFirst() = true |
|
|
|
|
|
|
|
|
|
override fun isLast(): Boolean { |
|
|
|
|
return true |
|
|
|
|
} |
|
|
|
|
override fun isLast() = true |
|
|
|
|
|
|
|
|
|
override fun isBeforeFirst(): Boolean { |
|
|
|
|
return false |
|
|
|
|
} |
|
|
|
|
override fun isBeforeFirst() = true |
|
|
|
|
|
|
|
|
|
override fun isAfterLast(): Boolean { |
|
|
|
|
return false |
|
|
|
|
} |
|
|
|
|
override fun isAfterLast() = true |
|
|
|
|
|
|
|
|
|
override fun getColumnIndex(s: String): Int { |
|
|
|
|
return 0 |
|
|
|
|
} |
|
|
|
|
override fun getColumnIndex(s: String) = 0 |
|
|
|
|
|
|
|
|
|
@Throws(IllegalArgumentException::class) |
|
|
|
|
override fun getColumnIndexOrThrow(s: String): Int { |
|
|
|
|
throw UnsupportedOperationException("Not yet implemented") |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override fun getColumnName(i: Int): String? { |
|
|
|
|
return null |
|
|
|
|
} |
|
|
|
|
override fun getColumnName(i: Int) = null as String? |
|
|
|
|
|
|
|
|
|
override fun getColumnNames(): Array<String> { |
|
|
|
|
return arrayOf() |
|
|
|
|
} |
|
|
|
|
override fun getColumnNames() = arrayOf<String>() |
|
|
|
|
|
|
|
|
|
override fun getColumnCount(): Int { |
|
|
|
|
return 0 |
|
|
|
|
} |
|
|
|
|
override fun getColumnCount() = 0 |
|
|
|
|
|
|
|
|
|
override fun getBlob(i: Int): ByteArray { |
|
|
|
|
return ByteArray(0) |
|
|
|
|
} |
|
|
|
|
override fun getBlob(i: Int) = ByteArray(0) |
|
|
|
|
|
|
|
|
|
override fun getString(i: Int): String { |
|
|
|
|
return mData |
|
|
|
|
} |
|
|
|
|
override fun getString(i: Int) = mData |
|
|
|
|
|
|
|
|
|
override fun copyStringToBuffer( |
|
|
|
|
i: Int, |
|
|
|
@ -207,43 +167,26 @@ class ReaderProvider : ContentProvider() { |
|
|
|
|
) { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override fun getShort(i: Int): Short { |
|
|
|
|
return 0 |
|
|
|
|
} |
|
|
|
|
override fun getShort(i: Int) = 0.toShort() |
|
|
|
|
|
|
|
|
|
override fun getInt(i: Int): Int { |
|
|
|
|
return 0 |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override fun getLong(i: Int): Long { |
|
|
|
|
return 0 |
|
|
|
|
} |
|
|
|
|
override fun getInt(i: Int) = 0 |
|
|
|
|
|
|
|
|
|
override fun getFloat(i: Int): Float { |
|
|
|
|
return 0f |
|
|
|
|
} |
|
|
|
|
override fun getLong(i: Int) = 0L |
|
|
|
|
|
|
|
|
|
override fun getDouble(i: Int): Double { |
|
|
|
|
return 0.0 |
|
|
|
|
} |
|
|
|
|
override fun getFloat(i: Int) = 0F |
|
|
|
|
|
|
|
|
|
override fun getType(i: Int): Int { |
|
|
|
|
return 0 |
|
|
|
|
} |
|
|
|
|
override fun getDouble(i: Int) = 0.toDouble() |
|
|
|
|
|
|
|
|
|
override fun isNull(i: Int): Boolean { |
|
|
|
|
return false |
|
|
|
|
} |
|
|
|
|
override fun getType(i: Int) = 0 |
|
|
|
|
|
|
|
|
|
override fun isNull(i: Int) = false |
|
|
|
|
|
|
|
|
|
override fun deactivate() {} |
|
|
|
|
override fun requery(): Boolean { |
|
|
|
|
return false |
|
|
|
|
} |
|
|
|
|
override fun requery() = false |
|
|
|
|
|
|
|
|
|
override fun close() {} |
|
|
|
|
override fun isClosed(): Boolean { |
|
|
|
|
return false |
|
|
|
|
} |
|
|
|
|
override fun isClosed() = false |
|
|
|
|
|
|
|
|
|
override fun registerContentObserver(contentObserver: ContentObserver) {} |
|
|
|
|
override fun unregisterContentObserver(contentObserver: ContentObserver) {} |
|
|
|
@ -251,22 +194,14 @@ class ReaderProvider : ContentProvider() { |
|
|
|
|
override fun unregisterDataSetObserver(dataSetObserver: DataSetObserver) {} |
|
|
|
|
override fun setNotificationUri(contentResolver: ContentResolver, uri: Uri) {} |
|
|
|
|
|
|
|
|
|
override fun getNotificationUri(): Uri? { |
|
|
|
|
return null |
|
|
|
|
} |
|
|
|
|
override fun getNotificationUri() = null as Uri? |
|
|
|
|
|
|
|
|
|
override fun getWantsAllOnMoveCalls(): Boolean { |
|
|
|
|
return false |
|
|
|
|
} |
|
|
|
|
override fun getWantsAllOnMoveCalls() = false |
|
|
|
|
|
|
|
|
|
override fun setExtras(bundle: Bundle) {} |
|
|
|
|
override fun getExtras(): Bundle? { |
|
|
|
|
return null |
|
|
|
|
} |
|
|
|
|
override fun getExtras() = null as Bundle? |
|
|
|
|
|
|
|
|
|
override fun respond(bundle: Bundle): Bundle? { |
|
|
|
|
return null |
|
|
|
|
} |
|
|
|
|
override fun respond(bundle: Bundle) = null as Bundle? |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
} |