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. --- .../SubscribedUserDatabase/SubscribedUserDao.java | 12 +++++----- .../SubscribedUserDatabase/SubscribedUserData.java | 21 +++++++++++++--- .../SubscribedUserRepository.java | 13 +++++----- .../SubscribedUserRoomDatabase.java | 26 -------------------- .../SubscribedUserViewModel.java | 28 ++++++++++++++++++++-- 5 files changed, 57 insertions(+), 43 deletions(-) delete mode 100644 app/src/main/java/SubscribedUserDatabase/SubscribedUserRoomDatabase.java (limited to 'app/src/main/java/SubscribedUserDatabase') diff --git a/app/src/main/java/SubscribedUserDatabase/SubscribedUserDao.java b/app/src/main/java/SubscribedUserDatabase/SubscribedUserDao.java index 711b02a6..513a1ea4 100644 --- a/app/src/main/java/SubscribedUserDatabase/SubscribedUserDao.java +++ b/app/src/main/java/SubscribedUserDatabase/SubscribedUserDao.java @@ -16,12 +16,12 @@ public interface SubscribedUserDao { @Query("DELETE FROM subscribed_users") void deleteAllSubscribedUsers(); - @Query("SELECT * FROM subscribed_users ORDER BY name COLLATE NOCASE ASC") - LiveData> getAllSubscribedUsers(); + @Query("SELECT * FROM subscribed_users WHERE username = :accountName ORDER BY name COLLATE NOCASE ASC") + LiveData> getAllSubscribedUsers(String accountName); - @Query("SELECT * FROM subscribed_users WHERE name = :userName COLLATE NOCASE LIMIT 1") - SubscribedUserData getSubscribedUser(String userName); + @Query("SELECT * FROM subscribed_users WHERE name = :name AND username = :accountName COLLATE NOCASE LIMIT 1") + SubscribedUserData getSubscribedUser(String name, String accountName); - @Query("DELETE FROM subscribed_users WHERE name = :userName") - void deleteSubscribedUser(String userName); + @Query("DELETE FROM subscribed_users WHERE name = :name AND username = :accountName") + void deleteSubscribedUser(String name, String accountName); } diff --git a/app/src/main/java/SubscribedUserDatabase/SubscribedUserData.java b/app/src/main/java/SubscribedUserDatabase/SubscribedUserData.java index 98c5a971..8ea89e04 100644 --- a/app/src/main/java/SubscribedUserDatabase/SubscribedUserData.java +++ b/app/src/main/java/SubscribedUserDatabase/SubscribedUserData.java @@ -1,11 +1,15 @@ package SubscribedUserDatabase; +import androidx.annotation.NonNull; import androidx.room.ColumnInfo; import androidx.room.Entity; +import androidx.room.ForeignKey; import androidx.room.PrimaryKey; -import androidx.annotation.NonNull; -@Entity(tableName = "subscribed_users") +import Account.Account; + +@Entity(tableName = "subscribed_users", foreignKeys = @ForeignKey(entity = Account.class, parentColumns = "username", + childColumns = "username", onDelete = ForeignKey.CASCADE)) public class SubscribedUserData { @PrimaryKey @NonNull @@ -13,10 +17,13 @@ public class SubscribedUserData { private String name; @ColumnInfo(name = "icon") private String iconUrl; + @ColumnInfo(name = "username") + private String username; - public SubscribedUserData(@NonNull String name, String iconUrl) { + public SubscribedUserData(@NonNull String name, String iconUrl, String username) { this.name = name; this.iconUrl = iconUrl; + this.username = username; } @NonNull @@ -27,4 +34,12 @@ public class SubscribedUserData { 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/SubscribedUserDatabase/SubscribedUserRepository.java b/app/src/main/java/SubscribedUserDatabase/SubscribedUserRepository.java index 10549113..eb588958 100644 --- a/app/src/main/java/SubscribedUserDatabase/SubscribedUserRepository.java +++ b/app/src/main/java/SubscribedUserDatabase/SubscribedUserRepository.java @@ -1,19 +1,20 @@ package SubscribedUserDatabase; -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 SubscribedUserRepository { private SubscribedUserDao mSubscribedUserDao; private LiveData> mAllSubscribedUsers; - SubscribedUserRepository(Application application) { - SubscribedUserRoomDatabase db = SubscribedUserRoomDatabase.getDatabase(application); - mSubscribedUserDao = db.subscribedUserDao(); - mAllSubscribedUsers = mSubscribedUserDao.getAllSubscribedUsers(); + SubscribedUserRepository(RedditDataRoomDatabase redditDataRoomDatabase, String accountName) { + mSubscribedUserDao = redditDataRoomDatabase.subscribedUserDao(); + mAllSubscribedUsers = mSubscribedUserDao.getAllSubscribedUsers(accountName); } LiveData> getAllSubscribedSubreddits() { diff --git a/app/src/main/java/SubscribedUserDatabase/SubscribedUserRoomDatabase.java b/app/src/main/java/SubscribedUserDatabase/SubscribedUserRoomDatabase.java deleted file mode 100644 index 12e6fb90..00000000 --- a/app/src/main/java/SubscribedUserDatabase/SubscribedUserRoomDatabase.java +++ /dev/null @@ -1,26 +0,0 @@ -package SubscribedUserDatabase; - -import androidx.room.Database; -import androidx.room.Room; -import androidx.room.RoomDatabase; -import android.content.Context; - -@Database(entities = {SubscribedUserData.class}, version = 1) -public abstract class SubscribedUserRoomDatabase extends RoomDatabase { - private static SubscribedUserRoomDatabase INSTANCE; - - public abstract SubscribedUserDao subscribedUserDao(); - - public static SubscribedUserRoomDatabase getDatabase(final Context context) { - if(INSTANCE == null) { - synchronized (SubscribedUserRoomDatabase.class) { - if(INSTANCE == null) { - INSTANCE = Room.databaseBuilder(context.getApplicationContext(), - SubscribedUserRoomDatabase.class, "subscribed_users") - .build(); - } - } - } - return INSTANCE; - } -} diff --git a/app/src/main/java/SubscribedUserDatabase/SubscribedUserViewModel.java b/app/src/main/java/SubscribedUserDatabase/SubscribedUserViewModel.java index ed1db58f..387c918c 100644 --- a/app/src/main/java/SubscribedUserDatabase/SubscribedUserViewModel.java +++ b/app/src/main/java/SubscribedUserDatabase/SubscribedUserViewModel.java @@ -1,18 +1,24 @@ package SubscribedUserDatabase; 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 SubscribedUserViewModel extends AndroidViewModel { private SubscribedUserRepository mSubscribedUserRepository; private LiveData> mAllSubscribedUsers; - public SubscribedUserViewModel(Application application) { + public SubscribedUserViewModel(Application application, RedditDataRoomDatabase redditDataRoomDatabase, String accountName) { super(application); - mSubscribedUserRepository = new SubscribedUserRepository(application); + mSubscribedUserRepository = new SubscribedUserRepository(redditDataRoomDatabase, accountName); mAllSubscribedUsers = mSubscribedUserRepository.getAllSubscribedSubreddits(); } @@ -23,4 +29,22 @@ public class SubscribedUserViewModel extends AndroidViewModel { public void insert(SubscribedUserData subscribedUserData) { mSubscribedUserRepository.insert(subscribedUserData); } + + public static class Factory extends ViewModelProvider.NewInstanceFactory { + private Application mApplication; + private RedditDataRoomDatabase mRedditDataRoomDatabase; + private String mAccountName; + + public Factory(Application application, RedditDataRoomDatabase redditDataRoomDatabase, String accountName) { + mApplication = application; + mRedditDataRoomDatabase = redditDataRoomDatabase; + mAccountName = accountName; + } + + @NonNull + @Override + public T create(@NonNull Class modelClass) { + return (T) new SubscribedUserViewModel(mApplication, mRedditDataRoomDatabase, mAccountName); + } + } } -- cgit v1.2.3