From 425bc857cfe094d8b9be5815030ef3e6b0cf173d Mon Sep 17 00:00:00 2001 From: Alex Ning Date: Wed, 7 Aug 2019 23:28:02 +0800 Subject: Refactored all the other classes to support multi user. Clearing the app data is required before launching the app. --- .../SubscribedSubredditDao.java | 12 +++++----- .../SubscribedSubredditData.java | 19 +++++++++++++-- .../SubscribedSubredditRepository.java | 13 +++++----- .../SubscribedSubredditRoomDatabase.java | 26 -------------------- .../SubscribedSubredditViewModel.java | 28 ++++++++++++++++++++-- 5 files changed, 56 insertions(+), 42 deletions(-) delete mode 100644 app/src/main/java/SubscribedSubredditDatabase/SubscribedSubredditRoomDatabase.java (limited to 'app/src/main/java/SubscribedSubredditDatabase') 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> getAllSubscribedSubreddits(); + @Query("SELECT * from subscribed_subreddits WHERE username = :accountName ORDER BY name COLLATE NOCASE ASC") + LiveData> 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> 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> 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> 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 create(@NonNull Class modelClass) { + return (T) new SubscribedSubredditViewModel(mApplication, mRedditDataRoomDatabase, mAccountName); + } + } } -- cgit v1.2.3