mirror of
https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
synced 2025-10-06 13:59:49 +02:00
Refactored all the other classes to support multi user. Clearing the app data is required before launching the app.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
|
@@ -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() {
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user