mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-05-19 20:29:02 +00:00
Start implementing UserRepository
This commit is contained in:
parent
220f463b10
commit
5456599430
35 changed files with 270 additions and 168 deletions
|
|
@ -20,11 +20,11 @@ public class HabitRPGUserCallback implements Action1<HabitRPGUser> {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void call(HabitRPGUser habitRPGUser) {
|
||||
public void call(HabitRPGUser user) {
|
||||
// Negue: once everything is refactored to DbFlowTaskLocalRepository, this will be removed
|
||||
habitRPGUser.async().save();
|
||||
user.async().save();
|
||||
if (callBack != null) {
|
||||
callBack.onUserReceived(habitRPGUser);
|
||||
callBack.onUserReceived(user);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -16,20 +16,6 @@ public class MergeUserCallback extends HabitRPGUserCallback {
|
|||
|
||||
@Override
|
||||
public void call(HabitRPGUser user) {
|
||||
if (user.getItems() != null) {
|
||||
this.user.setItems(user.getItems());
|
||||
}
|
||||
if (user.getPreferences() != null) {
|
||||
this.user.setPreferences(user.getPreferences());
|
||||
}
|
||||
if (user.getFlags() != null) {
|
||||
this.user.setFlags(user.getFlags());
|
||||
}
|
||||
if (user.getStats() != null) {
|
||||
this.user.getStats().merge(user.getStats());
|
||||
}
|
||||
|
||||
this.user.async().save();
|
||||
|
||||
if (callBack != null) {
|
||||
callBack.onUserReceived(this.user);
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
package com.habitrpg.android.habitica.data;
|
||||
|
||||
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Customization;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.SetupCustomization;
|
||||
|
||||
|
|
|
|||
|
|
@ -9,10 +9,10 @@ import rx.Observable;
|
|||
|
||||
public interface TagRepository extends BaseRepository {
|
||||
|
||||
Observable<List<Tag>> getTags();
|
||||
|
||||
Observable<Tag> createTag(Tag tag);
|
||||
|
||||
Observable<Tag> updateTag(Tag tag);
|
||||
|
||||
Observable<Void> deleteTag(String id);
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -7,11 +7,12 @@ import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskList;
|
|||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.TasksOrder;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import rx.Observable;
|
||||
|
||||
public interface TaskRepository extends BaseRepository {
|
||||
Observable<ArrayList<Task>> getTasks(String taskType);
|
||||
Observable<List<Task>> getTasks(String taskType, String userID);
|
||||
|
||||
Observable<TaskList> refreshTasks(TasksOrder tasksOrder);
|
||||
|
||||
|
|
@ -21,4 +22,6 @@ public interface TaskRepository extends BaseRepository {
|
|||
Observable<Task> createTask(Task task);
|
||||
|
||||
Observable<Task> updateTask(Task task);
|
||||
|
||||
Observable<Void> deleteTask(String taskID);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,17 @@
|
|||
package com.habitrpg.android.habitica.data;
|
||||
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import rx.Observable;
|
||||
|
||||
public interface UserRepository extends BaseRepository {
|
||||
|
||||
Observable<HabitRPGUser> getUser(String userID);
|
||||
Observable<HabitRPGUser> updateUser(HabitRPGUser user, Map<String, Object> updateData);
|
||||
|
||||
Observable<HabitRPGUser> retrieveUser(Boolean withTasks);
|
||||
|
||||
Observable<HabitRPGUser> revive(HabitRPGUser user);
|
||||
}
|
||||
|
|
@ -156,6 +156,7 @@ public class ApiClientImpl implements Action1<Throwable>, ApiClient {
|
|||
this.context = context;
|
||||
this.crashlyticsProxy = crashlyticsProxy;
|
||||
this.popupNotificationsManager = popupNotificationsManager;
|
||||
this.popupNotificationsManager.setApiClient(this);
|
||||
|
||||
HabiticaBaseApplication.getComponent().inject(this);
|
||||
crashlyticsProxy.setUserIdentifier(this.hostConfig.getUser());
|
||||
|
|
|
|||
|
|
@ -6,9 +6,7 @@ import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
|
|||
import com.magicmicky.habitrpgwrapper.lib.models.SetupCustomization;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.drawable.Drawable;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
|
|
|||
|
|
@ -17,6 +17,11 @@ public class TagRepositoryImpl extends BaseRepositoryImpl<TagLocalRepository> im
|
|||
super(localRepository, apiClient);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Observable<List<Tag>> getTags() {
|
||||
return localRepository.getTags();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Observable<Tag> createTag(Tag tag) {
|
||||
return apiClient.createTag(tag);
|
||||
|
|
|
|||
|
|
@ -9,8 +9,8 @@ import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task;
|
|||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskList;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.TasksOrder;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import rx.Observable;
|
||||
|
||||
|
|
@ -24,8 +24,8 @@ public class TaskRepositoryImpl extends BaseRepositoryImpl<TaskLocalRepository>
|
|||
}
|
||||
|
||||
@Override
|
||||
public Observable<ArrayList<Task>> getTasks(String taskType) {
|
||||
return this.localRepository.getTasks(taskType);
|
||||
public Observable<List<Task>> getTasks(String taskType, String userID) {
|
||||
return this.localRepository.getTasks(taskType, userID);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -73,4 +73,9 @@ public class TaskRepositoryImpl extends BaseRepositoryImpl<TaskLocalRepository>
|
|||
}
|
||||
return apiClient.updateTask(task.getId(), task);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Observable<Void> deleteTask(String taskID) {
|
||||
return apiClient.deleteTask(taskID);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,58 @@
|
|||
package com.habitrpg.android.habitica.data.implementation;
|
||||
|
||||
import com.habitrpg.android.habitica.data.ApiClient;
|
||||
import com.habitrpg.android.habitica.data.UserRepository;
|
||||
import com.habitrpg.android.habitica.data.local.UserLocalRepository;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import rx.Observable;
|
||||
import rx.android.schedulers.AndroidSchedulers;
|
||||
|
||||
|
||||
public class UserRepositoryImpl extends BaseRepositoryImpl<UserLocalRepository> implements UserRepository {
|
||||
|
||||
public UserRepositoryImpl(UserLocalRepository localRepository, ApiClient apiClient) {
|
||||
super(localRepository, apiClient);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Observable<HabitRPGUser> getUser(String userID) {
|
||||
return localRepository.getUser(userID);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Observable<HabitRPGUser> updateUser(HabitRPGUser user, Map<String, Object> updateData) {
|
||||
return apiClient.updateUser(updateData)
|
||||
.map(newUser -> mergeUser(user, newUser));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Observable<HabitRPGUser> retrieveUser(Boolean withTasks) {
|
||||
return apiClient.retrieveUser(withTasks);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Observable<HabitRPGUser> revive(HabitRPGUser user) {
|
||||
return apiClient.revive().map(newUser -> mergeUser(user, newUser));
|
||||
}
|
||||
|
||||
private HabitRPGUser mergeUser(HabitRPGUser oldUser, HabitRPGUser newUser) {
|
||||
if (newUser.getItems() != null) {
|
||||
oldUser.setItems(newUser.getItems());
|
||||
}
|
||||
if (newUser.getPreferences() != null) {
|
||||
oldUser.setPreferences(newUser.getPreferences());
|
||||
}
|
||||
if (newUser.getFlags() != null) {
|
||||
oldUser.setFlags(newUser.getFlags());
|
||||
}
|
||||
if (newUser.getStats() != null) {
|
||||
oldUser.getStats().merge(newUser.getStats());
|
||||
}
|
||||
|
||||
oldUser.async().save();
|
||||
return oldUser;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,11 @@
|
|||
package com.habitrpg.android.habitica.data.local;
|
||||
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Tag;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import rx.Observable;
|
||||
|
||||
public interface TagLocalRepository extends BaseLocalRepository {
|
||||
Observable<List<Tag>> getTags();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,12 +5,13 @@ import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskList;
|
|||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.TasksOrder;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import rx.Observable;
|
||||
|
||||
public interface TaskLocalRepository extends BaseLocalRepository {
|
||||
|
||||
Observable<ArrayList<Task>> getTasks(String taskType);
|
||||
Observable<List<Task>> getTasks(String taskType, String userID);
|
||||
|
||||
void saveTasks(TasksOrder tasksOrder, TaskList tasks);
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,11 @@
|
|||
package com.habitrpg.android.habitica.data.local;
|
||||
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
|
||||
|
||||
import rx.Observable;
|
||||
|
||||
public interface UserLocalRepository extends BaseLocalRepository {
|
||||
|
||||
Observable<HabitRPGUser> getUser(String userID);
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
package com.habitrpg.android.habitica.data.local.implementation;
|
||||
|
||||
|
||||
import com.habitrpg.android.habitica.data.local.TagLocalRepository;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Tag;
|
||||
import com.raizlabs.android.dbflow.sql.language.OrderBy;
|
||||
import com.raizlabs.android.dbflow.sql.language.Select;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import rx.Observable;
|
||||
|
||||
public class DbFlowTagLocalRepository implements TagLocalRepository {
|
||||
@Override
|
||||
public void close() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Observable<List<Tag>> getTags() {
|
||||
return Observable.defer(() -> Observable.just(new Select().from(Tag.class)
|
||||
.orderBy(OrderBy.columns("position", "dateCreated").descending())
|
||||
.queryList()));
|
||||
}
|
||||
}
|
||||
|
|
@ -4,6 +4,9 @@ import com.habitrpg.android.habitica.data.local.TaskLocalRepository;
|
|||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskList;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.TasksOrder;
|
||||
import com.raizlabs.android.dbflow.sql.builder.Condition;
|
||||
import com.raizlabs.android.dbflow.sql.language.OrderBy;
|
||||
import com.raizlabs.android.dbflow.sql.language.Select;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
|
@ -14,8 +17,16 @@ import rx.Observable;
|
|||
public class DbFlowTaskLocalRepository implements TaskLocalRepository {
|
||||
|
||||
@Override
|
||||
public Observable<ArrayList<Task>> getTasks(String taskType) {
|
||||
return null;
|
||||
public Observable<List<Task>> getTasks(String taskType, String userID) {
|
||||
return Observable.defer(() -> Observable.just(new Select().from(Task.class)
|
||||
.where(Condition.column("type").eq(taskType))
|
||||
.and(Condition.CombinedCondition
|
||||
.begin(Condition.column("completed").eq(false))
|
||||
.or(Condition.column("type").eq("daily"))
|
||||
)
|
||||
.and(Condition.column("user_id").eq(userID))
|
||||
.orderBy(OrderBy.columns("position", "dateCreated").descending())
|
||||
.queryList()));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -0,0 +1,21 @@
|
|||
package com.habitrpg.android.habitica.data.local.implementation;
|
||||
|
||||
import com.habitrpg.android.habitica.data.local.UserLocalRepository;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
|
||||
import com.raizlabs.android.dbflow.sql.builder.Condition;
|
||||
import com.raizlabs.android.dbflow.sql.language.Select;
|
||||
|
||||
import rx.Observable;
|
||||
|
||||
public class DbFlowUserLocalRepository implements UserLocalRepository {
|
||||
@Override
|
||||
public void close() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Observable<HabitRPGUser> getUser(String userID) {
|
||||
return Observable.defer(() -> Observable.just(new Select()
|
||||
.from(HabitRPGUser.class).where(Condition.column("id").eq(userID)).querySingle()));
|
||||
}
|
||||
}
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
package com.habitrpg.android.habitica.data.local.implementation;
|
||||
|
||||
|
||||
import com.habitrpg.android.habitica.data.local.TagLocalRepository;
|
||||
|
||||
public class TagLocalRepositoryImpl implements TagLocalRepository {
|
||||
@Override
|
||||
public void close() {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -52,8 +52,8 @@ public class QrCodeManager {
|
|||
|
||||
private TransactionListener<HabitRPGUser> userTransactionListener = new TransactionListener<HabitRPGUser>() {
|
||||
@Override
|
||||
public void onResultReceived(HabitRPGUser habitRPGUser) {
|
||||
QrCodeManager.this.avatarView.setUser(habitRPGUser);
|
||||
public void onResultReceived(HabitRPGUser user) {
|
||||
QrCodeManager.this.avatarView.setUser(user);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -62,7 +62,7 @@ public class QrCodeManager {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean hasResult(BaseTransaction<HabitRPGUser> baseTransaction, HabitRPGUser habitRPGUser) {
|
||||
public boolean hasResult(BaseTransaction<HabitRPGUser> baseTransaction, HabitRPGUser user) {
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -4,14 +4,18 @@ package com.habitrpg.android.habitica.modules;
|
|||
import com.habitrpg.android.habitica.data.SetupCustomizationRepository;
|
||||
import com.habitrpg.android.habitica.data.TagRepository;
|
||||
import com.habitrpg.android.habitica.data.TaskRepository;
|
||||
import com.habitrpg.android.habitica.data.UserRepository;
|
||||
import com.habitrpg.android.habitica.data.implementation.SetupCustomizationRepositoryImpl;
|
||||
import com.habitrpg.android.habitica.data.implementation.TagRepositoryImpl;
|
||||
import com.habitrpg.android.habitica.data.implementation.TaskRepositoryImpl;
|
||||
import com.habitrpg.android.habitica.data.implementation.UserRepositoryImpl;
|
||||
import com.habitrpg.android.habitica.data.local.TagLocalRepository;
|
||||
import com.habitrpg.android.habitica.data.local.TaskLocalRepository;
|
||||
import com.habitrpg.android.habitica.data.local.UserLocalRepository;
|
||||
import com.habitrpg.android.habitica.data.local.implementation.DbFlowTaskLocalRepository;
|
||||
import com.habitrpg.android.habitica.data.local.implementation.TagLocalRepositoryImpl;
|
||||
import com.habitrpg.android.habitica.data.local.implementation.DbFlowTagLocalRepository;
|
||||
import com.habitrpg.android.habitica.data.ApiClient;
|
||||
import com.habitrpg.android.habitica.data.local.implementation.DbFlowUserLocalRepository;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
|
|
@ -42,11 +46,21 @@ public class RepositoryModule {
|
|||
|
||||
@Provides
|
||||
TagLocalRepository providesTagLocalRepository() {
|
||||
return new TagLocalRepositoryImpl();
|
||||
return new DbFlowTagLocalRepository();
|
||||
}
|
||||
|
||||
@Provides
|
||||
TagRepository providesTagRepository(TagLocalRepository localRepository, ApiClient apiClient) {
|
||||
return new TagRepositoryImpl(localRepository, apiClient);
|
||||
}
|
||||
|
||||
@Provides
|
||||
UserLocalRepository providesUserLocalRepository() {
|
||||
return new DbFlowUserLocalRepository();
|
||||
}
|
||||
|
||||
@Provides
|
||||
UserRepository providesUserRepository(UserLocalRepository localRepository, ApiClient apiClient) {
|
||||
return new UserRepositoryImpl(localRepository, apiClient);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -48,6 +48,7 @@ import com.habitrpg.android.habitica.callbacks.TaskUpdateCallback;
|
|||
import com.habitrpg.android.habitica.callbacks.UnlockCallback;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.data.TaskRepository;
|
||||
import com.habitrpg.android.habitica.data.UserRepository;
|
||||
import com.habitrpg.android.habitica.databinding.ValueBarBinding;
|
||||
import com.habitrpg.android.habitica.events.ContentReloadedEvent;
|
||||
import com.habitrpg.android.habitica.events.DisplayFragmentEvent;
|
||||
|
|
@ -232,6 +233,8 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
|
||||
@Inject
|
||||
TaskRepository taskRepository;
|
||||
@Inject
|
||||
UserRepository userRepository;
|
||||
|
||||
// endregion
|
||||
|
||||
|
|
@ -244,23 +247,6 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
private Date lastSync;
|
||||
private TutorialView activeTutorialView;
|
||||
private boolean isloadingContent;
|
||||
private TransactionListener<HabitRPGUser> userTransactionListener = new TransactionListener<HabitRPGUser>() {
|
||||
@Override
|
||||
public void onResultReceived(HabitRPGUser habitRPGUser) {
|
||||
MainActivity.this.user = habitRPGUser;
|
||||
MainActivity.this.setUserData(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onReady(BaseTransaction<HabitRPGUser> baseTransaction) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasResult(BaseTransaction<HabitRPGUser> baseTransaction, HabitRPGUser habitRPGUser) {
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@Override
|
||||
|
|
@ -291,7 +277,11 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
|
||||
pushNotificationManager = PushNotificationManager.getInstance(this);
|
||||
|
||||
new Select().from(HabitRPGUser.class).where(Condition.column("id").eq(hostConfig.getUser())).async().querySingle(userTransactionListener);
|
||||
userRepository.getUser(hostConfig.getUser())
|
||||
.subscribe(newUser -> {
|
||||
MainActivity.this.user = newUser;
|
||||
MainActivity.this.setUserData(true);
|
||||
}, throwable -> {});
|
||||
|
||||
setupToolbar(toolbar);
|
||||
|
||||
|
|
@ -448,8 +438,8 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
if (offset != user.getPreferences().getTimezoneOffset()) {
|
||||
Map<String, Object> updateData = new HashMap<>();
|
||||
updateData.put("preferences.timezoneOffset", String.valueOf(offset));
|
||||
apiClient.updateUser(updateData)
|
||||
.subscribe(new MergeUserCallback(this, user), throwable -> {
|
||||
userRepository.updateUser(user, updateData)
|
||||
.subscribe(this::onUserReceived, throwable -> {
|
||||
});
|
||||
}
|
||||
runOnUiThread(() -> {
|
||||
|
|
@ -947,17 +937,9 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
@Override
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
if (resultCode == SELECT_CLASS_RESULT) {
|
||||
if (this.apiClient != null) {
|
||||
this.apiClient.retrieveUser(true)
|
||||
|
||||
.subscribe(new HabitRPGUserCallback(this), throwable -> {
|
||||
});
|
||||
}
|
||||
retrieveUser();
|
||||
} else if (requestCode == GEM_PURCHASE_REQUEST) {
|
||||
this.apiClient.retrieveUser(true)
|
||||
|
||||
.subscribe(new HabitRPGUserCallback(this), throwable -> {
|
||||
});
|
||||
retrieveUser();
|
||||
}
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
}
|
||||
|
|
@ -977,8 +959,8 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
|
||||
@Subscribe
|
||||
public void onEvent(UpdateUserCommand event) {
|
||||
apiClient.updateUser(event.updateData)
|
||||
.subscribe(new MergeUserCallback(this, user), throwable -> {
|
||||
userRepository.updateUser(user, event.updateData)
|
||||
.subscribe(this::onUserReceived, throwable -> {
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -994,7 +976,6 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
this.user.setBalance(this.user.getBalance() - event.balanceDiff);
|
||||
this.setUserData(false);
|
||||
apiClient.unlockPath(event.path)
|
||||
|
||||
.subscribe(new UnlockCallback(this, this.user), throwable -> {
|
||||
});
|
||||
}
|
||||
|
|
@ -1022,8 +1003,7 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
observable
|
||||
|
||||
.doOnNext(aVoid -> showSnackbar(this, floatingMenuWrapper, getString(R.string.successful_purchase, event.item.text), SnackbarDisplayType.NORMAL))
|
||||
.subscribe(buyResponse -> apiClient.retrieveUser(false)
|
||||
|
||||
.subscribe(buyResponse -> userRepository.retrieveUser(false)
|
||||
.subscribe(new HabitRPGUserCallback(this), throwable -> {
|
||||
}), throwable -> {
|
||||
HttpException error = (HttpException) throwable;
|
||||
|
|
@ -1115,16 +1095,14 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
|
||||
@Subscribe
|
||||
public void onEvent(final DeleteTaskCommand cmd) {
|
||||
apiClient.deleteTask(cmd.TaskIdToDelete)
|
||||
.subscribe(aVoid -> {
|
||||
EventBus.getDefault().post(new TaskRemovedEvent(cmd.TaskIdToDelete));
|
||||
}, throwable -> {});
|
||||
taskRepository.deleteTask(cmd.TaskIdToDelete)
|
||||
.subscribe(aVoid -> EventBus.getDefault().post(new TaskRemovedEvent(cmd.TaskIdToDelete)), throwable -> {});
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void openMysteryItem(OpenMysteryItemEvent event) {
|
||||
apiClient.openMysteryItem()
|
||||
.subscribe(mysteryItem -> apiClient.retrieveUser(false)
|
||||
.subscribe(mysteryItem -> userRepository.retrieveUser(false)
|
||||
.subscribe(new HabitRPGUserCallback(user1 -> {
|
||||
OpenedMysteryItemEvent openedEvent = new OpenedMysteryItemEvent();
|
||||
openedEvent.numberLeft = user1.getPurchased().getPlan().mysteryItems.size();
|
||||
|
|
@ -1154,7 +1132,6 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
@Subscribe
|
||||
public void onEvent(SellItemCommand event) {
|
||||
this.apiClient.sellItem(event.item.getType(), event.item.getKey())
|
||||
|
||||
.subscribe(habitRPGUser -> {
|
||||
user.setItems(habitRPGUser.getItems());
|
||||
user.save();
|
||||
|
|
@ -1170,7 +1147,6 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
return;
|
||||
}
|
||||
this.apiClient.hatchPet(event.usingEgg.getKey(), event.usingHatchingPotion.getKey())
|
||||
|
||||
.subscribe(new ItemsCallback(user1 -> {
|
||||
FrameLayout petWrapper = (FrameLayout) getLayoutInflater().inflate(R.layout.pet_imageview, null);
|
||||
SimpleDraweeView petImageView = (SimpleDraweeView) petWrapper.findViewById(R.id.pet_imageview);
|
||||
|
|
@ -1206,7 +1182,6 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
}
|
||||
final Pet pet = event.usingPet;
|
||||
this.apiClient.feedPet(event.usingPet.getKey(), event.usingFood.getKey())
|
||||
|
||||
.subscribe(feedResponse -> {
|
||||
MainActivity.this.user.getItems().getPets().put(pet.getKey(), feedResponse.value);
|
||||
MainActivity.this.user.getItems().getFood().put(event.usingFood.getKey(), event.usingFood.getOwned() - 1);
|
||||
|
|
@ -1312,9 +1287,8 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
.setView(customView)
|
||||
.setPositiveButton(R.string.faint_button, (dialog, which) -> {
|
||||
faintDialog = null;
|
||||
apiClient.revive()
|
||||
|
||||
.subscribe(new MergeUserCallback(MainActivity.this, MainActivity.this.user), throwable -> {
|
||||
userRepository.revive(user)
|
||||
.subscribe(this::onUserReceived, throwable -> {
|
||||
});
|
||||
})
|
||||
.create();
|
||||
|
|
@ -1340,9 +1314,11 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
}
|
||||
|
||||
protected void retrieveUser() {
|
||||
this.apiClient.retrieveUser(true)
|
||||
.subscribe(new HabitRPGUserCallback(this), throwable -> {
|
||||
});
|
||||
if (this.userRepository != null) {
|
||||
this.userRepository.retrieveUser(true)
|
||||
.subscribe(new HabitRPGUserCallback(this), throwable -> {
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
|
|
@ -1372,9 +1348,8 @@ public class MainActivity extends BaseActivity implements Action1<Throwable>, Ha
|
|||
String path = "flags.tutorial." + step.getTutorialGroup() + "." + step.getIdentifier();
|
||||
Map<String, Object> updateData = new HashMap<>();
|
||||
updateData.put(path, true);
|
||||
apiClient.updateUser(updateData)
|
||||
|
||||
.subscribe(new MergeUserCallback(this, user), throwable -> {
|
||||
userRepository.updateUser(user, updateData)
|
||||
.subscribe(this::onUserReceived, throwable -> {
|
||||
});
|
||||
this.overlayLayout.removeView(this.activeTutorialView);
|
||||
this.removeActiveTutorialView();
|
||||
|
|
|
|||
|
|
@ -53,8 +53,8 @@ public class PartyInviteActivity extends BaseActivity {
|
|||
private String userIdToInvite;
|
||||
private TransactionListener<HabitRPGUser> userTransactionListener = new TransactionListener<HabitRPGUser>() {
|
||||
@Override
|
||||
public void onResultReceived(HabitRPGUser habitRPGUser) {
|
||||
handleUserRecieved(habitRPGUser);
|
||||
public void onResultReceived(HabitRPGUser user) {
|
||||
handleUserRecieved(user);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -63,7 +63,7 @@ public class PartyInviteActivity extends BaseActivity {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean hasResult(BaseTransaction<HabitRPGUser> baseTransaction, HabitRPGUser habitRPGUser) {
|
||||
public boolean hasResult(BaseTransaction<HabitRPGUser> baseTransaction, HabitRPGUser user) {
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,13 +1,8 @@
|
|||
package com.habitrpg.android.habitica.ui.adapter.setup;
|
||||
|
||||
import com.facebook.drawee.view.SimpleDraweeView;
|
||||
import com.facebook.imagepipeline.request.ImageRequest;
|
||||
import com.facebook.imagepipeline.request.ImageRequestBuilder;
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.events.commands.EquipCommand;
|
||||
import com.habitrpg.android.habitica.events.commands.UpdateUserCommand;
|
||||
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Customization;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Preferences;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.SetupCustomization;
|
||||
|
|
@ -18,16 +13,13 @@ import android.content.Context;
|
|||
import android.graphics.PorterDuff;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.support.v7.widget.CardView;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
|
|
|||
|
|
@ -1,16 +1,5 @@
|
|||
package com.habitrpg.android.habitica.ui.adapter.tasks;
|
||||
|
||||
import com.habitrpg.android.habitica.HabiticaBaseApplication;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.helpers.TaskFilterHelper;
|
||||
import com.habitrpg.android.habitica.proxy.ifce.CrashlyticsProxy;
|
||||
import com.habitrpg.android.habitica.ui.helpers.MarkdownParser;
|
||||
import com.habitrpg.android.habitica.ui.viewHolders.tasks.BaseTaskViewHolder;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task;
|
||||
import com.raizlabs.android.dbflow.sql.builder.Condition;
|
||||
import com.raizlabs.android.dbflow.sql.language.OrderBy;
|
||||
import com.raizlabs.android.dbflow.sql.language.Select;
|
||||
|
||||
import android.content.Context;
|
||||
import android.databinding.ObservableArrayList;
|
||||
import android.support.annotation.Nullable;
|
||||
|
|
@ -19,6 +8,14 @@ import android.view.LayoutInflater;
|
|||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import com.habitrpg.android.habitica.HabiticaBaseApplication;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.data.TaskRepository;
|
||||
import com.habitrpg.android.habitica.helpers.TaskFilterHelper;
|
||||
import com.habitrpg.android.habitica.proxy.ifce.CrashlyticsProxy;
|
||||
import com.habitrpg.android.habitica.ui.viewHolders.tasks.BaseTaskViewHolder;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
|
@ -34,6 +31,8 @@ public abstract class BaseTasksRecyclerViewAdapter<VH extends BaseTaskViewHolder
|
|||
public String taskType;
|
||||
@Inject
|
||||
protected CrashlyticsProxy crashlyticsProxy;
|
||||
@Inject
|
||||
protected TaskRepository taskRepository;
|
||||
protected List<Task> content;
|
||||
protected List<Task> filteredContent;
|
||||
private int layoutResource;
|
||||
|
|
@ -118,33 +117,16 @@ public abstract class BaseTasksRecyclerViewAdapter<VH extends BaseTaskViewHolder
|
|||
|
||||
public void loadContent(boolean forced) {
|
||||
if (this.content == null || forced) {
|
||||
List<Task> tasks = new ArrayList<>();
|
||||
Observable.defer(() -> Observable.just(new Select().from(Task.class)
|
||||
.where(Condition.column("type").eq(this.taskType))
|
||||
.and(Condition.CombinedCondition
|
||||
.begin(Condition.column("completed").eq(false))
|
||||
.or(Condition.column("type").eq("daily"))
|
||||
)
|
||||
.and(Condition.column("user_id").eq(this.userID))
|
||||
.orderBy(OrderBy.columns("position", "dateCreated").descending())
|
||||
.queryList()))
|
||||
taskRepository.getTasks(this.taskType, this.userID)
|
||||
.flatMap(Observable::from)
|
||||
.map(task -> {
|
||||
try {
|
||||
task.parsedText = MarkdownParser.parseMarkdown(task.getText());
|
||||
} catch (NullPointerException e) {
|
||||
task.parsedText = task.getText();
|
||||
}
|
||||
try {
|
||||
task.parsedNotes = MarkdownParser.parseMarkdown(task.getNotes());
|
||||
} catch (NullPointerException e) {
|
||||
task.parsedNotes = task.getNotes();
|
||||
}
|
||||
task.parseMarkdown();
|
||||
return task;
|
||||
})
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(tasks::add, crashlyticsProxy::logException, () -> setTasks(tasks));
|
||||
.toList()
|
||||
.subscribe(this::setTasks, crashlyticsProxy::logException);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -107,7 +107,7 @@ public class AboutFragment extends Fragment {
|
|||
String bodyOfEmail = "Device: " + device +
|
||||
" \nAndroid Version: " + version +
|
||||
" \nAppVersion: " + getString(R.string.version_info, versionName, versionCode) +
|
||||
" \nUser ID: " + userId +
|
||||
" \nHabitRPGUser ID: " + userId +
|
||||
" \nDetails: ";
|
||||
|
||||
Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
|
||||
|
|
|
|||
|
|
@ -31,8 +31,8 @@ public class AccountDetailsFragment extends BasePreferencesFragment {
|
|||
private HabitRPGUser user;
|
||||
private TransactionListener<HabitRPGUser> userTransactionListener = new TransactionListener<HabitRPGUser>() {
|
||||
@Override
|
||||
public void onResultReceived(HabitRPGUser habitRPGUser) {
|
||||
AccountDetailsFragment.this.setUser(habitRPGUser);
|
||||
public void onResultReceived(HabitRPGUser user) {
|
||||
AccountDetailsFragment.this.setUser(user);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -41,7 +41,7 @@ public class AccountDetailsFragment extends BasePreferencesFragment {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean hasResult(BaseTransaction<HabitRPGUser> baseTransaction, HabitRPGUser habitRPGUser) {
|
||||
public boolean hasResult(BaseTransaction<HabitRPGUser> baseTransaction, HabitRPGUser user) {
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -54,8 +54,8 @@ public class PreferencesFragment extends BasePreferencesFragment implements
|
|||
|
||||
private TransactionListener<HabitRPGUser> userTransactionListener = new TransactionListener<HabitRPGUser>() {
|
||||
@Override
|
||||
public void onResultReceived(HabitRPGUser habitRPGUser) {
|
||||
PreferencesFragment.this.setUser(habitRPGUser);
|
||||
public void onResultReceived(HabitRPGUser user) {
|
||||
PreferencesFragment.this.setUser(user);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -64,7 +64,7 @@ public class PreferencesFragment extends BasePreferencesFragment implements
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean hasResult(BaseTransaction<HabitRPGUser> baseTransaction, HabitRPGUser habitRPGUser) {
|
||||
public boolean hasResult(BaseTransaction<HabitRPGUser> baseTransaction, HabitRPGUser user) {
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -14,7 +14,6 @@ import com.habitrpg.android.habitica.ui.helpers.UiUtils;
|
|||
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Skill;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.SpecialItems;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.responses.HabitResponse;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.responses.SkillResponse;
|
||||
import com.raizlabs.android.dbflow.sql.builder.Condition;
|
||||
import com.raizlabs.android.dbflow.sql.language.Select;
|
||||
|
|
@ -37,8 +36,6 @@ import java.util.List;
|
|||
import butterknife.BindView;
|
||||
import rx.Observable;
|
||||
|
||||
import static com.habitrpg.android.habitica.helpers.MathHelper.round;
|
||||
|
||||
public class SkillsFragment extends BaseMainFragment {
|
||||
|
||||
private final int TASK_SELECTION_ACTIVITY = 10;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
package com.habitrpg.android.habitica.ui.fragments.social;
|
||||
|
||||
import com.habitrpg.android.habitica.HabiticaApplication;
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.callbacks.HabitRPGUserCallback;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ import android.widget.TextView;
|
|||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.callbacks.HabitRPGUserCallback;
|
||||
import com.habitrpg.android.habitica.components.AppComponent;
|
||||
import com.habitrpg.android.habitica.data.UserRepository;
|
||||
import com.habitrpg.android.habitica.events.TaskCreatedEvent;
|
||||
import com.habitrpg.android.habitica.events.TaskRemovedEvent;
|
||||
import com.habitrpg.android.habitica.events.TaskUpdatedEvent;
|
||||
|
|
@ -64,8 +65,10 @@ public class TaskRecyclerViewFragment extends BaseFragment implements View.OnCli
|
|||
ApiClient apiClient;
|
||||
@Inject
|
||||
TaskFilterHelper taskFilterHelper;
|
||||
LinearLayoutManager layoutManager = null;
|
||||
@Inject
|
||||
UserRepository userRepository;
|
||||
|
||||
LinearLayoutManager layoutManager = null;
|
||||
|
||||
@BindView(R.id.refresh_layout)
|
||||
SwipeRefreshLayout swipeRefreshLayout;
|
||||
|
|
@ -323,7 +326,7 @@ public class TaskRecyclerViewFragment extends BaseFragment implements View.OnCli
|
|||
@Override
|
||||
public void onRefresh() {
|
||||
swipeRefreshLayout.setRefreshing(true);
|
||||
apiClient.retrieveUser(true)
|
||||
userRepository.retrieveUser(true)
|
||||
.doOnTerminate(() -> swipeRefreshLayout.setRefreshing(false))
|
||||
.subscribe(
|
||||
new HabitRPGUserCallback((MainActivity)getActivity()),
|
||||
|
|
|
|||
|
|
@ -32,8 +32,8 @@ public class AvatarStatsWidgetProvider extends BaseWidgetProvider {
|
|||
private AppWidgetManager appWidgetManager;
|
||||
private TransactionListener<HabitRPGUser> userTransactionListener = new TransactionListener<HabitRPGUser>() {
|
||||
@Override
|
||||
public void onResultReceived(HabitRPGUser habitRPGUser) {
|
||||
updateData(habitRPGUser);
|
||||
public void onResultReceived(HabitRPGUser user) {
|
||||
updateData(user);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -42,7 +42,7 @@ public class AvatarStatsWidgetProvider extends BaseWidgetProvider {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean hasResult(BaseTransaction<HabitRPGUser> baseTransaction, HabitRPGUser habitRPGUser) {
|
||||
public boolean hasResult(BaseTransaction<HabitRPGUser> baseTransaction, HabitRPGUser user) {
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
package com.habitrpg.android.habitica.widget;
|
||||
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Stats;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.TaskDirectionData;
|
||||
import com.raizlabs.android.dbflow.sql.builder.Condition;
|
||||
import com.raizlabs.android.dbflow.sql.language.Select;
|
||||
|
|
@ -18,14 +17,6 @@ import android.widget.Toast;
|
|||
|
||||
import com.habitrpg.android.habitica.interactors.NotifyUserUseCase;
|
||||
import com.habitrpg.android.habitica.ui.helpers.UiUtils;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.Stats;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.TaskDirectionData;
|
||||
import com.raizlabs.android.dbflow.sql.builder.Condition;
|
||||
import com.raizlabs.android.dbflow.sql.language.Select;
|
||||
|
||||
import static com.habitrpg.android.habitica.helpers.MathHelper.round;
|
||||
import static com.habitrpg.android.habitica.interactors.NotifyUserUseCase.MIN_LEVEL_FOR_SKILLS;
|
||||
|
||||
|
||||
public abstract class BaseWidgetProvider extends AppWidgetProvider {
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import com.google.gson.annotations.SerializedName;
|
|||
import com.habitrpg.android.habitica.HabitDatabase;
|
||||
import com.habitrpg.android.habitica.R;
|
||||
import com.habitrpg.android.habitica.events.TaskDeleteEvent;
|
||||
import com.habitrpg.android.habitica.ui.helpers.MarkdownParser;
|
||||
import com.raizlabs.android.dbflow.annotation.Column;
|
||||
import com.raizlabs.android.dbflow.annotation.ForeignKey;
|
||||
import com.raizlabs.android.dbflow.annotation.ForeignKeyReference;
|
||||
|
|
@ -668,4 +669,17 @@ public class Task extends BaseModel {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void parseMarkdown() {
|
||||
try {
|
||||
this.parsedText = MarkdownParser.parseMarkdown(this.getText());
|
||||
} catch (NullPointerException e) {
|
||||
this.parsedText = this.getText();
|
||||
}
|
||||
try {
|
||||
this.parsedNotes = MarkdownParser.parseMarkdown(this.getNotes());
|
||||
} catch (NullPointerException e) {
|
||||
this.parsedNotes = this.getNotes();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ package com.habitrpg.android.habitica.api;
|
|||
import com.habitrpg.android.habitica.BuildConfig;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.UserAuthResponse;
|
||||
import com.magicmicky.habitrpgwrapper.lib.models.responses.HabitResponse;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
|
@ -15,7 +14,6 @@ import android.os.Build;
|
|||
|
||||
import java.util.UUID;
|
||||
|
||||
import rx.android.schedulers.AndroidSchedulers;
|
||||
import rx.observers.TestSubscriber;
|
||||
|
||||
import static junit.framework.Assert.assertEquals;
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ import static org.junit.Assert.assertEquals;
|
|||
|
||||
@Config(constants = BuildConfig.class)
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class HabitRPGUserTest {
|
||||
public class UserTest {
|
||||
|
||||
private HabitRPGUser user;
|
||||
|
||||
Loading…
Reference in a new issue