Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ### MovieProvider
- package com.ogi.submission4.moviereview.provider
- import android.content.ContentProvider
- import android.content.ContentUris
- import android.content.ContentValues
- import android.content.UriMatcher
- import android.database.Cursor
- import android.net.Uri
- import com.ogi.submission4.moviereview.model.database.MovieReviewDB
- import com.ogi.submission4.moviereview.model.movie.entity.MovieData
- class MovieProvider: ContentProvider() {
- private val AUTHORITY = "com.ogi.submission4.moviereview"
- private val MOVIES = 1
- private val MOVIE_ITEM = 2
- private lateinit var database: MovieReviewDB
- private val MATCHER = UriMatcher(UriMatcher.NO_MATCH)
- private val uriMatcher = MATCHER.apply {
- addURI(AUTHORITY, "movies", MOVIES)
- addURI(AUTHORITY, "movies/#", MOVIE_ITEM)
- }
- override fun insert(uri: Uri, values: ContentValues?): Uri? {
- when(MATCHER.match(uri)){
- MOVIES -> {
- if (context == null) return null
- val id = database.movieDao().insert(MovieData.fromContentValues(values))
- context?.contentResolver?.notifyChange(uri, null)
- return ContentUris.withAppendedId(uri, id)
- }
- MOVIE_ITEM -> throw IllegalArgumentException("Invalid URI, cannot insert with ID: " + uri)
- else -> throw IllegalArgumentException("Unknown URI: " + uri)
- }
- }
- override fun query(p0: Uri, p1: Array<String>?, p2: String?, p3: Array<String>?, p4: String?): Cursor? {
- TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
- }
- override fun onCreate(): Boolean {
- TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
- }
- override fun update(p0: Uri, p1: ContentValues?, p2: String?, p3: Array<String>?): Int {
- TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
- }
- override fun delete(p0: Uri, p1: String?, p2: Array<String>?): Int {
- TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
- }
- override fun getType(p0: Uri): String? {
- TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
- }
- }
- ### MovieDao
- package com.ogi.submission4.moviereview.model.database.dao
- import android.arch.persistence.room.*
- import android.arch.persistence.room.OnConflictStrategy.REPLACE
- import android.database.Cursor
- import com.ogi.submission4.moviereview.model.movie.entity.MovieData
- @Dao
- interface MovieDao {
- @get:Query("SELECT * FROM movies")
- val all: List<MovieData>
- @Query("SELECT * FROM movies WHERE id = :id")
- fun getById(id: Int?): MovieData
- @Insert(onConflict = REPLACE)
- fun insert(movie: MovieData)
- @Delete
- fun delete(movie: MovieData)
- @Query("DELETE FROM movies WHERE id = :id")
- fun deleteById(id: Long): Int
- @Query("SELECT * FROM movies")
- fun allFavorite(): Cursor
- @Query("SELECT * FROM movies WHERE id = :id")
- fun getFavoriteById(id: Long): Cursor
- @Update
- fun update(movie: MovieData): Int
- }
- ### MovieData
- package com.ogi.submission4.moviereview.model.movie.entity
- import android.arch.persistence.room.ColumnInfo
- import android.arch.persistence.room.Entity
- import android.arch.persistence.room.PrimaryKey
- import android.content.ContentValues
- import android.os.Parcel
- import android.os.Parcelable
- import com.google.gson.annotations.SerializedName
- @Entity(tableName = "movies")
- class MovieData(
- @PrimaryKey(autoGenerate = false)
- @ColumnInfo(name = "id")
- var id: Int? = null,
- @ColumnInfo(name = "original_title")
- @SerializedName("original_title")
- var originalTitle: String? = null,
- @ColumnInfo(name = "overview")
- var overview: String? = null,
- @ColumnInfo(name = "vote_average")
- @SerializedName("vote_average")
- var voteAverage: Float = 0f,
- @ColumnInfo(name = "poster_path")
- @SerializedName("poster_path")
- var posterPath: String? = null,
- @ColumnInfo(name = "backdrop_path")
- @SerializedName("backdrop_path")
- var backdropPath: String? = null,
- @ColumnInfo(name = "release_date")
- @SerializedName("release_date")
- var releaseDate: String? = null
- ) : Parcelable {
- constructor(source: Parcel) : this(
- source.readValue(Int::class.java.classLoader) as Int?,
- source.readString(),
- source.readString(),
- source.readFloat(),
- source.readString(),
- source.readString(),
- source.readString()
- )
- override fun describeContents() = 0
- override fun writeToParcel(dest: Parcel, flags: Int) = with(dest) {
- writeValue(id)
- writeString(originalTitle)
- writeString(overview)
- writeFloat(voteAverage)
- writeString(posterPath)
- writeString(backdropPath)
- writeString(releaseDate)
- }
- companion object {
- @JvmField
- val CREATOR: Parcelable.Creator<MovieData> = object : Parcelable.Creator<MovieData> {
- override fun createFromParcel(source: Parcel): MovieData =
- MovieData(source)
- override fun newArray(size: Int): Array<MovieData?> = arrayOfNulls(size)
- }
- fun fromContentValues(values: ContentValues?): MovieData {
- return MovieData(
- values?.getAsInteger("id"),
- values?.getAsString("title"),
- values?.getAsString("overview"),
- values!!.getAsFloat("vote_average"),
- values.getAsString("poster_path"),
- values.getAsString("backdrop_path"),
- values.getAsString("release_date")
- )
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement