fix guild display

This commit is contained in:
Phillip Thelen 2017-05-05 17:14:55 +02:00
parent 59db8329cd
commit 2eacc25cec
62 changed files with 284 additions and 286 deletions

View file

@ -79,7 +79,7 @@ dependencies {
compile 'com.github.kenglxn.QRGen:android:2.2.0'
// Emojis
compile 'com.github.viirus:emoji-lib:0.0.3.4'
compile 'com.github.viirus:emoji-lib:0.0.4'
// Markdown
compile 'com.commonsware.cwac:anddown:0.3.0'

View file

@ -18,7 +18,9 @@
fab:menu_animationDelayPerItem="50"
fab:menu_icon="@drawable/fab_add"
fab:menu_buttonSpacing="2dp"
fab:menu_labels_margin="4dp">
fab:menu_labels_margin="4dp"
fab:menu_fab_show_animation="@anim/fab_slide_in"
fab:menu_fab_hide_animation="@anim/fab_slide_out">
<com.github.clans.fab.FloatingActionButton
android:id="@+id/fab.new.habit"

View file

@ -23,7 +23,7 @@ import com.facebook.FacebookSdk;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.habitrpg.android.habitica.components.AppComponent;
import com.habitrpg.android.habitica.data.ApiClient;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.proxy.ifce.CrashlyticsProxy;
import com.habitrpg.android.habitica.ui.activities.IntroActivity;
import com.habitrpg.android.habitica.ui.activities.LoginActivity;
@ -171,7 +171,7 @@ public abstract class HabiticaBaseApplication extends MultiDexApplication {
ApiClient apiClient = this.lazyApiHelper.get();
apiClient.getContent()
.subscribe(contentResult -> { }, ReactiveErrorHandler.handleEmptyError());
.subscribe(contentResult -> { }, RxErrorHandler.handleEmptyError());
}
}

View file

@ -11,7 +11,7 @@ import android.os.Build;
import android.support.v4.content.ContextCompat;
import com.habitrpg.android.habitica.data.TaskRepository;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.helpers.TaskAlarmManager;
import com.habitrpg.android.habitica.models.tasks.Task;
import com.habitrpg.android.habitica.modules.AppModule;
@ -58,7 +58,7 @@ public class NotificationPublisher extends BroadcastReceiver {
int id = intent.getIntExtra(NOTIFICATION_ID, 0);
notificationManager.notify(id, notification);
}
}, ReactiveErrorHandler.handleEmptyError());
}, RxErrorHandler.handleEmptyError());
} else {
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

View file

@ -39,6 +39,7 @@ public interface SocialRepository extends BaseRepository {
Observable<List<Group>> retrieveGroups(String type);
Observable<RealmResults<Group>> getGroups(String type);
Observable<RealmResults<Group>> getPublicGuilds();
Observable<PostChatMessageResult> postPrivateMessage(HashMap<String, String> messageObject);
Observable<PostChatMessageResult> postPrivateMessage(String recipientId, String message);

View file

@ -3,7 +3,7 @@ package com.habitrpg.android.habitica.data.implementation;
import com.habitrpg.android.habitica.data.ApiClient;
import com.habitrpg.android.habitica.data.SocialRepository;
import com.habitrpg.android.habitica.data.local.SocialLocalRepository;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.models.responses.PostChatMessageResult;
import com.habitrpg.android.habitica.models.social.Challenge;
import com.habitrpg.android.habitica.models.social.ChatMessage;
@ -45,7 +45,7 @@ public class SocialRepositoryImpl extends BaseRepositoryImpl<SocialLocalReposito
@Override
public void markMessagesSeen(String seenGroupId) {
apiClient.seenMessages(seenGroupId).subscribe(aVoid -> {}, ReactiveErrorHandler.handleEmptyError());
apiClient.seenMessages(seenGroupId).subscribe(aVoid -> {}, RxErrorHandler.handleEmptyError());
}
@Override
@ -77,12 +77,13 @@ public class SocialRepositoryImpl extends BaseRepositoryImpl<SocialLocalReposito
@Override
public Observable<Group> retrieveGroup(String id) {
return apiClient.getGroup(id);
return apiClient.getGroup(id)
.doOnNext(localRepository::saveGroup);
}
@Override
public Observable<Group> getGroup(String id) {
return retrieveGroup(id);
return localRepository.getGroup(id);
}
@Override
@ -102,7 +103,8 @@ public class SocialRepositoryImpl extends BaseRepositoryImpl<SocialLocalReposito
@Override
public Observable<List<Group>> retrieveGroups(String type) {
return apiClient.listGroups(type);
return apiClient.listGroups(type)
.doOnNext(localRepository::saveGroups);
}
@Override
@ -110,6 +112,11 @@ public class SocialRepositoryImpl extends BaseRepositoryImpl<SocialLocalReposito
return localRepository.getGroups(type);
}
@Override
public Observable<RealmResults<Group>> getPublicGuilds() {
return localRepository.getPublicGuilds();
}
@Override
public Observable<PostChatMessageResult> postPrivateMessage(HashMap<String, String> messageObject) {
return apiClient.postPrivateMessage(messageObject);

View file

@ -4,7 +4,7 @@ import com.habitrpg.android.habitica.data.ApiClient;
import com.habitrpg.android.habitica.data.TaskRepository;
import com.habitrpg.android.habitica.data.UserRepository;
import com.habitrpg.android.habitica.data.local.UserLocalRepository;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.models.Skill;
import com.habitrpg.android.habitica.models.TutorialStep;
import com.habitrpg.android.habitica.models.inventory.Customization;
@ -97,7 +97,7 @@ public class UserRepositoryImpl extends BaseRepositoryImpl<UserLocalRepository>
return updateData;
})
.flatMap(updateData -> updateUser(user, updateData))
.subscribe(tutorialSteps -> {}, ReactiveErrorHandler.handleEmptyError());
.subscribe(tutorialSteps -> {}, RxErrorHandler.handleEmptyError());
}
@Override

View file

@ -11,4 +11,11 @@ import rx.Observable;
public interface SocialLocalRepository extends BaseLocalRepository {
Observable<RealmResults<Group>> getGroups(String type);
Observable<RealmResults<Group>> getPublicGuilds();
Observable<Group> getGroup(String id);
void saveGroup(Group group);
void saveGroups(List<Group> groups);
}

View file

@ -55,7 +55,7 @@ public class RealmChallengeLocalRepository extends RealmBaseLocalRepository impl
@Override
public void saveChallenges(User user, List<Challenge> challenges) {
realm.executeTransactionAsync(realm1 -> realm1.copyToRealmOrUpdate(challenges));
realm.executeTransactionAsync(realm1 -> realm1.insertOrUpdate(challenges));
}
@Override

View file

@ -24,7 +24,6 @@ class RealmContentLocalRepository extends RealmBaseLocalRepository implements Co
realm1.insertOrUpdate(result.food);
realm1.insertOrUpdate(result.hatchingPotions);
realm1.insertOrUpdate(result.pets);
realm1.insertOrUpdate(result.mounts);

View file

@ -2,9 +2,13 @@ package com.habitrpg.android.habitica.data.local.implementation;
import com.habitrpg.android.habitica.data.local.SocialLocalRepository;
import com.habitrpg.android.habitica.models.social.Group;
import com.habitrpg.android.habitica.models.tasks.Task;
import java.util.List;
import io.realm.Realm;
import io.realm.RealmResults;
import io.realm.Sort;
import rx.Observable;
@ -22,4 +26,34 @@ public class RealmSocialLocalRepository extends RealmBaseLocalRepository impleme
.asObservable()
.filter(RealmResults::isLoaded);
}
@Override
public Observable<RealmResults<Group>> getPublicGuilds() {
return realm.where(Group.class)
.equalTo("type", "guild")
.equalTo("privacy", "public")
.findAllSorted("memberCount", Sort.DESCENDING)
.asObservable()
.filter(RealmResults::isLoaded);
}
@Override
public Observable<Group> getGroup(String id) {
return realm.where(Group.class)
.equalTo("id", id)
.findAllAsync()
.asObservable()
.filter(group -> group.isLoaded() && group.isValid() && !group.isEmpty())
.map(groups -> groups.first());
}
@Override
public void saveGroup(Group group) {
realm.executeTransactionAsync(realm1 -> realm1.insertOrUpdate(group));
}
@Override
public void saveGroups(List<Group> groups) {
realm.executeTransactionAsync(realm1 -> realm1.insertOrUpdate(groups));
}
}

View file

@ -118,6 +118,6 @@ public class RealmTaskLocalRepository extends RealmBaseLocalRepository implement
@Override
public void saveReminder(RemindersItem remindersItem) {
realm.executeTransaction(realm1 -> realm1.copyToRealm(remindersItem));
realm.executeTransaction(realm1 -> realm1.insertOrUpdate(remindersItem));
}
}

View file

@ -22,9 +22,12 @@ public class RealmUserLocalRepository extends RealmBaseLocalRepository implement
@Override
public Observable<User> getUser(String userID) {
return realm.where(User.class).equalTo("id", userID).findFirstAsync().asObservable()
.filter(realmObject -> realmObject.isLoaded() && realmObject.isValid())
.cast(User.class);
return realm.where(User.class)
.equalTo("id", userID)
.findAllAsync()
.asObservable()
.filter(realmObject -> realmObject.isLoaded() && realmObject.isValid() && !realm.isEmpty())
.map(users -> users.first());
}
@Override

View file

@ -93,7 +93,7 @@ public class PopupNotificationsManager {
if (apiClient != null) {
// @TODO: This should be handled somewhere else? MAybe we notifiy via event
apiClient.readNotificaiton(notification.getId())
.subscribe(next -> {}, ReactiveErrorHandler.handleEmptyError());
.subscribe(next -> {}, RxErrorHandler.handleEmptyError());
}
dialog.hide();

View file

@ -71,7 +71,7 @@ public class QrCodeManager {
avatarView.configureView(false, false, false);
this.qrCodeWrapper = (FrameLayout) qrLayout.findViewById(R.id.qrCodeWrapper);
userRepository.getUser(userId).subscribe(avatarView::setUser, ReactiveErrorHandler.handleEmptyError());
userRepository.getUser(userId).subscribe(avatarView::setUser, RxErrorHandler.handleEmptyError());
this.displayQrCode();
this.setDownloadQr();

View file

@ -5,7 +5,7 @@ import android.util.Log;
import rx.android.BuildConfig;
import rx.functions.Action1;
public class ReactiveErrorHandler {
public class RxErrorHandler {
public static Action1<Throwable> handleEmptyError() {
//Can't be turned into a lambda, because it then doesn't work for some reason.

View file

@ -12,8 +12,6 @@ import com.habitrpg.android.habitica.HabiticaBaseApplication;
import com.habitrpg.android.habitica.NotificationPublisher;
import com.habitrpg.android.habitica.data.TaskRepository;
import com.habitrpg.android.habitica.events.ReminderDeleteEvent;
import com.habitrpg.android.habitica.events.TaskDeleteEvent;
import com.habitrpg.android.habitica.events.TaskSaveEvent;
import com.habitrpg.android.habitica.models.tasks.RemindersItem;
import com.habitrpg.android.habitica.models.tasks.Task;
import com.habitrpg.android.habitica.modules.AppModule;
@ -146,7 +144,7 @@ public class TaskAlarmManager {
public void addAlarmForTaskId(String taskId) {
taskRepository.getTask(taskId)
.filter(task -> Task.TYPE_DAILY.equals(task.type))
.subscribe(this::setAlarmsForTask, ReactiveErrorHandler.handleEmptyError());
.subscribe(this::setAlarmsForTask, RxErrorHandler.handleEmptyError());
}
public void scheduleAllSavedAlarms() {

View file

@ -6,7 +6,7 @@ import android.content.SharedPreferences;
import com.google.firebase.iid.FirebaseInstanceId;
import com.google.firebase.messaging.RemoteMessage;
import com.habitrpg.android.habitica.data.ApiClient;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.models.PushDevice;
import com.habitrpg.android.habitica.models.user.User;
@ -75,13 +75,13 @@ public class PushNotificationManager {
pushDeviceData.put("type", "android");
apiClient.addPushDevice(pushDeviceData)
.subscribe(aVoid -> {}, ReactiveErrorHandler.handleEmptyError());
.subscribe(aVoid -> {}, RxErrorHandler.handleEmptyError());
}
public void removePushDeviceUsingStoredToken() {
apiClient.deletePushDevice(this.refreshedToken)
.subscribe(aVoid -> {}, ReactiveErrorHandler.handleEmptyError());
.subscribe(aVoid -> {}, RxErrorHandler.handleEmptyError());
}
private Boolean userHasPushDevice() {

View file

@ -27,7 +27,7 @@ import com.habitrpg.android.habitica.events.TaskUpdatedEvent;
import com.habitrpg.android.habitica.events.commands.BuyRewardCommand;
import com.habitrpg.android.habitica.events.commands.ChecklistCheckedCommand;
import com.habitrpg.android.habitica.events.commands.TaskCheckedCommand;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.interactors.BuyRewardUseCase;
import com.habitrpg.android.habitica.interactors.ChecklistCheckUseCase;
import com.habitrpg.android.habitica.interactors.DailyCheckUseCase;
@ -148,10 +148,14 @@ public class ChallengeDetailActivity extends BaseActivity {
ObservableList<Task> fullList = new ObservableArrayList<>();
userRepository.getUser(userId).first().subscribe(user -> ChallengeDetailActivity.this.user = user, ReactiveErrorHandler.handleEmptyError());
userRepository.getUser(userId).first().subscribe(user -> {
ChallengeDetailActivity.this.user = user;
createTaskRecyclerFragment(fullList);
}, RxErrorHandler.handleEmptyError());
if (challengeId != null) {
challengeRepository.getChallengeTasks(challengeId)
.first()
.subscribe(taskList -> {
ArrayList<Task> resultList = new ArrayList<>();
@ -228,6 +232,16 @@ public class ChallengeDetailActivity extends BaseActivity {
}, Throwable::printStackTrace);
}
if (challengeId != null) {
challengeRepository.getChallenge(challengeId).subscribe(challenge -> {
ChallengeDetailActivity.this.challenge = challenge;
ChallengeViewHolder challengeViewHolder = new ChallengeViewHolder(findViewById(R.id.challenge_header));
challengeViewHolder.bind(challenge);
});
}
}
private void createTaskRecyclerFragment(ObservableList<Task> fullList) {
ChallengeTasksRecyclerViewFragment fragment = ChallengeTasksRecyclerViewFragment.newInstance(user, fullList);
if (getSupportFragmentManager().getFragments() == null) {
@ -237,14 +251,6 @@ public class ChallengeDetailActivity extends BaseActivity {
transaction.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out, android.R.anim.fade_in, android.R.anim.fade_out);
transaction.replace(R.id.fragment_container, fragment).addToBackStack(null).commitAllowingStateLoss();
}
if (challengeId != null) {
challengeRepository.getChallenge(challengeId).subscribe(challenge -> {
ChallengeDetailActivity.this.challenge = challenge;
ChallengeViewHolder challengeViewHolder = new ChallengeViewHolder(findViewById(R.id.challenge_header));
challengeViewHolder.bind(challenge);
});
}
}
@Override
@ -426,6 +432,6 @@ public class ChallengeDetailActivity extends BaseActivity {
}
displayItemDropUseCase.observable(new DisplayItemDropUseCase.RequestValues(data, this, floatingMenuWrapper))
.subscribe(aVoid -> {}, ReactiveErrorHandler.handleEmptyError());
.subscribe(aVoid -> {}, RxErrorHandler.handleEmptyError());
}
}

View file

@ -30,7 +30,6 @@ import android.widget.Spinner;
import android.widget.TextView;
import com.github.underscore.$;
import com.habitrpg.android.habitica.HabiticaApplication;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.components.AppComponent;
import com.habitrpg.android.habitica.data.ChallengeRepository;
@ -38,7 +37,7 @@ import com.habitrpg.android.habitica.data.SocialRepository;
import com.habitrpg.android.habitica.data.UserRepository;
import com.habitrpg.android.habitica.events.TaskSaveEvent;
import com.habitrpg.android.habitica.events.TaskTappedEvent;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.models.social.Challenge;
import com.habitrpg.android.habitica.models.social.Group;
import com.habitrpg.android.habitica.models.tasks.Task;
@ -52,7 +51,6 @@ import org.greenrobot.eventbus.Subscribe;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
import javax.inject.Inject;
@ -136,7 +134,7 @@ public class CreateChallengeActivity extends BaseActivity {
@Override
public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
userRepository.getUser(userId).subscribe(user1 -> this.user = user1, ReactiveErrorHandler.handleEmptyError());
userRepository.getUser(userId).subscribe(user1 -> this.user = user1, RxErrorHandler.handleEmptyError());
}
@Override
@ -358,7 +356,7 @@ public class CreateChallengeActivity extends BaseActivity {
locationAdapter.add(tavern);
groups.forEach(group -> locationAdapter.add(group));
}, ReactiveErrorHandler.handleEmptyError());
}, RxErrorHandler.handleEmptyError());
challengeLocationSpinner.setAdapter(locationAdapter);
challengeLocationSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

View file

@ -30,7 +30,7 @@ import com.habitrpg.android.habitica.components.AppComponent;
import com.habitrpg.android.habitica.data.ApiClient;
import com.habitrpg.android.habitica.data.InventoryRepository;
import com.habitrpg.android.habitica.data.SocialRepository;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.helpers.UserStatComputer;
import com.habitrpg.android.habitica.models.Achievement;
import com.habitrpg.android.habitica.models.AchievementGroup;
@ -344,10 +344,10 @@ public class FullProfileActivity extends BaseActivity {
addAttributeRow(getString(R.string.profile_level), byLevelStat, byLevelStat, byLevelStat, byLevelStat, true, false);
loadItemDataByOutfit(user.getItems().getGear().getEquipped()).subscribe(gear -> this.gotGear(gear, user), ReactiveErrorHandler.handleEmptyError());
loadItemDataByOutfit(user.getItems().getGear().getEquipped()).subscribe(gear -> this.gotGear(gear, user), RxErrorHandler.handleEmptyError());
if (user.getPreferences().getCostume()) {
loadItemDataByOutfit(user.getItems().getGear().getCostume()).subscribe(this::gotCostume, ReactiveErrorHandler.handleEmptyError());
loadItemDataByOutfit(user.getItems().getGear().getCostume()).subscribe(this::gotCostume, RxErrorHandler.handleEmptyError());
} else {
costumeCard.setVisibility(View.GONE);
}

View file

@ -18,7 +18,7 @@ import com.habitrpg.android.habitica.HabiticaBaseApplication;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.components.AppComponent;
import com.habitrpg.android.habitica.data.ApiClient;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.ui.fragments.setup.IntroFragment;
import com.viewpagerindicator.IconPageIndicator;
import com.viewpagerindicator.IconPagerAdapter;
@ -58,7 +58,7 @@ public class IntroActivity extends BaseActivity implements View.OnClickListener,
this.finishButton.setOnClickListener(this);
apiClient.getContent()
.subscribe(contentResult -> {}, ReactiveErrorHandler.handleEmptyError());
.subscribe(contentResult -> {}, RxErrorHandler.handleEmptyError());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Window window = getWindow();

View file

@ -62,7 +62,7 @@ import com.habitrpg.android.habitica.events.commands.OpenMenuItemCommand;
import com.habitrpg.android.habitica.events.commands.TaskCheckedCommand;
import com.habitrpg.android.habitica.helpers.AmplitudeManager;
import com.habitrpg.android.habitica.helpers.LanguageHelper;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.helpers.SoundManager;
import com.habitrpg.android.habitica.helpers.TaskAlarmManager;
import com.habitrpg.android.habitica.helpers.notifications.PushNotificationManager;
@ -264,7 +264,7 @@ public class MainActivity extends BaseActivity implements TutorialView.OnTutoria
.subscribe(newUser -> {
MainActivity.this.user = newUser;
MainActivity.this.setUserData(true);
}, ReactiveErrorHandler.handleEmptyError());
}, RxErrorHandler.handleEmptyError());
EventBus.getDefault().register(this);
}
@ -293,7 +293,7 @@ public class MainActivity extends BaseActivity implements TutorialView.OnTutoria
this.checkMaintenance();
}
inventoryRepository.retrieveContent().subscribe(contentResult -> {}, ReactiveErrorHandler.handleEmptyError());
inventoryRepository.retrieveContent().subscribe(contentResult -> {}, RxErrorHandler.handleEmptyError());
if (this.sharedPreferences.getLong("lastReminderSchedule", 0) < new Date().getTime() - 86400000) {
try {
@ -750,11 +750,11 @@ public class MainActivity extends BaseActivity implements TutorialView.OnTutoria
if (user != null) {
notifyUserUseCase.observable(new NotifyUserUseCase.RequestValues(this, floatingMenuWrapper,
user, data.experienceDelta, data.healthDelta, data.goldDelta, data.manaDelta, data.hasLeveledUp))
.subscribe(aVoid -> {}, ReactiveErrorHandler.handleEmptyError());
.subscribe(aVoid -> {}, RxErrorHandler.handleEmptyError());
}
displayItemDropUseCase.observable(new DisplayItemDropUseCase.RequestValues(data, this, floatingMenuWrapper))
.subscribe(aVoid -> {}, ReactiveErrorHandler.handleEmptyError());
.subscribe(aVoid -> {}, RxErrorHandler.handleEmptyError());
}
@ -808,7 +808,7 @@ public class MainActivity extends BaseActivity implements TutorialView.OnTutoria
protected void retrieveUser() {
if (this.userRepository != null) {
this.userRepository.retrieveUser(true)
.subscribe(user1 -> {}, ReactiveErrorHandler.handleEmptyError());
.subscribe(user1 -> {}, RxErrorHandler.handleEmptyError());
}
}

View file

@ -16,7 +16,7 @@ import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.components.AppComponent;
import com.habitrpg.android.habitica.data.SocialRepository;
import com.habitrpg.android.habitica.data.UserRepository;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.models.user.User;
import com.habitrpg.android.habitica.modules.AppModule;
import com.habitrpg.android.habitica.prefs.scanner.IntentIntegrator;
@ -164,7 +164,7 @@ public class PartyInviteActivity extends BaseActivity {
}
userIdToInvite = uri.getPathSegments().get(2);
userRepository.getUser(userId).subscribe(this::handleUserRecieved, ReactiveErrorHandler.handleEmptyError());
userRepository.getUser(userId).subscribe(this::handleUserRecieved, RxErrorHandler.handleEmptyError());
}
}
@ -184,6 +184,6 @@ public class PartyInviteActivity extends BaseActivity {
inviteData.put("uuids", invites);
this.socialRepository.inviteToGroup(user.getParty().getId(), inviteData)
.subscribe(aVoid -> {}, ReactiveErrorHandler.handleEmptyError());
.subscribe(aVoid -> {}, RxErrorHandler.handleEmptyError());
}
}

