Start implementing UserRepository

This commit is contained in:
Phillip Thelen 2017-04-11 17:22:29 +02:00
parent 220f463b10
commit 5456599430
35 changed files with 270 additions and 168 deletions

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -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());

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -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() {
}
}

View file

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

View file

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

View file

@ -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();

View file

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

View file

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

View file

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

View file

@ -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(

View file

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

View file

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

View file

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

View file

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

View file

@ -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()),

View file

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

View file

@ -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 {

View file

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

View file

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

View file

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