diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 21bb70b1e77c7ab28abeba1ad2a1199d6b6992b1..8f14f62236928bf8e2632f06b29a268fffd1e151 100644 Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ diff --git a/app/build.gradle b/app/build.gradle index 25a302d938d29dd052fdaa17e9f10ef6c2a87716..8c0c4cd1a7f095c0dbda101a487cf45821af03d1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -45,5 +45,9 @@ dependencies { annotationProcessor 'com.google.dagger:dagger-android-processor:2.11' implementation 'com.google.dagger:dagger-android:2.11' compileOnly 'javax.annotation:jsr250-api:1.0' + + // Room + implementation 'android.arch.persistence.room:runtime:1.0.0' + annotationProcessor 'android.arch.persistence.room:compiler:1.0.0' } diff --git a/app/src/main/java/me/szaki/xkcd/xkcdbrowser/XKCDBrowserApplication.java b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/XKCDBrowserApplication.java index dc11a728393dfb9e6272e6f4362fe9e510c65552..02232510e2d10fea1e2ed573f559876f5fcf1f3e 100644 --- a/app/src/main/java/me/szaki/xkcd/xkcdbrowser/XKCDBrowserApplication.java +++ b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/XKCDBrowserApplication.java @@ -2,6 +2,7 @@ package me.szaki.xkcd.xkcdbrowser; import android.app.Application; +import me.szaki.xkcd.xkcdbrowser.database.DBModule; import me.szaki.xkcd.xkcdbrowser.ui.UIModule; public class XKCDBrowserApplication extends Application { @@ -10,6 +11,6 @@ public class XKCDBrowserApplication extends Application { @Override public void onCreate() { super.onCreate(); - injector = DaggerXKCDBrowserApplicationComponent.builder().uIModule(new UIModule(this)).build(); + injector = DaggerXKCDBrowserApplicationComponent.builder().uIModule(new UIModule(this)).dBModule(new DBModule(this)).build(); } } diff --git a/app/src/main/java/me/szaki/xkcd/xkcdbrowser/XKCDBrowserApplicationComponent.java b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/XKCDBrowserApplicationComponent.java index baf10132a8f6c4734546f382637543a31353f623..a90d0783dd69df9370dcf918e12744b4bc742c1a 100644 --- a/app/src/main/java/me/szaki/xkcd/xkcdbrowser/XKCDBrowserApplicationComponent.java +++ b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/XKCDBrowserApplicationComponent.java @@ -4,6 +4,7 @@ package me.szaki.xkcd.xkcdbrowser; import javax.inject.Singleton; import dagger.Component; +import me.szaki.xkcd.xkcdbrowser.database.DBModule; import me.szaki.xkcd.xkcdbrowser.interactor.InteractorModule; import me.szaki.xkcd.xkcdbrowser.interactor.comics.ComicsInteractor; import me.szaki.xkcd.xkcdbrowser.ui.UIModule; @@ -12,7 +13,7 @@ import me.szaki.xkcd.xkcdbrowser.ui.favorites.FavoritesActivity; import me.szaki.xkcd.xkcdbrowser.ui.main.MainActivity; @Singleton -@Component(modules = {UIModule.class, InteractorModule.class}) +@Component(modules = {UIModule.class, InteractorModule.class, DBModule.class}) public interface XKCDBrowserApplicationComponent { void inject(MainActivity mainActivity); diff --git a/app/src/main/java/me/szaki/xkcd/xkcdbrowser/database/ComicsDAO.java b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/database/ComicsDAO.java new file mode 100644 index 0000000000000000000000000000000000000000..dae5aa329d509c06f169a1e0f9b649b99afc0157 --- /dev/null +++ b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/database/ComicsDAO.java @@ -0,0 +1,29 @@ +package me.szaki.xkcd.xkcdbrowser.database; + +import android.arch.persistence.room.Dao; +import android.arch.persistence.room.Delete; +import android.arch.persistence.room.Insert; +import android.arch.persistence.room.Query; +import android.arch.persistence.room.Update; + +import java.util.List; + +import me.szaki.xkcd.xkcdbrowser.model.ComicStrip; + +@Dao +public interface ComicsDAO { + @Query("SELECT * FROM ComicStrip") + public List<ComicStrip> getAllComics(); + + @Query("SELECT * FROM ComicStrip WHERE id = :id") + public ComicStrip getComic(Long id); + + @Insert + public void insertAll(ComicStrip... comic); + + @Update + public void update(ComicStrip comic); + + @Delete + public void delete(ComicStrip comic); +} diff --git a/app/src/main/java/me/szaki/xkcd/xkcdbrowser/database/ComicsDatabase.java b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/database/ComicsDatabase.java new file mode 100644 index 0000000000000000000000000000000000000000..92a078f4aaa05d8d9bfe4901f1a1b36ff567564c --- /dev/null +++ b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/database/ComicsDatabase.java @@ -0,0 +1,11 @@ +package me.szaki.xkcd.xkcdbrowser.database; + +import android.arch.persistence.room.Database; +import android.arch.persistence.room.RoomDatabase; + +import me.szaki.xkcd.xkcdbrowser.model.ComicStrip; + +@Database(entities = {ComicStrip.class}, version = 1) +public abstract class ComicsDatabase extends RoomDatabase { + public abstract ComicsDAO getDAO(); +} \ No newline at end of file diff --git a/app/src/main/java/me/szaki/xkcd/xkcdbrowser/database/DBModule.java b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/database/DBModule.java new file mode 100644 index 0000000000000000000000000000000000000000..9be5101955f36cfc0fead4524390ceb54e8074cf --- /dev/null +++ b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/database/DBModule.java @@ -0,0 +1,24 @@ +package me.szaki.xkcd.xkcdbrowser.database; + +import android.arch.persistence.room.Room; +import android.content.Context; + +import javax.inject.Singleton; + +import dagger.Module; +import dagger.Provides; + +@Module +public class DBModule { + private Context context; + + public DBModule(Context context) { + this.context = context; + } + + @Provides + @Singleton + public ComicsDatabase provideComicsDatabase() { + return Room.databaseBuilder(this.context, ComicsDatabase.class, "ComicStrip").build(); + } +} diff --git a/app/src/main/java/me/szaki/xkcd/xkcdbrowser/model/ComicStrip.java b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/model/ComicStrip.java new file mode 100644 index 0000000000000000000000000000000000000000..bc4b3dc0ca192b9b8dcff4a69089366af400f978 --- /dev/null +++ b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/model/ComicStrip.java @@ -0,0 +1,117 @@ +package me.szaki.xkcd.xkcdbrowser.model; + +import android.arch.persistence.room.Entity; +import android.arch.persistence.room.PrimaryKey; + +@Entity +public class ComicStrip { + @PrimaryKey(autoGenerate = true) + int id; + String month; + Long num; + String link; + String year; + String news; + String safe_title; + String transcript; + String alt; + String img; + String title; + String day; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getMonth() { + return month; + } + + public void setMonth(String month) { + this.month = month; + } + + public Long getNum() { + return num; + } + + public void setNum(Long num) { + this.num = num; + } + + public String getLink() { + return link; + } + + public void setLink(String link) { + this.link = link; + } + + public String getYear() { + return year; + } + + public void setYear(String year) { + this.year = year; + } + + public String getNews() { + return news; + } + + public void setNews(String news) { + this.news = news; + } + + public String getSafe_title() { + return safe_title; + } + + public void setSafe_title(String safe_title) { + this.safe_title = safe_title; + } + + public String getTranscript() { + return transcript; + } + + public void setTranscript(String transcript) { + this.transcript = transcript; + } + + public String getAlt() { + return alt; + } + + public void setAlt(String alt) { + this.alt = alt; + } + + public String getImg() { + return img; + } + + public void setImg(String img) { + this.img = img; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getDay() { + return day; + } + + public void setDay(String day) { + this.day = day; + } +} diff --git a/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/favorites/FavoritesPresenter.java b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/favorites/FavoritesPresenter.java index 87d4db82d3a4d0a2d2c866d9cf1a83f6636b3779..3aeda6ae2d58aff3d034d945a1646e73840b6351 100644 --- a/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/favorites/FavoritesPresenter.java +++ b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/favorites/FavoritesPresenter.java @@ -3,6 +3,7 @@ package me.szaki.xkcd.xkcdbrowser.ui.favorites; import javax.inject.Inject; +import me.szaki.xkcd.xkcdbrowser.database.ComicsDatabase; import me.szaki.xkcd.xkcdbrowser.interactor.comics.ComicsInteractor; import me.szaki.xkcd.xkcdbrowser.ui.Presenter; @@ -10,6 +11,9 @@ public class FavoritesPresenter extends Presenter<FavoritesScreen> { @Inject ComicsInteractor comicsInteractor; + @Inject + ComicsDatabase db; + @Override public void attachScreen(FavoritesScreen screen) { super.attachScreen(screen); diff --git a/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/main/MainPresenter.java b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/main/MainPresenter.java index 1dcf930fc6d42073aa1250efd01a66f314f5c6eb..b18988394bd36d314ec890f7a6acb6945db08cde 100644 --- a/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/main/MainPresenter.java +++ b/app/src/main/java/me/szaki/xkcd/xkcdbrowser/ui/main/MainPresenter.java @@ -3,6 +3,7 @@ package me.szaki.xkcd.xkcdbrowser.ui.main; import javax.inject.Inject; +import me.szaki.xkcd.xkcdbrowser.database.ComicsDatabase; import me.szaki.xkcd.xkcdbrowser.interactor.comics.ComicsInteractor; import me.szaki.xkcd.xkcdbrowser.ui.Presenter; @@ -10,6 +11,9 @@ public class MainPresenter extends Presenter<MainScreen> { @Inject ComicsInteractor comicsInteractor; + @Inject + ComicsDatabase db; + @Override public void attachScreen(MainScreen screen) { super.attachScreen(screen);