View file

@ -40,7 +40,7 @@ import com.habitrpg.android.habitica.components.AppComponent;
import com.habitrpg.android.habitica.data.TagRepository;
import com.habitrpg.android.habitica.data.TaskRepository;
import com.habitrpg.android.habitica.helpers.FirstDayOfTheWeekHelper;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.helpers.RemindersManager;
import com.habitrpg.android.habitica.helpers.TaskFilterHelper;
import com.habitrpg.android.habitica.models.Tag;
@ -282,7 +282,7 @@ public class TaskFormActivity extends BaseActivity implements AdapterView.OnItem
finish();
dismissKeyboard();
taskRepository.deleteTask(taskId).subscribe(aVoid -> {}, ReactiveErrorHandler.handleEmptyError());
taskRepository.deleteTask(taskId).subscribe(aVoid -> {}, RxErrorHandler.handleEmptyError());
}).setNegativeButton(getString(R.string.no), (dialog, which) -> dialog.dismiss()).show());
ArrayAdapter<CharSequence> difficultyAdapter = ArrayAdapter.createFromResource(this,
@ -364,7 +364,7 @@ public class TaskFormActivity extends BaseActivity implements AdapterView.OnItem
}
setTitle(task);
}, ReactiveErrorHandler.handleEmptyError());
}, RxErrorHandler.handleEmptyError());
btnDelete.setEnabled(true);
} else {
@ -979,7 +979,7 @@ public class TaskFormActivity extends BaseActivity implements AdapterView.OnItem
observable = taskRepository.updateTask(task);
}
observable.subscribe(task1 -> {}, ReactiveErrorHandler.handleEmptyError());
observable.subscribe(task1 -> {}, RxErrorHandler.handleEmptyError());
}
}

View file

@ -12,7 +12,7 @@ import android.widget.TextView;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.data.TaskRepository;
import com.habitrpg.android.habitica.databinding.SkillTaskItemCardBinding;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.models.tasks.Task;
import com.habitrpg.android.habitica.ui.activities.TaskClickActivity;
@ -100,7 +100,7 @@ public class SkillTasksRecyclerViewAdapter extends RecyclerView.Adapter<SkillTas
} else {
notifyDataSetChanged();
}
}, ReactiveErrorHandler.handleEmptyError());
}, RxErrorHandler.handleEmptyError());
} else {
if (parentAdapter != null) {
parentAdapter.notifyDataSetChanged();

View file

@ -95,18 +95,6 @@ public class ChallengesListViewAdapter extends RealmRecyclerViewAdapter<Challeng
}
}
public static String getLabelByTypeAndCount(Context context, String type, int count) {
if (Challenge.TASK_ORDER_DAILYS.equals(type)) {
return context.getString(count == 1 ? R.string.daily : R.string.dailies);
} else if (Challenge.TASK_ORDER_HABITS.equals(type)) {
return context.getString(count == 1 ? R.string.habit : R.string.habits);
} else if (Challenge.TASK_ORDER_REWARDS.equals(type)) {
return context.getString(count == 1 ? R.string.reward : R.string.rewards);
} else {
return context.getString(count == 1 ? R.string.todo : R.string.todos);
}
}
public void bind(Challenge challenge) {
this.challenge = challenge;

View file

@ -1,5 +1,6 @@
package com.habitrpg.android.habitica.ui.adapter.social;
import android.support.annotation.Nullable;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
@ -23,18 +24,18 @@ import java.util.Locale;
import butterknife.BindView;
import butterknife.ButterKnife;
import io.realm.Case;
import io.realm.OrderedRealmCollection;
import io.realm.RealmRecyclerViewAdapter;
import io.realm.RealmResults;
public class PublicGuildsRecyclerViewAdapter extends RecyclerView.Adapter<PublicGuildsRecyclerViewAdapter.GuildViewHolder> implements Filterable {
public class PublicGuildsRecyclerViewAdapter extends RealmRecyclerViewAdapter<Group, PublicGuildsRecyclerViewAdapter.GuildViewHolder> implements Filterable {
public ApiClient apiClient;
private List<Group> publicGuildList;
private List<Group> fullPublicGuildList;
private List<String> memberGuildIDs;
public void setPublicGuildList(List<Group> publicGuildList) {
this.publicGuildList = publicGuildList;
this.fullPublicGuildList = new ArrayList<>(publicGuildList);
this.notifyDataSetChanged();
public PublicGuildsRecyclerViewAdapter(@Nullable OrderedRealmCollection<Group> data, boolean autoUpdate) {
super(data, autoUpdate);
}
public void setMemberGuildIDs(List<String> memberGuildIDs) {
@ -49,7 +50,7 @@ public class PublicGuildsRecyclerViewAdapter extends RecyclerView.Adapter<Public
guildViewHolder.itemView.setOnClickListener(v -> {
Group guild = (Group) v.getTag();
GuildFragment guildFragment = new GuildFragment();
guildFragment.setGuild(guild);
guildFragment.setGuildId(guild.id);
guildFragment.isMember = isInGroup(guild);
DisplayFragmentEvent event = new DisplayFragmentEvent();
event.fragment = guildFragment;
@ -60,19 +61,17 @@ public class PublicGuildsRecyclerViewAdapter extends RecyclerView.Adapter<Public
boolean isMember = this.memberGuildIDs != null && this.memberGuildIDs.contains(guild.id);
if (isMember) {
PublicGuildsRecyclerViewAdapter.this.apiClient.leaveGroup(guild.id)
.subscribe(aVoid -> {
memberGuildIDs.remove(guild.id);
int indexOfGroup = publicGuildList.indexOf(guild);
int indexOfGroup = getData().indexOf(guild);
notifyItemChanged(indexOfGroup);
}, throwable -> {
});
} else {
PublicGuildsRecyclerViewAdapter.this.apiClient.joinGroup(guild.id)
.subscribe(group -> {
memberGuildIDs.add(group.id);
int indexOfGroup = publicGuildList.indexOf(group);
int indexOfGroup = getData().indexOf(group);
notifyItemChanged(indexOfGroup);
}, throwable -> {
});
@ -84,18 +83,13 @@ public class PublicGuildsRecyclerViewAdapter extends RecyclerView.Adapter<Public
@Override
public void onBindViewHolder(GuildViewHolder holder, int position) {
Group guild = publicGuildList.get(position);
Group guild = getData().get(position);
boolean isInGroup = isInGroup(guild);
holder.bind(guild, isInGroup);
holder.itemView.setTag(guild);
holder.joinLeaveButton.setTag(guild);
}
@Override
public int getItemCount() {
return this.publicGuildList == null ? 0 : this.publicGuildList.size();
}
private boolean isInGroup(Group guild) {
return this.memberGuildIDs != null && this.memberGuildIDs.contains(guild.id);
}
@ -105,38 +99,22 @@ public class PublicGuildsRecyclerViewAdapter extends RecyclerView.Adapter<Public
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
List<Group> filteredGuilds;
if (constraint.length() == 0) {
filteredGuilds = fullPublicGuildList;
} else {
filteredGuilds = getFilteredResults(constraint.toString().toLowerCase(Locale.US));
}
FilterResults results = new FilterResults();
results.values = filteredGuilds;
return results;
results.values = constraint;
return new FilterResults();
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
publicGuildList = (List<Group>) results.values;
PublicGuildsRecyclerViewAdapter.this.notifyDataSetChanged();
if (getData() != null && constraint.length() > 0) {
updateData(getData().where()
.contains("name", String.valueOf(constraint), Case.INSENSITIVE)
.findAll());
}
}
};
}
protected List<Group> getFilteredResults(String query) {
List<Group> filteredGuilds = new ArrayList<>();
for (Group guild : fullPublicGuildList) {
if (guild.name.toLowerCase().contains(query)) {
filteredGuilds.add(guild);
}
}
return filteredGuilds;
}
static class GuildViewHolder extends RecyclerView.ViewHolder {
@ -152,7 +130,7 @@ public class PublicGuildsRecyclerViewAdapter extends RecyclerView.Adapter<Public
@BindView(R.id.joinleaveButton)
Button joinLeaveButton;
public GuildViewHolder(View itemView) {
GuildViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}

View file

@ -7,7 +7,7 @@ import android.view.ViewGroup;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.data.InventoryRepository;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.models.inventory.Equipment;
import com.habitrpg.android.habitica.models.tasks.Task;
import com.habitrpg.android.habitica.models.user.User;
@ -76,7 +76,7 @@ public class RewardsRecyclerViewAdapter extends RealmBaseTasksRecyclerViewAdapte
}
subscriber.onNext(buyableItems);
subscriber.onCompleted();
}, ReactiveErrorHandler.handleEmptyError()));
}, RxErrorHandler.handleEmptyError()));
})
.subscribe(items -> {
notifyDataSetChanged();

View file

@ -14,7 +14,7 @@ import com.habitrpg.android.habitica.components.AppComponent;
import com.habitrpg.android.habitica.data.TutorialRepository;
import com.habitrpg.android.habitica.events.DisplayTutorialEvent;
import com.habitrpg.android.habitica.helpers.AmplitudeManager;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.squareup.leakcanary.RefWatcher;
import org.greenrobot.eventbus.EventBus;
@ -61,7 +61,7 @@ public abstract class BaseFragment extends DialogFragment {
event.canBeDeferred = tutorialCanBeDeferred;
EventBus.getDefault().post(event);
}
}, ReactiveErrorHandler.handleEmptyError());
}, RxErrorHandler.handleEmptyError());
}
String displayedClassName = this.getDisplayedClassName();

