From 29f5bbdb49535e8da2a3a6d9882edc0ed4805eca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tam=C3=A1s=20Szab=C3=B3?= <tamas@szaboo.com> Date: Mon, 16 Apr 2018 21:01:03 +0200 Subject: [PATCH] implement room database --- .idea/caches/build_file_checksums.ser | Bin 534 -> 534 bytes app/build.gradle | 4 + .../xkcdbrowser/XKCDBrowserApplication.java | 3 +- .../XKCDBrowserApplicationComponent.java | 3 +- .../xkcd/xkcdbrowser/database/ComicsDAO.java | 29 +++++ .../xkcdbrowser/database/ComicsDatabase.java | 11 ++ .../xkcd/xkcdbrowser/database/DBModule.java | 24 ++++ .../xkcd/xkcdbrowser/model/ComicStrip.java | 117 ++++++++++++++++++ .../ui/favorites/FavoritesPresenter.java | 4 + .../xkcdbrowser/ui/main/MainPresenter.java | 4 + 10 files changed, 197 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/me/szaki/xkcd/xkcdbrowser/database/ComicsDAO.java create mode 100644 app/src/main/java/me/szaki/xkcd/xkcdbrowser/database/ComicsDatabase.java create mode 100644 app/src/main/java/me/szaki/xkcd/xkcdbrowser/database/DBModule.java create mode 100644 app/src/main/java/me/szaki/xkcd/xkcdbrowser/model/ComicStrip.java diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 21bb70b1e77c7ab28abeba1ad2a1199d6b6992b1..8f14f62236928bf8e2632f06b29a268fffd1e151 100644 GIT binary patch delta 33 qcmbQnGL2=z43_gpg|BR!lgTLf|3KG<O;Q3HnUA!b4a7=bRR93^7Y=m* delta 33 pcmbQnGL2=z43=Xi|MfP`$z&ANO!a=!m7m!xH{0-t)4qkbD*)z?4wL`@ diff --git a/app/build.gradle b/app/build.gradle index 25a302d..8c0c4cd 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 dc11a72..0223251 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 baf1013..a90d078 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 0000000..dae5aa3 --- /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 0000000..92a078f --- /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 0000000..9be5101 --- /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 0000000..bc4b3dc --- /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 87d4db8..3aeda6a 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 1dcf930..b189883 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); -- GitLab