From 1f9e61ce3a2d1c640020a05c0b6a18b06d1a2d2b Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Tue, 1 Aug 2017 18:07:50 +0200 Subject: [PATCH 1/7] fix various minor issues --- Habitica/AndroidManifest.xml | 4 +- .../implementation/TaskRepositoryImpl.java | 4 + .../RealmInventoryLocalRepository.java | 3 +- .../RealmSocialLocalRepository.java | 3 +- .../habitica/helpers/TaskAlarmManager.java | 11 ++- .../habitica/interactors/LevelUpUseCase.java | 7 +- .../interactors/NotifyUserUseCase.java | 3 + .../android/habitica/models/tasks/Task.java | 19 ++-- .../android/habitica/models/user/User.java | 88 +------------------ .../LocalNotificationActionReceiver.java | 50 +++-------- .../activities/ChallengeDetailActivity.java | 2 +- .../ui/activities/ClassSelectionActivity.java | 8 +- .../activities/CreateChallengeActivity.java | 4 +- .../ui/activities/FullProfileActivity.java | 5 +- .../habitica/ui/activities/MainActivity.java | 19 ++-- .../ui/activities/MaintenanceActivity.java | 4 +- .../habitica/ui/activities/SetupActivity.java | 16 ++-- .../ui/activities/TaskFormActivity.java | 2 +- .../PublicGuildsRecyclerViewAdapter.java | 31 ++++--- .../tasks/RewardsRecyclerViewAdapter.java | 2 +- .../ui/fragments/SubscriptionFragment.java | 7 +- .../customization/AvatarOverviewFragment.java | 3 +- .../inventory/items/ItemRecyclerFragment.java | 2 +- .../inventory/shops/ShopFragment.java | 2 +- .../preferences/PreferencesFragment.java | 2 +- .../ui/fragments/social/ChatListFragment.java | 5 +- .../ui/fragments/social/GuildFragment.java | 13 ++- .../social/GuildsOverviewFragment.java | 2 +- .../ui/fragments/social/InboxFragment.java | 5 +- .../social/InboxMessageListFragment.java | 3 +- .../social/PublicGuildsFragment.java | 3 +- .../fragments/social/QuestDetailFragment.java | 10 +-- .../ui/fragments/social/TavernFragment.java | 3 +- .../ChallengeDetailDialogHolder.java | 5 +- .../social/party/PartyDetailFragment.java | 8 +- .../fragments/social/party/PartyFragment.java | 8 +- .../habitica/widget/TaskListFactory.java | 3 +- 37 files changed, 135 insertions(+), 234 deletions(-) diff --git a/Habitica/AndroidManifest.xml b/Habitica/AndroidManifest.xml index 8bac53b10..8cb7e3a7f 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/TaskRepositoryImpl.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TaskRepositoryImpl.java index 4dc3e817f..59d8ccd88 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TaskRepositoryImpl.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TaskRepositoryImpl.java @@ -150,6 +150,10 @@ public class TaskRepositoryImpl extends BaseRepositoryImpl RealmList checklist = new RealmList<>(localRepository.getUnmanagedCopy(task.getChecklist()).toArray(new ChecklistItem[0])); task.setChecklist(checklist); } + if (task.getReminders() != null && task.getReminders().size() > 0) { + RealmList reminders = new RealmList<>(localRepository.getUnmanagedCopy(task.getReminders()).toArray(new RemindersItem[0])); + task.setReminders(reminders); + } return apiClient.createTask(task) .map(task1 -> { task1.dateCreated = new Date(); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmInventoryLocalRepository.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmInventoryLocalRepository.java index 348d966e9..6eba163ea 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmInventoryLocalRepository.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmInventoryLocalRepository.java @@ -3,6 +3,7 @@ package com.habitrpg.android.habitica.data.local.implementation; import android.content.Context; import com.habitrpg.android.habitica.data.local.InventoryLocalRepository; +import com.habitrpg.android.habitica.helpers.RxErrorHandler; import com.habitrpg.android.habitica.models.inventory.Egg; import com.habitrpg.android.habitica.models.inventory.Equipment; import com.habitrpg.android.habitica.models.inventory.Food; @@ -219,7 +220,7 @@ public class RealmInventoryLocalRepository extends RealmContentLocalRepository i @Override public void changeOwnedCount(String type, String key, int amountToAdd) { - this.getItem(type, key).first().subscribe(item -> changeOwnedCount(item, amountToAdd)); + this.getItem(type, key).first().subscribe(item -> changeOwnedCount(item, amountToAdd), RxErrorHandler.handleEmptyError()); } @Override diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmSocialLocalRepository.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmSocialLocalRepository.java index 262d965d2..e439dec73 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmSocialLocalRepository.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmSocialLocalRepository.java @@ -1,6 +1,7 @@ package com.habitrpg.android.habitica.data.local.implementation; import com.habitrpg.android.habitica.data.local.SocialLocalRepository; +import com.habitrpg.android.habitica.helpers.RxErrorHandler; import com.habitrpg.android.habitica.models.members.Member; import com.habitrpg.android.habitica.models.social.ChatMessage; import com.habitrpg.android.habitica.models.social.ChatMessageLike; @@ -72,7 +73,7 @@ public class RealmSocialLocalRepository extends RealmBaseLocalRepository impleme @Override public void deleteMessage(String id) { - getMessage(id).first().subscribe(chatMessage -> realm.executeTransaction(realm1 -> chatMessage.deleteFromRealm()), throwable -> {}); + getMessage(id).first().subscribe(chatMessage -> realm.executeTransaction(realm1 -> chatMessage.deleteFromRealm()), RxErrorHandler.handleEmptyError()); } @Override diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskAlarmManager.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskAlarmManager.java index 610860956..edeac5def 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskAlarmManager.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/TaskAlarmManager.java @@ -6,6 +6,7 @@ import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.Build; +import android.support.annotation.Nullable; import android.support.v7.preference.PreferenceManager; import com.habitrpg.android.habitica.HabiticaBaseApplication; @@ -149,7 +150,7 @@ public class TaskAlarmManager { taskRepository.getTaskCopies(userId) .first() .flatMap(Observable::from) - .subscribe(this::setAlarmsForTask, crashlyticsProxy::logException); + .subscribe(this::setAlarmsForTask, RxErrorHandler.handleEmptyError()); scheduleDailyReminder(context); SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(context).edit(); @@ -157,9 +158,13 @@ public class TaskAlarmManager { editor.apply(); } + @Nullable private RemindersItem setTimeForDailyReminder(RemindersItem remindersItem, Task task) { Date oldTime = remindersItem.getTime(); Date newTime = task.getNextReminderOccurence(oldTime); + if (newTime == null) { + return null; + } Calendar calendar = Calendar.getInstance(); calendar.setTime(newTime); calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DATE), oldTime.getHours(), oldTime.getMinutes(), 0); @@ -167,9 +172,9 @@ public class TaskAlarmManager { return remindersItem; } - private void setAlarmForRemindersItem(Task reminderItemTask, RemindersItem remindersItem) { + private void setAlarmForRemindersItem(Task reminderItemTask, @Nullable RemindersItem remindersItem) { Date now = new Date(); - if (remindersItem.getTime().before(now)) { + if (remindersItem == null || remindersItem.getTime().before(now)) { return; } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/LevelUpUseCase.java b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/LevelUpUseCase.java index 8d70aec6b..f209ffc82 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/LevelUpUseCase.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/LevelUpUseCase.java @@ -9,6 +9,7 @@ import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.events.ShareEvent; import com.habitrpg.android.habitica.executors.PostExecutionThread; import com.habitrpg.android.habitica.executors.ThreadExecutor; +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.models.user.Stats; @@ -45,8 +46,7 @@ public class LevelUpUseCase extends UseCase if (suppressedModals.getLevelUp()) { checkClassSelectionUseCase.observable(new CheckClassSelectionUseCase.RequestValues(requestValues.user, null)) .subscribe(aVoid -> { - }, throwable -> { - }); + }, RxErrorHandler.handleEmptyError()); return Observable.just(requestValues.user.getStats()); } @@ -71,8 +71,7 @@ public class LevelUpUseCase extends UseCase .setView(customView) .setPositiveButton(R.string.levelup_button, (dialog, which) -> checkClassSelectionUseCase.observable(new CheckClassSelectionUseCase.RequestValues(requestValues.user, null)) .subscribe(aVoid -> { - }, throwable -> { - })) + }, RxErrorHandler.handleEmptyError())) .setNeutralButton(R.string.share, (dialog, which) -> { EventBus.getDefault().post(event); dialog.dismiss(); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/NotifyUserUseCase.java b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/NotifyUserUseCase.java index d89b85886..d2fde4bbf 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/NotifyUserUseCase.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/NotifyUserUseCase.java @@ -41,6 +41,9 @@ public class NotifyUserUseCase extends UseCase buildUseCaseObservable(RequestValues requestValues) { return Observable.defer(() -> { + if (requestValues.user == null) { + return Observable.just(null); + } Stats stats = requestValues.user.getStats(); if (requestValues.hasLeveledUp) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.java b/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.java index 4efd53739..d7e4047ba 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.java @@ -500,6 +500,7 @@ public class Task extends RealmObject implements Parcelable { return this.isDisplayedActive(offset) && (this.checklist.size() != this.getCompletedChecklistCount()); } + @Nullable public Date getNextReminderOccurence(Date oldTime) { Calendar today = Calendar.getInstance(); @@ -517,7 +518,7 @@ public class Task extends RealmObject implements Parcelable { return newTime.getTime(); } - if (this.getFrequency().equals(FREQUENCY_DAILY)) { + if (FREQUENCY_DAILY.equals(this.getFrequency())) { Calendar startDate = new GregorianCalendar(); startDate.setTime(this.getStartDate()); @@ -528,13 +529,21 @@ public class Task extends RealmObject implements Parcelable { today.add(Calendar.DATE, (int) daysUntilNextReminder); newTime.setTime(today.getTime()); - } else { + } else if (FREQUENCY_WEEKLY.equals(this.getFrequency())) { int nextActiveDayOfTheWeek = newTime.get(Calendar.DAY_OF_WEEK); - while (!this.getRepeat().getForDay(nextActiveDayOfTheWeek) || newTime.before(today) || newTime.equals(today)) { - if (nextActiveDayOfTheWeek == 6) nextActiveDayOfTheWeek = 0; - nextActiveDayOfTheWeek += 1; + while ((!this.getRepeat().getForDay(nextActiveDayOfTheWeek) || newTime.before(today) || newTime.equals(today)) && nextActiveDayOfTheWeek < 7) { + if (nextActiveDayOfTheWeek == 6) { + nextActiveDayOfTheWeek = 0; + } else { + nextActiveDayOfTheWeek += 1; + } newTime.add(Calendar.DATE, 1); } + if (nextActiveDayOfTheWeek > 7) { + return null; + } + } else { + return null; } return newTime.getTime(); 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 016d37e15..8740bf653 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 @@ -244,92 +244,6 @@ public class User extends RealmObject implements Avatar { this.pushDevices = pushDevices; } - public List getAvatarLayerNames() { - List layerNames = new ArrayList(); - - Preferences prefs = this.getPreferences(); - - if (prefs.getChair() != null) { - layerNames.add(prefs.getChair()); - } - - Outfit outfit = null; - if (this.getItems() != null) { - if (prefs.getCostume()) { - outfit = this.getItems().getGear().getCostume(); - } else { - outfit = this.getItems().getGear().getEquipped(); - } - } - - if (outfit != null) { - if (outfit.getBack() != null) { - layerNames.add(outfit.getBack()); - } - } - - if (prefs.getSleep()) { - layerNames.add("skin_" + prefs.getSkin() + "_sleep"); - } else { - layerNames.add("skin_" + prefs.getSkin()); - } - layerNames.add(prefs.getSize() + "_shirt_" + prefs.getShirt()); - layerNames.add("head_0"); - - if (outfit != null) { - String armor = outfit.getArmor(); - - if (armor != null && !armor.equals("armor_base_0")) { - layerNames.add(prefs.getSize() + "_" + armor); - } - if (outfit.getBody() != null && !outfit.getBody().equals("body_base_0")) { - layerNames.add(outfit.getBody()); - } - } - - Hair hair = prefs.getHair(); - if (hair != null) { - String hairColor = hair.getColor(); - - if (hair.getBase() > 0) { - layerNames.add("hair_base_" + hair.getBase() + "_" + hairColor); - } - if (hair.getBangs() > 0) { - layerNames.add("hair_bangs_" + hair.getBangs() + "_" + hairColor); - } - if (hair.getMustache() > 0) { - layerNames.add("hair_mustache_" + hair.getMustache() + "_" + hairColor); - } - if (hair.getBeard() > 0) { - layerNames.add("hair_beard_" + hair.getBeard() + "_" + hairColor); - } - } - - if (outfit != null) { - if (outfit.getEyeWear() != null && !outfit.getEyeWear().equals("eyewear_base_0")) { - layerNames.add(outfit.getEyeWear()); - } - if (outfit.getHead() != null && !outfit.getHead().equals("head_base_0")) { - layerNames.add(outfit.getHead()); - } - if (outfit.getHeadAccessory() != null && !outfit.getHeadAccessory().equals("headAccessory_base_0")) { - layerNames.add(outfit.getHeadAccessory()); - } - if (outfit.getShield() != null && !outfit.getShield().equals("shield_base_0")) { - layerNames.add(outfit.getShield()); - } - if (outfit.getWeapon() != null && !outfit.getWeapon().equals("weapon_base_0")) { - layerNames.add(outfit.getWeapon()); - } - } - - if (prefs.getSleep()) { - layerNames.add("zzz"); - } - - return layerNames; - } - public EnumMap getAvatarLayerMap() { EnumMap layerMap = new EnumMap<>(AvatarView.LayerType.class); @@ -378,7 +292,7 @@ public class User extends RealmObject implements Avatar { } if (outfit != null) { - if (!TextUtils.isEmpty(outfit.getBack())) { + if (!TextUtils.isEmpty(outfit.getBack()) && !"back_base_0".equals(outfit.getBack())) { layerMap.put(AvatarView.LayerType.BACK, outfit.getBack()); } if (outfit.isAvailable(outfit.getArmor())) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/LocalNotificationActionReceiver.java b/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/LocalNotificationActionReceiver.java index 56a09a12c..b3cb0eb96 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/LocalNotificationActionReceiver.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/receivers/LocalNotificationActionReceiver.java @@ -10,16 +10,17 @@ import android.os.Bundle; import com.habitrpg.android.habitica.HabiticaBaseApplication; 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.RxErrorHandler; import com.habitrpg.android.habitica.models.user.User; import javax.inject.Inject; -/** - * Created by keithholliday on 6/30/16. - */ public class LocalNotificationActionReceiver extends BroadcastReceiver { @Inject - public ApiClient apiClient; + public UserRepository userRepository; + @Inject + ApiClient apiClient; private User user; private String action; @@ -36,14 +37,13 @@ public class LocalNotificationActionReceiver extends BroadcastReceiver { this.intent = intent; this.context = context; - this.apiClient.getUser() - .subscribe(this::onUserReceived, throwable -> { - }); + this.userRepository.getUser().first().subscribe(this::onUserReceived, RxErrorHandler.handleEmptyError()); } public void onUserReceived(User user) { this.user = user; this.handleLocalNotificationAction(action); + userRepository.close(); } private void handleLocalNotificationAction(String action) { @@ -54,53 +54,29 @@ public class LocalNotificationActionReceiver extends BroadcastReceiver { if (action.equals(this.resources.getString(R.string.accept_party_invite))) { if (this.user.getInvitations().getParty() == null) return; String partyId = this.user.getInvitations().getParty().getId(); - apiClient.joinGroup(partyId) - - .subscribe(aVoid -> { - }, throwable -> { - }); + apiClient.joinGroup(partyId).subscribe(aVoid -> {}, RxErrorHandler.handleEmptyError()); } else if (action.equals(this.resources.getString(R.string.reject_party_invite))) { if (this.user.getInvitations().getParty() == null) return; String partyId = this.user.getInvitations().getParty().getId(); - apiClient.rejectGroupInvite(partyId) - - .subscribe(aVoid -> { - }, throwable -> { - }); + apiClient.rejectGroupInvite(partyId).subscribe(aVoid -> {}, RxErrorHandler.handleEmptyError()); } else if (action.equals(this.resources.getString(R.string.accept_quest_invite))) { if (this.user.getParty() == null) return; String partyId = this.user.getParty().getId(); - apiClient.acceptQuest(partyId) - - .subscribe(aVoid -> { - }, throwable -> { - }); + apiClient.acceptQuest(partyId).subscribe(aVoid -> {}, RxErrorHandler.handleEmptyError()); } else if (action.equals(this.resources.getString(R.string.reject_quest_invite))) { if (this.user.getParty() == null) return; String partyId = this.user.getParty().getId(); - apiClient.rejectQuest(partyId) - - .subscribe(aVoid -> { - }, throwable -> { - }); + apiClient.rejectQuest(partyId).subscribe(aVoid -> {}, RxErrorHandler.handleEmptyError()); } else if (action.equals(this.resources.getString(R.string.accept_guild_invite))) { Bundle extras = this.intent.getExtras(); String guildId = extras.getString("groupID"); if (guildId == null) return; - apiClient.joinGroup(guildId) - - .subscribe(aVoid -> { - }, throwable -> { - }); + apiClient.joinGroup(guildId).subscribe(aVoid -> {}, RxErrorHandler.handleEmptyError()); } else if (action.equals(this.resources.getString(R.string.reject_guild_invite))) { Bundle extras = this.intent.getExtras(); String guildId = extras.getString("groupID"); if (guildId == null) return; - apiClient.rejectGroupInvite(guildId) - - .subscribe(aVoid -> { - }, throwable -> { - }); + apiClient.rejectGroupInvite(guildId).subscribe(aVoid -> {}, RxErrorHandler.handleEmptyError()); } } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ChallengeDetailActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ChallengeDetailActivity.java index 4dd9a8f41..3861822d5 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ChallengeDetailActivity.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ChallengeDetailActivity.java @@ -295,7 +295,7 @@ public class ChallengeDetailActivity extends BaseActivity { dialog.dismiss(); showRemoveTasksDialog(keepTasks -> this.challengeRepository.leaveChallenge(challenge, new LeaveChallengeBody(keepTasks)) - .subscribe(aVoid -> finish(), throwable -> {})); + .subscribe(aVoid -> finish(), RxErrorHandler.handleEmptyError())); }) .setNegativeButton(this.getString(R.string.no), (dialog, which) -> dialog.dismiss()).show(); } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ClassSelectionActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ClassSelectionActivity.java index 81e8597a8..bb31c566d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ClassSelectionActivity.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ClassSelectionActivity.java @@ -9,6 +9,7 @@ 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.data.UserRepository; +import com.habitrpg.android.habitica.helpers.RxErrorHandler; import com.habitrpg.android.habitica.models.user.Gear; import com.habitrpg.android.habitica.models.user.User; import com.habitrpg.android.habitica.models.user.Hair; @@ -104,8 +105,7 @@ public class ClassSelectionActivity extends BaseActivity implements Action1 classWasUnset = true, throwable -> { - }); + .subscribe(user -> classWasUnset = true, RxErrorHandler.handleEmptyError()); } } @@ -202,13 +202,13 @@ public class ClassSelectionActivity extends BaseActivity implements Action1 {}); + userRepository.disableClasses().subscribe(this, RxErrorHandler.handleEmptyError()); } private void selectClass(String selectedClass) { shouldFinish = true; this.displayProgressDialog(); - userRepository.changeClass(selectedClass).subscribe(this, throwable -> {}); + userRepository.changeClass(selectedClass).subscribe(this, RxErrorHandler.handleEmptyError()); } private void displayProgressDialog() { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/CreateChallengeActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/CreateChallengeActivity.java index 300a2f78e..e19377ef4 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/CreateChallengeActivity.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/CreateChallengeActivity.java @@ -391,7 +391,7 @@ public class CreateChallengeActivity extends BaseActivity { } else if (t.equals(addReward)) { openNewTaskActivity(Task.TYPE_REWARD, null); } - }); + }, RxErrorHandler.handleEmptyError()); createChallengeTaskList.addOnItemTouchListener(new RecyclerView.SimpleOnItemTouchListener() { @Override @@ -444,7 +444,7 @@ public class CreateChallengeActivity extends BaseActivity { // activate editMode to track taskChanges editMode = true; }); - }); + }, RxErrorHandler.handleEmptyError()); } private void openNewTaskActivity(String type, Task task) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.java index 15230f25c..e34012d17 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.java @@ -188,8 +188,7 @@ public class FullProfileActivity extends BaseActivity { .setPositiveButton(android.R.string.ok, (dialogInterface, i) -> { socialRepository.postPrivateMessage(userId, emojiEditText.getText().toString()) .subscribe(postChatMessageResult -> showSnackbar(FullProfileActivity.this, FullProfileActivity.this.fullprofile_scrollview, - String.format(getString(R.string.profile_message_sent_to), userName), SnackbarDisplayType.NORMAL), throwable -> { - }); + String.format(getString(R.string.profile_message_sent_to), userName), SnackbarDisplayType.NORMAL), RxErrorHandler.handleEmptyError()); UiUtils.dismissKeyboard(HabiticaApplication.currentActivity); }) @@ -254,7 +253,7 @@ public class FullProfileActivity extends BaseActivity { //mountsTamedCount.setText(String.valueOf(user.getMountsTamedCount())); // Load the members achievements now - apiClient.getMemberAchievements(this.userId).subscribe(this::fillAchievements, throwable -> {}); + apiClient.getMemberAchievements(this.userId).subscribe(this::fillAchievements, RxErrorHandler.handleEmptyError()); } // endregion 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 62721ff99..fef9299fb 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 @@ -681,8 +681,7 @@ public class MainActivity extends BaseActivity implements TutorialView.OnTutoria }) .create(); dialog.show(); - }, throwable -> { - }); + }, RxErrorHandler.handleEmptyError()); } @Subscribe @@ -719,8 +718,7 @@ public class MainActivity extends BaseActivity implements TutorialView.OnTutoria .create(); dialog.show(); } - }, throwable -> { - }); + }, RxErrorHandler.handleEmptyError()); } // endregion @@ -760,7 +758,7 @@ public class MainActivity extends BaseActivity implements TutorialView.OnTutoria .setView(customView) .setPositiveButton(R.string.faint_button, (dialog, which) -> { faintDialog = null; - userRepository.revive(user).subscribe(user1 -> {}, throwable -> {}); + userRepository.revive(user).subscribe(user1 -> {}, RxErrorHandler.handleEmptyError()); }) .create(); @@ -796,8 +794,7 @@ public class MainActivity extends BaseActivity implements TutorialView.OnTutoria public void displayClassSelectionActivity(SelectClassEvent event) { checkClassSelectionUseCase.observable(new CheckClassSelectionUseCase.RequestValues(user, event)) .subscribe(aVoid -> { - }, throwable -> { - }); + }, RxErrorHandler.handleEmptyError()); } private void displayTutorialStep(TutorialStep step, String text, boolean canBeDeferred) { @@ -836,8 +833,7 @@ public class MainActivity extends BaseActivity implements TutorialView.OnTutoria Map updateData = new HashMap<>(); updateData.put(path, true); userRepository.updateUser(user, updateData) - .subscribe(user1 -> {}, throwable -> { - }); + .subscribe(user1 -> {}, RxErrorHandler.handleEmptyError()); this.overlayLayout.removeView(this.activeTutorialView); this.removeActiveTutorialView(); @@ -920,6 +916,9 @@ public class MainActivity extends BaseActivity implements TutorialView.OnTutoria this.maintenanceService.getMaintenanceStatus() .compose(apiClient.configureApiCallObserver()) .subscribe(maintenanceResponse -> { + if (maintenanceResponse == null) { + return; + } if (maintenanceResponse.activeMaintenance) { Intent intent = createMaintenanceIntent(maintenanceResponse, false); startActivity(intent); @@ -937,7 +936,7 @@ public class MainActivity extends BaseActivity implements TutorialView.OnTutoria } } } - }, throwable -> {}); + }, RxErrorHandler.handleEmptyError()); } private Intent createMaintenanceIntent(MaintenanceResponse maintenanceResponse, Boolean isDeprecationNotice) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MaintenanceActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MaintenanceActivity.java index 48606ce7c..d6a302512 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MaintenanceActivity.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MaintenanceActivity.java @@ -13,6 +13,7 @@ import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.api.MaintenanceApiService; import com.habitrpg.android.habitica.components.AppComponent; import com.habitrpg.android.habitica.data.ApiClient; +import com.habitrpg.android.habitica.helpers.RxErrorHandler; import com.habitrpg.android.habitica.ui.helpers.MarkdownParser; import net.pherth.android.emoji_library.EmojiTextView; @@ -80,8 +81,7 @@ public class MaintenanceActivity extends BaseActivity { if (!maintenanceResponse.activeMaintenance) { finish(); } - }, throwable -> { - }); + }, RxErrorHandler.handleEmptyError()); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SetupActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SetupActivity.java index ba5eb9b37..93751b6e4 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SetupActivity.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/SetupActivity.java @@ -26,6 +26,7 @@ import com.habitrpg.android.habitica.data.UserRepository; import com.habitrpg.android.habitica.events.commands.EquipCommand; import com.habitrpg.android.habitica.events.commands.UpdateUserCommand; import com.habitrpg.android.habitica.helpers.AmplitudeManager; +import com.habitrpg.android.habitica.helpers.RxErrorHandler; import com.habitrpg.android.habitica.models.tasks.Task; import com.habitrpg.android.habitica.models.user.User; import com.habitrpg.android.habitica.ui.fragments.setup.AvatarSetupFragment; @@ -90,8 +91,7 @@ public class SetupActivity extends BaseActivity implements ViewPager.OnPageChang return Observable.just(user); } }) - .subscribe(this::onUserReceived, throwable -> { - })); + .subscribe(this::onUserReceived, RxErrorHandler.handleEmptyError())); Map additionalData = new HashMap<>(); additionalData.put("status", "displayed"); @@ -101,8 +101,7 @@ public class SetupActivity extends BaseActivity implements ViewPager.OnPageChang for (String language : getResources().getStringArray(R.array.LanguageValues)) { if (language.equals(currentDeviceLanguage)) { apiClient.registrationLanguage(currentDeviceLanguage) - .subscribe(habitRPGUser -> {}, throwable -> { - }); + .subscribe(habitRPGUser -> {}, RxErrorHandler.handleEmptyError()); } } @@ -155,15 +154,13 @@ public class SetupActivity extends BaseActivity implements ViewPager.OnPageChang @Subscribe public void onEvent(UpdateUserCommand event) { this.userRepository.updateUser(user, event.updateData) - .subscribe(this::onUserReceived, throwable -> { - }); + .subscribe(this::onUserReceived, RxErrorHandler.handleEmptyError()); } @Subscribe public void onEvent(EquipCommand event) { this.apiClient.equipItem(event.type, event.key) - .subscribe(items -> {}, throwable -> { - }); + .subscribe(items -> {}, RxErrorHandler.handleEmptyError()); } @OnClick(R.id.nextButton) @@ -180,8 +177,7 @@ public class SetupActivity extends BaseActivity implements ViewPager.OnPageChang List newTasks = this.taskSetupFragment.createSampleTasks(); this.completedSetup = true; this.taskRepository.createTasks(newTasks) - .subscribe(tasks -> onUserReceived(user), throwable -> { - }); + .subscribe(tasks -> onUserReceived(user), RxErrorHandler.handleEmptyError()); } this.pager.setCurrentItem(this.pager.getCurrentItem() + 1); } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.java index 46f8805b8..63b63dd38 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.java @@ -466,7 +466,7 @@ public class TaskFormActivity extends BaseActivity implements AdapterView.OnItem .subscribe(loadedTags -> { tags = loadedTags; createTagsCheckBoxes(); - }, throwable -> {} + }, RxErrorHandler.handleEmptyError() ); if (taskId != null) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/PublicGuildsRecyclerViewAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/PublicGuildsRecyclerViewAdapter.java index 58882323f..08ac9b133 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/PublicGuildsRecyclerViewAdapter.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/PublicGuildsRecyclerViewAdapter.java @@ -13,6 +13,7 @@ import android.widget.TextView; import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.data.ApiClient; import com.habitrpg.android.habitica.events.DisplayFragmentEvent; +import com.habitrpg.android.habitica.helpers.RxErrorHandler; import com.habitrpg.android.habitica.models.social.Group; import com.habitrpg.android.habitica.ui.fragments.social.GuildFragment; @@ -63,18 +64,20 @@ public class PublicGuildsRecyclerViewAdapter extends RealmRecyclerViewAdapter { memberGuildIDs.remove(guild.id); - int indexOfGroup = getData().indexOf(guild); - notifyItemChanged(indexOfGroup); - }, throwable -> { - }); + if (getData() != null) { + int indexOfGroup = getData().indexOf(guild); + notifyItemChanged(indexOfGroup); + } + }, RxErrorHandler.handleEmptyError()); } else { PublicGuildsRecyclerViewAdapter.this.apiClient.joinGroup(guild.id) .subscribe(group -> { memberGuildIDs.add(group.id); - int indexOfGroup = getData().indexOf(group); - notifyItemChanged(indexOfGroup); - }, throwable -> { - }); + if (getData() != null) { + int indexOfGroup = getData().indexOf(group); + notifyItemChanged(indexOfGroup); + } + }, RxErrorHandler.handleEmptyError()); } }); @@ -83,11 +86,13 @@ public class PublicGuildsRecyclerViewAdapter extends RealmRecyclerViewAdapter { - }); + userRepository.retrieveUser(false).subscribe(this::setUser, RxErrorHandler.handleEmptyError()); } @Override diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarOverviewFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarOverviewFragment.java index 7e73528be..caffa7afc 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarOverviewFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarOverviewFragment.java @@ -154,8 +154,7 @@ public class AvatarOverviewFragment extends BaseMainFragment implements AdapterV if (this.user != null && !this.user.getPreferences().getSize().equals(newSize)) { userRepository.updateUser(user, "preferences.size", newSize) - .subscribe(user1 -> {}, throwable -> { - }); + .subscribe(user1 -> {}, RxErrorHandler.handleEmptyError()); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.java index 96b70abe6..3c826c93a 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.java @@ -110,7 +110,7 @@ public class ItemRecyclerFragment extends BaseFragment { OpenMenuItemCommand event1 = new OpenMenuItemCommand(); event1.identifier = MainDrawerBuilder.SIDEBAR_PARTY; EventBus.getDefault().post(event1); - }, throwable -> {})); + }, RxErrorHandler.handleEmptyError())); } recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL_LIST)); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/ShopFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/ShopFragment.java index 7cd2013ee..683efbedb 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/ShopFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/ShopFragment.java @@ -104,7 +104,7 @@ public class ShopFragment extends BaseFragment { this.apiClient.fetchShopInventory(shopUrl) .map(shop1 -> { if (shop1.identifier.equals(Shop.MARKET)) { - if (user.getPurchased().getPlan().isActive()) { + if (user != null && user.isValid() && user.getPurchased().getPlan().isActive()) { ShopCategory specialCategory = new ShopCategory(); specialCategory.text = getString(R.string.special); specialCategory.items = new ArrayList<>(); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.java index 6eb524e3b..8b7ad48de 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.java @@ -176,7 +176,7 @@ public class PreferencesFragment extends BasePreferencesFragment implements String timeval = sharedPreferences.getString("cds_time", "00:00"); String[] pieces = timeval.split(":"); int hour = Integer.parseInt(pieces[0]); - userRepository.changeCustomDayStart(hour).subscribe(user -> {}, throwable -> {}); + userRepository.changeCustomDayStart(hour).subscribe(user -> {}, RxErrorHandler.handleEmptyError()); break; case "language": { LanguageHelper languageHelper = new LanguageHelper(sharedPreferences.getString(key, "en")); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatListFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatListFragment.java index c7128d136..559122263 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatListFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatListFragment.java @@ -150,7 +150,7 @@ public class ChatListFragment extends BaseFragment implements SwipeRefreshLayout recyclerView.setAdapter(chatAdapter); - socialRepository.getGroupChat(groupId).first().subscribe(this::setChatMessages, throwable -> {}); + socialRepository.getGroupChat(groupId).first().subscribe(this::setChatMessages, RxErrorHandler.handleEmptyError()); if (user != null && user.getFlags() != null && user.getFlags().isCommunityGuidelinesAccepted()) { communityGuidelinesView.setVisibility(View.GONE); @@ -214,8 +214,7 @@ public class ChatListFragment extends BaseFragment implements SwipeRefreshLayout .subscribe(aVoid -> { MainActivity activity = (MainActivity) getActivity(); showSnackbar(activity, activity.getFloatingMenuWrapper(), "Flagged message by " + chatMessage.user, SnackbarDisplayType.NORMAL); - }, throwable -> { - })) + }, RxErrorHandler.handleEmptyError())) .setNegativeButton(R.string.action_cancel, (dialog, id) -> {}); builder.show(); } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildFragment.java index 2fcfcb051..0075f6692 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildFragment.java @@ -58,7 +58,7 @@ public class GuildFragment extends BaseMainFragment implements Action1 { setViewPagerAdapter(); if (guildId != null && this.socialRepository != null) { - compositeSubscription.add(socialRepository.getGroup(this.guildId).subscribe(this, throwable -> {}, () -> Log.e("Party", "Completed"))); + compositeSubscription.add(socialRepository.getGroup(this.guildId).subscribe(this, RxErrorHandler.handleEmptyError(), () -> Log.e("Party", "Completed"))); socialRepository.retrieveGroup(this.guildId).subscribe(group -> {}, RxErrorHandler.handleEmptyError()); } @@ -88,8 +88,7 @@ public class GuildFragment extends BaseMainFragment implements Action1 { super.onViewCreated(view, savedInstanceState); if (this.socialRepository != null && this.guild != null) { socialRepository.retrieveGroup(this.guild.id) - .subscribe(this, throwable -> { - }); + .subscribe(this, RxErrorHandler.handleEmptyError()); } } @@ -116,8 +115,7 @@ public class GuildFragment extends BaseMainFragment implements Action1 { switch (id) { case R.id.menu_guild_join: this.socialRepository.joinGroup(this.guild.id) - .subscribe(this, throwable -> { - }); + .subscribe(this, RxErrorHandler.handleEmptyError()); this.isMember = true; return true; case R.id.menu_guild_leave: @@ -126,8 +124,7 @@ public class GuildFragment extends BaseMainFragment implements Action1 { if (this.activity != null) { this.activity.supportInvalidateOptionsMenu(); } - }, throwable -> { - }); + }, RxErrorHandler.handleEmptyError()); this.isMember = false; return true; case R.id.menu_guild_edit: @@ -234,7 +231,7 @@ public class GuildFragment extends BaseMainFragment implements Action1 { bundle.getString("description"), bundle.getString("leader"), bundle.getString("privacy")) - .subscribe(aVoid -> {}, throwable -> {}); + .subscribe(aVoid -> {}, RxErrorHandler.handleEmptyError()); } break; } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildsOverviewFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildsOverviewFragment.java index a8a5d9ca2..8d1d72add 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildsOverviewFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildsOverviewFragment.java @@ -87,7 +87,7 @@ public class GuildsOverviewFragment extends BaseMainFragment implements View.OnC if (swipeRefreshLayout != null) { swipeRefreshLayout.setRefreshing(false); } - }, throwable -> {}); + }, RxErrorHandler.handleEmptyError()); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxFragment.java index 39f03a5a7..4f3d8a190 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxFragment.java @@ -61,7 +61,7 @@ public class InboxFragment extends BaseMainFragment super.onCreateView(inflater, container, savedInstanceState); this.socialRepository.markPrivateMessagesRead(user) - .subscribe(aVoid -> {}, throwable -> {}); + .subscribe(aVoid -> {}, RxErrorHandler.handleEmptyError()); View v = inflater.inflate(R.layout.fragment_inbox, container, false); unbinder = ButterKnife.bind(this, v); @@ -144,8 +144,7 @@ public class InboxFragment extends BaseMainFragment public void onRefresh() { swipeRefreshLayout.setRefreshing(true); this.userRepository.retrieveUser(true) - .subscribe(this::onUserReceived, throwable -> { - }); + .subscribe(this::onUserReceived, RxErrorHandler.handleEmptyError()); } public void setInboxMessages(List messages) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxMessageListFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxMessageListFragment.java index fd1156729..fe81e8348 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxMessageListFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxMessageListFragment.java @@ -150,8 +150,7 @@ public class InboxMessageListFragment extends BaseMainFragment @Subscribe public void onEvent(SendNewInboxMessageCommand cmd) { socialRepository.postPrivateMessage(cmd.userToSendTo, cmd.message) - .subscribe(postChatMessageResult -> this.refreshUserInbox(), throwable -> { - }); + .subscribe(postChatMessageResult -> this.refreshUserInbox(), RxErrorHandler.handleEmptyError()); UiUtils.dismissKeyboard(getActivity()); } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/PublicGuildsFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/PublicGuildsFragment.java index f0f00c36c..a305a218a 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/PublicGuildsFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/PublicGuildsFragment.java @@ -86,8 +86,7 @@ public class PublicGuildsFragment extends BaseMainFragment implements SearchView if (PublicGuildsFragment.this.viewAdapter != null) { PublicGuildsFragment.this.viewAdapter.updateData(groups); } - }, throwable -> { - }); + }, RxErrorHandler.handleEmptyError()); this.socialRepository.retrieveGroups("publicGuilds").subscribe(groups -> {}, RxErrorHandler.handleEmptyError()); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/QuestDetailFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/QuestDetailFragment.java index df2beb23a..374b9171e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/QuestDetailFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/QuestDetailFragment.java @@ -217,13 +217,13 @@ public class QuestDetailFragment extends BaseMainFragment { @OnClick(R.id.quest_accept_button) public void onQuestAccept() { - socialRepository.acceptQuest(user, partyId).subscribe(aVoid -> {}, throwable -> {}); + socialRepository.acceptQuest(user, partyId).subscribe(aVoid -> {}, RxErrorHandler.handleEmptyError()); } @OnClick(R.id.quest_reject_button) public void onQuestReject() { - socialRepository.rejectQuest(user, partyId).subscribe(aVoid -> {}, throwable -> {}); + socialRepository.rejectQuest(user, partyId).subscribe(aVoid -> {}, RxErrorHandler.handleEmptyError()); } @OnClick(R.id.quest_begin_button) @@ -231,7 +231,7 @@ public class QuestDetailFragment extends BaseMainFragment { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()) .setMessage(R.string.quest_begin_message) .setPositiveButton(R.string.yes, (dialog, which) -> socialRepository.forceStartQuest(party) - .subscribe(quest -> {}, throwable -> {})) + .subscribe(quest -> {}, RxErrorHandler.handleEmptyError())) .setNegativeButton(R.string.no, (dialog, which) -> {}); builder.show(); } @@ -241,7 +241,7 @@ public class QuestDetailFragment extends BaseMainFragment { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()) .setMessage(R.string.quest_cancel_message) .setPositiveButton(R.string.yes, (dialog, which) -> socialRepository.cancelQuest(partyId) - .subscribe(aVoid -> {getActivity().getFragmentManager().popBackStack();}, throwable -> {})).setNegativeButton(R.string.no, (dialog, which) -> {}); + .subscribe(aVoid -> getActivity().getFragmentManager().popBackStack(), RxErrorHandler.handleEmptyError())).setNegativeButton(R.string.no, (dialog, which) -> {}); builder.show(); } @@ -250,7 +250,7 @@ public class QuestDetailFragment extends BaseMainFragment { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()) .setMessage(R.string.quest_abort_message) .setPositiveButton(R.string.yes, (dialog, which) -> socialRepository.abortQuest(partyId) - .subscribe(aVoid -> {getActivity().getFragmentManager().popBackStack();}, throwable -> {})).setNegativeButton(R.string.no, (dialog, which) -> {}); + .subscribe(aVoid -> getActivity().getFragmentManager().popBackStack(), RxErrorHandler.handleEmptyError())).setNegativeButton(R.string.no, (dialog, which) -> {}); builder.show(); } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernFragment.java index 4682ae0af..b66c2cc73 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernFragment.java @@ -91,8 +91,7 @@ public class TavernFragment extends BaseMainFragment { } }, RxErrorHandler.handleEmptyError()); } - }, throwable -> { - }); + }, RxErrorHandler.handleEmptyError()); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeDetailDialogHolder.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeDetailDialogHolder.java index 2f8bd09bd..c702e8c28 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeDetailDialogHolder.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeDetailDialogHolder.java @@ -13,6 +13,7 @@ import android.widget.TextView; import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.data.ChallengeRepository; +import com.habitrpg.android.habitica.helpers.RxErrorHandler; import com.habitrpg.android.habitica.models.LeaveChallengeBody; import com.habitrpg.android.habitica.models.social.Challenge; import com.habitrpg.android.habitica.models.tasks.Task; @@ -296,7 +297,7 @@ public class ChallengeDetailDialogHolder { @OnClick(R.id.challenge_join_btn) void joinChallenge() { - this.challengeRepository.joinChallenge(challenge).subscribe(this::changeViewsByChallenge, throwable -> {}); + this.challengeRepository.joinChallenge(challenge).subscribe(this::changeViewsByChallenge, RxErrorHandler.handleEmptyError()); } @OnClick(R.id.challenge_leave_btn) @@ -311,7 +312,7 @@ public class ChallengeDetailDialogHolder { challengeLeftAction.call(challenge); } this.dialog.dismiss(); - }, throwable -> {}))) + }, RxErrorHandler.handleEmptyError()))) .setNegativeButton(context.getString(R.string.no), (dialog, which) -> dialog.dismiss()).show(); } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyDetailFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyDetailFragment.java index dbae85b32..b518df3fc 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyDetailFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyDetailFragment.java @@ -218,25 +218,25 @@ public class PartyDetailFragment extends BaseFragment { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()) .setMessage(R.string.leave_party_confirmation) .setPositiveButton(R.string.yes, (dialog, which) -> socialRepository.leaveGroup(partyId) - .subscribe(aVoid -> {}, throwable -> {})).setNegativeButton(R.string.no, (dialog, which) -> {}); + .subscribe(aVoid -> {}, RxErrorHandler.handleEmptyError())).setNegativeButton(R.string.no, (dialog, which) -> {}); builder.show(); } @OnClick(R.id.quest_accept_button) public void onQuestAccept() { - socialRepository.acceptQuest(user, partyId).subscribe(aVoid -> {}, throwable -> {}); + socialRepository.acceptQuest(user, partyId).subscribe(aVoid -> {}, RxErrorHandler.handleEmptyError()); } @OnClick(R.id.quest_reject_button) public void onQuestReject() { - socialRepository.rejectQuest(user, partyId).subscribe(aVoid -> {}, throwable -> {}); + socialRepository.rejectQuest(user, partyId).subscribe(aVoid -> {}, RxErrorHandler.handleEmptyError()); } @OnClick(R.id.party_invite_accept_button) public void onPartyInviteAccepted() { if (user != null) { socialRepository.joinGroup(user.getInvitations().getParty().getId()) - .subscribe(group -> {}, throwable -> {}); + .subscribe(group -> {}, RxErrorHandler.handleEmptyError()); } } 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 a4df9b6fb..e6a7016b0 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 @@ -164,8 +164,7 @@ public class PartyFragment extends BaseMainFragment { .setPositiveButton(viewPager.getContext().getString(R.string.yes), (dialog, which) -> { if (this.group != null){ this.socialRepository.leaveGroup(this.group.id) - .subscribe(group -> getActivity().getSupportFragmentManager().beginTransaction().remove(PartyFragment.this).commit(), throwable -> { - }); + .subscribe(group -> getActivity().getSupportFragmentManager().beginTransaction().remove(PartyFragment.this).commit(), RxErrorHandler.handleEmptyError()); } }) .setNegativeButton(viewPager.getContext().getString(R.string.no), (dialog, which) -> dialog.dismiss()) @@ -201,7 +200,7 @@ public class PartyFragment extends BaseMainFragment { break; } this.socialRepository.updateGroup(this.group, bundle.getString("name"), bundle.getString("description"), bundle.getString("leader"), bundle.getString("privacy")) - .subscribe(aVoid -> {}, throwable -> {}); + .subscribe(aVoid -> {}, RxErrorHandler.handleEmptyError()); } break; } @@ -228,8 +227,7 @@ public class PartyFragment extends BaseMainFragment { if (this.group != null) { this.socialRepository.inviteToGroup(this.group.id, inviteData) .subscribe(aVoid -> { - }, throwable -> { - }); + }, RxErrorHandler.handleEmptyError()); } } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TaskListFactory.java b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TaskListFactory.java index f12461232..3591ed34d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TaskListFactory.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TaskListFactory.java @@ -64,8 +64,7 @@ public abstract class TaskListFactory implements RemoteViewsService.RemoteViewsF .subscribe(habitRPGUser -> { customDayStart = habitRPGUser.getPreferences().getDayStart(); this.loadData(); - }, throwable -> { - }); + }, RxErrorHandler.handleEmptyError()); } else { this.loadData(); } From e2fba6c6e450dc18dd2072098e320046043a60ee Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Wed, 2 Aug 2017 14:30:56 +0200 Subject: [PATCH 2/7] update translations --- Habitica/res/layout/fragment_group_info.xml | 24 +--- Habitica/res/values-bg/strings.xml | 11 ++ Habitica/res/values-de/strings.tutorial.xml | 32 +++-- Habitica/res/values-de/strings.xml | 15 +- .../res/values-en-rGB/strings.sidebar.xml | 2 +- Habitica/res/values-en-rGB/strings.xml | 130 +++++++++++++++--- Habitica/res/values-es/strings.profile.xml | 4 +- Habitica/res/values-fr/strings.xml | 11 ++ Habitica/res/values-it/strings.profile.xml | 2 +- Habitica/res/values-it/strings.tutorial.xml | 41 +++--- Habitica/res/values-it/strings.xml | 23 +++- Habitica/res/values-ja/strings.xml | 80 +++++++++++ Habitica/res/values-ko/strings.xml | 2 + Habitica/res/values-nl/strings.tutorial.xml | 44 +++--- Habitica/res/values-nl/strings.xml | 94 +++++++------ Habitica/res/values-pt-rBR/strings.xml | 2 + Habitica/res/values-ru/strings.xml | 25 ++++ Habitica/res/values-tr/strings.tutorial.xml | 33 +++-- Habitica/res/values-tr/strings.xml | 28 ++++ translations/store_strings-de.xml | 13 +- translations/store_strings-es_419.xml | 13 +- translations/store_strings-it.xml | 22 +-- 22 files changed, 480 insertions(+), 171 deletions(-) diff --git a/Habitica/res/layout/fragment_group_info.xml b/Habitica/res/layout/fragment_group_info.xml index ccb82fcae..1367a9365 100644 --- a/Habitica/res/layout/fragment_group_info.xml +++ b/Habitica/res/layout/fragment_group_info.xml @@ -1,7 +1,6 @@ + xmlns:android="http://schemas.android.com/apk/res/android"> @@ -52,8 +51,7 @@ android:layout_height="wrap_content" style="@style/CardView.Default" android:id="@+id/invitationWrapper" - android:visibility="@{invitation == null ? View.GONE : View.VISIBLE}" - > + android:visibility="@{invitation == null ? View.GONE : View.VISIBLE}"> - - - - Добре дошли отново Свършихте ли някоя от тези ежедневни задачи вчера? Начало на деня ми + Наистина ли искате да напуснете групата? + Следващата награда ще бъде след %d отчитания + В очакване + Приета + Отказана + Участници + Покани + Започната от %s + Наистина ли искате да прекъснете мисията? Така тя ще приключи за всички в групата Ви и целият Ви напредък ще бъде изгубен. Свитъкът с мисията ще бъде върнат на собственика си. + Зареждане… + Презареждане на съдържанието diff --git a/Habitica/res/values-de/strings.tutorial.xml b/Habitica/res/values-de/strings.tutorial.xml index 0ee2bf64a..b700cdded 100644 --- a/Habitica/res/values-de/strings.tutorial.xml +++ b/Habitica/res/values-de/strings.tutorial.xml @@ -1,10 +1,22 @@ - - - Wenn Du Ausrüstung kaufst, taucht diese hier auf. Deine Kampfausrüstung beeinflusst Deine Spielerstatistiken und Dein Kostüm (falls aktiviert) beeinflusst Dein Aussehen. - Verdiene Gegenstände indem Du Aufgaben erledigst und Stufen aufsteigst. Tippe auf einen Gegenstand um ihn zu benutzen! - Wenn du Aufgaben abschließt, hast Du eine Chance, Eier und Tränke zu finden. Kombiniere sie, um Haustiere auszubrüten. - Fähigkeiten erlauben es Dir, mächtige Effekte auszulösen. Tippe auf eine Fähigkeit, um sie zu benutzen. Das kostet Mana (der blaue Balken), das Du verdienst, indem Du Dich jeden Tag einloggst und reale Aufgaben abschließt. Für mehr Infos schaue im Menü in die FAQ! - Hier können Du und Deine Freunde Euch gegenseitig motivieren und mit Euren Aufgaben Monster bekämpfen! - Willkommen im Gasthaus, einem öffentlichen und für alle Altersklassen geeigneten Chat! Hier kannst Du über Produktivität diskutieren und Fragen stellen. Viel Spaß! - Wähle aus, ob Du ein Krieger, Magier, Heiler oder Schurke werden möchtest. Jede Klasse hat einzigartige Ausrüstungsgegenstände und Fähigkeiten. Tippe auf (?) um mehr zu erfahren! - + + + Da sind wir! Ich habe bereits einige Aufgaben basierend auf Deinen Interessen erstellt. Füge ein paar eigene hinzu. Du kannst jede Aufgabe durch das Antippen des Titels bearbeiten. + Zuerst ein Blick auf die Gewohnheiten. Es kann gute Gewohnheiten geben, wenn Du eine Gewohnheit verbessern möchtest, oder auch schlechte Gewohnheiten, die Du aufgeben möchtest. + Jedes Mal, wenn Du eine gute Gewohnheit umsetzt, klicke auf das +, um Erfahrung und Gold zu erhalten! + Falls Dir doch einen Ausrutscher passiert und Du eine schlechte Gewohnheit umsetzt, wird ein Klick auf das - die Lebenspunkte Deines Avatars verringern, um Dir dabei zu helfen, für Deine Taten Verantwortung zu übernehmen. + Probier es aus! Du kannst die anderen Aufgaben-Typen kennenernen, indem Du die untere Navigation benutzt. + Erstelle tägliche Aufgaben für sich wiederholende Aufgaben, die regelmäßig erledigt werden müssen. + Pass auf - wenn Du eine dieser Aufgaben nicht erledigst, dann wird Deinem Avatar über Nacht Schaden zugefügt. Erledige Deine Aufgaben täglich und Du wirst tolle Belohnungen erhalten. + Nutze die To-Dos, um Aufgaben zu organisieren, die Du nur einmalig erledigen musst. + Falls Dein To-Do an einem bestimmten Tag erledigt sein muss, kannst Du dafür ein Fälligkeitsdatum erstellen. Es sieht so aus, als ob Du jetzt auch eine Aufgabe abhaken kannst - probier es aus! + Kaufe Dir Ausrüstung für Deinen Avatar mit dem Gold, dass Du Dir verdienst! + Du kannst auch benutzerdefinierte Belohnungen erstellen, die sich auf etwas in Deinem wiklichen Leben beziehen, je nachdem was Dich motiviert. + Das war\'s für das Erste. Falls Du eine Erinnerungshilfe brauchst, dann schau in die FAQs. + Wenn Du Ausrüstung kaufst, taucht diese hier auf. Deine Kampfausrüstung beeinflusst Deine Spielerstatistiken und Dein Kostüm (falls aktiviert) beeinflusst Dein Aussehen. + Verdiene Gegenstände, indem Du Aufgaben erledigst und Stufen aufsteigst. Tippe auf einen Gegenstand, um ihn zu benutzen! + Wenn du Aufgaben abschließt, hast Du eine Chance, Eier und Tränke zu finden. Kombiniere sie, um Haustiere auszubrüten. + Fähigkeiten erlauben es Dir, mächtige Effekte auszulösen. Tippe auf eine Fähigkeit, um sie zu benutzen. Das kostet Mana (der blaue Balken), das Du verdienst, indem Du Dich jeden Tag einloggst und reale Aufgaben abschließt. Für mehr Infos schaue im Menü in die FAQ! + Hier können Du und Deine Freunde Euch gegenseitig motivieren und mit Euren Aufgaben Monster bekämpfen! + Willkommen im Gasthaus, einem öffentlichen und für alle Altersklassen geeigneten Chat! Hier kannst Du über Produktivität diskutieren und Fragen stellen. Viel Spaß! + Wähle aus, ob Du ein Krieger, Magier, Heiler oder Schurke werden möchtest. Jede Klasse hat einzigartige Ausrüstungsgegenstände und Fähigkeiten. Tippe auf (?), um mehr zu erfahren! + diff --git a/Habitica/res/values-de/strings.xml b/Habitica/res/values-de/strings.xml index e5a70ee11..ce2600c1f 100644 --- a/Habitica/res/values-de/strings.xml +++ b/Habitica/res/values-de/strings.xml @@ -14,7 +14,7 @@ Dein API-Token Sprache Habiticas Sprache ändern - Dein QR Code + Dein QR-Code Kontaktiere mich Ein Fehler ist aufgetreten... Konto @@ -578,4 +578,17 @@ Willkommen zurück Hast du gestern einige Deiner täglichen Aufgaben gemacht? Starte meinen Tag + Bist Du sicher, dass Du die Gruppe verlassen willst? + Nächste Belohnung in %d Check-Ins + Ausstehend + Angenommen + Abgelehnt + Teilnehmer + Einladungen + Begonnen von %s + Willst Du diese Mission wirklich abbrechen? +Sie wird für alle Mitglieder Deiner Gruppe abgebrochen und Euer gesamter Fortschritt geht verloren. +Die Quest-Schriftrolle wird an den Quest-Besitzer zurückgegeben. + Inhalt wird geladen.... + Inhalt wird erneut geladen diff --git a/Habitica/res/values-en-rGB/strings.sidebar.xml b/Habitica/res/values-en-rGB/strings.sidebar.xml index bb164e0dd..290e5e87d 100644 --- a/Habitica/res/values-en-rGB/strings.sidebar.xml +++ b/Habitica/res/values-en-rGB/strings.sidebar.xml @@ -6,7 +6,7 @@ Inbox Tavern Party - Purchase Gems + Gems & Subscription Guilds Challenges Inventory diff --git a/Habitica/res/values-en-rGB/strings.xml b/Habitica/res/values-en-rGB/strings.xml index 949a46ce7..688e7f949 100644 --- a/Habitica/res/values-en-rGB/strings.xml +++ b/Habitica/res/values-en-rGB/strings.xml @@ -16,7 +16,7 @@ Change Habitica\'s language Your QR Code Contact me - An error happened… + An error occurred… Account First Day of the Week First day of the week in all calendars @@ -38,10 +38,10 @@ Invited to Quest Value - New to-do - New reward - New daily - New habit + New To-Do + New Reward + New Daily + New Habit Edit Delete Cancel @@ -67,6 +67,7 @@ Send us Feedback! Report a Bug Source Code + Repeat Every Connection Error You are not connected to the internet. @@ -99,6 +100,15 @@ Frequency On Certain Days of the Week Every X Days + Summary + Repeats + Repeats On + Daily + Weekly + Monthly + Yearly + Day of Month + Day of Week Monday Tuesday Wednesday @@ -181,24 +191,26 @@ Help & FAQ Got it! Remind me again - Welcome to Habitica - Join over %s people having fun while getting things done. Create an avatar and track your real-life tasks. - Game Progress = Life Progress - Unlock features in the game by checking off your real-life tasks. Earn armour, pets, and more to reward you for meeting your goals! - Get Social and Fight Monsters + Welcome to + Habitica + It’s time to have fun while you get things done. Join over %s others improving their life one task at a time. + Progress in the game + Progress in life + Unlock features in the game by checking off your real life tasks. Earn armour, pets, and more as rewards for meeting your goals. + Fight monsters + Get social Keep your goals on track with help from your friends. Support each other in life and in battle as you improve together! - Get Started + Let\'s start! Previous Next Skip Welcome to Habitica, where advancing in the game will improve your real life! As you accomplish real-world goals, you\'ll unlock equipment, pets, quests, and more. Welcome - First, you need an avatar in the game to represent you! The things you do in real life will affect your avatar\'s health, experience level, and gold. - Splendid! Now let\'s set up your tasks so that you can start earning experience and gold. - -To start, which parts of your life do you want to improve? + So, how would you like to look? Don\'t worry, you can change this later. + Great! Now, what are you interested in working on throughout this journey? Work Exercise + Health School Teams Chores @@ -238,7 +250,7 @@ To start, which parts of your life do you want to improve? Delete Name Description - Add Tag + Add new Tag Privacy Write Message Post @@ -395,7 +407,7 @@ To start, which parts of your life do you want to improve? You completed all your dailies. Well done! Habitica Do Habit Habitica Dailies - Habitica Todo List + Habitica To-Do List Habitica Add Task Google Play services could not be found. Purchase @@ -460,6 +472,10 @@ To start, which parts of your life do you want to improve? Challenge Details Leave Challenge Are you sure you want to leave the Challenge “%s”? + Remove tasks + Do you want to remove the tasks? + Remove + Keep My Challenges Public Challenges @@ -491,6 +507,86 @@ To start, which parts of your life do you want to improve? You earned a %1$s as a reward for your devotion to improving your life. Your next prize unlocks at %1$d Check-Ins pending approval + Filters + Done Group tasks cannot be edited. Can\'t edit this task + Groups + All + None + Owned + Not owned + New\nGame + Log in with Facebook + Log in with Google + Back + Oh, you must be new here. I’m Justin, I’ll be your guide in Habitica.\n\nTo start, you’ll need to create an avatar. + Randomise + Extras + Skin Colour + Hair Colour + Bangs + Ponytail + Glasses + Wheelchair + Weak + Strong + Grey + Dated + Completed + Other + Clear + You don&rsquo;t have any Habits + Habits are tasks that don&rsquo;t have a rigid schedule. You can check them off many times a day, or not at all. + You don&rsquo;t have any Dailies + Dailies are tasks that repeat on a regular basis. Choose the schedule that works for you! + You don&rsquo;t have any To-Dos + To-Dos are tasks that only need to be completed once. Add checklists to your To-Dos to increase their value. + You don&rsquo;t have any Rewards + Reset Justin&rsquo;s Walkthrough + Please read our Community Guidelines before posting + Maintenance + Reload Content + Set Dailies default to ‘due’ tab + With this option set, the Dailies tasks will default to ‘due’ instead of ‘all’ + Repeats %1$s every %2$s %3$s %4$s + Your device does not have any of the supported payment methods. Please use the Habitica website if you want to purchase gems. + Your device does not have any of the supported payment methods. Please use the Habitica website if you want to purchase a subscription. + Save + Location + Gem reward + Tasks + Create challenge + Edit Challenge + You need at least 1 gem to create a challenge in Tavern. + You don&rsquo;t have enough gems to create a challenge. + Identify your challenge with a tag .. + You need a tag to create this Challenge. + You need to add at least one task to create this Challenge. + You need a title to create this Challenge. + Description (optional) + New challenge title + Ownership + Inn + System + Start a new Quest + Leave Party + Party Description + Are you sure you want to abort this mission? It will abort it for everyone in your party and all progress will be lost. The quest scroll will be returned to the quest owner. + Are you sure you want to leave the active quest? All your quest progress will be lost. + %1$d Participants + Welcome Back + Did you do any of these Dailies yesterday? + Start My Day + Are you sure you want to leave the Party? + Next Prize in %d Check-ins + Pending + Accepted + Declined + Participants + Invitations + Started by %s + Are you sure you want to abort this mission? It will abort it for everyone in your party and all progress will be lost. The quest scroll will be returned to the quest owner. + Loading... + Reloading Content diff --git a/Habitica/res/values-es/strings.profile.xml b/Habitica/res/values-es/strings.profile.xml index c57e22076..ac1ddcf66 100644 --- a/Habitica/res/values-es/strings.profile.xml +++ b/Habitica/res/values-es/strings.profile.xml @@ -13,4 +13,6 @@ Mensaje privado Logros Ok - \ No newline at end of file + Cerrar + + \ No newline at end of file diff --git a/Habitica/res/values-fr/strings.xml b/Habitica/res/values-fr/strings.xml index 53a596be4..2e02b7cef 100644 --- a/Habitica/res/values-fr/strings.xml +++ b/Habitica/res/values-fr/strings.xml @@ -578,4 +578,15 @@ Bienvenue à nouveau Avez-vous réalisé une de ces quotidiennes hier ? Démarrer ma journée + Voulez-vous vraiment quitter l\'équipe ? + Prochaine récompense dans %d connexions + En cours + Accepté + Refusé + Participants + Invitations + Lancé par %s + Voulez-vous vraiment annuler cette mission ? Cela l\'annulera pour tout le monde dans l\'équipe et toute avancée sera perdue. Le parchemin de quête retournera à son propriétaire. + Chargement... + Recharger le contenu diff --git a/Habitica/res/values-it/strings.profile.xml b/Habitica/res/values-it/strings.profile.xml index aafa156d0..c3e43c51f 100644 --- a/Habitica/res/values-it/strings.profile.xml +++ b/Habitica/res/values-it/strings.profile.xml @@ -3,7 +3,7 @@ Animali e cavalcature Animali trovati Cavalcature domate - Caricamento dati... + Caricamento dati utente... Invia messaggio a %s Messaggio inviato a %s Livello: diff --git a/Habitica/res/values-it/strings.tutorial.xml b/Habitica/res/values-it/strings.tutorial.xml index 4e8e9423b..49a461abb 100644 --- a/Habitica/res/values-it/strings.tutorial.xml +++ b/Habitica/res/values-it/strings.tutorial.xml @@ -1,19 +1,22 @@ - - - Eccoci qui! Ho creato alcune attività per te basate sui tuoi interessi. Prova ad aggiungerne qualcuna anche tu. Puoi modificare un\'attività toccando il titolo. - Per prima cosa ci sono le Habit, le abitudini. Possono essere abitudini positive che vuoi migliorare o abitudini negative che vuoi abbandonare. - Ogni volta che porti a termine un\'abitudine positiva, tocca il + per ottenere esperienza ed oro! - Se ti fai tentare da un\'abitudine negativa, toccando - il tuo avatar perderà punti salute, per aiutarti a non farlo di nuovo. - Usa le To-do per tenere traccia delle cose che devi fare solo una volta. - Se le tue To-do devono essere completate entro un certo giorno, imposta una data di scadenza. Pare che tu possa completarne una, prova! - Compra oggetti per il tuo avatar con l\'oro che ottieni! - Puoi anche creare delle ricompense reali, basate su ciò che ti motiva. - Per ora è tutto. Se hai bisogno di un ripasso, consulta la sezione FAQ. - Quando compri dell\'equipaggiamento, apparirà qui. Il tuo equipaggiamento di battaglia influisce sulle tue statistiche, e il tuo Costume (se attivato) cambia ciò che indossa il tuo avatar. - Guadagnati degli oggetti completando attività e salendo di livello. Tocca un oggetto per usarlo! - Man mano che porti a termine attività nella vita reale, ora potrai trovare casualmente uova e pozioni. Combinali per far nascere degli animali! - Le Abilità sono dei poteri con straordinari effetti! Tocca un\'abilità per utilizzarla. Costerà del Mana (la barra blu), che puoi ottenere usando Habitica ogni giorno e completando attività. Dai un\'occhiata alle FAQ nel menù per avere maggiori informazioni! - Qui è dove tu e i tuoi amici potete motivarvi a vicenda e combattere i mostri con le vostre attività! - Benvenuto nella Taverna, una chat pubblica per tutte le età! Qui puoi chiacchierare e fare delle domande. Divertiti! - Scegli di diventare un Guerriero, un Mago, un Guaritore o un Assassino! Ogni classe ha equipaggiamento ed abilità uniche. Tocca (?) per saperne di più! - + + + Eccoci qui! Ho creato alcune attività per te basate sui tuoi interessi. Prova ad aggiungerne qualcuna anche tu. Puoi modificare un\'attività toccando il titolo. + Per prima cosa ci sono le Abitudini. Possono essere Abitudini positive che vuoi migliorare o Abitudini negative che vuoi abbandonare. + Ogni volta che porti a termine un\'abitudine positiva, tocca il + per ottenere esperienza ed oro! + Se ti fai tentare da un\'abitudine negativa, toccando - il tuo avatar perderà punti salute, per aiutarti a non farlo di nuovo. + Ora prova te! Puoi trovare gli altri tipi di attività usando la barra di navigazione in basso. + Crea Daily per attività che devono essere svolte periodicamente. + Sta attento - se te ne salti una il tuo avatar subirà dei danni durante la notte. Completarle con regolarità ti farà ottenere grandi premi! + Usa le To-do per tenere traccia delle cose che devi fare solo una volta. + Se le tue To-do devono essere completate entro un certo giorno, imposta una data di scadenza. Pare che tu possa completarne una, prova! + Compra oggetti per il tuo avatar con l\'oro che ottieni! + Puoi anche creare delle ricompense reali, basate su ciò che ti motiva. + Per ora è tutto. Se hai bisogno di un ripasso, consulta la sezione FAQ. + Quando compri dell\'equipaggiamento, apparirà qui. Il tuo equipaggiamento di battaglia influisce sulle tue statistiche, e il tuo Costume (se attivato) cambia ciò che indossa il tuo avatar. + Guadagnati degli oggetti completando attività e salendo di livello. Tocca un oggetto per usarlo! + Man mano che porti a termine attività nella vita reale, ora potrai trovare casualmente uova e pozioni. Combinali per far nascere degli animali! + Le Abilità sono dei poteri con straordinari effetti! Tocca un\'abilità per utilizzarla. Costerà del Mana (la barra blu), che puoi ottenere usando Habitica ogni giorno e completando attività. Dai un\'occhiata alle FAQ nel menù per avere maggiori informazioni! + Qui è dove tu e i tuoi amici potete motivarvi a vicenda e combattere i mostri con le vostre attività! + Benvenuto nella Taverna, una chat pubblica per tutte le età! Qui puoi chiacchierare e fare delle domande. Divertiti! + Scegli di diventare un Guerriero, un Mago, un Guaritore o un Assassino! Ogni classe ha equipaggiamento ed abilità uniche. Tocca (?) per saperne di più! + diff --git a/Habitica/res/values-it/strings.xml b/Habitica/res/values-it/strings.xml index b9946aa69..eeecad993 100644 --- a/Habitica/res/values-it/strings.xml +++ b/Habitica/res/values-it/strings.xml @@ -41,7 +41,7 @@ Nuova To-Do Nuova Ricompensa Nuova Daily - Nuova abitudine + Nuova Abitudine Modifica Elimina Annulla @@ -329,7 +329,7 @@ I Maghi imparano più velocemente, guadagnano Esperienza e Livelli più velocemente delle altre classi. Hanno anche a loro disposizione molto mana per l\'utilizzo di abilità speciali. Utilizza il Mago se ti piace giocare tatticamente su Habit, o se sei fortemente motivato dal livellare e sbloccare opzioni aggiuntive! Gli Assassini amano accumulare ricchezza: guadagnano più Oro di chiunque altro, e sono inclini al trovare oggetti casuali. La loro iconica abilità Furtività li rende in grado di prendersi gioco delle conseguenze delle Daily mancate. Diventa un Assassino se trovi una forte motivazione nelle Ricompense e nelle Medaglie, lottando per un bottino e dei riconoscimenti! I Guaritori resistono fortemente ai danni, ed estendono la loro protezione agli altri. -Le Dailies mancate e le cattive Habit non li danneggiano molto, e hanno sempre modo di recuperare Vita dagli sbagli. Gioca come Guaritore se vuoi aiutare gli altri giocatori della tua squadra, o se l\'idea di fregare la morte con il duro lavoro ti ispira! +Le Dailies mancate e le cattive Abitudini non li danneggiano molto, e hanno sempre modo di recuperare Vita dagli sbagli. Gioca come Guaritore se vuoi aiutare gli altri giocatori della tua squadra, o se l\'idea di fregare la morte con il duro lavoro ti ispira! Seleziona classe Rinuncia Non ti vuoi preoccupare dellle classi? Vuoi scegliere dopo? Puoi essere un guerriero senza abilità speciali. Puoi leggere a proposito del sistema di classi più tardi nella Wiki ed abilitare le classi quando vuoi. @@ -406,9 +406,9 @@ Le Dailies mancate e le cattive Habit non li danneggiano molto, e hanno sempre m Aggiungi To-Do Aggiungi Ricompensa Hai completato tutte le tue Daily. Ottimo lavoro! - Habitica esegui abitudine + Habitica esegui Abitudine Habitica Daily - Lista To-Do Habitica + Habitica lista To-Do Habitica aggiungi attività Impossibile trovare Google Play Services. Compra @@ -537,8 +537,8 @@ Le Dailies mancate e le cattive Habit non li danneggiano molto, e hanno sempre m Completate Altro Deseleziona - Non hai alcuna Habit. - Le Habit sono attività che possono essere svolte in modo molto flessibile. Puoi usarle diverse volte al giorno, o non usarle affatto. + Non hai alcuna Abitudine. + Le Abitudini sono attività che possono essere svolte in modo molto flessibile. Puoi usarle diverse volte al giorno, o non usarle affatto. Non hai nessuna Daily Le Daily sono delle attività che vanno svolte regolarmente. Scegli la frequenza con cui ti trovi meglio! Non hai alcuna To-do. @@ -579,4 +579,15 @@ Le Dailies mancate e le cattive Habit non li danneggiano molto, e hanno sempre m Bentornato Hai completato qualcuna di queste Daily ieri? Inizia la mia giornata + Vuoi davvero lasciare la Squadra? + Prossimo premio tra %d accessi + In attesa + Accettato + Rifiutato + Partecipanti + Inviti + Avviata da %s + Vuoi davvero annullare questa missione? Verrà annullata per tutti i membri della tua squadra e tutti i progressi nella missione saranno persi. La Pergamena tornerà al proprietario della missione. + Caricamento... + Ricaricamento contenuti diff --git a/Habitica/res/values-ja/strings.xml b/Habitica/res/values-ja/strings.xml index c7b8651dd..068bbb703 100644 --- a/Habitica/res/values-ja/strings.xml +++ b/Habitica/res/values-ja/strings.xml @@ -67,6 +67,7 @@ フィードバックを送る! バグを報告する ソースコード + くり返しの間隔 接続エラー インターネットに接続していません。 @@ -99,6 +100,15 @@ 頻度 決まった曜日 何日かごと + 要約 + くり返し + くり返しの基準 + 日課 + 週間 + 月間 + 年間 + 日にち + 曜日 @@ -185,6 +195,7 @@ Habitica ゲームの進行 人生の進行 + 実生活でタスクをこなし、ゲーム内の機能をアンロックしよう。よろいやペットなどのさまざまなアイテムを、あなた自身の目標に近づいたごほうびとして獲得しよう。 モンスターと戦おう 友達とつながって 友達の力を借りて目標にしがみつこう。実生活とバトルでお互いに助け合い、いっしょに成長しよう! @@ -194,6 +205,8 @@ スキップ Habitica へようこそ。ここはゲームが進むほどに、あなたの実生活が改善されるところ! あなたが現実世界のゴールを達成すれば、装備やペット、クエストなどなど、新たな世界が広がるよ。 ようこそ + さあ、どんな格好をしたい? 心配しないで、後で変えることもできるから。 + すばらしい! では、この冒険の旅で、自分の生活のどの部分を改善したい? 仕事 エクササイズ 体力 @@ -231,6 +244,7 @@ 参加する リーダー ジェム + To-Doとしてコピー PMを送る フラグ 削除 @@ -393,6 +407,7 @@ 日課をすべて完了した。お見事! Habitica の習慣 Habitica の日課 + Habitica のTo-Do リスト Habitica のタスク追加 Google Play サービスが見つかりません。 購入 @@ -423,9 +438,11 @@ 毎日の落とし物の定数が2倍 寄付 毎%sに起こる + 寄付する 商人・アレクサンダーが、ジェム1個を20ゴールドで売ってくれます!\n\nアレクサンダーと1ヵ月の間に取り引きできるジェムの数は、最初は25個に限定されていますが、寄付期間によって増えます。\n\n寄付の継続3カ月ごとにその数が5個ずつ増えていき、最大で月に50個を買うことができます。 毎月、アバターを個性的にメークアップするアイテムが手に入ります!\n\nさらに寄付の継続3カ月ごとに、謎のタイムトラベラーによって、歴史的(そして未来的!)なメークアップ アイテムへのアクセスが許されます。 完了した To-Do やタスクの履歴を、より長期間閲覧可能になります。 + 落とし物の上限が2倍になり、毎日の完了したタスクから、より多くのアイテムを獲得することができます。動物小屋のコンプリートも早くなります! 最初は25ジェムまで購入できます ジェムの制限値を30個に引き上げ ジェムの制限値を35個に引き上げ @@ -439,6 +456,8 @@ Habiticaのウェブサイトを訪れる 現在のボーナス 購読した月数 + 現在の神秘の砂時計 + 毎月のジェムの購入上限 1ヶ月 %dヶ月 @@ -446,10 +465,15 @@ 6ヶ月 12ヶ月 寄付のお礼として、こんな便利な特典をもらっています: + 寄付の状況 %sで チャレンジの概要 チャレンジから抜ける 本当にチャレンジ「%s」を抜けますか? + タスクを削除 + タスクを削除しますか? + 削除する + 残す 参加しているチャレンジ みんなのチャレンジ チャレンジ @@ -467,6 +491,7 @@ リマインダーを追加する 注意 設定を開く + あなたは開発者向けのオプション \“Don\'t keep Activities\” を有効にしているようです。現在、このオプションはHabiticaのアプリに問題を起こしますので、無効にすることをお勧めします。 受信箱 よくある質問 スペシャル @@ -477,20 +502,75 @@ 寄付会員は、毎月ミステリーアイテムを受け取ることができます。ミステリーアイテムは通常、月の終わりの週に新たなものがリリースされます。 開く プレゼントボックスを開いて%sを手に入れました! + あなたは人生・生活を向上するために力を注いだので、ごほうびとして %1$s を獲得しました。 あと%1$d日のログインで、新たな賞品が手に入ります! + 保留された承認 + フィルター + 完了 + グループタスクは編集できません。 + このタスクは編集できません グループ 全部 なし + 所持 + 非所持 Facebookでログイン Googleでログイン 戻る + 肌の色 髪色 + 前髪 ポニーテール メガネ + 車いす 弱い 強い + 無効 + 古い + 完了 ほか 習慣を持っていません 日課を持っていません + To-Doがありません + ごほうびがありません + ジャスティンのチュートリアルをリセット + 投稿する前に、私たちのコミュニティガイドラインを読んでください 修理 + 日課を標準で「期限」タブに入れる + この設定にチェックを入れると、日課は標準で「すべて」タブではなく「期限」タブに入ります。 + あなたのデバイスは、サポートされている支払方法に対応していません。ジェムを購入したい場合は、Habiticaのウェブサイトをご利用ください。 + あなたのデバイスは、サポートされている支払方法に対応していません。寄付を購入したい場合は、Habiticaのウェブサイトをご利用ください。 + 保存 + 場所 + ジェムの報酬 + タスク + チャレンジを作成する + チャレンジを編集する + キャンプ場でチャレンジを作成するには、ジェムが1つ以上必要です。 + チャレンジを作成するのに十分なジェムを持っていません。 + このチャレンジを作成するには、タグが必要です。 + このチャレンジを作成するには、タスクを1つ以上追加する必要があります。 + このチャレンジを作成するには、タイトルが必要です。 + 説明 (任意) + 新しいチャレンジのタイトル + 所有 + ロッジ + システム + 新しいクエストを開始する + パーティーを抜ける + パーティーの説明 + このミッションを中断します。よろしいですか? パーティの全員が中断になり、すべての進行状況は失われます。クエストの巻物はクエスト所有者の手に戻ります。 + 進行中のクエストを抜けます。よろしいですか? あなたのクエストの成果はすべて失われます。 + %1$d 人の参加者 + おかえりなさい + これらの日課の中で昨日やり終えたものはありませんか? + 一日を始める + 本当にパーティーを抜けますか? + 次の賞品まであと %d 回チェックイン + 保留 + 承認済 + 辞退済 + 参加者 + 招待 + このミッションを中断します。よろしいですか? パーティの全員が中断になり、すべての進行状況は失われます。クエストの巻物はクエスト所有者の手に戻ります。 diff --git a/Habitica/res/values-ko/strings.xml b/Habitica/res/values-ko/strings.xml index b44a79449..8151e9242 100644 --- a/Habitica/res/values-ko/strings.xml +++ b/Habitica/res/values-ko/strings.xml @@ -533,4 +533,6 @@ 강함 회색 습관이 하나도 없어요. + 새로운 퀘스트 시작하기 + 파티 떠나기 diff --git a/Habitica/res/values-nl/strings.tutorial.xml b/Habitica/res/values-nl/strings.tutorial.xml index 6e275c771..7fd123589 100644 --- a/Habitica/res/values-nl/strings.tutorial.xml +++ b/Habitica/res/values-nl/strings.tutorial.xml @@ -1,22 +1,22 @@ - - - Daar zijn we dan! Ik heb enkele taken voor je ingevuld op basis van je interesses. Probeer er zelf enkele aan toe te voegen. Je kan elke taak bewerken door op de titel te tikken. - Als eerste de gewoontes. Dit kunnen goede gewoontes zijn die je wilt verbeteren of slechte gewoontes die je wilt afleren. - Iedere keer dat je een goede gewoonte doet, tik je op de + om ervaring en goud te krijgen! - Als je toegeeft en een slechte gewoonte doet, tik je op de - en verliest je avatar gezondheid, dus neem verantwoordelijkheid en voorkom slechte gewoontes. - Probeer het maar! Je kan de andere soorten taken doornemen met de onderstaande navigatie. - Maak dagelijkse taken voor tijdgevoelige taken die volgens een vast schema gedaan moeten worden. - Wees voorzichtig - als je er een mist, verliest je avatar gezondheid de volgende dag. Vink ze regelmatig af voor grootse beloningen! - Gebruik to-do\'s om taken bij te houden die je slechts één keer moet doen. - Als je to-do tegen een bepaalde dag afgewerkt moet zijn, voer dan een einddatum in. Je kan er precies een afvinken - doe maar! - Koop uitrusting voor je avatar met het goud dat je verdient! - Je kan ook zelf beloningen maken voor in de echte wereld, gebaseerd op wat je motiveert. - Dat was het voorlopig. Als je iets vergeet, kijk dan in de FAQ sectie. - Als je uitrustingsstukken koopt verschijnen die hier. Jouw gevechtsuitrusting beïnvloedt je statistieken en je kostuum (als het aan staat) beïnvloedt wat je avatar aan heeft. - Verdien voorwerpen door taken te voltooien en niveaus omhoog te gaan. Tik op een voorwerp om het te gebruiken! - Terwijl je taken uit de echte wereld voltooit, heb je een kans om eieren en drankjes te vinden. Combineer ze om je huisdier te laten uitkomen. - Vaardigheiden zijn speciale talenten die krachtige effecten hebben! Tik op een vaardigheid om ze te gebruiken. Het kost je Mana (de blauwe balk), dat je kan verdienen door elke dag in te checken en je taken in de echte wereld te voltooien. Kijk in de FAQ in het menu voor meer informatie! - Dit is waar jij en je vrienden elkaar verantwoordelijk kunnen houden voor het bereiken van je doelen en je samen monsters kan bevechten met je taken! - Welkom in de Herberg, een openbare chatroom voor alle leeftijden! Hier kan je praten over productiviteit en vragen stellen. Veel plezier! - Kies hier of je Krijger, Magiër, Heler of Dief wilt worden! Elke klasse heeft unieke uitrustingen en vaardigheden. Tik op de (?) om meer te weten te komen! - + + + Daar zijn we dan! Ik heb enkele taken voor je ingevuld op basis van je interesses. Probeer er zelf enkele aan toe te voegen. Je kan elke taak bewerken door op de titel te tikken. + Als eerste de gewoontes. Dit kunnen goede gewoontes zijn die je wilt verbeteren of slechte gewoontes die je wilt afleren. + Iedere keer dat je een goede gewoonte doet, tik je op de + om ervaring en goud te krijgen! + Als je toegeeft en een slechte gewoonte doet, tik je op de - en verliest je avatar gezondheid, dus neem verantwoordelijkheid en voorkom slechte gewoontes. + Probeer het maar! Je kan de andere soorten taken doornemen met de onderstaande navigatie. + Maak dagelijkse taken voor tijdgevoelige taken die volgens een vast schema gedaan moeten worden. + Wees voorzichtig - als je er een mist, verliest je avatar gezondheid de volgende dag. Vink ze regelmatig af voor grootse beloningen! + Gebruik to-do\'s om taken bij te houden die je slechts één keer moet doen. + Als je to-do tegen een bepaalde dag afgewerkt moet zijn, voer dan een einddatum in. Je kan er een afvinken - doe maar! + Koop een uitrusting voor je avatar met het goud dat je verdient! + Je kan ook zelf beloningen maken voor in de echte wereld, gebaseerd op wat je motiveert. + Dat was het voorlopig. Als je iets vergeet, kijk dan in de FAQ sectie. + Als je uitrustingsstukken koopt verschijnen die hier. Jouw gevechtsuitrusting beïnvloedt je statistieken en je kostuum (als het aan staat) beïnvloedt wat je avatar aan heeft. + Verdien voorwerpen door taken te voltooien en niveaus omhoog te gaan. Tik op een voorwerp om het te gebruiken! + Terwijl je taken uit de echte wereld voltooit, heb je een kans om eieren en drankjes te vinden. Combineer ze om je huisdier te laten uitkomen. + Vaardigheiden zijn speciale talenten die krachtige effecten hebben! Tik op een vaardigheid om ze te gebruiken. Het kost je Mana (de blauwe balk), dat je kan verdienen door elke dag in te checken en je taken in de echte wereld te voltooien. Kijk in de FAQ in het menu voor meer informatie! + Dit is waar jij en je vrienden elkaar verantwoordelijk kunnen houden voor het bereiken van je doelen en je samen monsters kan bevechten met je taken! + Welkom in de Herberg, een openbare chatroom voor alle leeftijden! Hier kan je praten over productiviteit en vragen stellen. Veel plezier! + Kies hier of je Krijger, Magiër, Heler of Dief wilt worden! Elke klasse heeft unieke uitrustingen en vaardigheden. Tik op de (?) om meer te weten te komen! + diff --git a/Habitica/res/values-nl/strings.xml b/Habitica/res/values-nl/strings.xml index b1533f717..e49230ddd 100644 --- a/Habitica/res/values-nl/strings.xml +++ b/Habitica/res/values-nl/strings.xml @@ -1,6 +1,6 @@ - Verversen + Vernieuwen Ervaring Gezondheid Mana @@ -16,7 +16,7 @@ Verander Habitica\'s taal Je QR code Contact - Een fout is opgetreden... + Er is een fout opgetreden... Account Eerste dag van de week Eerste dag van de week op alle kalenders @@ -25,9 +25,9 @@ Stel tijd van herinnering in Aangepast begin van de dag Begin van de dag instellen - Pushnotificaties + Gebruiker-pushnotificaties Pushnotificaties - Stel je push-notificaties in + Stel je pushnotificaties in Je hebt een uitdaging gewonnen! Privébericht ontvangen Edelstenen geschonken @@ -54,7 +54,7 @@ Bevestig wachtwoord Uitloggen Uitloggen - Kijk je account gegevens na + Kijk je accountgegevens na Accountgegevens Welkom Herleven @@ -196,7 +196,7 @@ Het is tijd om plezier te maken terwijl je dingen gedaan krijgt. Doe mee met %s andere mensen die hun leven met iedere taak beteren. Vooruitgang in het spel Vooruitgang in je leven - Ontgrendel functies in het spel door taken in je echte leven af te vinken. Verdien uitrusting, huisdieren en meer als beloning voor het bereiken van je doelen. + Ontgrendel functies in het spel door taken in je echte leven af te vinken. Verdien uitrustingsstukken, huisdieren en meer als beloning voor het bereiken van je doelen. Vecht tegen monsters Wordt sociaal Houd je doelen op peil met hulp van je vrienden. Ondersteun elkaar in het leven en vecht samen terwijl je steeds beter wordt. @@ -206,8 +206,8 @@ Sla over Welkom in Habitica, waar vooruitgang in het spel je leven zal verbeteren! Terwijl je echte doelen bereikt, verdien je uitrusting, huisdieren, queestes en meer. Welkom - Dus, hoe wil jij er uit zien? Geen zorgen, je kan dit later veranderen. - Geweldig! Nu, waar zou je graag aan willen werken doorheen deze reis? + Dus, hoe wil jij er uitzien? Geen zorgen, je kan dit later veranderen. + Geweldig! Nu, waar zou je graag aan willen werken door deze reis heen? Werk Sport Gezondheid @@ -264,7 +264,7 @@ Hoofdaccessoire Oogaccessoire Harnas - Rug + Terug Lichaam Schild Wapen @@ -334,7 +334,7 @@ Vind je het klassesysteem te ingewikkeld voor nu? Wil je later pas kiezen? Trek je terug - je zal een krijger zijn zonder speciale talenten. Je kan later nog over het klassesysteem lezen op de wiki en op eender welk moment klassen inschakelen. Weet je zeker dat je een %s wilt zijn? Je bent nu een %s! - Je hebt nieuw standaard gevechtsuitrusting dat je kan veranderen onder Uitrusting! + Je hebt een nieuwe standaard gevechtsuitrusting die je kan veranderen onder Uitrusting! Kies een Klasse Ga terug Weet je zeker dat je je wil afmelden? @@ -353,7 +353,7 @@ Email Nodig uit voor groep Deel door - Ik ben in Habitica tot niveau %d gekomen door mijn echte gewoontes te verbeteren! + Ik ben in Habitica tot niveau %d gekomen door mijn gewoontes in het echte leven te verbeteren! Ik heb net een %1$s %2$s huisdier in Habitica laten uitkomen door mijn echte taken uit te voeren! Ik heb net een %1$s %2$s rijdier gekregen in Habitica door mijn echte taken uit te voeren! Open in de play store @@ -430,30 +430,30 @@ Hoort bij een Uitdaging Heeft herinnering Heeft label - Met abonneren steun je de ontwikkelaars en help je Habitica online te houden - Wordt een abonnee en ontvang deze nuttige voordelen: + Met het nemen van een abonnement steun je de ontwikkelaars en help je Habitica online te houden + Word een abonnee en ontvang deze nuttige voordelen: Koop edelstenen met goud Exclusieve maandelijkse voorwerpen Achterhaal extra geschiedenis - Dagelijkse vondst limiet verdubbeld + Dagelijkse vondstlimiet verdubbeld Abonnementen Keert iedere %s terug Abonneer Alexander de Koopman zal nu edelstenen aan je verkopen voor 20 goud per edelsteen!\n\nZijn maandelijkse levering is initieel beperkt tot 25 edelstenen per maand, maar stijgt afhankelijk van de duur van je abonnement.\n\nDit limiet verhoogt met 5 edelstenen voor elke 3 maanden van opeenvolgende abonnement periodes, tot een maximum van 50 edelstenen per maand! - Iedere maand ontvang je een uniek cosmetisch voorwerp voor je avatar!\n\nEn voor iedere 3 maanden van opeenvolgende abonnement periodes, geven de mysterieuze tijdreizigers je toegang to historische (en futuristische!) cosmetische voorwerpen. + Iedere maand ontvang je een uniek cosmetisch voorwerp voor je avatar!\n\nEn voor iedere 3 maanden van opeenvolgende abonnementsperiodes, geven de mysterieuze tijdreizigers je toegang tot historische (en futuristische!) cosmetische voorwerpen. Maakt voltooide To-do\'s en taakgeschiedenis langer beschikbaar. - Dubbele vondst limieten laten je dagelijks meer voorwerpen verdienen van je voltooide taken, waardoor je je stal sneller kan voltooien! + Dubbele vondstlimieten laten je dagelijks meer voorwerpen verdienen van je voltooide taken, waardoor je je stal sneller kan voltooien! Edelsteenlimiet begint bij 25 - Edelsteenlimiet verhoogt naar 30 - Edelsteenlimiet verhoogt naar 35 - Edelsteenlimiet verhoogt naar 45 + Edelsteenlimiet verhoogd naar 30 + Edelsteenlimiet verhoogd naar 35 + Edelsteenlimiet verhoogd naar 45 +%d Mystieke Zandloper Betaalmethode Abonnement Actief - Annuleer Abonnement + Annuleer abonnement Wil je niet langer abonneren? Je kan de optie om je abonnement stop te zetten vinden in de \"Mijn apps\" sectie van de Google Play Store. - Wil je niet langer abonneren? Vanwege je betaalmethode kan je enkel via de website je abonnement stop zetten. Klik op de knop hieronder om de site in je browser te openen! + Wil je niet langer abonneren? Vanwege je betaalmethode kan je enkel via de website je abonnement stopzetten. Klik op de knop hieronder om de site in je browser te openen! Bezoek Habitica Website Huidige bonussen Maanden geabonneerd @@ -467,17 +467,17 @@ 6 maanden 12 maanden Voor het abonneren ontvang je deze nuttige voordelen: - Abonnement status + Abonnementstatus door %s - Uitdaging details + Uitdagingsdetails Verlaat uitdaging - Weet zeker dat je de uitdaging \"%s\" wilt verlaten? + Weet je zeker dat je de uitdaging \"%s\" wilt verlaten? Verwijder taken Wil je de taken verwijderen? - Verwijder + Verwijderen Houden Mijn uitdagingen - Publiek + Openbaar Uitdagingen Dagelijkse taak Gewoonte @@ -493,23 +493,23 @@ Voeg herinnering toe Waarschuwing Open instellingen - Het lijkt erop dat je de Ontwikkelaar optie \\"Hou geen activiteiten bij\\" aan hebt staan. Momenteel zorgt deze optie voor problemen met de habitica app, dus raden we je aan het uit te zetten. - Postvak in + Het lijkt erop dat je de ontwikkelaarsoptie \\"Hou geen activiteiten bij\\" aan hebt staan. Momenteel zorgt deze optie voor problemen met de habitica app, dus raden we je aan het uit te zetten. + Inbox Veel gestelde vragen Speciaal - Omdat je geabonneerd bent voor Habitica kan je iedere maand een aantal edelstenen kopen met goud. + Omdat je geabonneerd bent op Habitica kan je iedere maand een aantal edelstenen kopen met goud. %d over Edelsteen Mysterieus voorwerp Iedere maand ontvangen abonnees een mysterieus voorwerp. Dit wordt meestal een week voor het einde van de maand uitgebracht. Open - Je opent de doos en vind %s! + Je opent de doos en vindt %s! Je ontvangt een %1$s als beloning voor je toewijding bij het beteren van je leven. Je volgende prijs wordt vrijgespeeld na %1$d check-ins. - afwachten op goedkeuring + wachten op goedkeuring Filters Klaar - Groepstaken konden niet bewerkt worden. + Groepstaken kunnen niet bewerkt worden. Kan deze taak niet bewerken Groepen Alle @@ -531,7 +531,7 @@ Rolstoel Zwak Sterk - Grijd + Grijs Gedateerd Voltooid Andere @@ -543,26 +543,26 @@ Je hebt geen to-do\'s To-do\'s zijn taken die slechts een keer voltooid moeten worden. Voeg checklijsten aan je to-do\'s toe om hun waarde te verhogen. Je hebt geen beloningen - Herstart Justin\'s inleiding + Herstart Justins inleiding Lees alsjeblieft onze gemeenschapsrichtlijnen voordat je berichten plaatst Onderhoud Inhoud herladen Standaard de \'Onvoltooid\' tab laten zien in Dagelijkse Taken Als deze optie aan staat, wordt standaard de \'onvoltooid\' tab getoond in plaats van \'alle\' Herhaalt %1$s elke %2$s %3$s %4$s - Je apparaat heeft geen van de ondersteunende betaalmethodes. Gebruik alsjeblieft de habitica website als je edelstenen wilt kopen. - Je apparaat heeft geen van de ondersteunende betaalmethodes. Gebruik alsjeblieft de habitica website als je een abonnement wilt kopen. + Je apparaat heeft geen van de ondersteunde betaalmethodes. Gebruik alsjeblieft de Habitica-website als je edelstenen wilt kopen. + Je apparaat heeft geen van de ondersteunde betaalmethodes. Gebruik alsjeblieft de Habitica-website als je een abonnement wilt kopen. Opslaan Locatie - Edelsteen beloning + Edelsteenbeloning Taken Uitdaging maken Uitdaging bewerken - Je hebt minstens 1 edelsteen nodig om een uitdaging in de herberg te maken. + Je hebt minstens 1 edelsteen nodig om een uitdaging in de Herberg te maken. Je hebt niet genoeg edelstenen om een uitdaging te maken. Identificeer je uitdaging met een label .. Je hebt een label nodig om deze uitdaging te maken. - Je moet op zijn minst een taak toevoegen om deze uitdaging te maken. + Je moet op zijn minst één taak toevoegen om deze uitdaging te maken. Je hebt een titel nodig om deze uitdaging te maken. Beschrijving (optioneel) Nieuwe titel voor uitdaging @@ -571,10 +571,22 @@ Systeem Begin aan een nieuwe Queeste Verlaat Groep - Beschrijving Groep - Ben je zeker dat je deze queeste wilt annuleren? Het zal voor iedereen in je groep worden geannuleerd en alle voortgang zal verloren gaan. De queeste-perkamentrol zal teruggegeven worden aan de eigenaar van de queeste. + Groepsbeschrijving + Weet je zeker dat je deze queeste wilt annuleren? Hij zal voor iedereen in je groep worden geannuleerd en alle voortgang zal verloren gaan. De queeste-perkamentrol zal teruggegeven worden aan de eigenaar van de queeste. Weet je zeker dat je de actieve queeste wilt verlaten? Al je voortgang in de queeste zal verloren gaan. %1$d Deelnemers Welkom terug Heb je gisteren één van deze Dagelijkse taken voltooid? + Begin mijn dag + Weet je zeker dat je de groep wilt verlaten? + Volgende prijs in %d check-ins + In afwachting + Geaccepteerd + Afgewezen + Deelnemers + Uitnodigingen + Begonnen door %s + Weet je zeker dat je deze missie wilt stoppen? Hij zal worden gestopt voor iedereen in je groep en alle vooruitgang raakt verloren. De queesterol wordt terug gegeven aan de eigenaar van de queeste. + Aan het laden... + Inhoud opnieuw aan het laden diff --git a/Habitica/res/values-pt-rBR/strings.xml b/Habitica/res/values-pt-rBR/strings.xml index 1b72539eb..6c368d9f0 100644 --- a/Habitica/res/values-pt-rBR/strings.xml +++ b/Habitica/res/values-pt-rBR/strings.xml @@ -579,4 +579,6 @@ Bem vindo de volta Você fez alguma dessas Tarefas Diárias ontem? Começar Meu Dia + Você tem certeza de que quer sair do grupo? + Próximo prêmio em %d Check-ins diff --git a/Habitica/res/values-ru/strings.xml b/Habitica/res/values-ru/strings.xml index f5c51c1bd..e62078068 100644 --- a/Habitica/res/values-ru/strings.xml +++ b/Habitica/res/values-ru/strings.xml @@ -546,6 +546,8 @@ Перед публикацией ознакомьтесь с нашими Правилами сообщества Cодержание Обновить содержимое + Установить ежедневные задания по умолчанию на вкладку \'действующих\' + С включённом параметром, по умолчанию будут отображаться только \'действующие\' ежедневные задания вместо \'всех\'. Повторять %1$s каждые %2$s %3$s %4$s На вашем устройстве нет поддерживаемых способов оплаты. Пожалуйста, используйте сайт habica, если вы хотите приобрести драгоценные камни. На вашем устройстве не поддерживается ни один из способов оплаты. Пожалуйста используйте наш веб-сайт если вы хотите оформить подписку. @@ -563,4 +565,27 @@ Вам нужен заголовок, чтобы создать это Испытание. Описание (необязательное поле) Новый заголовок для испытания + Владение + Гостиница + Система + Начать новый Квест + Покинуть команду + Описание команды + Вы уверены, что хотите отменить эту миссию? Это прервет её прохождение для каждого в вашей команде и весь прогресс будет потерян. Квестовый свиток останется у владельца. + Вы уверены, что хотите покинуть активный квест? Весь ваш прогресс будет потерян + %1$dУчастники + C возвращением + Вы вчера делали какие-нибудь из этих ежедневных заданий? + Начать Мой День + Вы уверены что хотите покинуть команду? + Следующий приз после %d входа в игру + Ожидает + Принято + Отклонено + Участники + Приглашения + Начато %s + Вы уверены, что хотите отменить эту миссию? Это прервет её прохождение для каждого в вашей команде и весь прогресс будет потерян. Квестовый свиток останется у владельца. + Подключение... + Обновление содержимого diff --git a/Habitica/res/values-tr/strings.tutorial.xml b/Habitica/res/values-tr/strings.tutorial.xml index 9e364475b..6171e2ad3 100644 --- a/Habitica/res/values-tr/strings.tutorial.xml +++ b/Habitica/res/values-tr/strings.tutorial.xml @@ -1,11 +1,22 @@ - - - İşte geldik! İlgi alanlarına göre sana bazı işler doldurdum. Kendin de birkaç tane eklemeyi dene. Başlığa basarak işleri düzenleyebilirsin. - Ekipman satın aldığında burada gözükür. Savaş Ekipmanın niteliklerini, ve Kostümün (eğer etkinse) avatarının ne giydiğini etkiler. - Görevlerini tamamlayarak ve seviye yükselerek eşya kazan. Kullanmak için eşyanın üzerine tıkla! - Gerçek dünya işlerini tamamladıkça, artık rastgele yumurta ve iksir bulma şansın var. Hayvanları yumurtadan çıkarmak için o ikisini birleştir - Yetenekler güçlü etkileri olan özel becerilerdir! Kullanmak için bir yetenğe bas. Bu Mana ile (mavi çubuk), yani hergün giriş yapmakla ve gerçek hayat görevlerini tamamlamakla kazanarak ödenir. Daha fazla bilgi için menüdeki SSS\'ı kontrol et! - Burası senin ve arkadaşlarının birbirinizi hedeflerinize sorumlu tutabileceğiniz ve görevlerinizle canavarlarla savaştığınız yer! - Taverna, yani herkese açık ve her yaşın sohbet odasına hoşgeldin! Burda üretkenlik hakkında sohbet edebilir ve sorular sorabilirsin. Iyi eğlenceler! - Savaşçı, Büyücü, Şifacı veya Düzenbaz olmak için birini seç! Her bir sınıfın kendine özgü donanımı ve yeteneği vardır. Daha fazlasını öğrenmek için (?)\'ne bas! - + + + İşte geldik! İlgi alanlarına göre sana bazı işler doldurdum. Kendin de birkaç tane eklemeyi dene. Başlığa basarak işleri düzenleyebilirsin. + İlk önce alışkanlıklar. Geliştirmek istediğiniz olumlu alışkanlıklar veya bırakmak istediğiniz olumsuz alışkanlıklar olabilirler. + Olumlu her bir alışkanlık kazandığınızda , deneyim ve altın almak için + simgesine dokunun! + Eğer hata yaparsan ve negatif bir alışkanlık yaparsan, - düğmesine basarak avatarının sağlığını azaltarak sorumluluk alabilirsin. + Bi dene! Diğer görev türlerini alttaki gezinme aracıyla keşfedebilirsiniz. + Düzenli bir programda yapılması gereken, zamana duyarlı görevler için Günlükl İşler oluştur. + Dikkatli olun - eğer birini kaçırırsanız, avatarınız bir gece hasar alacaktır. Onları sürekli olarak kontrol etmek büyük ödüller getirrir! + Yapmanız gereken görevleri takip etmek için To-do\'yu kullanın. + Yapılacak İşin belirli bir süreyle yapılması gerekiyorsa, bir bitiş tarihi ayarla. Öyle görünüyor ki birini yapılmış olarak işaretleyebilirsin - devam et! + Kazandığınız altınla avatarınızatechizat alın! + You can also make real-world Custom Rewards based on what motivates you. + Şimdilik bu kadar. Bir hatırlatıcıya ihtiyacınız varsa SSS bölümünü kontrol edin. + Ekipman satın aldığında burada gözükür. Savaş Ekipmanın niteliklerini, ve Kostümün (eğer etkinse) avatarının ne giydiğini etkiler. + Görevlerini tamamlayarak ve seviye yükselerek eşya kazan. Kullanmak için eşyanın üzerine tıkla! + Gerçek dünya işlerini tamamladıkça, artık rastgele yumurta ve iksir bulma şansın var. Hayvanları yumurtadan çıkarmak için o ikisini birleştir + Yetenekler güçlü etkileri olan özel becerilerdir! Kullanmak için bir yetenğe bas. Bu Mana ile (mavi çubuk), yani hergün giriş yapmakla ve gerçek hayat görevlerini tamamlamakla kazanarak ödenir. Daha fazla bilgi için menüdeki SSS\'ı kontrol et! + Burası senin ve arkadaşlarının birbirinizi hedeflerinize sorumlu tutabileceğiniz ve görevlerinizle canavarlarla savaştığınız yer! + Taverna, yani herkese açık ve her yaşın sohbet odasına hoşgeldin! Burda üretkenlik hakkında sohbet edebilir ve sorular sorabilirsin. Iyi eğlenceler! + Savaşçı, Büyücü, Şifacı veya Düzenbaz olmak için birini seç! Her bir sınıfın kendine özgü donanımı ve yeteneği vardır. Daha fazlasını öğrenmek için (?)\'ne bas! + diff --git a/Habitica/res/values-tr/strings.xml b/Habitica/res/values-tr/strings.xml index 13ac48633..f87d077a1 100644 --- a/Habitica/res/values-tr/strings.xml +++ b/Habitica/res/values-tr/strings.xml @@ -537,19 +537,28 @@ Diğer Temizle Hiç Alışkanlık sahibi değilsin + Alışkanlıklar katı bir zamanlamaya sahip olmayan işlerdir. Onları günde birçok kez yapabilir ya da hiç yapmayabilirsin. Hiç Günlük İş sahibi değilsin + Günlük İşler, düzenli olarak tekrar eden işlerdir. Senin için uygun olan program seç! Hiç Yapılacak İş sahibi değilsin + Yapılacak İşler yalnızca bir kez tamamlanması gereken işlerdir. Değerlerini artırmak için Yapılacak İşlerine kontrol listeleri ekle. Hiç Ödül sahibi değilsin + Junstin\'in Rehberliğini Sıfırla undefined Bakım İçeriği Yenile Günlükleri varsayılan \'due\' sekmesine ayarla + Bu seçenek seçili ise, Günlük İşler işleri varsayılan olarak \'tümü\' yerine \'bitirme\' olacaktır + %1$sher %2$s%3$s%4$s tekrarlanır + Cihazında desteklenen ödeme yöntemleri yok. Elmas satın almak istersen lütfen habitica web sitesini kullan. + Cihazında desteklenen ödeme yöntemleri yok. Abonelik satın almak istersen lütfen habitica web sitesini kullan. Kaydet Konum Elmas ödülü İşler Mücadele Yarat Mücadeleyi Düzenle + Tavernada bir mücadele yaratmak için en azından 1 elmasa ihtiyacın var. Bir mücadele oluşturacak kadar elmasınız yok. Bir etiketle mücadeleyi belirleyin .. Bu Mücadeleyi oluşturmak için bir etikete ihtiyacınız var. @@ -557,8 +566,27 @@ Bu Mücadeleyi oluşturmak için bir başlığa ihtiyacınız var. Açıklama (isteğe bağlı) Yeni mücadele başlığı + Sahiplik Han Sistem + Yeni bir Göreve başla Takımdan Ayrıl Takım Tanımı + Bu görevi iptal etmek istediğine emin misin? Tüm davet kabulleri ve ilerleme kaybolacak. Görev sahibi görev parşömenini geri alacaktır. + Etkin görevden ayrılmak istediğinden emin misin? Tüm görev ilerlemen kaybolacak. + %1$dKatılımcı + Tekrar Hoş Geldin + Bu Günlük İşlerden dün yaptın mı? + Günüme Başla + Takımdan ayrılmak istediğinden emin misin? + Bir sonraki ödülün %d Girişten sonra + Gönderiliyor + Kabul edildi + Reddedildi + Katılımcılar + Davetiyeler + %s tarafından başlatıldı + Bu görevi iptal etmek istediğine emin misin? Tüm davet kabulleri ve ilerleme kaybolacak. Görev parşömenini görev sahibine geri verilecektir. + Yükleniyor... + İçerik Yeniden Yükleniyor diff --git a/translations/store_strings-de.xml b/translations/store_strings-de.xml index e5df7390b..6c31ef553 100644 --- a/translations/store_strings-de.xml +++ b/translations/store_strings-de.xml @@ -1,4 +1,9 @@ - - - Betrachte Dein Leben als ein Spiel, um motiviert und organisiert zu bleiben! - + + + Erledige deine Aufgaben spielerisch + Betrachte Dein Leben als ein Spiel, um motiviert und organisiert zu bleiben! + Betrachte Dein Leben als ein Spiel, um motiviert und organisiert zu bleiben! Habitica macht es Dir einfach, Spaß dabei zu haben, Deine persönlichen Ziele zu erreichen. +Füge Deine Gewohnheiten, Deine täglichen Ziele und Deine To-Do-Liste hinzu und erstelle Deinen eigenen Avatar. Hake Deine Aufgaben ab, damit Dein Avatar auf ein höheres Level aufsteigen kann und um weitere Funktionen freizuschalten, wie beispielsweise Ausrüstung, Haustiere, Fähigkeiten und auch Quests! Du kannst Monster mit Deinen Freunden bekämpfen und euch so gegenseitig unterstützen. Du kannst Dein Gold dazu nutzen, um spielbezogene Belohnungen zu kaufen, oder für individuelle Belohnungen, wie beispielsweise eine Episode Deiner Lieblings-Fehrnsehserie zu gucken. Habitica ist flexibel, kommunikativ und macht Spaß, es bietet eine tolle Möglichkeit, Dich zu jedem Ziel zu motivieren. +Falls Du irgendwelche Fragen hast, kannst Du uns gerne Feedback an mobile@habitica.com schicken! Und falls Dir unsere App gefällt, würden wir uns freuen, wenn Du uns bewertest. + + diff --git a/translations/store_strings-es_419.xml b/translations/store_strings-es_419.xml index 5a927a8f3..d5c3fd005 100644 --- a/translations/store_strings-es_419.xml +++ b/translations/store_strings-es_419.xml @@ -1,4 +1,9 @@ - - - ¡Trata tu vida como un juego para mantenerte motivado y organizado! - + + + Gamifica Tus Tareas + ¡Trata tu vida como un juego para mantenerte motivado y organizado! + ¡Trata tu vida como un juego para mantenerte motivado y organizado! ¡Habitica hace que cumplir objetivos sea entretenido! +Escribe tus hábitos, tus metas diarias y tu lista de pendientes, luego crea y personaliza a tu avatar. ¡Marca tus tareas para subir de nivel y desbloquear objetos, tales como armaduras, mascotas, habilidades, e incluso misiones! lucha contra monstruos con tus amigos para seguir comprometido con tus objetivos, y ganar oro que puedes usar para desbloquear recompensas en el juego, como equipamiento, o premios para recompensarte, como ver un episodio de tu serie favorita. Dinámico, social y divertido, Habitica es la mejor manera de motivarte para cumplir cualquier cosa. +Si tienes alguna duda, ¡siéntete libre de comunicárnosla a mobile@habitica.com ! Y si te gusta nuestra aplicación, Nos encantaría que nos dejaras una reseña. + + diff --git a/translations/store_strings-it.xml b/translations/store_strings-it.xml index 7e7924278..f93cc6086 100644 --- a/translations/store_strings-it.xml +++ b/translations/store_strings-it.xml @@ -1,11 +1,11 @@ - - - Trasforma le tue attività in un gioco - Trasforma la tua vita in un gioco di ruolo per affrontarla motivato ed organizzato. - Trasforma la tua vita in un gioco di ruolo per essere organizzato e motivato! Con Habitica raggiungere i propri obiettivi non è mai stato così divertente. - -Imposta le tue abitudini (Habit), i tuoi obiettivi giornalieri (Daily) e la tua lista di cose da fare (To-Do), poi crea il tuo avatar personalizzato. Completa le attività per far salire di livello il tuo avatar e sbloccare funzionalità come armature, animali, abilità e persino missioni! Combatti i mostri con i tuoi amici per aiutarvi a vicenda ad essere responsabili, e usa il tuo oro per ricompense in-game come pezzi di equipaggiamento, o ricompense personalizzate, ad esempio guardare un episodio della tua serie TV preferita. Flessibile, sociale e soprattutto divertente, Habitica è il modo perfetto per motivarti a fare qualsiasi cosa. - -Se avete una qualsiasi domanda o dei suggerimenti, sentitevi liberi di scrivere a mobile@habitica.com! E se vi piace la nostra app, saremmo davvero felici se ci lasciaste una recensione. - - + + + Trasforma le tue attività in un gioco + Trasforma la tua vita in un gioco di ruolo per affrontarla motivato ed organizzato. + Trasforma la tua vita in un gioco di ruolo per essere organizzato e motivato! Con Habitica raggiungere i propri obiettivi non è mai stato così divertente. + +Imposta le tue Abitudini, i tuoi obiettivi giornalieri (Daily) e la tua lista di cose da fare (To-Do), poi crea il tuo avatar personalizzato. Completa le attività per far salire di livello il tuo avatar e sbloccare funzionalità come armature, animali, abilità e persino missioni! Combatti i mostri con i tuoi amici per aiutarvi a vicenda ad essere responsabili, e usa il tuo oro per ricompense in-game come pezzi di equipaggiamento, o ricompense personalizzate, ad esempio guardare un episodio della tua serie TV preferita. Flessibile, sociale e soprattutto divertente, Habitica è il modo perfetto per motivarti a fare qualsiasi cosa. + +Se avete una qualsiasi domanda o dei suggerimenti, sentitevi liberi di scrivere a mobile@habitica.com! E se vi piace la nostra app, saremmo davvero felici se ci lasciaste una recensione. + + From 377ff8dbc393b02ff113bde941be90339032105c Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Thu, 3 Aug 2017 13:45:32 +0200 Subject: [PATCH 3/7] fix various minor crashes --- .../ic_info_outline_black_24dp.png | Bin 0 -> 566 bytes .../ic_info_outline_black_24dp.png | Bin 0 -> 365 bytes .../ic_info_outline_black_24dp.png | Bin 0 -> 769 bytes .../ic_info_outline_black_24dp.png | Bin 0 -> 1145 bytes .../drawable/ic_info_outline_black_24dp.xml | 4 --- .../res/layout/activity_create_challenge.xml | 2 +- .../data/implementation/ApiClientImpl.java | 24 ++++++++++++-- .../implementation/ContentRepositoryImpl.java | 5 +-- .../implementation/SocialRepositoryImpl.java | 31 +++++++++--------- .../implementation/UserRepositoryImpl.java | 2 +- .../PushNotificationManager.java | 7 ++-- .../interactors/NotifyUserUseCase.java | 2 +- .../activities/CreateChallengeActivity.java | 4 +-- .../ui/activities/FullProfileActivity.java | 3 +- .../habitica/ui/activities/MainActivity.java | 2 +- .../ui/activities/TaskFormActivity.java | 7 ++++ .../habitica/ui/fragments/NewsFragment.java | 5 ++- .../ui/fragments/faq/FAQOverviewFragment.java | 3 ++ .../customization/AvatarOverviewFragment.java | 5 ++- .../equipment/EquipmentOverviewFragment.java | 5 ++- .../inventory/items/ItemsFragment.java | 5 ++- .../inventory/shops/ShopsFragment.java | 5 ++- .../stable/MountDetailRecyclerFragment.java | 5 ++- .../stable/PetDetailRecyclerFragment.java | 5 ++- .../inventory/stable/StableFragment.java | 5 ++- .../ui/fragments/skills/SkillsFragment.java | 8 +++-- .../social/GroupInformationFragment.java | 16 --------- .../ui/fragments/social/GuildFragment.java | 5 ++- .../ui/fragments/social/InboxFragment.java | 5 ++- .../social/PublicGuildsFragment.java | 5 ++- .../ui/fragments/social/TavernFragment.java | 5 ++- .../challenges/ChallengeListFragment.java | 3 ++ .../ChallengesOverviewFragment.java | 3 ++ .../social/party/PartyDetailFragment.java | 16 ++++++--- .../fragments/social/party/PartyFragment.java | 5 ++- .../social/party/PartyMemberListFragment.java | 8 ++++- 36 files changed, 114 insertions(+), 101 deletions(-) create mode 100644 Habitica/res/drawable-hdpi/ic_info_outline_black_24dp.png create mode 100644 Habitica/res/drawable-mdpi/ic_info_outline_black_24dp.png create mode 100644 Habitica/res/drawable-xhdpi/ic_info_outline_black_24dp.png create mode 100644 Habitica/res/drawable-xxhdpi/ic_info_outline_black_24dp.png delete mode 100644 Habitica/res/drawable/ic_info_outline_black_24dp.xml diff --git a/Habitica/res/drawable-hdpi/ic_info_outline_black_24dp.png b/Habitica/res/drawable-hdpi/ic_info_outline_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..a98fe3d878dd88534727d3684ac9ae4ffa453a6e GIT binary patch literal 566 zcmV-60?GY}P)B_5b~1i;i z6BH(k@T~xD2CyXjhNS7yK2sHZfQmz|J+MCI+dM0*v?bLf4H>Q8IoapVk8BfSE5fe- zME2?V5od&0h|r-T*=OoUq}7!ZimQgqwLIBp?MK`ZVoE5kn$)hP$(rp+IiwRZ9f!mr z(@AO_hr~(UC&YGy4t2YG_sB3Y&v#931s))@5Mk-&#!Zcx8J>4OH z%!HOW&m@HF>nvwnybG)MsOZ4scV>5V}KQM+xZwhE!MRk1sXCw=mG^`sX2N;0MAt zJEPyuuA27mVGs^+AW|X&`Ex|r$Y~Ta;zqm`TnVdA;V!Xd1&)ME^avgF36F?bUWm2I z5XJArQjyz1^9O69v_%vj*7)iXYceg{P~myen+rQ+;X%8=#;W@-5mQ`Tsvk~T#g?MbadGW&{9ho!D9#lJ^AF+!69|Bdl?%lB00000 LNkvXXu0mjfC#ake literal 0 HcmV?d00001 diff --git a/Habitica/res/drawable-xhdpi/ic_info_outline_black_24dp.png b/Habitica/res/drawable-xhdpi/ic_info_outline_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..0aa5d0e5f683c0a6a87f1251a1c5232e8c7c5c8a GIT binary patch literal 769 zcmV+c1OEJpP)l z_yIP+GAM%r7$J)EtqL~5#Q-~MHS)fl9|yZJ10I4UFlJ~^1^O|@=6m`ZZ!<4B{}ViR zoGoR$4z6N?@UjxG1>Nz%|o-Wz%7KlX_xk!!`gV4WZfHHZia&l*)XH0jTQqiRnKx zIhgUY&5}h5x&#nW)9cqi1~+sR=Y$SB7NsvY!6ozMp^jpcDQyHi?QSt&8ahflOldh_ z05#^zwvN&PQz{1xpu&9F*HP*)rGn+)uABHzGwru=rlZ8`|46_9MumRx{|CTRsQ9m? zkgrYbBLJ&S%*$vsU;tKSbcHEx1`OaWvr)HMwhPPqscQhYgrkI3I_K!o$+a812Efzj zNcS+OdXRJgv%;0~rA-AW z3Qes|7w@EG3VdN>o`MNmgA2k;?j;n&6g4V7-n^^fmSD6^uLr(lR+xFknh)c7dgkj1 zd!k`cop`lr3OTQM2Znsj(0EJ`J$gN;(jC^MN!5f>+3&pfdw4!3o%%cW7CBa-ljJB- zqHi@i&s+|$v*vT=<2Lqr zBu9@<4a)I-x;=G?Gy1koN0PG1!7P(ZGKrVpOyUA+Z(!!_00000NkvXXu0mjf!?t2w literal 0 HcmV?d00001 diff --git a/Habitica/res/drawable-xxhdpi/ic_info_outline_black_24dp.png b/Habitica/res/drawable-xxhdpi/ic_info_outline_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..79a8f08990db01ce14e34ff3a0c9fda430b8bf32 GIT binary patch literal 1145 zcmV-<1cv*GP)>fC*q9 za2&V=+y$n9C&Uz8+oF5$-ezFlWfi3q*a_Sq0e*YrF>oE&0law`gt-Tt2mbOQ3df(o zIbfrS!rTXL1|SMYd@}EvAj~b`TaCh;7RhG}4Hl!VCzKEL23z5^$L z?Ud2VfyKZaVliDy&^=SYy$g;pOtwNrA#lZ|!zpsQ+Q)b`z!Bhq%Q2UL`C*Au0{rO0 z$*+`_V~W>OUBGWH#@{AiwLdvd;^2CxU$HP}fltQ(rF&~}1S+7t9~V1)R|2_5v_s)59Hc;qZb{M2*EXb6vhj== zBv8I&gZtEv;SEVC!8C9?fK@*`X0E_qZJ6$LnNyP&gMEy# zNntLgnK|`(F*eQ^Yd2V+4rWd-y%^hKj3o>fsD+u+doRXz8Dr%EI39GG&!B=CXUB`N z6l1K|V1eSyIQw3VaVb8>V1aT4f97umQZ0~u#cYuF7o>Hjd0hf2P4hYzin;{i7K%xg zTa77$1)5>T>G5K$nK8C!s6evK>O(IE^CYRh#z29Tmpc&ajL{JT1>$;`R)Pp>2g0n9 zD;Dn4%ouHc3}exrYc1(ANT43UpXuh%V$d>4szi=OM4T)VK-P{NSl4T-khiyuiSS$S#vOco6toi~4i3yIh)G^! z&Vqw)gE}0+lIxO#BN(`=G>TIz3CI~P0;o_0CrVi-@( zc`<2NT&SSOHkmC=PBs8-#&Cr)P!p_gr3hLiL<_aS4ErJ$93>iht+eUPU>gr==~- z)EzYN1fhx6G1%FKr - - - diff --git a/Habitica/res/layout/activity_create_challenge.xml b/Habitica/res/layout/activity_create_challenge.xml index ab0246ab7..29a85bbd8 100644 --- a/Habitica/res/layout/activity_create_challenge.xml +++ b/Habitica/res/layout/activity_create_challenge.xml @@ -163,7 +163,7 @@ android:layout_height="20dp" android:layout_marginTop="39dp" android:drawablePadding="12dp" - android:drawableEnd="@drawable/ic_info_outline_black_24dp" + android:drawableRight="@drawable/ic_info_outline_black_24dp" android:drawableTint="@color/brand_300" android:gravity="center" android:text="Tag" diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.java index e90c05988..4373864cb 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.java @@ -438,18 +438,25 @@ public class ApiClientImpl implements Action1, ApiClient { @Override public Observable equipItem(String type, String itemKey) { + if (itemKey == null) { + return Observable.just(null); + } return apiService.equipItem(type, itemKey).compose(configureApiCallObserver()); } @Override public Observable buyItem(String itemKey) { - + if (itemKey == null) { + return Observable.just(null); + } return apiService.buyItem(itemKey).compose(configureApiCallObserver()); } @Override public Observable purchaseItem(String type, String itemKey) { - + if (itemKey == null) { + return Observable.just(null); + } return apiService.purchaseItem(type, itemKey).compose(configureApiCallObserver()); } @@ -465,22 +472,33 @@ public class ApiClientImpl implements Action1, ApiClient { @Override public Observable purchaseHourglassItem(String type, String itemKey) { - + if (itemKey == null) { + return Observable.just(null); + } return apiService.purchaseHourglassItem(type, itemKey).compose(configureApiCallObserver()); } @Override public Observable purchaseMysterySet(String itemKey) { + if (itemKey == null) { + return Observable.just(null); + } return apiService.purchaseMysterySet(itemKey).compose(configureApiCallObserver()); } @Override public Observable purchaseQuest(String key) { + if (key == null) { + return Observable.just(null); + } return apiService.purchaseQuest(key).compose(configureApiCallObserver()); } @Override public Observable sellItem(String itemType, String itemKey) { + if (itemKey == null) { + return Observable.just(null); + } return apiService.sellItem(itemType, itemKey).compose(configureApiCallObserver()); } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ContentRepositoryImpl.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ContentRepositoryImpl.java index feae0cb09..10666ac71 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ContentRepositoryImpl.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ContentRepositoryImpl.java @@ -31,12 +31,9 @@ abstract class ContentRepositoryImpl extends B public Observable retrieveContent(boolean forced) { if (forced || this.lastSync == null || (new Date().getTime() - this.lastSync.getTime()) > 3600000) { lastSync = new Date(); - return apiClient.getContent() - .doOnNext(localRepository::saveContent); + return apiClient.getContent().doOnNext(localRepository::saveContent); } else { return Observable.just(null); } - } - } 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 a9540c720..538d48be8 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 @@ -19,6 +19,7 @@ import java.util.Map; import io.realm.RealmResults; import rx.Observable; import rx.functions.Action1; +import rx.functions.Func2; public class SocialRepositoryImpl extends BaseRepositoryImpl implements SocialRepository { @@ -90,22 +91,20 @@ public class SocialRepositoryImpl extends BaseRepositoryImpl retrieveGroup(String id) { - return apiClient.getGroup(id) - .map(group -> { - for (ChatMessage message : group.chat) { - message.groupId = group.id; - } - return group; - }) - .doOnNext(group -> { - localRepository.save(group); - localRepository.getGroup(group.id) - .first() - .subscribe(group1 -> { - group.isMember = group1.isMember; - localRepository.save(group); - }, RxErrorHandler.handleEmptyError()); - }); + Observable observable = apiClient.getGroup(id); + if (!"party".equals(id)) { + observable = observable.withLatestFrom(localRepository.getGroup(id) + .first(), (newGroup, oldGroup) -> { + newGroup.isMember = oldGroup.isMember; + return newGroup; + }); + } + return observable.map(group -> { + for (ChatMessage message : group.chat) { + message.groupId = group.id; + } + return group; + }).doOnNext(localRepository::save); } @Override diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.java index 25bab05ad..d6b8c1b64 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.java @@ -96,7 +96,7 @@ public class UserRepositoryImpl extends BaseRepositoryImpl } }); } else { - return Observable.just(null); + return getUser(); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java index 704b100e3..e52084e5e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.java @@ -79,9 +79,10 @@ public class PushNotificationManager { } public void removePushDeviceUsingStoredToken() { - apiClient.deletePushDevice(this.refreshedToken) - - .subscribe(aVoid -> {}, RxErrorHandler.handleEmptyError()); + if (this.refreshedToken == null) { + return; + } + apiClient.deletePushDevice(this.refreshedToken).subscribe(aVoid -> {}, RxErrorHandler.handleEmptyError()); } private Boolean userHasPushDevice() { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/NotifyUserUseCase.java b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/NotifyUserUseCase.java index d2fde4bbf..62892a160 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/NotifyUserUseCase.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/NotifyUserUseCase.java @@ -48,7 +48,7 @@ public class NotifyUserUseCase extends UseCase userRepository.retrieveUser(false)) + .flatMap(aVoid -> userRepository.retrieveUser(true)) .map(User::getStats); } else { Pair pair = getNotificationAndAddStatsToUser(requestValues.context, requestValues.xp, requestValues.hp, requestValues.gold, requestValues.mp); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/CreateChallengeActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/CreateChallengeActivity.java index e19377ef4..4ad7512ff 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/CreateChallengeActivity.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/CreateChallengeActivity.java @@ -438,9 +438,7 @@ public class CreateChallengeActivity extends BaseActivity { checkPrizeAndMinimumForTavern(); - challengeRepository.getChallengeTasks(challengeId).subscribe(tasks -> { - tasks.tasks.forEach((s, task) -> addOrUpdateTaskInList(task)); - }, Throwable::printStackTrace, () -> { + challengeRepository.getChallengeTasks(challengeId).subscribe(tasks -> tasks.tasks.forEach((s, task) -> addOrUpdateTaskInList(task)), RxErrorHandler.handleEmptyError(), () -> { // activate editMode to track taskChanges editMode = true; }); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.java index e34012d17..b1f3d6612 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.java @@ -14,6 +14,7 @@ import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; +import android.view.ViewGroup; import android.widget.Button; import android.widget.ProgressBar; import android.widget.ScrollView; @@ -187,7 +188,7 @@ public class FullProfileActivity extends BaseActivity { final AlertDialog addMessageDialog = new AlertDialog.Builder(this) .setPositiveButton(android.R.string.ok, (dialogInterface, i) -> { socialRepository.postPrivateMessage(userId, emojiEditText.getText().toString()) - .subscribe(postChatMessageResult -> showSnackbar(FullProfileActivity.this, FullProfileActivity.this.fullprofile_scrollview, + .subscribe(postChatMessageResult -> showSnackbar(FullProfileActivity.this, (ViewGroup) FullProfileActivity.this.fullprofile_scrollview.getChildAt(0), String.format(getString(R.string.profile_message_sent_to), userName), SnackbarDisplayType.NORMAL), RxErrorHandler.handleEmptyError()); UiUtils.dismissKeyboard(HabiticaApplication.currentActivity); 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 fef9299fb..50aff3508 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 @@ -741,7 +741,7 @@ public class MainActivity extends BaseActivity implements TutorialView.OnTutoria return; } - if (this.faintDialog == null) { + if (this.faintDialog == null && !this.isFinishing()) { View customView = View.inflate(this, R.layout.dialog_faint, null); if (customView != null) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.java index 63b63dd38..2f5169f82 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.java @@ -984,6 +984,9 @@ public class TaskFormActivity extends BaseActivity implements AdapterView.OnItem } private void populate(Task task) { + if (!task.isValid()) { + return; + } taskText.setText(task.text); taskNotes.setText(task.notes); taskValue.setText(String.format(Locale.getDefault(), "%.2f", task.value)); @@ -1328,6 +1331,10 @@ public class TaskFormActivity extends BaseActivity implements AdapterView.OnItem if (currentFocus != null) { imm.hideSoftInputFromWindow(currentFocus.getWindowToken(), 0); } + if (popup != null) { + popup.dismiss(); + popup = null; + } } private class DateEditTextListener implements View.OnClickListener, DatePickerDialog.OnDateSetListener { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NewsFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NewsFragment.java index ab78c2888..8a0f45365 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NewsFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NewsFragment.java @@ -41,10 +41,9 @@ public class NewsFragment extends BaseMainFragment { @Override public String customTitle() { - if (isAdded()) { - return getString(R.string.sidebar_news); - } else { + if (!isAdded()) { return ""; } + return getString(R.string.sidebar_news); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/faq/FAQOverviewFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/faq/FAQOverviewFragment.java index d5b3ca559..0eb528b68 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/faq/FAQOverviewFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/faq/FAQOverviewFragment.java @@ -67,6 +67,9 @@ public class FAQOverviewFragment extends BaseMainFragment { @Override public String customTitle() { + if (!isAdded()) { + return ""; + } return getString(R.string.FAQ); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarOverviewFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarOverviewFragment.java index caffa7afc..6623e8bb8 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarOverviewFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarOverviewFragment.java @@ -165,10 +165,9 @@ public class AvatarOverviewFragment extends BaseMainFragment implements AdapterV @Override public String customTitle() { - if (isAdded()) { - return getString(R.string.sidebar_avatar); - } else { + if (!isAdded()) { return ""; } + return getString(R.string.sidebar_avatar); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/equipment/EquipmentOverviewFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/equipment/EquipmentOverviewFragment.java index 96bbbaed3..1efde84d9 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/equipment/EquipmentOverviewFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/equipment/EquipmentOverviewFragment.java @@ -156,11 +156,10 @@ public class EquipmentOverviewFragment extends BaseMainFragment { @Override public String customTitle() { - if (isAdded()) { - return getString(R.string.sidebar_equipment); - } else { + if (!isAdded()) { return ""; } + return getString(R.string.sidebar_equipment); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemsFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemsFragment.java index fa6bd58ba..aff67336e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemsFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemsFragment.java @@ -128,10 +128,9 @@ public class ItemsFragment extends BaseMainFragment { @Override public String customTitle() { - if (isAdded()) { - return getString(R.string.sidebar_items); - } else { + if (!isAdded()) { return ""; } + return getString(R.string.sidebar_items); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/ShopsFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/ShopsFragment.java index 4f91131d1..30dbef3d4 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/ShopsFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/shops/ShopsFragment.java @@ -100,11 +100,10 @@ public class ShopsFragment extends BaseMainFragment { @Override public String customTitle() { - if (isAdded()) { - return getString(R.string.sidebar_shops); - } else { + if (!isAdded()) { return ""; } + return getString(R.string.sidebar_shops); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/MountDetailRecyclerFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/MountDetailRecyclerFragment.java index ac8bf4dd0..4e08a58d3 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/MountDetailRecyclerFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/MountDetailRecyclerFragment.java @@ -109,10 +109,9 @@ public class MountDetailRecyclerFragment extends BaseMainFragment { @Override public String customTitle() { - if (isAdded()) { - return getString(R.string.mounts); - } else { + if (!isAdded()) { return ""; } + return getString(R.string.mounts); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/PetDetailRecyclerFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/PetDetailRecyclerFragment.java index 1b784115f..a7502aa1f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/PetDetailRecyclerFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/PetDetailRecyclerFragment.java @@ -132,10 +132,9 @@ public class PetDetailRecyclerFragment extends BaseMainFragment { @Override public String customTitle() { - if (isAdded()) { - return getString(R.string.pets); - } else { + if (!isAdded()) { return ""; } + return getString(R.string.pets); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/StableFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/StableFragment.java index f527b195b..c2fce9256 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/StableFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/stable/StableFragment.java @@ -88,10 +88,9 @@ public class StableFragment extends BaseMainFragment { @Override public String customTitle() { - if (isAdded()) { - return getString(R.string.sidebar_stable); - } else { + if (!isAdded()) { return ""; } + return getString(R.string.sidebar_stable); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/skills/SkillsFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/skills/SkillsFragment.java index 051f31980..d98a42f8d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/skills/SkillsFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/skills/SkillsFragment.java @@ -201,6 +201,10 @@ public class SkillsFragment extends BaseMainFragment { } @Override - public String customTitle() { return getString(R.string.sidebar_skills); } - + public String customTitle() { + if (!isAdded()) { + return ""; + } + return getString(R.string.sidebar_skills); + } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GroupInformationFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GroupInformationFragment.java index 3989cb5d0..1a872fc8c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GroupInformationFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GroupInformationFragment.java @@ -53,8 +53,6 @@ public class GroupInformationFragment extends BaseFragment { @Nullable private User user; private QuestContent quest; - private ValueBar bossHpBar; - private ValueBar bossRageBar; public GroupInformationFragment() { @@ -90,9 +88,6 @@ public class GroupInformationFragment extends BaseFragment { unbinder = ButterKnife.bind(this, view); - bossHpBar = (ValueBar) view.findViewById(R.id.bossHpBar); - bossRageBar = (ValueBar) view.findViewById(R.id.bossRageBar); - if (this.group == null) { QrCodeManager qrCodeManager = new QrCodeManager(userRepository, this.getContext()); qrCodeManager.setUpView(qrLayout); @@ -151,17 +146,6 @@ public class GroupInformationFragment extends BaseFragment { return; } - boolean showHpBar = (quest.boss != null && quest.boss.hp > 0); - bossHpBar.setVisibility(showHpBar ? View.VISIBLE : View.GONE); - if (showHpBar) { - bossHpBar.set(group.quest.getProgress().hp, quest.boss.hp); - } - boolean showRageBar = (quest.boss != null && quest.boss.rage_value > 0); - bossRageBar.setVisibility(showRageBar ? View.VISIBLE : View.GONE); - if (showRageBar) { - bossHpBar.set(group.quest.getProgress().rage, quest.boss.rage_value); - } - if (group.quest.members == null) { viewBinding.setHideParticipantCard(true); } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildFragment.java index 0075f6692..4aba91e0c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/GuildFragment.java @@ -258,10 +258,9 @@ public class GuildFragment extends BaseMainFragment implements Action1 { @Override public String customTitle() { - if (isAdded()) { - return getString(R.string.guild); - } else { + if (!isAdded()) { return ""; } + return getString(R.string.guild); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxFragment.java index 4f3d8a190..9ce380d33 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxFragment.java @@ -211,10 +211,9 @@ public class InboxFragment extends BaseMainFragment @Override public String customTitle() { - if (isAdded()) { - return getString(R.string.sidebar_inbox); - } else { + if (!isAdded()) { return ""; } + return getString(R.string.sidebar_inbox); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/PublicGuildsFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/PublicGuildsFragment.java index a305a218a..940704313 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/PublicGuildsFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/PublicGuildsFragment.java @@ -120,10 +120,9 @@ public class PublicGuildsFragment extends BaseMainFragment implements SearchView @Override public String customTitle() { - if (isAdded()) { - return getString(R.string.public_guilds); - } else { + if (!isAdded()) { return ""; } + return getString(R.string.public_guilds); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernFragment.java index b66c2cc73..a93712788 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/TavernFragment.java @@ -159,10 +159,9 @@ public class TavernFragment extends BaseMainFragment { @Override public String customTitle() { - if (isAdded()) { - return getString(R.string.sidebar_tavern); - } else { + if (!isAdded()) { return ""; } + return getString(R.string.sidebar_tavern); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeListFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeListFragment.java index 7fd67a9f0..5c8e2cfb7 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeListFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengeListFragment.java @@ -130,6 +130,9 @@ public class ChallengeListFragment extends BaseMainFragment implements SwipeRefr @Override public String customTitle() { + if (!isAdded()) { + return ""; + } return getString(R.string.sidebar_challenges); } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengesOverviewFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengesOverviewFragment.java index a475155c5..989293b78 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengesOverviewFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/challenges/ChallengesOverviewFragment.java @@ -126,6 +126,9 @@ public class ChallengesOverviewFragment extends BaseMainFragment { @Override public String customTitle() { + if (!isAdded()) { + return ""; + } return getString(R.string.challenges); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyDetailFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyDetailFragment.java index b518df3fc..d95387e1b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyDetailFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyDetailFragment.java @@ -2,6 +2,7 @@ package com.habitrpg.android.habitica.ui.fragments.social.party; import android.app.AlertDialog; import android.os.Bundle; +import android.os.Handler; import android.support.annotation.Nullable; import android.support.v4.widget.SwipeRefreshLayout; import android.view.LayoutInflater; @@ -9,7 +10,6 @@ import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.LinearLayout; -import android.widget.ListView; import android.widget.TextView; import com.facebook.drawee.view.SimpleDraweeView; @@ -32,11 +32,15 @@ import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils; import com.habitrpg.android.habitica.ui.helpers.MarkdownParser; import com.habitrpg.android.habitica.ui.views.social.QuestProgressView; +import java.util.concurrent.TimeUnit; + import javax.inject.Inject; import javax.inject.Named; import butterknife.BindView; import butterknife.OnClick; +import rx.Observable; +import rx.android.schedulers.AndroidSchedulers; public class PartyDetailFragment extends BaseFragment { @@ -146,9 +150,10 @@ public class PartyDetailFragment extends BaseFragment { newQuestButton.setVisibility(View.GONE); questDetailButton.setVisibility(View.VISIBLE); questImageWrapper.setVisibility(View.VISIBLE); - getActivity().runOnUiThread(() -> inventoryRepository.getQuestContent(quest.getKey()) + Handler mainHandler = new Handler(getContext().getMainLooper()); + mainHandler.postDelayed(() -> inventoryRepository.getQuestContent(quest.getKey()) .first() - .subscribe(this::updateQuestContent, RxErrorHandler.handleEmptyError())); + .subscribe(PartyDetailFragment.this::updateQuestContent, RxErrorHandler.handleEmptyError()), 500); } else { newQuestButton.setVisibility(View.VISIBLE); questDetailButton.setVisibility(View.GONE); @@ -186,9 +191,10 @@ public class PartyDetailFragment extends BaseFragment { } private void updateQuestContent(QuestContent questContent) { - if (questTitleView != null) { - questTitleView.setText(questContent.getText()); + if (questTitleView == null) { + return; } + questTitleView.setText(questContent.getText()); DataBindingUtils.loadImage(questScrollImageView, "inventory_quest_scroll_"+questContent.getKey()); DataBindingUtils.loadImage(questImageView, "quest_"+questContent.getKey()); if (isQuestActive()) { 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 e6a7016b0..a0c77b6fa 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 @@ -348,11 +348,10 @@ public class PartyFragment extends BaseMainFragment { @Override public String customTitle() { - if (isAdded()) { - return getString(R.string.sidebar_party); - } else { + if (!isAdded()) { return ""; } + return getString(R.string.sidebar_party); } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyMemberListFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyMemberListFragment.java index 785f07f93..c89dfdab4 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyMemberListFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/PartyMemberListFragment.java @@ -68,7 +68,13 @@ public class PartyMemberListFragment extends BaseFragment { } private void refreshMembers() { - socialRepository.retrieveGroupMembers(partyId, true).subscribe(users -> refreshLayout.setRefreshing(false), RxErrorHandler.handleEmptyError()); + socialRepository.retrieveGroupMembers(partyId, true).subscribe(users -> setRefreshing(false), RxErrorHandler.handleEmptyError()); + } + + private void setRefreshing(boolean isRefreshing) { + if (refreshLayout != null) { + refreshLayout.setRefreshing(isRefreshing); + } } public void setPartyId(String id) { From 680d1b44c1a86cc8e455abdce783a584ab42ae56 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Thu, 3 Aug 2017 13:46:04 +0200 Subject: [PATCH 4/7] bump version number --- Habitica/AndroidManifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Habitica/AndroidManifest.xml b/Habitica/AndroidManifest.xml index 8cb7e3a7f..4139a3606 100644 --- a/Habitica/AndroidManifest.xml +++ b/Habitica/AndroidManifest.xml @@ -2,7 +2,7 @@ From 1c3eca74eff9e1532c14f20469afcbbb5b98a180 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Thu, 3 Aug 2017 16:04:26 +0200 Subject: [PATCH 5/7] fix authentication error on first startup --- Habitica/AndroidManifest.xml | 2 +- .../java/com/habitrpg/android/habitica/api/HostConfig.java | 4 ++++ .../habitrpg/android/habitica/ui/activities/MainActivity.java | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Habitica/AndroidManifest.xml b/Habitica/AndroidManifest.xml index 4139a3606..33cce87f9 100644 --- a/Habitica/AndroidManifest.xml +++ b/Habitica/AndroidManifest.xml @@ -2,7 +2,7 @@ diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/api/HostConfig.java b/Habitica/src/main/java/com/habitrpg/android/habitica/api/HostConfig.java index 6fd0ae65a..eba6632c8 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/api/HostConfig.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/api/HostConfig.java @@ -97,5 +97,9 @@ public class HostConfig { public void setUser(String user) { this.user = user; } + + public boolean hasAuthentication() { + return user != null && user.length() > 0 && api != null && api.length() > 0; + } } 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 50aff3508..2713aed56 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 @@ -783,7 +783,7 @@ public class MainActivity extends BaseActivity implements TutorialView.OnTutoria } protected void retrieveUser() { - if (this.userRepository != null) { + if (this.userRepository != null && hostConfig.hasAuthentication()) { this.userRepository.retrieveUser(true) .flatMap(user1 -> inventoryRepository.retrieveContent(false)) .subscribe(user1 -> {}, RxErrorHandler.handleEmptyError()); From e99ff76f6729c89fe985d4379bc65dceb6ac5081 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Mon, 7 Aug 2017 11:32:32 +0200 Subject: [PATCH 6/7] fix task form error --- Habitica/AndroidManifest.xml | 2 +- .../android/habitica/ui/activities/TaskFormActivity.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Habitica/AndroidManifest.xml b/Habitica/AndroidManifest.xml index 33cce87f9..924de395d 100644 --- a/Habitica/AndroidManifest.xml +++ b/Habitica/AndroidManifest.xml @@ -2,7 +2,7 @@ diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.java index 2f5169f82..ca5b05134 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.java @@ -421,7 +421,7 @@ public class TaskFormActivity extends BaseActivity implements AdapterView.OnItem @Override public void onKeyboardClose() { - if (popup.isShowing()) { + if (popup != null && popup.isShowing()) { popup.dismiss(); } } From a4ea581a71eaafb3432dfb4a55af99ff25f19e19 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Mon, 7 Aug 2017 12:30:16 +0200 Subject: [PATCH 7/7] fix potential ANR when scheduling task notifications --- Habitica/AndroidManifest.xml | 2 +- .../com/habitrpg/android/habitica/models/tasks/Task.java | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Habitica/AndroidManifest.xml b/Habitica/AndroidManifest.xml index 924de395d..6e83e3b84 100644 --- a/Habitica/AndroidManifest.xml +++ b/Habitica/AndroidManifest.xml @@ -2,7 +2,7 @@ diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.java b/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.java index d7e4047ba..b3923b617 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.java @@ -531,15 +531,17 @@ public class Task extends RealmObject implements Parcelable { newTime.setTime(today.getTime()); } else if (FREQUENCY_WEEKLY.equals(this.getFrequency())) { int nextActiveDayOfTheWeek = newTime.get(Calendar.DAY_OF_WEEK); - while ((!this.getRepeat().getForDay(nextActiveDayOfTheWeek) || newTime.before(today) || newTime.equals(today)) && nextActiveDayOfTheWeek < 7) { + int daysChecked = 0; + while ((!this.getRepeat().getForDay(nextActiveDayOfTheWeek) || newTime.before(today) || newTime.equals(today)) && daysChecked <= 7) { if (nextActiveDayOfTheWeek == 6) { nextActiveDayOfTheWeek = 0; } else { nextActiveDayOfTheWeek += 1; } + daysChecked += 1; newTime.add(Calendar.DATE, 1); } - if (nextActiveDayOfTheWeek > 7) { + if (daysChecked > 7) { return null; } } else {