From 12b2462819a377f2a7f64ab17373e61b2aa4a5b7 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Tue, 3 Oct 2017 11:13:46 +0200 Subject: [PATCH] finalize bugfix update --- Habitica/AndroidManifest.xml | 4 +- .../implementation/SocialRepositoryImpl.java | 10 ++- .../habitica/models/user/ContributorInfo.java | 3 +- .../android/habitica/models/user/User.java | 7 ++ .../habitica/ui/activities/MainActivity.java | 2 +- .../social/ChatRecyclerViewAdapter.java | 4 +- .../fragments/social/party/PartyFragment.java | 3 + .../ui/views/shops/PurchaseDialog.java | 89 ++++++++++--------- .../habitica/widget/BaseWidgetProvider.java | 2 + 9 files changed, 72 insertions(+), 52 deletions(-) diff --git a/Habitica/AndroidManifest.xml b/Habitica/AndroidManifest.xml index b3b8db6535..4f35fd474b 100644 --- a/Habitica/AndroidManifest.xml +++ b/Habitica/AndroidManifest.xml @@ -2,8 +2,8 @@ diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/SocialRepositoryImpl.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/SocialRepositoryImpl.java index bd57c2b0cd..21f31eb38c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/SocialRepositoryImpl.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/SocialRepositoryImpl.java @@ -81,10 +81,16 @@ public Observable deleteMessage(ChatMessage chatMessage) { public Observable postGroupChat(String groupId, HashMap messageObject) { return apiClient.postGroupChat(groupId, messageObject) .map(postChatMessageResult -> { - postChatMessageResult.message.groupId = groupId; + if (postChatMessageResult != null) { + postChatMessageResult.message.groupId = groupId; + } return postChatMessageResult; }) - .doOnNext(postChatMessageResult -> localRepository.save(postChatMessageResult.message)); + .doOnNext(postChatMessageResult -> { + if (postChatMessageResult != null) { + localRepository.save(postChatMessageResult.message); + } + }); } @Override diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/ContributorInfo.java b/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/ContributorInfo.java index f9fba755b5..24af33960f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/ContributorInfo.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/ContributorInfo.java @@ -78,8 +78,7 @@ public int getContributorColor() { } public int getContributorForegroundColor() { - int rColor = android.R.color.white; - return rColor; + return android.R.color.white; } public String getUserId() { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/User.java b/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/User.java index 25ef3ebbb0..90b0d3d817 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/User.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/User.java @@ -357,4 +357,11 @@ public int getLoginIncentives() { public void setLoginIncentives(int loginIncentives) { this.loginIncentives = loginIncentives; } + + public int getContributorColor() { + if (contributor != null) { + return contributor.getContributorColor(); + } + return android.R.color.black; + } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java index dd9668c45d..3269a55491 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java @@ -696,7 +696,7 @@ public void onEvent(FeedCommand event) { // endregion public void displayTaskScoringResponse(TaskScoringResult data) { - if (user != null) { + if (user != null && data != null) { notifyUserUseCase.observable(new NotifyUserUseCase.RequestValues(this, floatingMenuWrapper, user, data.experienceDelta, data.healthDelta, data.goldDelta, data.manaDelta, data.hasLeveledUp)) .subscribe(aVoid -> {}, RxErrorHandler.handleEmptyError()); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/ChatRecyclerViewAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/ChatRecyclerViewAdapter.java index 59e8a0dc5f..aad910e76e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/ChatRecyclerViewAdapter.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/ChatRecyclerViewAdapter.java @@ -145,8 +145,8 @@ public void bind(final ChatMessage msg) { setLikeProperties(); if (userBackground != null) { - if (msg.sent != null && msg.sent.equals("true")) { - DataBindingUtils.setRoundedBackgroundInt(userBackground, sendingUser.getContributor().getContributorColor()); + if (msg.sent != null && msg.sent.equals("true") && sendingUser != null) { + DataBindingUtils.setRoundedBackgroundInt(userBackground, sendingUser.getContributorColor()); } else { DataBindingUtils.setRoundedBackgroundInt(userBackground, msg.getContributorColor()); } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyFragment.java index 30ab216af1..142f584ef6 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyFragment.java @@ -37,6 +37,8 @@ import javax.inject.Inject; +import rx.android.schedulers.AndroidSchedulers; + public class PartyFragment extends BaseMainFragment { @@ -72,6 +74,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, .first() //delay, so that realm can save party first .delay(500, TimeUnit.MILLISECONDS) + .observeOn(AndroidSchedulers.mainThread()) .subscribe(group -> { PartyFragment.this.group = group; updateGroupUI(); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.java index c9bb37532e..50b847d969 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.java @@ -205,52 +205,55 @@ void onCloseClicked() { @OnClick(R.id.buyButton) void onBuyButtonClicked() { - if (shopItem.canBuy(user)) { - Observable observable; - if ((shopIdentifier!= null && shopIdentifier.equals(Shop.TIME_TRAVELERS_SHOP)) || "mystery_set".equals(shopItem.purchaseType)) { - if (shopItem.purchaseType.equals("gear")) { - observable = inventoryRepository.purchaseMysterySet(shopItem.categoryIdentifier); + if (shopItem.isValid()) { + if (shopItem.canBuy(user)) { + Observable observable; + if ((shopIdentifier != null && shopIdentifier.equals(Shop.TIME_TRAVELERS_SHOP)) || "mystery_set".equals(shopItem.purchaseType)) { + if (shopItem.purchaseType.equals("gear")) { + observable = inventoryRepository.purchaseMysterySet(shopItem.categoryIdentifier); + } else { + observable = inventoryRepository.purchaseHourglassItem(shopItem.purchaseType, shopItem.key); + } + } else if (shopItem.purchaseType.equals("quests") && shopItem.getCurrency().equals("gold")) { + observable = inventoryRepository.purchaseQuest(shopItem.key); + } else if ("gold".equals(shopItem.currency) && !"gem".equals(shopItem.key)) { + observable = inventoryRepository.buyItem(user, shopItem.key, shopItem.value).flatMap(buyResponse -> Observable.just(null)); } else { - observable = inventoryRepository.purchaseHourglassItem(shopItem.purchaseType, shopItem.key); + observable = inventoryRepository.purchaseItem(shopItem.purchaseType, shopItem.key); } - } else if (shopItem.purchaseType.equals("quests") && shopItem.getCurrency().equals("gold")) { - observable = inventoryRepository.purchaseQuest(shopItem.key); - } else if ("gold".equals(shopItem.currency) && !"gem".equals(shopItem.key)) { - observable = inventoryRepository.buyItem(user, shopItem.key, shopItem.value).flatMap(buyResponse -> Observable.just(null)); - } else { - observable = inventoryRepository.purchaseItem(shopItem.purchaseType, shopItem.key); - } - observable - .doOnNext(aVoid -> { - ShowSnackbarEvent event = new ShowSnackbarEvent(); - event.title = getContext().getString(R.string.successful_purchase, shopItem.text); - event.type = HabiticaSnackbar.SnackbarDisplayType.NORMAL; - event.rightIcon = priceLabel.getCompoundDrawables()[0]; - event.rightTextColor = priceLabel.getCurrentTextColor(); - event.rightText = "-"+priceLabel.getText(); - EventBus.getDefault().post(event); - }) - .flatMap(buyResponse -> userRepository.retrieveUser(false, true)) - .flatMap(user1 -> inventoryRepository.retrieveInAppRewards()) - .subscribe(buyResponse -> {}, throwable -> { - if (throwable.getClass().isAssignableFrom(retrofit2.HttpException.class)) { - retrofit2.HttpException error = (retrofit2.HttpException) throwable; - if (error.code() == 401 && shopItem.getCurrency().equals("gems")) { - EventBus.getDefault().post(new OpenGemPurchaseFragmentCommand()); + observable + .doOnNext(aVoid -> { + ShowSnackbarEvent event = new ShowSnackbarEvent(); + event.title = getContext().getString(R.string.successful_purchase, shopItem.text); + event.type = HabiticaSnackbar.SnackbarDisplayType.NORMAL; + event.rightIcon = priceLabel.getCompoundDrawables()[0]; + event.rightTextColor = priceLabel.getCurrentTextColor(); + event.rightText = "-" + priceLabel.getText(); + EventBus.getDefault().post(event); + }) + .flatMap(buyResponse -> userRepository.retrieveUser(false, true)) + .flatMap(user1 -> inventoryRepository.retrieveInAppRewards()) + .subscribe(buyResponse -> { + }, throwable -> { + if (throwable.getClass().isAssignableFrom(retrofit2.HttpException.class)) { + retrofit2.HttpException error = (retrofit2.HttpException) throwable; + if (error.code() == 401 && shopItem.getCurrency().equals("gems")) { + EventBus.getDefault().post(new OpenGemPurchaseFragmentCommand()); + } } - } - }); - } else { - InsufficientCurrencyDialog dialog = null; - if ("gold".equals(shopItem.currency)) { - dialog = new InsufficientGoldDialog(getContext()); - } else if ("gems".equals(shopItem.currency)) { - dialog = new InsufficientGemsDialog(getContext()); - } else if ("hourglasses".equals(shopItem.currency)) { - dialog = new InsufficientHourglassesDialog(getContext()); - } - if (dialog != null) { - dialog.show(); + }); + } else { + InsufficientCurrencyDialog dialog = null; + if ("gold".equals(shopItem.currency)) { + dialog = new InsufficientGoldDialog(getContext()); + } else if ("gems".equals(shopItem.currency)) { + dialog = new InsufficientGemsDialog(getContext()); + } else if ("hourglasses".equals(shopItem.currency)) { + dialog = new InsufficientHourglassesDialog(getContext()); + } + if (dialog != null) { + dialog.show(); + } } } dismiss(); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/BaseWidgetProvider.java b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/BaseWidgetProvider.java index e74d7220c1..5142c5d4fd 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/BaseWidgetProvider.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/BaseWidgetProvider.java @@ -78,9 +78,11 @@ protected void showToastForTaskDirection(Context context, TaskScoringResult data if (userRepository == null) { HabiticaApplication.getComponent().inject(this); } + if (data != null) { Pair pair = NotifyUserUseCase.getNotificationAndAddStatsToUserAsText(context, data.experienceDelta, data.healthDelta, data.goldDelta, data.manaDelta); Toast toast = Toast.makeText(context, pair.first, Toast.LENGTH_LONG); toast.show(); + } } abstract public int layoutResourceId();