View file

@ -10,7 +10,7 @@ import android.view.ViewGroup;
import com.habitrpg.android.habitica.data.ApiClient;
import com.habitrpg.android.habitica.data.UserRepository;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.helpers.SoundManager;
import com.habitrpg.android.habitica.models.user.User;
import com.habitrpg.android.habitica.ui.activities.MainActivity;
@ -86,7 +86,7 @@ public abstract class BaseMainFragment extends BaseFragment {
if (savedInstanceState != null && savedInstanceState.containsKey("userId")) {
String userId = savedInstanceState.getString("userId");
if (userId != null) {
userRepository.getUser(userId).subscribe(habitRPGUser -> user = habitRPGUser, ReactiveErrorHandler.handleEmptyError());
userRepository.getUser(userId).subscribe(habitRPGUser -> user = habitRPGUser, RxErrorHandler.handleEmptyError());
}
}

View file

@ -10,7 +10,7 @@ import android.view.ViewGroup;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.components.AppComponent;
import com.habitrpg.android.habitica.data.FAQRepository;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.ui.adapter.FAQOverviewRecyclerAdapter;
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment;
import com.habitrpg.android.habitica.ui.menu.DividerItemDecoration;
@ -37,7 +37,7 @@ public class FAQOverviewFragment extends BaseMainFragment {
unbinder = ButterKnife.bind(this, view);
adapter = new FAQOverviewRecyclerAdapter();
adapter.getResetWalkthroughEvents().subscribe(aVoid -> this.userRepository.resetTutorial(user), ReactiveErrorHandler.handleEmptyError());
adapter.getResetWalkthroughEvents().subscribe(aVoid -> this.userRepository.resetTutorial(user), RxErrorHandler.handleEmptyError());
adapter.activity = activity;
recyclerView.setLayoutManager(new LinearLayoutManager(activity));
recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL_LIST));
@ -62,7 +62,7 @@ public class FAQOverviewFragment extends BaseMainFragment {
if (user == null || adapter == null) {
return;
}
faqRepository.getArticles().subscribe(adapter::setArticles, ReactiveErrorHandler.handleEmptyError());
faqRepository.getArticles().subscribe(adapter::setArticles, RxErrorHandler.handleEmptyError());
}
@Override

View file

@ -10,7 +10,7 @@ import android.view.ViewGroup;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.components.AppComponent;
import com.habitrpg.android.habitica.data.CustomizationRepository;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.models.inventory.Customization;
import com.habitrpg.android.habitica.models.user.User;
import com.habitrpg.android.habitica.models.user.Preferences;
@ -58,13 +58,13 @@ public class AvatarCustomizationFragment extends BaseMainFragment {
}
return userRepository.updateUser(user, updatePath, customization.getIdentifier());
})
.subscribe(user1 -> {}, ReactiveErrorHandler.handleEmptyError()));
.subscribe(user1 -> {}, RxErrorHandler.handleEmptyError()));
compositeSubscription.add(adapter.getUnlockCustomizationEvents()
.flatMap(customization -> userRepository.unlockPath(user, customization))
.subscribe(unlockResponse -> {}, ReactiveErrorHandler.handleEmptyError()));
.subscribe(unlockResponse -> {}, RxErrorHandler.handleEmptyError()));
compositeSubscription.add(adapter.getUnlockSetEvents()
.flatMap(set -> userRepository.unlockPath(user, set))
.subscribe(unlockResponse -> {}, ReactiveErrorHandler.handleEmptyError()));
.subscribe(unlockResponse -> {}, RxErrorHandler.handleEmptyError()));
layoutManager = new GridLayoutManager(activity, 2);
layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@ -109,7 +109,7 @@ public class AvatarCustomizationFragment extends BaseMainFragment {
if (user == null || adapter == null) {
return;
}
customizationRepository.getCustomizations(type, category).subscribe(adapter::setCustomizationList, ReactiveErrorHandler.handleEmptyError());
customizationRepository.getCustomizations(type, category).subscribe(adapter::setCustomizationList, RxErrorHandler.handleEmptyError());
}
private void setGridSpanCount(int width) {

View file

@ -13,7 +13,7 @@ import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.components.AppComponent;
import com.habitrpg.android.habitica.data.UserRepository;
import com.habitrpg.android.habitica.databinding.FragmentAvatarOverviewBinding;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.models.user.User;
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment;
@ -66,7 +66,7 @@ public class AvatarOverviewFragment extends BaseMainFragment implements AdapterV
if (apiClient != null) {
apiClient.getContent()
.subscribe(contentResult -> {}, ReactiveErrorHandler.handleEmptyError());
.subscribe(contentResult -> {}, RxErrorHandler.handleEmptyError());
}
}

View file

@ -10,7 +10,7 @@ import android.view.ViewGroup;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.components.AppComponent;
import com.habitrpg.android.habitica.data.InventoryRepository;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.ui.adapter.inventory.EquipmentRecyclerViewAdapter;
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment;
import com.habitrpg.android.habitica.ui.menu.DividerItemDecoration;
@ -50,14 +50,14 @@ public class EquipmentDetailFragment extends BaseMainFragment {
this.adapter.type = this.type;
this.adapter.getEquipEvents()
.flatMap(key -> inventoryRepository.equipGear(user, key, isCostume))
.subscribe(items -> {}, ReactiveErrorHandler.handleEmptyError());
.subscribe(items -> {}, RxErrorHandler.handleEmptyError());
this.recyclerView.setAdapter(this.adapter);
this.recyclerView.setLayoutManager(new LinearLayoutManager(activity));
this.recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL_LIST));
inventoryRepository.getOwnedEquipment(type).first().subscribe(this.adapter::updateData, ReactiveErrorHandler.handleEmptyError());
inventoryRepository.getOwnedEquipment(type).first().subscribe(this.adapter::updateData, RxErrorHandler.handleEmptyError());
return v;
}

View file

@ -11,15 +11,11 @@ import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.components.AppComponent;
import com.habitrpg.android.habitica.data.InventoryRepository;
import com.habitrpg.android.habitica.databinding.FragmentEquipmentOverviewBinding;
import com.habitrpg.android.habitica.events.commands.UpdateUserCommand;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.models.inventory.Equipment;
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment;
import org.greenrobot.eventbus.EventBus;
import java.util.HashMap;
import java.util.Map;
import javax.inject.Inject;
@ -117,7 +113,7 @@ public class EquipmentOverviewFragment extends BaseMainFragment {
costumeShieldView.setOnClickListener(v1 -> displayEquipmentDetailList("shield", user.getItems().getGear().getCostume().getShield(), true));
this.costumeSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> {
userRepository.updateUser(user, "preferences.costume", isChecked).subscribe(user1 -> {}, ReactiveErrorHandler.handleEmptyError());
userRepository.updateUser(user, "preferences.costume", isChecked).subscribe(user1 -> {}, RxErrorHandler.handleEmptyError());
});
if (this.nameMapping == null) {
@ -129,7 +125,7 @@ public class EquipmentOverviewFragment extends BaseMainFragment {
}
this.viewBinding.setEquipmentNames(this.nameMapping);
}, ReactiveErrorHandler.handleEmptyError());
}, RxErrorHandler.handleEmptyError());
} else {
this.viewBinding.setEquipmentNames(this.nameMapping);
}

