Skip to content

Movie Detail Crash Bug Fix and Movie By Category Added #23

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,15 @@
</intent-filter>
</activity>
<activity
android:name=".ui.detail.MovieDetailActivity"
android:name=".ui.detail.popular.MovieDetailActivity"
android:theme="@style/DetailTheme" />

<activity
android:name=".ui.detail.science.MovieScienceDetailActivity"
android:theme="@style/DetailTheme" />

<activity
android:name=".ui.detail.comedy.MovieComedyDetailActivity"
android:theme="@style/DetailTheme" />
</application>

Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,21 @@
package iammert.com.androidarchitecture.data;

import androidx.lifecycle.LiveData;
import androidx.annotation.NonNull;
import androidx.lifecycle.LiveData;

import java.util.List;

import javax.inject.Inject;

import iammert.com.androidarchitecture.data.local.dao.MovieDao;
import iammert.com.androidarchitecture.data.local.entity.ComedyMovieEntity;
import iammert.com.androidarchitecture.data.local.entity.MovieEntity;
import iammert.com.androidarchitecture.data.local.entity.ScienceMovieEntity;
import iammert.com.androidarchitecture.data.remote.ApiConstants;
import iammert.com.androidarchitecture.data.remote.MovieDBService;
import iammert.com.androidarchitecture.data.remote.model.ComedyMoviesResponse;
import iammert.com.androidarchitecture.data.remote.model.MoviesResponse;
import iammert.com.androidarchitecture.data.remote.model.ScienceMoviesResponse;
import retrofit2.Call;

