aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java/SubscribedSubredditDatabase
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/SubscribedSubredditDatabase')
-rw-r--r--app/src/main/java/SubscribedSubredditDatabase/SubscribedSubredditDao.java12
-rw-r--r--app/src/main/java/SubscribedSubredditDatabase/SubscribedSubredditData.java19
-rw-r--r--app/src/main/java/SubscribedSubredditDatabase/SubscribedSubredditRepository.java13
-rw-r--r--app/src/main/java/SubscribedSubredditDatabase/SubscribedSubredditRoomDatabase.java26
-rw-r--r--app/src/main/java/SubscribedSubredditDatabase/SubscribedSubredditViewModel.java28
5 files changed, 56 insertions, 42 deletions
diff --git a/app/src/main/java/SubscribedSubredditDatabase/SubscribedSubredditDao.java b/app/src/main/java/SubscribedSubredditDatabase/SubscribedSubredditDao.java
index 3a5aa9be..6ddaf835 100644
--- a/app/src/main/java/SubscribedSubredditDatabase/SubscribedSubredditDao.java
+++ b/app/src/main/java/SubscribedSubredditDatabase/SubscribedSubredditDao.java
@@ -16,12 +16,12 @@ public interface SubscribedSubredditDao {
@Query("DELETE FROM subscribed_subreddits")
void deleteAllSubscribedSubreddits();
- @Query("SELECT * from subscribed_subreddits ORDER BY name COLLATE NOCASE ASC")
- LiveData<List<SubscribedSubredditData>> getAllSubscribedSubreddits();
+ @Query("SELECT * from subscribed_subreddits WHERE username = :accountName ORDER BY name COLLATE NOCASE ASC")
+ LiveData<List<SubscribedSubredditData>> getAllSubscribedSubreddits(String accountName);
- @Query("SELECT * from subscribed_subreddits WHERE name = :subredditName COLLATE NOCASE LIMIT 1")
- SubscribedSubredditData getSubscribedSubreddit(String subredditName);
+ @Query("SELECT * from subscribed_subreddits WHERE name = :subredditName AND username = :accountName COLLATE NOCASE LIMIT 1")
+ SubscribedSubredditData getSubscribedSubreddit(String subredditName, String accountName);
- @Query("DELETE FROM subscribed_subreddits WHERE name = :subredditName")
- void deleteSubscribedSubreddit(String subredditName);
+ @Query("DELETE FROM subscribed_subreddits WHERE name = :subredditName AND username = :accountName")
+ void deleteSubscribedSubreddit(String subredditName, String accountName);
}
diff --git a/app/src/main/java/SubscribedSubredditDatabase/SubscribedSubredditData.java b/app/src/main/java/SubscribedSubredditDatabase/SubscribedSubredditData.java
index 4c6f1a49..bf2a87b8 100644
--- a/app/src/main/java/SubscribedSubredditDatabase/SubscribedSubredditData.java
+++ b/app/src/main/java/SubscribedSubredditDatabase/SubscribedSubredditData.java
@@ -2,10 +2,14 @@ package SubscribedSubredditDatabase;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
+import androidx.room.ForeignKey;
import androidx.room.PrimaryKey;
import androidx.annotation.NonNull;
-@Entity(tableName = "subscribed_subreddits")
+import Account.Account;
+
+@Entity(tableName = "subscribed_subreddits", foreignKeys = @ForeignKey(entity = Account.class, parentColumns = "username",
+ childColumns = "username", onDelete = ForeignKey.CASCADE))
public class SubscribedSubredditData {
@PrimaryKey
@@ -16,11 +20,14 @@ public class SubscribedSubredditData {
private String name;
@ColumnInfo(name = "icon")
private String iconUrl;
+ @ColumnInfo(name = "username")
+ private String username;
- public SubscribedSubredditData(@NonNull String id, String name, String iconUrl) {
+ public SubscribedSubredditData(@NonNull String id, String name, String iconUrl, String username) {
this.id = id;
this.name = name;
this.iconUrl = iconUrl;
+ this.username = username;
}
@NonNull
@@ -35,4 +42,12 @@ public class SubscribedSubredditData {
public String getIconUrl() {
return iconUrl;
}
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getUsername() {
+ return username;
+ }
}
diff --git a/app/src/main/java/SubscribedSubredditDatabase/SubscribedSubredditRepository.java b/app/src/main/java/SubscribedSubredditDatabase/SubscribedSubredditRepository.java
index 02bb7881..1cbf8824 100644
--- a/app/src/main/java/SubscribedSubredditDatabase/SubscribedSubredditRepository.java
+++ b/app/src/main/java/SubscribedSubredditDatabase/SubscribedSubredditRepository.java
@@ -1,19 +1,20 @@
package SubscribedSubredditDatabase;
-import android.app.Application;
-import androidx.lifecycle.LiveData;
import android.os.AsyncTask;
+import androidx.lifecycle.LiveData;
+
import java.util.List;
+import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
+
public class SubscribedSubredditRepository {
private SubscribedSubredditDao mSubscribedSubredditDao;
private LiveData<List<SubscribedSubredditData>> mAllSubscribedSubreddits;
- SubscribedSubredditRepository(Application application) {
- SubscribedSubredditRoomDatabase db = SubscribedSubredditRoomDatabase.getDatabase(application);
- mSubscribedSubredditDao = db.subscribedSubredditDao();
- mAllSubscribedSubreddits = mSubscribedSubredditDao.getAllSubscribedSubreddits();
+ SubscribedSubredditRepository(RedditDataRoomDatabase redditDataRoomDatabase, String accountName) {
+ mSubscribedSubredditDao = redditDataRoomDatabase.subscribedSubredditDao();
+ mAllSubscribedSubreddits = mSubscribedSubredditDao.getAllSubscribedSubreddits(accountName);
}
LiveData<List<SubscribedSubredditData>> getAllSubscribedSubreddits() {
diff --git a/app/src/main/java/SubscribedSubredditDatabase/SubscribedSubredditRoomDatabase.java b/app/src/main/java/SubscribedSubredditDatabase/SubscribedSubredditRoomDatabase.java
deleted file mode 100644
index 48602fcc..00000000
--- a/app/src/main/java/SubscribedSubredditDatabase/SubscribedSubredditRoomDatabase.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package SubscribedSubredditDatabase;
-
-import androidx.room.Database;
-import androidx.room.Room;
-import androidx.room.RoomDatabase;
-import android.content.Context;
-
-@Database(entities = {SubscribedSubredditData.class}, version = 1)
-public abstract class SubscribedSubredditRoomDatabase extends RoomDatabase {
- private static SubscribedSubredditRoomDatabase INSTANCE;
-
- public abstract SubscribedSubredditDao subscribedSubredditDao();
-
- public static SubscribedSubredditRoomDatabase getDatabase(final Context context) {
- if(INSTANCE == null) {
- synchronized (SubscribedSubredditRoomDatabase.class) {
- if(INSTANCE == null) {
- INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
- SubscribedSubredditRoomDatabase.class, "subscribed_subreddits")
- .build();
- }
- }
- }
- return INSTANCE;
- }
-}
diff --git a/app/src/main/java/SubscribedSubredditDatabase/SubscribedSubredditViewModel.java b/app/src/main/java/SubscribedSubredditDatabase/SubscribedSubredditViewModel.java
index 9ed8ac93..d062f9d9 100644
--- a/app/src/main/java/SubscribedSubredditDatabase/SubscribedSubredditViewModel.java
+++ b/app/src/main/java/SubscribedSubredditDatabase/SubscribedSubredditViewModel.java
@@ -1,18 +1,24 @@
package SubscribedSubredditDatabase;
import android.app.Application;
+
+import androidx.annotation.NonNull;
import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData;
+import androidx.lifecycle.ViewModel;
+import androidx.lifecycle.ViewModelProvider;
import java.util.List;
+import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
+
public class SubscribedSubredditViewModel extends AndroidViewModel {
private SubscribedSubredditRepository mSubscribedSubredditRepository;
private LiveData<List<SubscribedSubredditData>> mAllSubscribedSubreddits;
- public SubscribedSubredditViewModel(Application application) {
+ public SubscribedSubredditViewModel(Application application, RedditDataRoomDatabase redditDataRoomDatabase, String accountName) {
super(application);
- mSubscribedSubredditRepository = new SubscribedSubredditRepository(application);
+ mSubscribedSubredditRepository = new SubscribedSubredditRepository(redditDataRoomDatabase, accountName);
mAllSubscribedSubreddits = mSubscribedSubredditRepository.getAllSubscribedSubreddits();
}
@@ -23,4 +29,22 @@ public class SubscribedSubredditViewModel extends AndroidViewModel {
public void insert(SubscribedSubredditData subscribedSubredditData) {
mSubscribedSubredditRepository.insert(subscribedSubredditData);
}
+
+ public static class Factory extends ViewModelProvider.NewInstanceFactory {
+ private Application mApplication;
+ private RedditDataRoomDatabase mRedditDataRoomDatabase;
+ private String mAccountName;
+
+ public Factory(Application application, RedditDataRoomDatabase redditDataRoomDatabase, String accountName) {
+ this.mApplication = application;
+ this.mRedditDataRoomDatabase = redditDataRoomDatabase;
+ this.mAccountName = accountName;
+ }
+
+ @NonNull
+ @Override
+ public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
+ return (T) new SubscribedSubredditViewModel(mApplication, mRedditDataRoomDatabase, mAccountName);
+ }
+ }
}