View file

@ -13,10 +13,9 @@ import android.widget.TextView;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.components.AppComponent;
import com.habitrpg.android.habitica.data.InventoryRepository;
import com.habitrpg.android.habitica.events.ContentReloadedEvent;
import com.habitrpg.android.habitica.events.OpenedMysteryItemEvent;
import com.habitrpg.android.habitica.events.commands.OpenMenuItemCommand;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.models.inventory.Item;
import com.habitrpg.android.habitica.models.inventory.Pet;
import com.habitrpg.android.habitica.models.inventory.SpecialItem;
@ -32,15 +31,12 @@ import com.habitrpg.android.habitica.ui.menu.MainDrawerBuilder;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import java.util.HashMap;
import javax.inject.Inject;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import io.realm.OrderedRealmCollection;
import io.realm.RealmList;
import static com.habitrpg.android.habitica.ui.helpers.UiUtils.showSnackbar;
@ -113,7 +109,7 @@ public class ItemRecyclerFragment extends BaseFragment {
compositeSubscription.add(adapter.getSellItemEvents()
.flatMap(item -> inventoryRepository.sellItem(user, item))
.subscribe(item -> {}, ReactiveErrorHandler.handleEmptyError()));
.subscribe(item -> {}, RxErrorHandler.handleEmptyError()));
compositeSubscription.add(adapter.getQuestInvitationEvents()
.flatMap(quest -> inventoryRepository.inviteToQuest(quest))
@ -199,9 +195,9 @@ public class ItemRecyclerFragment extends BaseFragment {
if (items.size() > 0) {
adapter.updateData((OrderedRealmCollection<Item>) items);
}
}, ReactiveErrorHandler.handleEmptyError());
}, RxErrorHandler.handleEmptyError());
compositeSubscription.add(inventoryRepository.getOwnedPets().subscribe(adapter::setOwnedPets, ReactiveErrorHandler.handleEmptyError()));
compositeSubscription.add(inventoryRepository.getOwnedPets().subscribe(adapter::setOwnedPets, RxErrorHandler.handleEmptyError()));
}
@OnClick(R.id.openMarketButton)

View file

@ -11,14 +11,11 @@ import android.view.ViewGroup;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.components.AppComponent;
import com.habitrpg.android.habitica.data.InventoryRepository;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.models.inventory.Mount;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.ui.adapter.inventory.MountDetailRecyclerAdapter;
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment;
import com.habitrpg.android.habitica.ui.helpers.MarginDecoration;
import java.util.List;
import javax.inject.Inject;
public class MountDetailRecyclerFragment extends BaseMainFragment {
@ -58,7 +55,7 @@ public class MountDetailRecyclerFragment extends BaseMainFragment {
compositeSubscription.add(adapter.getEquipEvents()
.flatMap(key -> inventoryRepository.equip(user, "mount", key))
.subscribe(items -> {}, ReactiveErrorHandler.handleEmptyError()));
.subscribe(items -> {}, RxErrorHandler.handleEmptyError()));
}
}
@ -107,7 +104,7 @@ public class MountDetailRecyclerFragment extends BaseMainFragment {
}
private void loadItems() {
inventoryRepository.getMounts(animalType, animalGroup).first().subscribe(adapter::updateData, ReactiveErrorHandler.handleEmptyError());
inventoryRepository.getMounts(animalType, animalGroup).first().subscribe(adapter::updateData, RxErrorHandler.handleEmptyError());
}
@Override

View file

@ -12,7 +12,7 @@ import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.components.AppComponent;
import com.habitrpg.android.habitica.data.InventoryRepository;
import com.habitrpg.android.habitica.events.commands.FeedCommand;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.models.user.User;
import com.habitrpg.android.habitica.ui.adapter.inventory.PetDetailRecyclerAdapter;
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment;
@ -60,7 +60,7 @@ public class PetDetailRecyclerFragment extends BaseMainFragment {
compositeSubscription.add(adapter.getEquipEvents()
.flatMap(key -> inventoryRepository.equip(user, "pet", key))
.subscribe(items -> {}, ReactiveErrorHandler.handleEmptyError()));
.subscribe(items -> {}, RxErrorHandler.handleEmptyError()));
}
}
@ -108,8 +108,8 @@ public class PetDetailRecyclerFragment extends BaseMainFragment {
}
private void loadItems() {
inventoryRepository.getPets(animalType, animalGroup).first().subscribe(adapter::updateData, ReactiveErrorHandler.handleEmptyError());
inventoryRepository.getOwnedMounts(animalType, animalGroup).subscribe(adapter::setOwnedMounts, ReactiveErrorHandler.handleEmptyError());
inventoryRepository.getPets(animalType, animalGroup).first().subscribe(adapter::updateData, RxErrorHandler.handleEmptyError());
inventoryRepository.getOwnedMounts(animalType, animalGroup).subscribe(adapter::setOwnedMounts, RxErrorHandler.handleEmptyError());
}
@Subscribe

View file

@ -11,7 +11,7 @@ import android.widget.TextView;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.components.AppComponent;
import com.habitrpg.android.habitica.data.InventoryRepository;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.models.inventory.Animal;
import com.habitrpg.android.habitica.models.inventory.Mount;
import com.habitrpg.android.habitica.models.inventory.Pet;
@ -183,6 +183,6 @@ public class StableRecyclerFragment extends BaseFragment {
}
}
return Observable.just(items);
}).subscribe(items -> adapter.setItemList(items), ReactiveErrorHandler.handleEmptyError());
}).subscribe(items -> adapter.setItemList(items), RxErrorHandler.handleEmptyError());
}
}

View file

@ -13,7 +13,7 @@ import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.data.UserRepository;
import com.habitrpg.android.habitica.events.commands.OpenGemPurchaseFragmentCommand;
import com.habitrpg.android.habitica.helpers.QrCodeManager;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.models.user.User;
import com.habitrpg.android.habitica.models.user.SubscriptionPlan;
import com.habitrpg.android.habitica.ui.views.subscriptions.SubscriptionDetailsView;
@ -42,7 +42,7 @@ public class AccountDetailsFragment extends BasePreferencesFragment {
String userID = getPreferenceManager().getSharedPreferences().getString(getContext().getString(R.string.SP_userID), null);
if (userID != null) {
userRepository.getUser(userID).subscribe(this::setUser, ReactiveErrorHandler.handleEmptyError());
userRepository.getUser(userID).subscribe(this::setUser, RxErrorHandler.handleEmptyError());
}
}

View file

@ -16,7 +16,7 @@ import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.data.ApiClient;
import com.habitrpg.android.habitica.data.UserRepository;
import com.habitrpg.android.habitica.helpers.LanguageHelper;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.helpers.SoundManager;
import com.habitrpg.android.habitica.helpers.TaskAlarmManager;
import com.habitrpg.android.habitica.helpers.notifications.PushNotificationManager;
@ -58,7 +58,7 @@ public class PreferencesFragment extends BasePreferencesFragment implements
String userID = getPreferenceManager().getSharedPreferences().getString(context.getString(R.string.SP_userID), null);
if (userID != null) {
userRepository.getUser(userID).subscribe(PreferencesFragment.this::setUser, ReactiveErrorHandler.handleEmptyError());
userRepository.getUser(userID).subscribe(PreferencesFragment.this::setUser, RxErrorHandler.handleEmptyError());
}
}
@ -133,7 +133,7 @@ public class PreferencesFragment extends BasePreferencesFragment implements
}
return true;
} else if (preference.getKey().equals("reload_content")) {
apiClient.getContent().subscribe(contentResult -> {}, ReactiveErrorHandler.handleEmptyError());
apiClient.getContent().subscribe(contentResult -> {}, RxErrorHandler.handleEmptyError());
}
return super.onPreferenceTreeClick(preference);
}

View file

@ -15,7 +15,7 @@ import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.components.AppComponent;
import com.habitrpg.android.habitica.data.UserRepository;
import com.habitrpg.android.habitica.events.commands.UseSkillCommand;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.models.Skill;
import com.habitrpg.android.habitica.models.responses.SkillResponse;
import com.habitrpg.android.habitica.models.user.User;
@ -98,7 +98,7 @@ public class SkillsFragment extends BaseMainFragment {
Observable.concat(userRepository.getSkills(user).first().flatMap(Observable::from), userRepository.getSpecialItems(user).first().flatMap(Observable::from))
.toList()
.subscribe(skills -> adapter.setSkillList(skills), ReactiveErrorHandler.handleEmptyError());
.subscribe(skills -> adapter.setSkillList(skills), RxErrorHandler.handleEmptyError());
}
@Override
@ -147,7 +147,7 @@ public class SkillsFragment extends BaseMainFragment {
if (activity != null) {
UiUtils.showSnackbar(activity, activity.getFloatingMenuWrapper(), message.toString(), UiUtils.SnackbarDisplayType.NORMAL);
}
userRepository.retrieveUser(false).subscribe(habitRPGUser -> {}, ReactiveErrorHandler.handleEmptyError());
userRepository.retrieveUser(false).subscribe(habitRPGUser -> {}, RxErrorHandler.handleEmptyError());
}
@Override

View file

@ -24,7 +24,7 @@ import com.habitrpg.android.habitica.events.commands.FlagChatMessageCommand;
import com.habitrpg.android.habitica.events.commands.SendNewGroupMessageCommand;
import com.habitrpg.android.habitica.events.commands.ToggleInnCommand;
import com.habitrpg.android.habitica.events.commands.ToggleLikeMessageCommand;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.models.social.ChatMessage;
import com.habitrpg.android.habitica.models.user.User;
import com.habitrpg.android.habitica.ui.activities.MainActivity;
@ -91,7 +91,7 @@ public class ChatListFragment extends BaseFragment implements SwipeRefreshLayout
if (savedInstanceState.containsKey("userId")) {
this.userId = savedInstanceState.getString("userId");
if (this.userId != null) {
userRepository.getUser(userId).subscribe(habitRPGUser -> this.user = habitRPGUser, ReactiveErrorHandler.handleEmptyError());
userRepository.getUser(userId).subscribe(habitRPGUser -> this.user = habitRPGUser, RxErrorHandler.handleEmptyError());
}
}

