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,29 +1,49 @@
package SubredditDatabase;
import androidx.annotation.NonNull;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.annotation.NonNull;
import SubscribedSubredditDatabase.SubscribedSubredditData;
import androidx.room.PrimaryKey;
@Entity(tableName = "subreddits")
public class SubredditData extends SubscribedSubredditData {
public class SubredditData {
@PrimaryKey
@NonNull
@ColumnInfo(name = "id")
private String id;
@ColumnInfo(name = "name")
private String name;
@ColumnInfo(name = "icon")
private String iconUrl;
@ColumnInfo(name = "banner")
private String bannerUrl;
@ColumnInfo(name = "description")
private String description;
@ColumnInfo(name = "subscribers_count")
private int nSubscribers;
public SubredditData(@NonNull String id, String name, String iconUrl, String bannerUrl, String description, int nSubscribers) {
super(id, name, iconUrl);
this.id = id;
this.name = name;
this.iconUrl = iconUrl;
this.bannerUrl = bannerUrl;
this.description = description;
this.nSubscribers = nSubscribers;
}
@NonNull
public String getId() {
return id;
}
public String getName() {
return name;
}
public String getIconUrl() {
return iconUrl;
}
public String getBannerUrl() {
return bannerUrl;
}

View File

@@ -1,17 +1,17 @@
package SubredditDatabase;
import android.app.Application;
import androidx.lifecycle.LiveData;
import android.os.AsyncTask;
import androidx.lifecycle.LiveData;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
public class SubredditRepository {
private SubredditDao mSubredditDao;
private LiveData<SubredditData> mSubredditLiveData;
SubredditRepository(Application application, String subredditName) {
SubredditRoomDatabase db = SubredditRoomDatabase.getDatabase(application);
mSubredditDao = db.subredditDao();
SubredditRepository(RedditDataRoomDatabase redditDataRoomDatabase, String subredditName) {
mSubredditDao = redditDataRoomDatabase.subredditDao();
mSubredditLiveData = mSubredditDao.getSubredditLiveDataByName(subredditName);
}

View File

@@ -1,26 +0,0 @@
package SubredditDatabase;
import androidx.room.Database;
import androidx.room.Room;
import androidx.room.RoomDatabase;
import android.content.Context;
@Database(entities = {SubredditData.class}, version = 1)
public abstract class SubredditRoomDatabase extends RoomDatabase{
private static SubredditRoomDatabase INSTANCE;
public abstract SubredditDao subredditDao();
public static SubredditRoomDatabase getDatabase(final Context context) {
if(INSTANCE == null) {
synchronized (SubredditRoomDatabase.class) {
if(INSTANCE == null) {
INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
SubredditRoomDatabase.class, "subreddits")
.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 SubredditViewModel extends AndroidViewModel {
private SubredditRepository mSubredditRepository;
private LiveData<SubredditData> mSubredditLiveData;
public SubredditViewModel(Application application, String id) {
public SubredditViewModel(Application application, RedditDataRoomDatabase redditDataRoomDatabase, String id) {
super(application);
mSubredditRepository = new SubredditRepository(application, id);
mSubredditRepository = new SubredditRepository(redditDataRoomDatabase, id);
mSubredditLiveData = mSubredditRepository.getSubredditLiveData();
}
@@ -29,19 +31,20 @@ public class SubredditViewModel extends AndroidViewModel {
@NonNull
private final Application mApplication;
private final RedditDataRoomDatabase mRedditDataRoomDatabase;
private final String mSubredditName;
private final String subredditName;
public Factory(@NonNull Application application, String subredditName) {
public Factory(@NonNull Application application, RedditDataRoomDatabase redditDataRoomDatabase, String subredditname) {
mApplication = application;
this.subredditName = subredditName;
mRedditDataRoomDatabase = redditDataRoomDatabase;
mSubredditName = subredditname;
}
@NonNull
@Override
public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
//noinspection unchecked
return (T) new SubredditViewModel(mApplication, subredditName);
return (T) new SubredditViewModel(mApplication, mRedditDataRoomDatabase, mSubredditName);
}
}
}