Refactored all the other classes to support multi user. Clearing the app data is required before launching the app.

This commit is contained in:
Alex Ning
2019-08-07 23:28:02 +08:00
parent 7f2bc01180
commit 425bc857cf
95 changed files with 1151 additions and 764 deletions

View File

@@ -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<List<SubscribedUserData>> getAllSubscribedUsers();
@Query("SELECT * FROM subscribed_users WHERE username = :accountName ORDER BY name COLLATE NOCASE ASC")
LiveData<List<SubscribedUserData>> 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);
}

View File

@@ -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;
}
}

View File

@@ -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<List<SubscribedUserData>> 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<List<SubscribedUserData>> getAllSubscribedSubreddits() {

View File

@@ -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;
}
}

View File

@@ -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<List<SubscribedUserData>> 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 extends ViewModel> T create(@NonNull Class<T> modelClass) {
return (T) new SubscribedUserViewModel(mApplication, mRedditDataRoomDatabase, mAccountName);
}
}
}