View file

@ -21,7 +21,7 @@ import com.habitrpg.android.habitica.data.ApiClient;
import com.habitrpg.android.habitica.data.UserRepository;
import com.habitrpg.android.habitica.databinding.FragmentGroupInfoBinding;
import com.habitrpg.android.habitica.helpers.QrCodeManager;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.models.inventory.QuestContent;
import com.habitrpg.android.habitica.models.social.Group;
import com.habitrpg.android.habitica.models.user.User;
@ -87,8 +87,9 @@ public class GroupInformationFragment extends BaseFragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (view == null)
if (view == null) {
view = inflater.inflate(R.layout.fragment_group_info, container, false);
}
questCollectViewAdapter = new QuestCollectRecyclerViewAdapter();
viewBinding = DataBindingUtil.bind(view);
@ -370,7 +371,7 @@ public class GroupInformationFragment extends BaseFragment {
public void onPartyInviteRejected() {
if (user != null) {
apiClient.rejectGroupInvite(user.getInvitations().getParty().getId())
.subscribe(aVoid -> viewBinding.setInvitation(null), ReactiveErrorHandler.handleEmptyError());
.subscribe(aVoid -> viewBinding.setInvitation(null), RxErrorHandler.handleEmptyError());
}
}
}

View file

@ -6,6 +6,7 @@ import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
@ -16,6 +17,7 @@ import android.view.ViewGroup;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.components.AppComponent;
import com.habitrpg.android.habitica.data.SocialRepository;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.models.social.Group;
import com.habitrpg.android.habitica.ui.activities.GroupFormActivity;
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment;
@ -34,17 +36,10 @@ public class GuildFragment extends BaseMainFragment implements Action1<Group> {
private Group guild;
private GroupInformationFragment guildInformationFragment;
private ChatListFragment chatListFragment;
private String guildId;
public void setGuild(Group guild) {
this.guild = guild;
if (this.guildInformationFragment != null) {
this.guildInformationFragment.setGroup(guild);
}
if (this.guild.chat == null && this.socialRepository != null) {
socialRepository.retrieveGroup(this.guild.id)
.subscribe(this, throwable -> {
});
}
public void setGuildId(String guildId) {
this.guildId = guildId;
}
@Override
@ -60,6 +55,11 @@ public class GuildFragment extends BaseMainFragment implements Action1<Group> {
setViewPagerAdapter();
if (guildId != null && this.socialRepository != null) {
compositeSubscription.add(socialRepository.getGroup(this.guildId).subscribe(this, throwable -> {}, () -> Log.e("Party", "Completed")));
socialRepository.retrieveGroup(this.guildId).subscribe(group -> {}, RxErrorHandler.handleEmptyError());
}
return v;
}
@ -86,7 +86,7 @@ public class GuildFragment extends BaseMainFragment implements Action1<Group> {
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
if (this.activity != null) {
if (this.activity != null && this.guild != null) {
if (this.isMember) {
if (this.user != null && this.user.getId().equals(this.guild.leaderID)) {
this.activity.getMenuInflater().inflate(R.menu.guild_admin, menu);
@ -145,7 +145,7 @@ public class GuildFragment extends BaseMainFragment implements Action1<Group> {
}
case 1: {
chatListFragment = new ChatListFragment();
chatListFragment.configure(GuildFragment.this.guild.id, user, false);
chatListFragment.configure(GuildFragment.this.guildId, user, false);
fragment = chatListFragment;
break;
}

View file

@ -29,20 +29,16 @@ public class GuildsOverviewFragment extends BaseMainFragment implements View.OnC
@Inject
SocialRepository socialRepository;
@Inject
ChallengeRepository challengeRepository;
@BindView(R.id.my_guilds_listview)
LinearLayout guildsListView;
@BindView(R.id.publicGuildsButton)
Button publicGuildsButton;
@BindView(R.id.chat_refresh_layout)
SwipeRefreshLayout swipeRefreshLayout;
@Inject
ChallengeRepository challengeRepository;
private List<Group> guilds;
private ArrayList<String> guildIDs;
@ -69,6 +65,7 @@ public class GuildsOverviewFragment extends BaseMainFragment implements View.OnC
@Override
public void onDestroy() {
socialRepository.close();
challengeRepository.close();
super.onDestroy();
}
@ -123,7 +120,7 @@ public class GuildsOverviewFragment extends BaseMainFragment implements View.OnC
} else {
Integer guildIndex = ((ViewGroup) v.getParent()).indexOfChild(v);
GuildFragment guildFragment = new GuildFragment();
guildFragment.setGuild(this.guilds.get(guildIndex));
guildFragment.setGuildId(this.guilds.get(guildIndex).id);
guildFragment.isMember = true;
fragment = guildFragment;
}

View file

@ -20,7 +20,7 @@ import android.widget.TextView;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.components.AppComponent;
import com.habitrpg.android.habitica.data.SocialRepository;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.models.social.ChatMessage;
import com.habitrpg.android.habitica.models.user.User;
import com.habitrpg.android.habitica.modules.AppModule;
@ -80,7 +80,7 @@ public class InboxFragment extends BaseMainFragment
.sort("timestamp", Sort.DESCENDING)
.asObservable()
.first()
.subscribe(this::setInboxMessages, ReactiveErrorHandler.handleEmptyError());
.subscribe(this::setInboxMessages, RxErrorHandler.handleEmptyError());
}
}

View file

@ -13,7 +13,7 @@ import com.habitrpg.android.habitica.components.AppComponent;
import com.habitrpg.android.habitica.data.SocialRepository;
import com.habitrpg.android.habitica.data.UserRepository;
import com.habitrpg.android.habitica.events.commands.SendNewInboxMessageCommand;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.models.user.User;
import com.habitrpg.android.habitica.ui.adapter.social.ChatRecyclerViewAdapter;
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment;
@ -75,7 +75,7 @@ public class InboxMessageListFragment extends BaseMainFragment
.findAllSortedAsync("timestamp", Sort.DESCENDING)
.asObservable()
.filter(RealmResults::isLoaded)
.subscribe(chatMessages -> this.chatAdapter.setMessages(chatMessages), ReactiveErrorHandler.handleEmptyError());
.subscribe(chatMessages -> this.chatAdapter.setMessages(chatMessages), RxErrorHandler.handleEmptyError());
}
}
@ -94,7 +94,7 @@ public class InboxMessageListFragment extends BaseMainFragment
private void refreshUserInbox () {
this.swipeRefreshLayout.setRefreshing(true);
this.userRepository.retrieveUser(true)
.subscribe(this::onUserReceived, ReactiveErrorHandler.handleEmptyError());
.subscribe(this::onUserReceived, RxErrorHandler.handleEmptyError());
}
@Override

View file

@ -16,6 +16,7 @@ import android.view.ViewGroup;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.components.AppComponent;
import com.habitrpg.android.habitica.data.SocialRepository;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.models.social.Group;
import com.habitrpg.android.habitica.ui.adapter.social.PublicGuildsRecyclerViewAdapter;
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment;
@ -35,7 +36,6 @@ public class PublicGuildsFragment extends BaseMainFragment implements SearchView
SocialRepository socialRepository;
List<String> memberGuildIDs;
List<Group> guilds;
@BindView(R.id.recyclerView)
RecyclerView recyclerView;
@ -53,13 +53,11 @@ public class PublicGuildsFragment extends BaseMainFragment implements SearchView
unbinder = ButterKnife.bind(this, view);
recyclerView.setLayoutManager(new LinearLayoutManager(this.activity));
recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL_LIST));
viewAdapter = new PublicGuildsRecyclerViewAdapter();
viewAdapter = new PublicGuildsRecyclerViewAdapter(null, true);
viewAdapter.setMemberGuildIDs(this.memberGuildIDs);
viewAdapter.apiClient = this.apiClient;
recyclerView.setAdapter(viewAdapter);
if (this.guilds != null) {
this.viewAdapter.setPublicGuildList(this.guilds);
}
this.fetchGuilds();
}
return view;
}
@ -72,7 +70,6 @@ public class PublicGuildsFragment extends BaseMainFragment implements SearchView
@Override
public void onCreate(Bundle savedInstance) {
super.onCreate(savedInstance);
this.fetchGuilds();
}
@Override
@ -83,14 +80,15 @@ public class PublicGuildsFragment extends BaseMainFragment implements SearchView
private void fetchGuilds() {
if (this.socialRepository != null) {
this.socialRepository.getGroups("publicGuilds")
this.socialRepository.getPublicGuilds()
.first()
.subscribe(groups -> {
PublicGuildsFragment.this.guilds = groups;
if (PublicGuildsFragment.this.viewAdapter != null) {
PublicGuildsFragment.this.viewAdapter.setPublicGuildList(groups);
PublicGuildsFragment.this.viewAdapter.updateData(groups);
}
}, throwable -> {
});
this.socialRepository.retrieveGroups("publicGuilds").subscribe(groups -> {}, RxErrorHandler.handleEmptyError());
}
}
@ -104,7 +102,6 @@ public class PublicGuildsFragment extends BaseMainFragment implements SearchView
theTextArea.setHintTextColor(ContextCompat.getColor(getContext(), R.color.white));
guildSearchView.setQueryHint(getString(R.string.guild_search_hint));
guildSearchView.setOnQueryTextListener(this);
}
@Override

View file

@ -12,7 +12,7 @@ import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.components.AppComponent;
import com.habitrpg.android.habitica.data.InventoryRepository;
import com.habitrpg.android.habitica.data.SocialRepository;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.models.social.Group;
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment;
@ -79,7 +79,7 @@ public class TavernFragment extends BaseMainFragment {
if (questInfoFragment != null) {
questInfoFragment.setQuestContent(content);
}
}, ReactiveErrorHandler.handleEmptyError());
}, RxErrorHandler.handleEmptyError());
}
}, throwable -> {
});