/**
Expand Down Expand Up @@ -50,7 +55,59 @@ protected Call<MoviesResponse> createCall() {
}.getAsLiveData();
}

public LiveData<MovieEntity> getMovie(int id){
public LiveData<Resource<List<ComedyMovieEntity>>> loadComedyMovies() {
return new NetworkBoundResource<List<ComedyMovieEntity>, ComedyMoviesResponse>() {

@Override
protected void saveCallResult(@NonNull ComedyMoviesResponse item) {
movieDao.saveComedyMovies(item.getResults());
}

@NonNull
@Override
protected LiveData<List<ComedyMovieEntity>> loadFromDb() {
return movieDao.loadComedyMovies();
}

@NonNull
@Override
protected Call<ComedyMoviesResponse> createCall() {
return movieDBService.loadComedyMoviesByGenre(ApiConstants.COMEDY_GENRE_ID);
}
}.getAsLiveData();
}

public LiveData<Resource<List<ScienceMovieEntity>>> loadScienceMovies() {
return new NetworkBoundResource<List<ScienceMovieEntity>, ScienceMoviesResponse>() {

@Override
protected void saveCallResult(@NonNull ScienceMoviesResponse item) {
movieDao.saveScienceMovies(item.getResults());
}

@NonNull
@Override
protected LiveData<List<ScienceMovieEntity>> loadFromDb() {
return movieDao.loadScienceMovie();
}

@NonNull
@Override
protected Call<ScienceMoviesResponse> createCall() {
return movieDBService.loadScienceMoviesByGenre(ApiConstants.SCIENCE_GENRE_ID);
}
}.getAsLiveData();
}

public LiveData<MovieEntity> getMovie(int id) {
return movieDao.getMovie(id);
}

public LiveData<ComedyMovieEntity> getComedyMovie(int id) {
return movieDao.getComedyMovie(id);
}

public LiveData<ScienceMovieEntity> getScienceMovie(int id) {
return movieDao.getScienceMovie(id);
}
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,31 @@
package iammert.com.androidarchitecture.data.local;

import androidx.annotation.NonNull;
import androidx.room.Database;
import androidx.room.RoomDatabase;
import androidx.room.migration.Migration;
import androidx.sqlite.db.SupportSQLiteDatabase;

import iammert.com.androidarchitecture.data.local.dao.MovieDao;
import iammert.com.androidarchitecture.data.local.entity.ComedyMovieEntity;
import iammert.com.androidarchitecture.data.local.entity.MovieEntity;
import iammert.com.androidarchitecture.data.local.entity.PopularMovieEntity;
import iammert.com.androidarchitecture.data.local.entity.ScienceMovieEntity;

/**
* Created by mertsimsek on 19/05/2017.
*/
@Database(entities = {MovieEntity.class}, version = 2)
public abstract class MovieDatabase extends RoomDatabase{
@Database(entities = {MovieEntity.class, ComedyMovieEntity.class, PopularMovieEntity.class, ScienceMovieEntity.class}, version = 3)
public abstract class MovieDatabase extends RoomDatabase {

public abstract MovieDao movieDao();

public static final Migration MIGRATION_1_3 = new Migration(1, 3) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase database) {
database.execSQL("CREATE TABLE 'comedy_movies' (_id INTEGER NOT NULL, overview TEXT, voteAverage REAL NOT NULL, voteCount INTEGER NOT NULL, backdropPath TEXT, posterPath TEXT, adult INTEGER NOT NULL, title TEXT, originalLanguage TEXT, originalTitle TEXT, PRIMARY KEY('_id'))");
database.execSQL("CREATE TABLE 'science_movies' (_id INTEGER NOT NULL, overview TEXT, voteAverage REAL NOT NULL, voteCount INTEGER NOT NULL, backdropPath TEXT, posterPath TEXT, adult INTEGER NOT NULL, title TEXT, originalLanguage TEXT, originalTitle TEXT, PRIMARY KEY('_id'))");
database.execSQL("CREATE TABLE 'popular_movies' (_id INTEGER NOT NULL, overview TEXT, voteAverage REAL NOT NULL, voteCount INTEGER NOT NULL, backdropPath TEXT, posterPath TEXT, adult INTEGER NOT NULL, title TEXT, originalLanguage TEXT, originalTitle TEXT, PRIMARY KEY('_id'))");
}
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@

import java.util.List;

import iammert.com.androidarchitecture.data.local.entity.ComedyMovieEntity;
import iammert.com.androidarchitecture.data.local.entity.MovieEntity;
import iammert.com.androidarchitecture.data.local.entity.PopularMovieEntity;
import iammert.com.androidarchitecture.data.local.entity.ScienceMovieEntity;

/**
* Created by mertsimsek on 19/05/2017.
Expand All @@ -19,10 +22,37 @@ public interface MovieDao {
@Query("SELECT * FROM movies")
LiveData<List<MovieEntity>> loadMovies();

@Query("SELECT * FROM comedy_movies")
LiveData<List<ComedyMovieEntity>> loadComedyMovies();

@Query("SELECT * FROM popular_movies")
LiveData<List<PopularMovieEntity>> loadPopularMovies();

@Query("SELECT * FROM science_movies")
LiveData<List<ScienceMovieEntity>> loadScienceMovie();

@Insert(onConflict = OnConflictStrategy.REPLACE)
void saveMovies(List<MovieEntity> movieEntities);

@Insert(onConflict = OnConflictStrategy.REPLACE)
void saveComedyMovies(List<ComedyMovieEntity> comedyMovieEntities);

@Insert(onConflict = OnConflictStrategy.REPLACE)
void savePopularMovies(List<PopularMovieEntity> popularMovieEntities);

@Insert(onConflict = OnConflictStrategy.REPLACE)
void saveScienceMovies(List<ScienceMovieEntity> scienceMovieEntities);

@Query("SELECT * FROM movies WHERE id=:id")
LiveData<MovieEntity> getMovie(int id);

@Query("SELECT * FROM comedy_movies WHERE _id=:id")
LiveData<ComedyMovieEntity> getComedyMovie(int id);

@Query("SELECT * FROM popular_movies WHERE _id=:id")
LiveData<PopularMovieEntity> getPopularMovie(int id);

@Query("SELECT * FROM science_movies WHERE _id=:id")
LiveData<ScienceMovieEntity> getScienceMovie(int id);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
package iammert.com.androidarchitecture.data.local.entity;

import androidx.room.Entity;
import androidx.room.PrimaryKey;

import com.google.gson.annotations.SerializedName;

/**
* Develop by mehmetbalbay on 09-08-2020.
*/

@Entity(tableName = "comedy_movies")
public class ComedyMovieEntity {

@PrimaryKey
@SerializedName("id")
private int _id;

@SerializedName("poster_path")
private String posterPath;

@SerializedName("adult")
private boolean adult;

@SerializedName("overview")
private String overview;

@SerializedName("original_title")
private String originalTitle;

@SerializedName("title")
private String title;

@SerializedName("vote_count")
private int voteCount;

@SerializedName("vote_average")
private double voteAverage;

@SerializedName("backdrop_path")
private String backdropPath;

@SerializedName("original_language")
private String originalLanguage;

public int getId() {
return _id;
}

public void setId(int id) {
this._id = id;
}

public String getPosterPath() {
return posterPath;
}

public void setPosterPath(String posterPath) {
this.posterPath = posterPath;
}

public boolean isAdult() {
return adult;
}

public void setAdult(boolean adult) {
this.adult = adult;
}

public String getOverview() {
return overview;
}

public void setOverview(String overview) {
this.overview = overview;
}

public String getOriginalTitle() {
return originalTitle;
}

public void setOriginalTitle(String originalTitle) {
this.originalTitle = originalTitle;
}

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

public int getVoteCount() {
return voteCount;
}

public void setVoteCount(int voteCount) {
this.voteCount = voteCount;
}

public double getVoteAverage() {
return voteAverage;
}

public void setVoteAverage(double voteAverage) {
this.voteAverage = voteAverage;
}

public String getBackdropPath() {
return backdropPath;
}

public void setBackdropPath(String backdropPath) {
this.backdropPath = backdropPath;
}

public String getOriginalLanguage() {
return originalLanguage;
}

public void setOriginalLanguage(String originalLanguage) {
this.originalLanguage = originalLanguage;
}
}
Loading