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

@@ -1,13 +1,18 @@
package User;
import androidx.annotation.NonNull;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.annotation.NonNull;
import SubscribedUserDatabase.SubscribedUserData;
import androidx.room.PrimaryKey;
@Entity(tableName = "users")
public class UserData extends SubscribedUserData {
public class UserData {
@PrimaryKey
@NonNull
@ColumnInfo(name = "name")
private String name;
@ColumnInfo(name = "icon")
private String iconUrl;
@ColumnInfo(name = "banner")
private String banner;
@ColumnInfo(name = "karma")
@@ -20,7 +25,8 @@ public class UserData extends SubscribedUserData {
private boolean canBeFollowed;
public UserData(@NonNull String name, String iconUrl, String banner, int karma, boolean isGold, boolean isFriend, boolean canBeFollowed) {
super(name, iconUrl);
this.name = name;
this.iconUrl = iconUrl;
this.banner = banner;
this.karma = karma;
this.isGold = isGold;
@@ -28,6 +34,15 @@ public class UserData extends SubscribedUserData {
this.canBeFollowed = canBeFollowed;
}
@NonNull
public String getName() {
return name;
}
public String getIconUrl() {
return iconUrl;
}
public String getBanner() {
return banner;
}

View File

@@ -1,16 +1,17 @@
package User;
import android.app.Application;
import androidx.lifecycle.LiveData;
import android.os.AsyncTask;
import androidx.lifecycle.LiveData;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
public class UserRepository {
private UserDao mUserDao;
private LiveData<UserData> mUserLiveData;
UserRepository(Application application, String userName) {
mUserDao = UserRoomDatabase.getDatabase(application).userDao();
UserRepository(RedditDataRoomDatabase redditDataRoomDatabase, String userName) {
mUserDao = redditDataRoomDatabase.userDao();
mUserLiveData = mUserDao.getUserLiveData(userName);
}

View File

@@ -1,26 +0,0 @@
package User;
import androidx.room.Database;
import androidx.room.Room;
import androidx.room.RoomDatabase;
import android.content.Context;
@Database(entities = {UserData.class}, version = 1)
public abstract class UserRoomDatabase extends RoomDatabase {
private static UserRoomDatabase INSTANCE;
public abstract UserDao userDao();
public static UserRoomDatabase getDatabase(final Context context) {
if(INSTANCE == null) {
synchronized (UserRoomDatabase.class) {
if(INSTANCE == null) {
INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
UserRoomDatabase.class, "users")
.build();
}
}
}
return INSTANCE;
}
}

View File

@@ -7,13 +7,15 @@ import androidx.lifecycle.ViewModel;
import androidx.lifecycle.ViewModelProvider;
import androidx.annotation.NonNull;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
public class UserViewModel extends AndroidViewModel {
private UserRepository mSubredditRepository;
private LiveData<UserData> mUserLiveData;
public UserViewModel(Application application, String id) {
public UserViewModel(Application application, RedditDataRoomDatabase redditDataRoomDatabase, String id) {
super(application);
mSubredditRepository = new UserRepository(application, id);
mSubredditRepository = new UserRepository(redditDataRoomDatabase, id);
mUserLiveData = mSubredditRepository.getUserLiveData();
}
@@ -29,18 +31,19 @@ public class UserViewModel extends AndroidViewModel {
@NonNull
private final Application mApplication;
private final RedditDataRoomDatabase mRedditDataRoomDatabase;
private final String mUsername;
private final String userName;
public Factory(@NonNull Application application, String userName) {
public Factory(@NonNull Application application, RedditDataRoomDatabase redditDataRoomDatabase, String username) {
mApplication = application;
this.userName = userName;
mRedditDataRoomDatabase = redditDataRoomDatabase;
mUsername = username;
}
@Override
public <T extends ViewModel> T create(Class<T> modelClass) {
//noinspection unchecked
return (T) new UserViewModel(mApplication, userName);
return (T) new UserViewModel(mApplication, mRedditDataRoomDatabase, mUsername);
}
}
}