View file

@ -11,17 +11,13 @@ import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.habitrpg.android.habitica.HabiticaApplication;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.data.ApiClient;
import com.habitrpg.android.habitica.data.ChallengeRepository;
import com.habitrpg.android.habitica.events.commands.OpenFullProfileCommand;
import com.habitrpg.android.habitica.models.LeaveChallengeBody;
import com.habitrpg.android.habitica.models.social.Challenge;
import com.habitrpg.android.habitica.models.tasks.Task;
import com.habitrpg.android.habitica.models.user.User;
import com.habitrpg.android.habitica.ui.activities.ChallengeDetailActivity;
import com.habitrpg.android.habitica.ui.adapter.social.ChallengesListViewAdapter;
import com.habitrpg.android.habitica.ui.helpers.MarkdownParser;
import net.pherth.android.emoji_library.EmojiParser;
@ -32,8 +28,6 @@ import org.greenrobot.eventbus.EventBus;
import java.util.ArrayList;
import java.util.Map;
import javax.inject.Inject;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
@ -163,43 +157,44 @@ public class ChallengeDetailDialogHolder {
}
private void addHabits(ArrayList<Task> habits) {
LinearLayout taskGroup = (LinearLayout) context.getLayoutInflater().inflate(R.layout.dialog_challenge_detail_task_group, task_group_layout);
LinearLayout taskGroup = (LinearLayout) context.getLayoutInflater().inflate(R.layout.dialog_challenge_detail_task_group, task_group_layout, false);
TextView groupName = (TextView) taskGroup.findViewById(R.id.task_group_name);
LinearLayout tasks_layout = (LinearLayout) taskGroup.findViewById(R.id.tasks_layout);
groupName.setText(habits.size() + " " + ChallengesListViewAdapter.ChallengeViewHolder.getLabelByTypeAndCount(context, Challenge.TASK_ORDER_HABITS, habits.size()));
groupName.setText(habits.size() + " " + getLabelByTypeAndCount(Challenge.TASK_ORDER_HABITS, habits.size()));
int size = habits.size();
for (int i = 0; i < size; i++) {
Task task = habits.get(i);
View habitEntry = context.getLayoutInflater().inflate(R.layout.dialog_challenge_detail_habit, tasks_layout);
TextView habitTitle = (TextView) habitEntry.findViewById(R.id.habit_title);
ImageView plusImg = (ImageView) habitEntry.findViewById(task.up ? R.id.plus_img_tinted : R.id.plus_img);
ImageView minusImg = (ImageView) habitEntry.findViewById(task.down ? R.id.minus_img_tinted : R.id.minus_img);
View entry = context.getLayoutInflater().inflate(R.layout.dialog_challenge_detail_habit, tasks_layout, false);
TextView habitTitle = (TextView) entry.findViewById(R.id.habit_title);
ImageView plusImg = (ImageView) entry.findViewById(task.up ? R.id.plus_img_tinted : R.id.plus_img);
ImageView minusImg = (ImageView) entry.findViewById(task.down ? R.id.minus_img_tinted : R.id.minus_img);
plusImg.setVisibility(View.VISIBLE);
minusImg.setVisibility(View.VISIBLE);
habitTitle.setText(EmojiParser.parseEmojis(task.text));
tasks_layout.addView(entry);
}
task_group_layout.addView(taskGroup);
}
private void addDailys(ArrayList<Task> dailies) {
LinearLayout taskGroup = (LinearLayout) context.getLayoutInflater().inflate(R.layout.dialog_challenge_detail_task_group, task_group_layout);
LinearLayout taskGroup = (LinearLayout) context.getLayoutInflater().inflate(R.layout.dialog_challenge_detail_task_group, task_group_layout, false);
TextView groupName = (TextView) taskGroup.findViewById(R.id.task_group_name);
LinearLayout tasks_layout = (LinearLayout) taskGroup.findViewById(R.id.tasks_layout);
int size = dailies.size();
groupName.setText(dailies.size() + " " + ChallengesListViewAdapter.ChallengeViewHolder.getLabelByTypeAndCount(context, Challenge.TASK_ORDER_DAILYS, size));
groupName.setText(dailies.size() + " " + getLabelByTypeAndCount(Challenge.TASK_ORDER_DAILYS, size));
for (int i = 0; i < size; i++) {
Task task = dailies.get(i);
View entry = context.getLayoutInflater().inflate(R.layout.dialog_challenge_detail_daily, tasks_layout);
View entry = context.getLayoutInflater().inflate(R.layout.dialog_challenge_detail_daily, tasks_layout, false);
TextView title = (TextView) entry.findViewById(R.id.daily_title);
title.setText(EmojiParser.parseEmojis(task.text));
@ -211,23 +206,24 @@ public class ChallengeDetailDialogHolder {
TextView checkListAllTextView = (TextView) entry.findViewById(R.id.checkListAllTextView);
checkListAllTextView.setText(String.valueOf(task.checklist.size()));
}
tasks_layout.addView(entry);
}
task_group_layout.addView(taskGroup);
}
private void addTodos(ArrayList<Task> todos) {
LinearLayout taskGroup = (LinearLayout) context.getLayoutInflater().inflate(R.layout.dialog_challenge_detail_task_group, task_group_layout);
LinearLayout taskGroup = (LinearLayout) context.getLayoutInflater().inflate(R.layout.dialog_challenge_detail_task_group, task_group_layout, false);
TextView groupName = (TextView) taskGroup.findViewById(R.id.task_group_name);
LinearLayout tasks_layout = (LinearLayout) taskGroup.findViewById(R.id.tasks_layout);
int size = todos.size();
groupName.setText(todos.size() + " " + ChallengesListViewAdapter.ChallengeViewHolder.getLabelByTypeAndCount(context, Challenge.TASK_ORDER_TODOS, size));
groupName.setText(todos.size() + " " + getLabelByTypeAndCount(Challenge.TASK_ORDER_TODOS, size));
for (int i = 0; i < size; i++) {
Task task = todos.get(i);
View entry = context.getLayoutInflater().inflate(R.layout.dialog_challenge_detail_todo, tasks_layout);
View entry = context.getLayoutInflater().inflate(R.layout.dialog_challenge_detail_todo, tasks_layout, false);
TextView title = (TextView) entry.findViewById(R.id.todo_title);
title.setText(EmojiParser.parseEmojis(task.text));
@ -239,24 +235,40 @@ public class ChallengeDetailDialogHolder {
TextView checkListAllTextView = (TextView) entry.findViewById(R.id.checkListAllTextView);
checkListAllTextView.setText(String.valueOf(task.checklist.size()));
}
tasks_layout.addView(entry);
}
task_group_layout.addView(taskGroup);
}
private void addRewards(ArrayList<Task> rewards) {
LinearLayout taskGroup = (LinearLayout) context.getLayoutInflater().inflate(R.layout.dialog_challenge_detail_task_group, task_group_layout);
LinearLayout taskGroup = (LinearLayout) context.getLayoutInflater().inflate(R.layout.dialog_challenge_detail_task_group, task_group_layout, false);
TextView groupName = (TextView) taskGroup.findViewById(R.id.task_group_name);
LinearLayout tasks_layout = (LinearLayout) taskGroup.findViewById(R.id.tasks_layout);
int size = rewards.size();
groupName.setText(rewards.size() + " " + ChallengesListViewAdapter.ChallengeViewHolder.getLabelByTypeAndCount(context, Challenge.TASK_ORDER_REWARDS, size));
groupName.setText(rewards.size() + " " + getLabelByTypeAndCount(Challenge.TASK_ORDER_REWARDS, size));
for (int i = 0; i < size; i++) {
Task task = rewards.get(i);
View entry = context.getLayoutInflater().inflate(R.layout.dialog_challenge_detail_reward, tasks_layout);
View entry = context.getLayoutInflater().inflate(R.layout.dialog_challenge_detail_reward, tasks_layout, false);
TextView title = (TextView) entry.findViewById(R.id.reward_title);
title.setText(EmojiParser.parseEmojis(task.text));
tasks_layout.addView(entry);
}
task_group_layout.addView(taskGroup);
}
private String getLabelByTypeAndCount(String type, int count) {
if (Challenge.TASK_ORDER_DAILYS.equals(type)) {
return context.getString(count == 1 ? R.string.daily : R.string.dailies);
} else if (Challenge.TASK_ORDER_HABITS.equals(type)) {
return context.getString(count == 1 ? R.string.habit : R.string.habits);
} else if (Challenge.TASK_ORDER_REWARDS.equals(type)) {
return context.getString(count == 1 ? R.string.reward : R.string.rewards);
} else {
return context.getString(count == 1 ? R.string.todo : R.string.todos);
}
}
@ -280,7 +292,6 @@ public class ChallengeDetailDialogHolder {
Intent intent = new Intent(context, ChallengeDetailActivity.class);
intent.putExtras(bundle);
//intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
context.startActivity(intent);
this.dialog.dismiss();
}
@ -302,8 +313,8 @@ public class ChallengeDetailDialogHolder {
challengeLeftAction.call(challenge);
}
this.dialog.dismiss();
}, throwable -> {
}))).setNegativeButton(context.getString(R.string.no), (dialog, which) -> dialog.dismiss()).show();
}, throwable -> {})))
.setNegativeButton(context.getString(R.string.no), (dialog, which) -> dialog.dismiss()).show();
}
// refactor as an UseCase later - see ChallengeDetailActivity

View file

@ -11,14 +11,13 @@ import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.components.AppComponent;
import com.habitrpg.android.habitica.data.ChallengeRepository;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.models.social.Challenge;
import com.habitrpg.android.habitica.ui.activities.CreateChallengeActivity;
import com.habitrpg.android.habitica.ui.adapter.social.ChallengesListViewAdapter;
@ -121,7 +120,7 @@ public class ChallengeListFragment extends BaseMainFragment implements SwipeRefr
}
this.challenges = challenges;
challengeAdapter.updateData(challenges);
}, ReactiveErrorHandler.handleEmptyError());
}, RxErrorHandler.handleEmptyError());
}
private void fetchOnlineChallenges() {

View file

@ -14,7 +14,7 @@ import com.habitrpg.android.habitica.components.AppComponent;
import com.habitrpg.android.habitica.data.ChallengeRepository;
import com.habitrpg.android.habitica.events.commands.ShowChallengeDetailActivityCommand;
import com.habitrpg.android.habitica.events.commands.ShowChallengeDetailDialogCommand;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.ui.activities.ChallengeDetailActivity;
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment;
@ -112,7 +112,7 @@ public class ChallengesOverviewFragment extends BaseMainFragment {
challengeRepository.getChallenge(cmd.challengeId).first().subscribe(challenge -> ChallengeDetailDialogHolder.showDialog(getActivity(), challengeRepository, challenge,
challenge1 -> {
// challenge left
}), ReactiveErrorHandler.handleEmptyError());
}), RxErrorHandler.handleEmptyError());
}
@Subscribe
@ -122,7 +122,6 @@ public class ChallengesOverviewFragment extends BaseMainFragment {
Intent intent = new Intent(getActivity(), ChallengeDetailActivity.class);
intent.putExtras(bundle);
//intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
getActivity().startActivity(intent);
}

View file

@ -19,10 +19,9 @@ import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.components.AppComponent;
import com.habitrpg.android.habitica.data.InventoryRepository;
import com.habitrpg.android.habitica.data.SocialRepository;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.models.social.Group;
import com.habitrpg.android.habitica.models.social.UserParty;
import com.habitrpg.android.habitica.models.user.User;
import com.habitrpg.android.habitica.ui.activities.GroupFormActivity;
import com.habitrpg.android.habitica.ui.activities.PartyInviteActivity;
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment;
@ -52,7 +51,6 @@ public class PartyFragment extends BaseMainFragment {
private GroupInformationFragment groupInformationFragment;
private ChatListFragment chatListFragment;
private FragmentPagerAdapter viewPagerAdapter;
private List<User> members;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
@ -66,29 +64,15 @@ public class PartyFragment extends BaseMainFragment {
viewPager.setCurrentItem(0);
// Get the full group data
if (this.user != null && this.user.getParty() != null && this.user.getParty().id != null) {
socialRepository.getGroup("party")
.filter(group1 -> group1 != null)
if (userHasParty()) {
compositeSubscription.add(socialRepository.getGroup(user.getParty().getId())
.subscribe(group -> {
if (group == null) {
return;
}
PartyFragment.this.group = group;
updateGroupUI();
socialRepository.getGroupMembers(group.id, true)
.subscribe(members -> {
PartyFragment.this.members = members;
updateGroupUI();
},
throwable -> {
});
}, throwable -> {
});
}, RxErrorHandler.handleEmptyError()));
socialRepository.retrieveGroup("party").subscribe(group1 -> {}, RxErrorHandler.handleEmptyError());
}
setViewPagerAdapter();
this.tutorialStepIdentifier = "party";
this.tutorialText = getString(R.string.tutorial_party);
@ -98,6 +82,10 @@ public class PartyFragment extends BaseMainFragment {
return v;
}
private boolean userHasParty() {
return this.user != null && this.user.getParty() != null && this.user.getParty().id != null;
}
@Override
public void onDestroy() {
socialRepository.close();
@ -144,7 +132,7 @@ public class PartyFragment extends BaseMainFragment {
if (groupInformationFragment != null) {
groupInformationFragment.setQuestContent(content);
}
}, ReactiveErrorHandler.handleEmptyError());
}, RxErrorHandler.handleEmptyError());
}
}
@ -162,9 +150,6 @@ public class PartyFragment extends BaseMainFragment {
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
switch (id) {

View file

@ -21,7 +21,7 @@ import com.habitrpg.android.habitica.data.InventoryRepository;
import com.habitrpg.android.habitica.data.TaskRepository;
import com.habitrpg.android.habitica.data.UserRepository;
import com.habitrpg.android.habitica.events.commands.AddNewTaskCommand;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.helpers.TaskFilterHelper;
import com.habitrpg.android.habitica.models.tasks.Task;
import com.habitrpg.android.habitica.models.user.User;
@ -349,7 +349,7 @@ public class TaskRecyclerViewFragment extends BaseFragment implements View.OnCli
swipeRefreshLayout.setRefreshing(true);
userRepository.retrieveUser(true, true)
.doOnTerminate(() -> swipeRefreshLayout.setRefreshing(false))
.subscribe(user1 -> {}, ReactiveErrorHandler.handleEmptyError());
.subscribe(user1 -> {}, RxErrorHandler.handleEmptyError());
}
public void setActiveFilter(String activeFilter) {

View file

@ -20,7 +20,6 @@ import android.widget.TextView;
import com.github.clans.fab.FloatingActionButton;
import com.github.clans.fab.FloatingActionMenu;
import com.habitrpg.android.habitica.HabiticaApplication;
import com.habitrpg.android.habitica.HabiticaBaseApplication;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.components.AppComponent;
@ -28,7 +27,7 @@ import com.habitrpg.android.habitica.data.TagRepository;
import com.habitrpg.android.habitica.events.TaskSaveEvent;
import com.habitrpg.android.habitica.events.TaskTappedEvent;
import com.habitrpg.android.habitica.events.commands.AddNewTaskCommand;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.helpers.TaskFilterHelper;
import com.habitrpg.android.habitica.models.TutorialStep;
import com.habitrpg.android.habitica.models.tasks.Task;
@ -348,7 +347,7 @@ public class TasksFragment extends BaseMainFragment {
}
}
}
}, ReactiveErrorHandler.handleEmptyError());
}, RxErrorHandler.handleEmptyError());
}
// endregion

View file

@ -28,7 +28,7 @@ import android.widget.TextView;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.components.AppComponent;
import com.habitrpg.android.habitica.data.TagRepository;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.models.Tag;
import com.habitrpg.android.habitica.models.tasks.Task;
@ -213,9 +213,9 @@ public class TaskFilterDialog extends AlertDialog implements RadioGroup.OnChecke
if (this.getWindow() != null) {
this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
}
repository.updateTags(editedTags.values()).subscribe(tag -> editedTags.remove(tag.getId()), ReactiveErrorHandler.handleEmptyError());
repository.createTags(createdTags.values()).subscribe(tag -> createdTags.remove(tag.getId()), ReactiveErrorHandler.handleEmptyError());
repository.deleteTags(deletedTags).subscribe(tags1 -> deletedTags.clear(), ReactiveErrorHandler.handleEmptyError());
repository.updateTags(editedTags.values()).subscribe(tag -> editedTags.remove(tag.getId()), RxErrorHandler.handleEmptyError());
repository.createTags(createdTags.values()).subscribe(tag -> createdTags.remove(tag.getId()), RxErrorHandler.handleEmptyError());
repository.deleteTags(deletedTags).subscribe(tags1 -> deletedTags.clear(), RxErrorHandler.handleEmptyError());
}
private void createTagEditViews() {

View file

@ -17,6 +17,8 @@ import com.habitrpg.android.habitica.models.user.User;
import java.lang.reflect.Type;
import java.util.List;
import io.realm.RealmList;
public class GroupSerialization implements JsonDeserializer<Group>, JsonSerializer<Group> {
@Override
public Group deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
@ -46,7 +48,7 @@ public class GroupSerialization implements JsonDeserializer<Group>, JsonSerializ
group.type = obj.get("type").getAsString();
}
if (obj.has("chat")) {
group.chat = context.deserialize(obj.get("chat"), new TypeToken<List<ChatMessage>>() {
group.chat = context.deserialize(obj.get("chat"), new TypeToken<RealmList<ChatMessage>>() {
}.getType());
}
if (obj.has("members")) {

View file

@ -13,7 +13,7 @@ import android.widget.RemoteViews;
import com.habitrpg.android.habitica.HabiticaBaseApplication;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.data.UserRepository;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.models.user.User;
import com.habitrpg.android.habitica.models.user.Stats;
import com.habitrpg.android.habitica.modules.AppModule;
@ -50,7 +50,7 @@ public class AvatarStatsWidgetProvider extends BaseWidgetProvider {
this.appWidgetManager = appWidgetManager;
this.context = context;
userRepository.getUser(userId).subscribe(this::updateData, ReactiveErrorHandler.handleEmptyError());
userRepository.getUser(userId).subscribe(this::updateData, RxErrorHandler.handleEmptyError());
}
@Override

View file

@ -12,9 +12,7 @@ import android.widget.Toast;
import com.habitrpg.android.habitica.HabiticaApplication;
import com.habitrpg.android.habitica.data.UserRepository;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.interactors.NotifyUserUseCase;
import com.habitrpg.android.habitica.models.responses.TaskDirectionData;
import com.habitrpg.android.habitica.models.responses.TaskScoringResult;
import com.habitrpg.android.habitica.ui.helpers.UiUtils;

View file

@ -16,7 +16,7 @@ import android.widget.RemoteViews;
import com.habitrpg.android.habitica.HabiticaBaseApplication;
import com.habitrpg.android.habitica.R;
import com.habitrpg.android.habitica.data.TaskRepository;
import com.habitrpg.android.habitica.helpers.ReactiveErrorHandler;
import com.habitrpg.android.habitica.helpers.RxErrorHandler;
import com.habitrpg.android.habitica.models.responses.TaskDirection;
import com.habitrpg.android.habitica.models.tasks.Task;
import com.habitrpg.android.habitica.modules.AppModule;
@ -53,7 +53,7 @@ public class HabitButtonWidgetService extends Service {
makeTaskMapping();
for (String taskid : this.taskMapping.keySet()) {
taskRepository.getTask(taskid).subscribe(this::updateData, ReactiveErrorHandler.handleEmptyError());
taskRepository.getTask(taskid).subscribe(this::updateData, RxErrorHandler.handleEmptyError());
}
stopSelf();