diff --git a/Habitica/AndroidManifest.xml b/Habitica/AndroidManifest.xml
index 8d875260e..c785eef06 100644
--- a/Habitica/AndroidManifest.xml
+++ b/Habitica/AndroidManifest.xml
@@ -238,14 +238,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Habitica/res/drawable-hdpi/currency_gem.webp b/Habitica/res/drawable-hdpi/currency_gem.webp
deleted file mode 100644
index 068b8e0a9..000000000
Binary files a/Habitica/res/drawable-hdpi/currency_gem.webp and /dev/null differ
diff --git a/Habitica/res/drawable-hdpi/custom_reward.webp b/Habitica/res/drawable-hdpi/custom_reward.webp
deleted file mode 100644
index a1367da23..000000000
Binary files a/Habitica/res/drawable-hdpi/custom_reward.webp and /dev/null differ
diff --git a/Habitica/res/drawable-hdpi/fab_add_purple.webp b/Habitica/res/drawable-hdpi/fab_add_purple.webp
deleted file mode 100644
index d64b19600..000000000
Binary files a/Habitica/res/drawable-hdpi/fab_add_purple.webp and /dev/null differ
diff --git a/Habitica/res/drawable-hdpi/ic_action_chat.webp b/Habitica/res/drawable-hdpi/ic_action_chat.webp
deleted file mode 100644
index 33b84bb65..000000000
Binary files a/Habitica/res/drawable-hdpi/ic_action_chat.webp and /dev/null differ
diff --git a/Habitica/res/drawable-hdpi/ic_action_delete_white_24.webp b/Habitica/res/drawable-hdpi/ic_action_delete_white_24.webp
deleted file mode 100644
index 967e21039..000000000
Binary files a/Habitica/res/drawable-hdpi/ic_action_delete_white_24.webp and /dev/null differ
diff --git a/Habitica/res/drawable-hdpi/ic_action_more_vert.webp b/Habitica/res/drawable-hdpi/ic_action_more_vert.webp
deleted file mode 100644
index 92c5c86ea..000000000
Binary files a/Habitica/res/drawable-hdpi/ic_action_more_vert.webp and /dev/null differ
diff --git a/Habitica/res/drawable-hdpi/ic_chat_black_24dp.webp b/Habitica/res/drawable-hdpi/ic_chat_black_24dp.webp
deleted file mode 100644
index ba15f19f1..000000000
Binary files a/Habitica/res/drawable-hdpi/ic_chat_black_24dp.webp and /dev/null differ
diff --git a/Habitica/res/drawable-hdpi/ic_check.webp b/Habitica/res/drawable-hdpi/ic_check.webp
deleted file mode 100644
index 348a58ae6..000000000
Binary files a/Habitica/res/drawable-hdpi/ic_check.webp and /dev/null differ
diff --git a/Habitica/res/drawable-hdpi/ic_check_purple_24dp.webp b/Habitica/res/drawable-hdpi/ic_check_purple_24dp.webp
deleted file mode 100644
index 4de874978..000000000
Binary files a/Habitica/res/drawable-hdpi/ic_check_purple_24dp.webp and /dev/null differ
diff --git a/Habitica/res/drawable-hdpi/ic_close_purple_300_24dp.webp b/Habitica/res/drawable-hdpi/ic_close_purple_300_24dp.webp
deleted file mode 100644
index 9e10ce538..000000000
Binary files a/Habitica/res/drawable-hdpi/ic_close_purple_300_24dp.webp and /dev/null differ
diff --git a/Habitica/res/drawable-hdpi/ic_content_copy_black_24dp.webp b/Habitica/res/drawable-hdpi/ic_content_copy_black_24dp.webp
deleted file mode 100644
index 9bf3b9500..000000000
Binary files a/Habitica/res/drawable-hdpi/ic_content_copy_black_24dp.webp and /dev/null differ
diff --git a/Habitica/res/drawable-hdpi/ic_emoticon_grey600_24dp.webp b/Habitica/res/drawable-hdpi/ic_emoticon_grey600_24dp.webp
deleted file mode 100644
index cb0265356..000000000
Binary files a/Habitica/res/drawable-hdpi/ic_emoticon_grey600_24dp.webp and /dev/null differ
diff --git a/Habitica/res/drawable-hdpi/ic_flag_black_24dp.webp b/Habitica/res/drawable-hdpi/ic_flag_black_24dp.webp
deleted file mode 100644
index 2f04162af..000000000
Binary files a/Habitica/res/drawable-hdpi/ic_flag_black_24dp.webp and /dev/null differ
diff --git a/Habitica/res/drawable-hdpi/ic_info_outline_black_24dp.webp b/Habitica/res/drawable-hdpi/ic_info_outline_black_24dp.webp
deleted file mode 100644
index c351ccad1..000000000
Binary files a/Habitica/res/drawable-hdpi/ic_info_outline_black_24dp.webp and /dev/null differ
diff --git a/Habitica/res/drawable-hdpi/ic_keyboard_grey600_24dp.webp b/Habitica/res/drawable-hdpi/ic_keyboard_grey600_24dp.webp
deleted file mode 100644
index 2c784e9a2..000000000
Binary files a/Habitica/res/drawable-hdpi/ic_keyboard_grey600_24dp.webp and /dev/null differ
diff --git a/Habitica/res/drawable-hdpi/ic_launch_black_24dp.webp b/Habitica/res/drawable-hdpi/ic_launch_black_24dp.webp
deleted file mode 100644
index e3f879393..000000000
Binary files a/Habitica/res/drawable-hdpi/ic_launch_black_24dp.webp and /dev/null differ
diff --git a/Habitica/res/drawable-hdpi/ic_menu_refresh.webp b/Habitica/res/drawable-hdpi/ic_menu_refresh.webp
deleted file mode 100644
index 74071d607..000000000
Binary files a/Habitica/res/drawable-hdpi/ic_menu_refresh.webp and /dev/null differ
diff --git a/Habitica/res/drawable-hdpi/icon_custom_reward.webp b/Habitica/res/drawable-hdpi/icon_custom_reward.webp
deleted file mode 100644
index 12f4e3aed..000000000
Binary files a/Habitica/res/drawable-hdpi/icon_custom_reward.webp and /dev/null differ
diff --git a/Habitica/res/drawable-hdpi/leave_light.webp b/Habitica/res/drawable-hdpi/leave_light.webp
deleted file mode 100644
index a3a8bf52a..000000000
Binary files a/Habitica/res/drawable-hdpi/leave_light.webp and /dev/null differ
diff --git a/Habitica/res/drawable-hdpi/npc_justin_only.webp b/Habitica/res/drawable-hdpi/npc_justin_only.webp
deleted file mode 100644
index ad02a7802..000000000
Binary files a/Habitica/res/drawable-hdpi/npc_justin_only.webp and /dev/null differ
diff --git a/Habitica/res/drawable-hdpi/participants_light.webp b/Habitica/res/drawable-hdpi/participants_light.webp
deleted file mode 100644
index 512d60865..000000000
Binary files a/Habitica/res/drawable-hdpi/participants_light.webp and /dev/null differ
diff --git a/Habitica/res/drawable-hdpi/pet_status_egg.png b/Habitica/res/drawable-hdpi/pet_status_egg.png
deleted file mode 100644
index 5dd39f87d..000000000
Binary files a/Habitica/res/drawable-hdpi/pet_status_egg.png and /dev/null differ
diff --git a/Habitica/res/drawable-hdpi/pet_status_potion.png b/Habitica/res/drawable-hdpi/pet_status_potion.png
deleted file mode 100644
index dc63d40c8..000000000
Binary files a/Habitica/res/drawable-hdpi/pet_status_potion.png and /dev/null differ
diff --git a/Habitica/res/drawable-hdpi/presents1.webp b/Habitica/res/drawable-hdpi/presents1.webp
deleted file mode 100644
index bfcd09963..000000000
Binary files a/Habitica/res/drawable-hdpi/presents1.webp and /dev/null differ
diff --git a/Habitica/res/drawable-hdpi/presents2.webp b/Habitica/res/drawable-hdpi/presents2.webp
deleted file mode 100644
index e0190737e..000000000
Binary files a/Habitica/res/drawable-hdpi/presents2.webp and /dev/null differ
diff --git a/Habitica/res/drawable-hdpi/speech_bubble.9.png b/Habitica/res/drawable-hdpi/speech_bubble.9.png
deleted file mode 100755
index 7a2349f85..000000000
Binary files a/Habitica/res/drawable-hdpi/speech_bubble.9.png and /dev/null differ
diff --git a/Habitica/res/drawable-hdpi/support_habitica.webp b/Habitica/res/drawable-hdpi/support_habitica.webp
deleted file mode 100644
index 425091eb8..000000000
Binary files a/Habitica/res/drawable-hdpi/support_habitica.webp and /dev/null differ
diff --git a/Habitica/res/drawable-hdpi/task_icon_tag.png b/Habitica/res/drawable-hdpi/task_icon_tag.png
deleted file mode 100644
index 16e8ced1a..000000000
Binary files a/Habitica/res/drawable-hdpi/task_icon_tag.png and /dev/null differ
diff --git a/Habitica/res/drawable-hdpi/welcome_diamond_background.webp b/Habitica/res/drawable-hdpi/welcome_diamond_background.webp
deleted file mode 100644
index 751dd5cc0..000000000
Binary files a/Habitica/res/drawable-hdpi/welcome_diamond_background.webp and /dev/null differ
diff --git a/Habitica/res/drawable-mdpi/currency_gem.webp b/Habitica/res/drawable-mdpi/currency_gem.webp
deleted file mode 100644
index 8d204385a..000000000
Binary files a/Habitica/res/drawable-mdpi/currency_gem.webp and /dev/null differ
diff --git a/Habitica/res/drawable-mdpi/custom_reward.webp b/Habitica/res/drawable-mdpi/custom_reward.webp
deleted file mode 100644
index 0572d415a..000000000
Binary files a/Habitica/res/drawable-mdpi/custom_reward.webp and /dev/null differ
diff --git a/Habitica/res/drawable-mdpi/fab_add_purple.webp b/Habitica/res/drawable-mdpi/fab_add_purple.webp
deleted file mode 100644
index 0931dd37a..000000000
Binary files a/Habitica/res/drawable-mdpi/fab_add_purple.webp and /dev/null differ
diff --git a/Habitica/res/drawable-mdpi/ic_action_chat.webp b/Habitica/res/drawable-mdpi/ic_action_chat.webp
deleted file mode 100644
index f13714c5b..000000000
Binary files a/Habitica/res/drawable-mdpi/ic_action_chat.webp and /dev/null differ
diff --git a/Habitica/res/drawable-mdpi/ic_action_delete_white_24.webp b/Habitica/res/drawable-mdpi/ic_action_delete_white_24.webp
deleted file mode 100644
index 6e929a649..000000000
Binary files a/Habitica/res/drawable-mdpi/ic_action_delete_white_24.webp and /dev/null differ
diff --git a/Habitica/res/drawable-mdpi/ic_action_more_vert.webp b/Habitica/res/drawable-mdpi/ic_action_more_vert.webp
deleted file mode 100644
index 5c9b264b9..000000000
Binary files a/Habitica/res/drawable-mdpi/ic_action_more_vert.webp and /dev/null differ
diff --git a/Habitica/res/drawable-mdpi/ic_chat_black_24dp.webp b/Habitica/res/drawable-mdpi/ic_chat_black_24dp.webp
deleted file mode 100644
index ea832c5af..000000000
Binary files a/Habitica/res/drawable-mdpi/ic_chat_black_24dp.webp and /dev/null differ
diff --git a/Habitica/res/drawable-mdpi/ic_check.webp b/Habitica/res/drawable-mdpi/ic_check.webp
deleted file mode 100644
index 7e4349374..000000000
Binary files a/Habitica/res/drawable-mdpi/ic_check.webp and /dev/null differ
diff --git a/Habitica/res/drawable-mdpi/ic_check_purple_24dp.webp b/Habitica/res/drawable-mdpi/ic_check_purple_24dp.webp
deleted file mode 100644
index 6970af282..000000000
Binary files a/Habitica/res/drawable-mdpi/ic_check_purple_24dp.webp and /dev/null differ
diff --git a/Habitica/res/drawable-mdpi/ic_close_purple_300_24dp.webp b/Habitica/res/drawable-mdpi/ic_close_purple_300_24dp.webp
deleted file mode 100644
index 36e01d094..000000000
Binary files a/Habitica/res/drawable-mdpi/ic_close_purple_300_24dp.webp and /dev/null differ
diff --git a/Habitica/res/drawable-mdpi/ic_content_copy_black_24dp.webp b/Habitica/res/drawable-mdpi/ic_content_copy_black_24dp.webp
deleted file mode 100644
index 9a5618740..000000000
Binary files a/Habitica/res/drawable-mdpi/ic_content_copy_black_24dp.webp and /dev/null differ
diff --git a/Habitica/res/drawable-mdpi/ic_emoticon_grey600_24dp.webp b/Habitica/res/drawable-mdpi/ic_emoticon_grey600_24dp.webp
deleted file mode 100644
index 8bf4576fd..000000000
Binary files a/Habitica/res/drawable-mdpi/ic_emoticon_grey600_24dp.webp and /dev/null differ
diff --git a/Habitica/res/drawable-mdpi/ic_flag_black_24dp.webp b/Habitica/res/drawable-mdpi/ic_flag_black_24dp.webp
deleted file mode 100644
index 8a619d8ff..000000000
Binary files a/Habitica/res/drawable-mdpi/ic_flag_black_24dp.webp and /dev/null differ
diff --git a/Habitica/res/drawable-mdpi/ic_gryphon.webp b/Habitica/res/drawable-mdpi/ic_gryphon.webp
deleted file mode 100644
index 8ce44af99..000000000
Binary files a/Habitica/res/drawable-mdpi/ic_gryphon.webp and /dev/null differ
diff --git a/Habitica/res/drawable-mdpi/ic_habitica.webp b/Habitica/res/drawable-mdpi/ic_habitica.webp
deleted file mode 100644
index c49b7d650..000000000
Binary files a/Habitica/res/drawable-mdpi/ic_habitica.webp and /dev/null differ
diff --git a/Habitica/res/drawable-mdpi/ic_info_outline_black_24dp.webp b/Habitica/res/drawable-mdpi/ic_info_outline_black_24dp.webp
deleted file mode 100644
index 0d45e16ee..000000000
Binary files a/Habitica/res/drawable-mdpi/ic_info_outline_black_24dp.webp and /dev/null differ
diff --git a/Habitica/res/drawable-mdpi/ic_keyboard_grey600_24dp.webp b/Habitica/res/drawable-mdpi/ic_keyboard_grey600_24dp.webp
deleted file mode 100644
index 7b310dff3..000000000
Binary files a/Habitica/res/drawable-mdpi/ic_keyboard_grey600_24dp.webp and /dev/null differ
diff --git a/Habitica/res/drawable-mdpi/ic_launch_black_24dp.webp b/Habitica/res/drawable-mdpi/ic_launch_black_24dp.webp
deleted file mode 100644
index 3d55370e1..000000000
Binary files a/Habitica/res/drawable-mdpi/ic_launch_black_24dp.webp and /dev/null differ
diff --git a/Habitica/res/drawable-mdpi/ic_menu_refresh.webp b/Habitica/res/drawable-mdpi/ic_menu_refresh.webp
deleted file mode 100644
index c355474e1..000000000
Binary files a/Habitica/res/drawable-mdpi/ic_menu_refresh.webp and /dev/null differ
diff --git a/Habitica/res/drawable-mdpi/icon_custom_reward.webp b/Habitica/res/drawable-mdpi/icon_custom_reward.webp
deleted file mode 100644
index 8cf23c98b..000000000
Binary files a/Habitica/res/drawable-mdpi/icon_custom_reward.webp and /dev/null differ
diff --git a/Habitica/res/drawable-mdpi/leave_light.webp b/Habitica/res/drawable-mdpi/leave_light.webp
deleted file mode 100644
index 910b8d916..000000000
Binary files a/Habitica/res/drawable-mdpi/leave_light.webp and /dev/null differ
diff --git a/Habitica/res/drawable-mdpi/npc_justin_only.png b/Habitica/res/drawable-mdpi/npc_justin_only.png
deleted file mode 100644
index 001f39898..000000000
Binary files a/Habitica/res/drawable-mdpi/npc_justin_only.png and /dev/null differ
diff --git a/Habitica/res/drawable-mdpi/participants_light.webp b/Habitica/res/drawable-mdpi/participants_light.webp
deleted file mode 100644
index ba793b54d..000000000
Binary files a/Habitica/res/drawable-mdpi/participants_light.webp and /dev/null differ
diff --git a/Habitica/res/drawable-mdpi/pet_status_egg.png b/Habitica/res/drawable-mdpi/pet_status_egg.png
deleted file mode 100644
index cc358b246..000000000
Binary files a/Habitica/res/drawable-mdpi/pet_status_egg.png and /dev/null differ
diff --git a/Habitica/res/drawable-mdpi/pet_status_potion.png b/Habitica/res/drawable-mdpi/pet_status_potion.png
deleted file mode 100644
index 34a1c5c92..000000000
Binary files a/Habitica/res/drawable-mdpi/pet_status_potion.png and /dev/null differ
diff --git a/Habitica/res/drawable-mdpi/presents1.webp b/Habitica/res/drawable-mdpi/presents1.webp
deleted file mode 100644
index 05ff45bd9..000000000
Binary files a/Habitica/res/drawable-mdpi/presents1.webp and /dev/null differ
diff --git a/Habitica/res/drawable-mdpi/presents2.webp b/Habitica/res/drawable-mdpi/presents2.webp
deleted file mode 100644
index 6ee21edbc..000000000
Binary files a/Habitica/res/drawable-mdpi/presents2.webp and /dev/null differ
diff --git a/Habitica/res/drawable-mdpi/sidebar_background.webp b/Habitica/res/drawable-mdpi/sidebar_background.webp
deleted file mode 100644
index 77770541f..000000000
Binary files a/Habitica/res/drawable-mdpi/sidebar_background.webp and /dev/null differ
diff --git a/Habitica/res/drawable-mdpi/speech_bubble.9.png b/Habitica/res/drawable-mdpi/speech_bubble.9.png
deleted file mode 100755
index 64eee50ae..000000000
Binary files a/Habitica/res/drawable-mdpi/speech_bubble.9.png and /dev/null differ
diff --git a/Habitica/res/drawable-mdpi/support_habitica.webp b/Habitica/res/drawable-mdpi/support_habitica.webp
deleted file mode 100644
index a943d69c3..000000000
Binary files a/Habitica/res/drawable-mdpi/support_habitica.webp and /dev/null differ
diff --git a/Habitica/res/drawable-mdpi/task_icon_tag.png b/Habitica/res/drawable-mdpi/task_icon_tag.png
deleted file mode 100644
index 880bfeb2c..000000000
Binary files a/Habitica/res/drawable-mdpi/task_icon_tag.png and /dev/null differ
diff --git a/Habitica/res/drawable-mdpi/welcome_diamond_background.webp b/Habitica/res/drawable-mdpi/welcome_diamond_background.webp
deleted file mode 100644
index 32c98225d..000000000
Binary files a/Habitica/res/drawable-mdpi/welcome_diamond_background.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xhdpi/currency_gem.webp b/Habitica/res/drawable-xhdpi/currency_gem.webp
deleted file mode 100644
index 577a314d7..000000000
Binary files a/Habitica/res/drawable-xhdpi/currency_gem.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xhdpi/custom_reward.webp b/Habitica/res/drawable-xhdpi/custom_reward.webp
deleted file mode 100644
index f38a5b0be..000000000
Binary files a/Habitica/res/drawable-xhdpi/custom_reward.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xhdpi/fab_add_purple.webp b/Habitica/res/drawable-xhdpi/fab_add_purple.webp
deleted file mode 100644
index e36654767..000000000
Binary files a/Habitica/res/drawable-xhdpi/fab_add_purple.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xhdpi/ic_action_chat.webp b/Habitica/res/drawable-xhdpi/ic_action_chat.webp
deleted file mode 100644
index a9fa6a9a6..000000000
Binary files a/Habitica/res/drawable-xhdpi/ic_action_chat.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xhdpi/ic_action_delete_white_24.webp b/Habitica/res/drawable-xhdpi/ic_action_delete_white_24.webp
deleted file mode 100644
index 88179c7bc..000000000
Binary files a/Habitica/res/drawable-xhdpi/ic_action_delete_white_24.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xhdpi/ic_action_more_vert.webp b/Habitica/res/drawable-xhdpi/ic_action_more_vert.webp
deleted file mode 100644
index 70fd852dd..000000000
Binary files a/Habitica/res/drawable-xhdpi/ic_action_more_vert.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xhdpi/ic_chat_black_24dp.webp b/Habitica/res/drawable-xhdpi/ic_chat_black_24dp.webp
deleted file mode 100644
index 3e0724919..000000000
Binary files a/Habitica/res/drawable-xhdpi/ic_chat_black_24dp.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xhdpi/ic_check.webp b/Habitica/res/drawable-xhdpi/ic_check.webp
deleted file mode 100644
index d35e3d641..000000000
Binary files a/Habitica/res/drawable-xhdpi/ic_check.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xhdpi/ic_check_purple_24dp.webp b/Habitica/res/drawable-xhdpi/ic_check_purple_24dp.webp
deleted file mode 100644
index b4b4379a6..000000000
Binary files a/Habitica/res/drawable-xhdpi/ic_check_purple_24dp.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xhdpi/ic_close_purple_300_24dp.webp b/Habitica/res/drawable-xhdpi/ic_close_purple_300_24dp.webp
deleted file mode 100644
index 3c791a465..000000000
Binary files a/Habitica/res/drawable-xhdpi/ic_close_purple_300_24dp.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xhdpi/ic_content_copy_black_24dp.webp b/Habitica/res/drawable-xhdpi/ic_content_copy_black_24dp.webp
deleted file mode 100644
index 66bf5f428..000000000
Binary files a/Habitica/res/drawable-xhdpi/ic_content_copy_black_24dp.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xhdpi/ic_emoticon_grey600_24dp.webp b/Habitica/res/drawable-xhdpi/ic_emoticon_grey600_24dp.webp
deleted file mode 100644
index dcefdf14c..000000000
Binary files a/Habitica/res/drawable-xhdpi/ic_emoticon_grey600_24dp.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xhdpi/ic_flag_black_24dp.webp b/Habitica/res/drawable-xhdpi/ic_flag_black_24dp.webp
deleted file mode 100644
index 3d5a573ba..000000000
Binary files a/Habitica/res/drawable-xhdpi/ic_flag_black_24dp.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xhdpi/ic_gryphon.webp b/Habitica/res/drawable-xhdpi/ic_gryphon.webp
deleted file mode 100644
index 1c66f1f4e..000000000
Binary files a/Habitica/res/drawable-xhdpi/ic_gryphon.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xhdpi/ic_habitica.webp b/Habitica/res/drawable-xhdpi/ic_habitica.webp
deleted file mode 100644
index 414b4a852..000000000
Binary files a/Habitica/res/drawable-xhdpi/ic_habitica.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xhdpi/ic_info_outline_black_24dp.webp b/Habitica/res/drawable-xhdpi/ic_info_outline_black_24dp.webp
deleted file mode 100644
index 261ba15ef..000000000
Binary files a/Habitica/res/drawable-xhdpi/ic_info_outline_black_24dp.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xhdpi/ic_keyboard_grey600_24dp.webp b/Habitica/res/drawable-xhdpi/ic_keyboard_grey600_24dp.webp
deleted file mode 100644
index 9ac031595..000000000
Binary files a/Habitica/res/drawable-xhdpi/ic_keyboard_grey600_24dp.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xhdpi/ic_launch_black_24dp.webp b/Habitica/res/drawable-xhdpi/ic_launch_black_24dp.webp
deleted file mode 100644
index 001c664b1..000000000
Binary files a/Habitica/res/drawable-xhdpi/ic_launch_black_24dp.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xhdpi/ic_menu_refresh.webp b/Habitica/res/drawable-xhdpi/ic_menu_refresh.webp
deleted file mode 100644
index 81b2f25f5..000000000
Binary files a/Habitica/res/drawable-xhdpi/ic_menu_refresh.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xhdpi/icon_custom_reward.webp b/Habitica/res/drawable-xhdpi/icon_custom_reward.webp
deleted file mode 100644
index 770bde65e..000000000
Binary files a/Habitica/res/drawable-xhdpi/icon_custom_reward.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xhdpi/leave_light.webp b/Habitica/res/drawable-xhdpi/leave_light.webp
deleted file mode 100644
index 3c9cb8d1d..000000000
Binary files a/Habitica/res/drawable-xhdpi/leave_light.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xhdpi/npc_justin_only.webp b/Habitica/res/drawable-xhdpi/npc_justin_only.webp
deleted file mode 100644
index bcd47ce5c..000000000
Binary files a/Habitica/res/drawable-xhdpi/npc_justin_only.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xhdpi/participants_light.webp b/Habitica/res/drawable-xhdpi/participants_light.webp
deleted file mode 100644
index 4abb8a624..000000000
Binary files a/Habitica/res/drawable-xhdpi/participants_light.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xhdpi/pet_status_egg.png b/Habitica/res/drawable-xhdpi/pet_status_egg.png
deleted file mode 100644
index de8b3fdc2..000000000
Binary files a/Habitica/res/drawable-xhdpi/pet_status_egg.png and /dev/null differ
diff --git a/Habitica/res/drawable-xhdpi/pet_status_potion.png b/Habitica/res/drawable-xhdpi/pet_status_potion.png
deleted file mode 100644
index 3a2ebe35e..000000000
Binary files a/Habitica/res/drawable-xhdpi/pet_status_potion.png and /dev/null differ
diff --git a/Habitica/res/drawable-xhdpi/presents1.webp b/Habitica/res/drawable-xhdpi/presents1.webp
deleted file mode 100644
index 547541544..000000000
Binary files a/Habitica/res/drawable-xhdpi/presents1.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xhdpi/presents2.webp b/Habitica/res/drawable-xhdpi/presents2.webp
deleted file mode 100644
index e7d87f7f8..000000000
Binary files a/Habitica/res/drawable-xhdpi/presents2.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xhdpi/speech_bubble.9.png b/Habitica/res/drawable-xhdpi/speech_bubble.9.png
deleted file mode 100755
index 04f81bfa7..000000000
Binary files a/Habitica/res/drawable-xhdpi/speech_bubble.9.png and /dev/null differ
diff --git a/Habitica/res/drawable-xhdpi/support_habitica.webp b/Habitica/res/drawable-xhdpi/support_habitica.webp
deleted file mode 100644
index 3062f4195..000000000
Binary files a/Habitica/res/drawable-xhdpi/support_habitica.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xhdpi/task_icon_tag.png b/Habitica/res/drawable-xhdpi/task_icon_tag.png
deleted file mode 100644
index 28adc1085..000000000
Binary files a/Habitica/res/drawable-xhdpi/task_icon_tag.png and /dev/null differ
diff --git a/Habitica/res/drawable-xhdpi/welcome_diamond_background.webp b/Habitica/res/drawable-xhdpi/welcome_diamond_background.webp
deleted file mode 100644
index 642afe001..000000000
Binary files a/Habitica/res/drawable-xhdpi/welcome_diamond_background.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xxhdpi/currency_gem.webp b/Habitica/res/drawable-xxhdpi/currency_gem.webp
deleted file mode 100644
index 097bea2ac..000000000
Binary files a/Habitica/res/drawable-xxhdpi/currency_gem.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xxhdpi/custom_reward.webp b/Habitica/res/drawable-xxhdpi/custom_reward.webp
deleted file mode 100644
index e717832fb..000000000
Binary files a/Habitica/res/drawable-xxhdpi/custom_reward.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xxhdpi/fab_add_purple.webp b/Habitica/res/drawable-xxhdpi/fab_add_purple.webp
deleted file mode 100644
index 6980d0566..000000000
Binary files a/Habitica/res/drawable-xxhdpi/fab_add_purple.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xxhdpi/ic_action_chat.webp b/Habitica/res/drawable-xxhdpi/ic_action_chat.webp
deleted file mode 100644
index 014001816..000000000
Binary files a/Habitica/res/drawable-xxhdpi/ic_action_chat.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xxhdpi/ic_action_delete_white_24.webp b/Habitica/res/drawable-xxhdpi/ic_action_delete_white_24.webp
deleted file mode 100644
index 546b59dec..000000000
Binary files a/Habitica/res/drawable-xxhdpi/ic_action_delete_white_24.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xxhdpi/ic_action_more_vert.webp b/Habitica/res/drawable-xxhdpi/ic_action_more_vert.webp
deleted file mode 100644
index 9b0568512..000000000
Binary files a/Habitica/res/drawable-xxhdpi/ic_action_more_vert.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xxhdpi/ic_chat_black_24dp.webp b/Habitica/res/drawable-xxhdpi/ic_chat_black_24dp.webp
deleted file mode 100644
index 69c6072d9..000000000
Binary files a/Habitica/res/drawable-xxhdpi/ic_chat_black_24dp.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xxhdpi/ic_check.webp b/Habitica/res/drawable-xxhdpi/ic_check.webp
deleted file mode 100644
index 5af7e6ad5..000000000
Binary files a/Habitica/res/drawable-xxhdpi/ic_check.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xxhdpi/ic_check_purple_24dp.webp b/Habitica/res/drawable-xxhdpi/ic_check_purple_24dp.webp
deleted file mode 100644
index 026a007a3..000000000
Binary files a/Habitica/res/drawable-xxhdpi/ic_check_purple_24dp.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xxhdpi/ic_close_purple_300_24dp.webp b/Habitica/res/drawable-xxhdpi/ic_close_purple_300_24dp.webp
deleted file mode 100644
index 6c7282000..000000000
Binary files a/Habitica/res/drawable-xxhdpi/ic_close_purple_300_24dp.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xxhdpi/ic_content_copy_black_24dp.webp b/Habitica/res/drawable-xxhdpi/ic_content_copy_black_24dp.webp
deleted file mode 100644
index 78ff789f2..000000000
Binary files a/Habitica/res/drawable-xxhdpi/ic_content_copy_black_24dp.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xxhdpi/ic_emoticon_grey600_24dp.webp b/Habitica/res/drawable-xxhdpi/ic_emoticon_grey600_24dp.webp
deleted file mode 100644
index 13832f0f1..000000000
Binary files a/Habitica/res/drawable-xxhdpi/ic_emoticon_grey600_24dp.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xxhdpi/ic_flag_black_24dp.webp b/Habitica/res/drawable-xxhdpi/ic_flag_black_24dp.webp
deleted file mode 100644
index bcb5060b1..000000000
Binary files a/Habitica/res/drawable-xxhdpi/ic_flag_black_24dp.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xxhdpi/ic_gryphon.webp b/Habitica/res/drawable-xxhdpi/ic_gryphon.webp
deleted file mode 100644
index 150907f75..000000000
Binary files a/Habitica/res/drawable-xxhdpi/ic_gryphon.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xxhdpi/ic_habitica.webp b/Habitica/res/drawable-xxhdpi/ic_habitica.webp
deleted file mode 100644
index e21223ba5..000000000
Binary files a/Habitica/res/drawable-xxhdpi/ic_habitica.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xxhdpi/ic_info_outline_black_24dp.webp b/Habitica/res/drawable-xxhdpi/ic_info_outline_black_24dp.webp
deleted file mode 100644
index 06cc783e4..000000000
Binary files a/Habitica/res/drawable-xxhdpi/ic_info_outline_black_24dp.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xxhdpi/ic_keyboard_grey600_24dp.webp b/Habitica/res/drawable-xxhdpi/ic_keyboard_grey600_24dp.webp
deleted file mode 100644
index a454f9a9b..000000000
Binary files a/Habitica/res/drawable-xxhdpi/ic_keyboard_grey600_24dp.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xxhdpi/ic_launch_black_24dp.webp b/Habitica/res/drawable-xxhdpi/ic_launch_black_24dp.webp
deleted file mode 100644
index d4d76852a..000000000
Binary files a/Habitica/res/drawable-xxhdpi/ic_launch_black_24dp.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xxhdpi/icon_custom_reward.webp b/Habitica/res/drawable-xxhdpi/icon_custom_reward.webp
deleted file mode 100644
index dcbb29c32..000000000
Binary files a/Habitica/res/drawable-xxhdpi/icon_custom_reward.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xxhdpi/leave_light.webp b/Habitica/res/drawable-xxhdpi/leave_light.webp
deleted file mode 100644
index 118bc6405..000000000
Binary files a/Habitica/res/drawable-xxhdpi/leave_light.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xxhdpi/npc_justin_only.webp b/Habitica/res/drawable-xxhdpi/npc_justin_only.webp
deleted file mode 100644
index 954b66896..000000000
Binary files a/Habitica/res/drawable-xxhdpi/npc_justin_only.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xxhdpi/participants_light.webp b/Habitica/res/drawable-xxhdpi/participants_light.webp
deleted file mode 100644
index 586b5a4e6..000000000
Binary files a/Habitica/res/drawable-xxhdpi/participants_light.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xxhdpi/pet_status_egg.png b/Habitica/res/drawable-xxhdpi/pet_status_egg.png
deleted file mode 100644
index b4f145ea0..000000000
Binary files a/Habitica/res/drawable-xxhdpi/pet_status_egg.png and /dev/null differ
diff --git a/Habitica/res/drawable-xxhdpi/pet_status_potion.png b/Habitica/res/drawable-xxhdpi/pet_status_potion.png
deleted file mode 100644
index 5edb9dab0..000000000
Binary files a/Habitica/res/drawable-xxhdpi/pet_status_potion.png and /dev/null differ
diff --git a/Habitica/res/drawable-xxhdpi/presents1.webp b/Habitica/res/drawable-xxhdpi/presents1.webp
deleted file mode 100644
index 1c7fe9c92..000000000
Binary files a/Habitica/res/drawable-xxhdpi/presents1.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xxhdpi/presents2.webp b/Habitica/res/drawable-xxhdpi/presents2.webp
deleted file mode 100644
index 395d996df..000000000
Binary files a/Habitica/res/drawable-xxhdpi/presents2.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xxhdpi/speech_bubble.9.png b/Habitica/res/drawable-xxhdpi/speech_bubble.9.png
deleted file mode 100755
index 77efa54a2..000000000
Binary files a/Habitica/res/drawable-xxhdpi/speech_bubble.9.png and /dev/null differ
diff --git a/Habitica/res/drawable-xxhdpi/support_habitica.webp b/Habitica/res/drawable-xxhdpi/support_habitica.webp
deleted file mode 100644
index eeecb4ac8..000000000
Binary files a/Habitica/res/drawable-xxhdpi/support_habitica.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xxhdpi/task_icon_tag.png b/Habitica/res/drawable-xxhdpi/task_icon_tag.png
deleted file mode 100644
index 0419931d7..000000000
Binary files a/Habitica/res/drawable-xxhdpi/task_icon_tag.png and /dev/null differ
diff --git a/Habitica/res/drawable-xxhdpi/welcome_diamond_background.webp b/Habitica/res/drawable-xxhdpi/welcome_diamond_background.webp
deleted file mode 100644
index 4dad1b0cc..000000000
Binary files a/Habitica/res/drawable-xxhdpi/welcome_diamond_background.webp and /dev/null differ
diff --git a/Habitica/res/drawable-xxxhdpi/ic_check_purple_24dp.webp b/Habitica/res/drawable-xxxhdpi/ic_check_purple_24dp.webp
deleted file mode 100644
index e1a98dce0..000000000
Binary files a/Habitica/res/drawable-xxxhdpi/ic_check_purple_24dp.webp and /dev/null differ
diff --git a/Habitica/res/drawable/divider.xml b/Habitica/res/drawable/divider.xml
deleted file mode 100644
index 822780bc5..000000000
--- a/Habitica/res/drawable/divider.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/Habitica/res/drawable/edittext.xml b/Habitica/res/drawable/edittext.xml
deleted file mode 100644
index c6d6d5cff..000000000
--- a/Habitica/res/drawable/edittext.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
- -
-
-
-
-
-
-
- -
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Habitica/res/drawable/emoticon.xml b/Habitica/res/drawable/emoticon.xml
deleted file mode 100644
index 99f885520..000000000
--- a/Habitica/res/drawable/emoticon.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/Habitica/res/drawable/gem_circle_background.xml b/Habitica/res/drawable/gem_circle_background.xml
deleted file mode 100644
index 7d3268084..000000000
--- a/Habitica/res/drawable/gem_circle_background.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/Habitica/res/drawable/gem_value_circle_background.xml b/Habitica/res/drawable/gem_value_circle_background.xml
deleted file mode 100644
index e4109e01b..000000000
--- a/Habitica/res/drawable/gem_value_circle_background.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Habitica/res/drawable/keyboard.xml b/Habitica/res/drawable/keyboard.xml
deleted file mode 100644
index df6149a29..000000000
--- a/Habitica/res/drawable/keyboard.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/Habitica/res/drawable/md_transparent.xml b/Habitica/res/drawable/md_transparent.xml
deleted file mode 100644
index 399a46bf1..000000000
--- a/Habitica/res/drawable/md_transparent.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/Habitica/res/drawable/nav_icon_colors.xml b/Habitica/res/drawable/nav_icon_colors.xml
deleted file mode 100644
index cd141807d..000000000
--- a/Habitica/res/drawable/nav_icon_colors.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Habitica/res/drawable/nav_item_color_state.xml b/Habitica/res/drawable/nav_item_color_state.xml
deleted file mode 100644
index c9ab128ae..000000000
--- a/Habitica/res/drawable/nav_item_color_state.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/Habitica/res/drawable/npc_daniel.webp b/Habitica/res/drawable/npc_daniel.webp
deleted file mode 100644
index 9ada4ee55..000000000
Binary files a/Habitica/res/drawable/npc_daniel.webp and /dev/null differ
diff --git a/Habitica/res/drawable/progressbar_red.xml b/Habitica/res/drawable/progressbar_red.xml
deleted file mode 100644
index 2a756725a..000000000
--- a/Habitica/res/drawable/progressbar_red.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
diff --git a/Habitica/res/drawable/progressbar_yellow.xml b/Habitica/res/drawable/progressbar_yellow.xml
deleted file mode 100644
index f51304b31..000000000
--- a/Habitica/res/drawable/progressbar_yellow.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
diff --git a/Habitica/res/drawable/seeds_badge_store.webp b/Habitica/res/drawable/seeds_badge_store.webp
deleted file mode 100644
index 4745de6de..000000000
Binary files a/Habitica/res/drawable/seeds_badge_store.webp and /dev/null differ
diff --git a/Habitica/res/drawable/todo_checkbox.xml b/Habitica/res/drawable/todo_checkbox.xml
deleted file mode 100644
index c00dbb67b..000000000
--- a/Habitica/res/drawable/todo_checkbox.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Habitica/res/drawable/white_rounded_bg.xml b/Habitica/res/drawable/white_rounded_bg.xml
deleted file mode 100644
index 6661d90cf..000000000
--- a/Habitica/res/drawable/white_rounded_bg.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/Habitica/res/drawable/white_rounded_border.xml b/Habitica/res/drawable/white_rounded_border.xml
deleted file mode 100644
index 4f58fc66d..000000000
--- a/Habitica/res/drawable/white_rounded_border.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
diff --git a/Habitica/res/drawable/widget_background.xml b/Habitica/res/drawable/widget_background.xml
deleted file mode 100644
index d20a9e9e3..000000000
--- a/Habitica/res/drawable/widget_background.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Habitica/res/layout/activity_maintenance.xml b/Habitica/res/layout/activity_maintenance.xml
index 4e8786645..e986615a3 100644
--- a/Habitica/res/layout/activity_maintenance.xml
+++ b/Habitica/res/layout/activity_maintenance.xml
@@ -19,7 +19,7 @@
android:layout_width="match_parent"
android:layout_height="180dp"
android:scaleType="centerInside"/>
-
diff --git a/Habitica/res/layout/activity_report_message.xml b/Habitica/res/layout/activity_report_message.xml
index e9d5f836c..a005a9039 100644
--- a/Habitica/res/layout/activity_report_message.xml
+++ b/Habitica/res/layout/activity_report_message.xml
@@ -4,75 +4,67 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools">
-
-
-
+ android:background="@color/content_background">
+
-
-
-
-
+
-
-
-
-
+ android:src="@drawable/ic_close_grey_800_24dp"
+ android:background="@color/transparent"
+ android:paddingEnd="@dimen/spacing_small"/>
+
+
+
-
-
+
+
-
-
-
+
+
\ No newline at end of file
diff --git a/Habitica/res/layout/autocomplete_emoji.xml b/Habitica/res/layout/autocomplete_emoji.xml
index 0eef15c18..9bdcf7c97 100644
--- a/Habitica/res/layout/autocomplete_emoji.xml
+++ b/Habitica/res/layout/autocomplete_emoji.xml
@@ -6,7 +6,7 @@
android:paddingBottom="@dimen/spacing_medium"
android:paddingStart="@dimen/spacing_large"
android:paddingEnd="@dimen/spacing_large">
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
\ No newline at end of file
+ android:layout_height="match_parent"/>
+
+
+
+
\ No newline at end of file
diff --git a/Habitica/res/layout/circular_progress.xml b/Habitica/res/layout/circular_progress.xml
new file mode 100644
index 000000000..84aa5df2f
--- /dev/null
+++ b/Habitica/res/layout/circular_progress.xml
@@ -0,0 +1,14 @@
+
+
+
+
\ No newline at end of file
diff --git a/Habitica/res/layout/customization_grid_background_item.xml b/Habitica/res/layout/customization_grid_background_item.xml
index 2dff4eb5f..058ae23f6 100644
--- a/Habitica/res/layout/customization_grid_background_item.xml
+++ b/Habitica/res/layout/customization_grid_background_item.xml
@@ -1,20 +1,13 @@
-
-
-
-
+ android:background="@drawable/layout_rounded_bg_window"
+ android:orientation="vertical"
+ android:layout_gravity="center">
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/Habitica/res/layout/customization_grid_item.xml b/Habitica/res/layout/customization_grid_item.xml
index 5d9ba5d57..f46ee6748 100644
--- a/Habitica/res/layout/customization_grid_item.xml
+++ b/Habitica/res/layout/customization_grid_item.xml
@@ -1,20 +1,13 @@
-
-
-
-
+ android:background="@drawable/layout_rounded_bg_window"
+ android:orientation="vertical"
+ android:layout_gravity="center">
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/Habitica/res/layout/dialog_task_filter.xml b/Habitica/res/layout/dialog_task_filter.xml
index 080d732a7..3a191934e 100644
--- a/Habitica/res/layout/dialog_task_filter.xml
+++ b/Habitica/res/layout/dialog_task_filter.xml
@@ -3,95 +3,90 @@
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
- android:layout_height="match_parent">
+ android:layout_height="match_parent"
+ android:layout_marginBottom="16dp">
+
+
+
+
+
+
+
+ android:orientation="horizontal"
+ android:paddingTop="8dp"
+ android:paddingBottom="8dp">
+
-
-
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+ android:layout_marginBottom="24dp"
+ android:orientation="vertical"
+ android:showDividers="middle"
+ android:divider="@color/transparent"
+ android:dividerPadding="8dp"/>
+
\ No newline at end of file
diff --git a/Habitica/res/layout/dialog_yesterdaily_task.xml b/Habitica/res/layout/dialog_yesterdaily_task.xml
index 68f7fc7ef..a8bdeca74 100644
--- a/Habitica/res/layout/dialog_yesterdaily_task.xml
+++ b/Habitica/res/layout/dialog_yesterdaily_task.xml
@@ -35,7 +35,7 @@
android:scaleType="center"
android:src="@drawable/checkmark" />
-
-
-
-
-
-
+ android:showDividers="middle"
+ android:background="@drawable/layout_rounded_bg_window">
-
-
+ android:showDividers="middle"
+ android:background="@drawable/layout_rounded_bg_window">
-
-
-
-
+ android:orientation="vertical"
+ android:background="@drawable/layout_rounded_bg_window">
-
diff --git a/Habitica/res/layout/fragment_challenge_detail.xml b/Habitica/res/layout/fragment_challenge_detail.xml
index 1bb240dbe..aaae42d2a 100644
--- a/Habitica/res/layout/fragment_challenge_detail.xml
+++ b/Habitica/res/layout/fragment_challenge_detail.xml
@@ -20,7 +20,7 @@
android:orientation="vertical"
android:paddingStart="16dp"
android:paddingEnd="16dp">
-
-
-
+
+
-
-
-
-
+ android:layout_weight="1"
+ style="@style/Subheader1"/>
\ No newline at end of file
diff --git a/Habitica/res/layout/preference_child_summary_error.xml b/Habitica/res/layout/preference_child_summary_error.xml
index ded60fe4e..1fb6acc58 100644
--- a/Habitica/res/layout/preference_child_summary_error.xml
+++ b/Habitica/res/layout/preference_child_summary_error.xml
@@ -40,10 +40,4 @@
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@color/red_10" />
-
\ No newline at end of file
diff --git a/Habitica/res/layout/progress_bar.xml b/Habitica/res/layout/progress_bar.xml
index 1caf7118a..9708330f7 100644
--- a/Habitica/res/layout/progress_bar.xml
+++ b/Habitica/res/layout/progress_bar.xml
@@ -13,7 +13,7 @@
android:weightSum="1">
@@ -29,12 +29,12 @@
android:weightSum="1">
diff --git a/Habitica/res/layout/purchase_subscription_view.xml b/Habitica/res/layout/purchase_subscription_view.xml
index 6daa2009e..c0474f039 100644
--- a/Habitica/res/layout/purchase_subscription_view.xml
+++ b/Habitica/res/layout/purchase_subscription_view.xml
@@ -73,7 +73,7 @@
android:id="@+id/gemCapTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- tools:text="@string/subscribe1month.gemcap"
+ tools:text="@string/subscribe1month_gemcap"
style="@style/Pill"
android:textSize="12sp"
android:layout_marginTop="4dp"
diff --git a/Habitica/res/layout/quest_progress.xml b/Habitica/res/layout/quest_progress.xml
index b051afc45..57865a73d 100644
--- a/Habitica/res/layout/quest_progress.xml
+++ b/Habitica/res/layout/quest_progress.xml
@@ -90,7 +90,7 @@
android:id="@+id/pendingDamageTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:textSize="12dp"
+ android:textSize="12sp"
android:textColor="@color/red_100"/>
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/Habitica/res/layout/skill_task_item_card.xml b/Habitica/res/layout/skill_task_item_card.xml
index df5d2b96f..1334ee324 100644
--- a/Habitica/res/layout/skill_task_item_card.xml
+++ b/Habitica/res/layout/skill_task_item_card.xml
@@ -5,9 +5,6 @@
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="?attr/colorContentBackground">
-
@@ -20,13 +17,13 @@
android:paddingEnd="@dimen/spacing_large"
android:paddingBottom="20dp"
android:paddingTop="20dp">
-
-
-
-
+
-
+
-
+
-
-
-
-
-
-
-
+ tools:visibility="visible"
+ android:textColor="@color/white"/>
-
\ No newline at end of file
+
+
+
+
+
diff --git a/Habitica/res/layout/tavern_chat_intro_item.xml b/Habitica/res/layout/tavern_chat_intro_item.xml
index 9dd30971e..065d1aa2c 100644
--- a/Habitica/res/layout/tavern_chat_intro_item.xml
+++ b/Habitica/res/layout/tavern_chat_intro_item.xml
@@ -50,7 +50,7 @@
android:textAlignment="center"
android:textColor="@color/gray_300"
android:textSize="12sp"
- tools:text="@Username" />
+ tools:text="/@Username" />
- Ниво:
Класов бонус:
Разпределени:
- Лично съобщение
Постижения
-
diff --git a/Habitica/res/values-cs/strings.xml b/Habitica/res/values-cs/strings.xml
index 057605c66..8c95657e4 100755
--- a/Habitica/res/values-cs/strings.xml
+++ b/Habitica/res/values-cs/strings.xml
@@ -80,7 +80,7 @@
Sobota
Neděle
Nezoufejte!
- Ztratil jsi úroveň, zlato a kousek vybavení, ale můžeš je získat zpět když se budeš dost snažit! Hodně štěstí--Ať se ti daří.
+ Ztratil jsi úroveň, zlato a kousek vybavení, ale můžeš je získat zpět když se budeš dost snažit! Hodně štěstí—Ať se ti daří.
Došlo ti zdraví!
Doplnit zdraví & a zkusit to znovu
Filtr
diff --git a/Habitica/res/values-de/strings.profile.xml b/Habitica/res/values-de/strings.profile.xml
index 65cea12f0..cac7622c4 100644
--- a/Habitica/res/values-de/strings.profile.xml
+++ b/Habitica/res/values-de/strings.profile.xml
@@ -3,12 +3,11 @@
Haustiere & Reittiere
Gefundene Haustiere
Gezähmte Reittiere
- Lade Mitgliederdaten...
+ Lade Mitgliederdaten…
Nachricht an %s senden
Nachricht an %s gesendet
Level:
Klassen-Bonus:
Verteilt:
- Private Nachricht
Erfolge
\ No newline at end of file
diff --git a/Habitica/res/values-de/strings.xml b/Habitica/res/values-de/strings.xml
index e343d6f17..46262b4ed 100644
--- a/Habitica/res/values-de/strings.xml
+++ b/Habitica/res/values-de/strings.xml
@@ -504,7 +504,7 @@ Die Quest-Schriftrolle wird an den Quest-Besitzer zurückgegeben.
Du wirst mehr mystische Sanduhren benötigen um diesen Gegenstand zu kaufen!
Kaufe Sanduhren
Abonniere für Sanduhren
- Erhalte eine mystische Sanduhr alle drei Monate für ein aufeinanderfolgendes Abonnement, nutze diese dann, um Limitiertes freizuschalten: Gegenstände, Haustiere oder Reittiere aus der Vergangenheit... und aus der Zukunft!
+ Erhalte eine mystische Sanduhr alle drei Monate für ein aufeinanderfolgendes Abonnement, nutze diese dann, um Limitiertes freizuschalten: Gegenstände, Haustiere oder Reittiere aus der Vergangenheit… und aus der Zukunft!
Ich möchte ein Abo abschließen
Die Großen Galas werden an Sonnenwenden und Tag-Nacht-Gleichen veranstaltet, also komme zu dieser Zeit wieder, um eine lustige Auswahl von speziellen saisonalen Gegenständen zu finden!
Komm bald zurück!
@@ -602,7 +602,7 @@ Die Quest-Schriftrolle wird an den Quest-Besitzer zurückgegeben.
Ian der Questmeister
Jahreszeitenzauberin
Raserei-Angriff:
- Ihr Lieben, kümmert Euch nicht um das Monster -- dies ist immer noch ein sicherer Platz für eine kleine Pause zum Chatten.
+ Ihr Lieben, kümmert Euch nicht um das Monster — dies ist immer noch ein sicherer Platz für eine kleine Pause zum Chatten.
Melden
Antworten
Herausforderungspreis
@@ -1100,9 +1100,7 @@ Die Quest-Schriftrolle wird an den Quest-Besitzer zurückgegeben.
So funktioniert es
Zwischen 22. und 30. September kannst Du wie gewohnt ein Edelstein-Paket kaufen, Deinem Konto wird aber der Aktions-Betrag Edelsteine hinzugefügt. Mehr Edelsteine zum ausgeben, teilen oder aufsparen für spätere Neuerungen!
Der Edelstein-Sonderverkauf ist zurück! Das ist die letzte Chance, mehr Edelsteine als je zuvor zu bekommen, also füll\' Deine Lager solange Du noch kannst!
- Diese Aktion ist nur während dem zeitlich beschränkten Event gültig. Der Event beginnt am 29. Oktober um 8:00 AM EDT ( 12:00 UTC) und endet am 2. November um 8:00 PM EDT (00:00 UTC). Das Aktionsangebot ist nur verfügbar, wenn Du Edelsteine für Dich selbst kaufst.
Zwischen 29. Oktober und 2. November kannst Du wie gewohnt ein Edelstein-Paket kaufen, Deinem Konto wird aber der Aktions-Betrag Edelsteine hinzugefügt. Mehr Edelsteine zum ausgeben, teilen oder aufsparen für spätere Neuerungen!
Edelstein-Pakete anzeigen
Die Herbstgala ist in vollem Gange. Deshalb haben wir gedacht, dass dies der perfekte Zeitpunkt für den allerersten Edelstein-Sonderverkauf ist! Jetzt bekommst Du mit jedem Einkauf mehr Edelsteine als je zuvor.
- Diese Aktion ist nur während dem zeitlich beschränkten Event gültig. Der Event beginnt am 22. September um 8:00 AM EDT ( 12:00 UTC) und endet am 30. September um 8:00 PM EDT (00:00 UTC). Das Aktionsangebot ist nur verfügbar, wenn Du Edelsteine für Dich selbst kaufst.
\ No newline at end of file
diff --git a/Habitica/res/values-en-rGB/strings.profile.xml b/Habitica/res/values-en-rGB/strings.profile.xml
index 1ee1e270d..2f3ff3baa 100644
--- a/Habitica/res/values-en-rGB/strings.profile.xml
+++ b/Habitica/res/values-en-rGB/strings.profile.xml
@@ -3,13 +3,11 @@
Pets & Mounts
Pets Found
Mounts Tamed
- Loading member data...
+ Loading member data…
Send message to %s
Message sent to %s
Level:
Class-Bonus:
Allocated:
- Private Message
Achievements
-
diff --git a/Habitica/res/values-es/strings.profile.xml b/Habitica/res/values-es/strings.profile.xml
index 4add76f2b..06109f47b 100644
--- a/Habitica/res/values-es/strings.profile.xml
+++ b/Habitica/res/values-es/strings.profile.xml
@@ -3,13 +3,11 @@
Mascotas y monturas
Mascotas encontradas
Monturas domadas
- Cargando información de miembros...
+ Cargando información de miembros…
Enviar mensaje a %s
Mensaje enviado a %s
Nivel:
Bonus de clase:
Asignado:
- Mensaje privado
Logros
-
diff --git a/Habitica/res/values-es/strings.xml b/Habitica/res/values-es/strings.xml
index c74dc8afd..a84bd6ec3 100644
--- a/Habitica/res/values-es/strings.xml
+++ b/Habitica/res/values-es/strings.xml
@@ -502,7 +502,7 @@
¡Necesitarás más Relojes de Arena Místicos para comprar este objeto!
Conseguir Relojes de Arena
Suscribir para conseguir Relojes de Arena
- Consigue un Reloj de arena Místico por cada tres meses seguidos de suscripción. Podrás usarlo para desbloquear objetos exclusivos, mascotas o monturas del pasado... ¡y del futuro!
+ Consigue un Reloj de arena Místico por cada tres meses seguidos de suscripción. Podrás usarlo para desbloquear objetos exclusivos, mascotas o monturas del pasado… ¡y del futuro!
Quiero Suscribirme
Las Grandes Galas ocurren cerca de los solsticios y equinoccios, ¡así que vuelve de vez en cuando para encontrar una interesante variedad de artículos especiales de temporada!
¡Vuelve pronto!
diff --git a/Habitica/res/values-fr/strings.profile.xml b/Habitica/res/values-fr/strings.profile.xml
index 4b5934634..ff438d359 100644
--- a/Habitica/res/values-fr/strings.profile.xml
+++ b/Habitica/res/values-fr/strings.profile.xml
@@ -3,13 +3,12 @@
Familiers & montures
Familiers trouvés
Montures dressées
- Chargement des données de membre...
+ Chargement des données de membre…
Envoyer un message à %s
Message envoyé à %s
Niveau :
Bonus de classe :
Points alloués :
- Message privé
Succès
diff --git a/Habitica/res/values-fr/strings.xml b/Habitica/res/values-fr/strings.xml
index abae9a5a3..d6d3ecfb6 100644
--- a/Habitica/res/values-fr/strings.xml
+++ b/Habitica/res/values-fr/strings.xml
@@ -505,7 +505,7 @@
Vous n\'avez pas assez de sabliers mystiques pour acheter cet objet !
Obtenir des sabliers mystiques
S\'abonner pour obtenir des sabliers mystiques
- Obtenez un sablier mystique pour chaque série de trois mois d\'abonnement consécutifs, puis utilisez-les pour débloquer des objets, des familiers et des montures en édition limitée du passé... Ou du futur !
+ Obtenez un sablier mystique pour chaque série de trois mois d\'abonnement consécutifs, puis utilisez-les pour débloquer des objets, des familiers et des montures en édition limitée du passé… Ou du futur !
Je veux m\'abonner
Les grand galas ont lieu lors des solstices et des équinoxes, revenez ici à ces périodes pour obtenir des objets saisonniers amusants !
Revenez bientôt !
@@ -604,7 +604,7 @@
Ian le guide des quêtes
Sorcière saisonnière
Attaque de rage :
- Oh, ne faites pas attention au monstre ci-dessous -- c\'est toujours un endroit sûr pour discuter pendant vos pauses.
+ Oh, ne faites pas attention au monstre ci-dessous — c\'est toujours un endroit sûr pour discuter pendant vos pauses.
Signaler
Répondre
Récompense du défi
diff --git a/Habitica/res/values-hi/strings.profile.xml b/Habitica/res/values-hi/strings.profile.xml
index 60d729c1d..2203720ec 100644
--- a/Habitica/res/values-hi/strings.profile.xml
+++ b/Habitica/res/values-hi/strings.profile.xml
@@ -2,9 +2,8 @@
सवारी जो नामांकित हैं
उपलब्धियों
- निजी संदेश
आवंटित:
- सदस्य का डेटा प्राप्त करना...
+ सदस्य का डेटा प्राप्त करना…
वर्ग का बोनस:
स्तर:
%s के लिए संदेश भेजा
diff --git a/Habitica/res/values-hr-rHR/strings.profile.xml b/Habitica/res/values-hr-rHR/strings.profile.xml
index 573954131..7e2988177 100644
--- a/Habitica/res/values-hr-rHR/strings.profile.xml
+++ b/Habitica/res/values-hr-rHR/strings.profile.xml
@@ -3,7 +3,7 @@
Ljubimci & Jahače životinje
Ljubimaca pronađeno
jahačih životinja pripitomljeno
- Učitavanje podataka o članu...
+ Učitavanje podataka o članu…
Pošalji poruku %s
Poruka poslana %s
Level:
diff --git a/Habitica/res/values-hr-rHR/strings.xml b/Habitica/res/values-hr-rHR/strings.xml
index 818bc68f5..fbf280979 100644
--- a/Habitica/res/values-hr-rHR/strings.xml
+++ b/Habitica/res/values-hr-rHR/strings.xml
@@ -503,7 +503,7 @@
Trebat će ti više Mističnih pješčanih satova kako bi kupio/la ovaj predmet!
Nabavi pješčane satove
Pretplati se za Pješčane satove
- Zaradi jedan Mistični pješčani sat za svaka tri mjeseca uzastopne pretplate, onda ih koristi za otključavanje predmeta, ljubimaca i jahačih životinja ograničenih izdanja iz prošlosti... i budućnosti!
+ Zaradi jedan Mistični pješčani sat za svaka tri mjeseca uzastopne pretplate, onda ih koristi za otključavanje predmeta, ljubimaca i jahačih životinja ograničenih izdanja iz prošlosti… i budućnosti!
Želim se pretplatiti
Četiri Velike gale se održavaju oko vremena suncostaja i ravnodnevnica, pa se vrati tada kako bi otkrio/la zabavan izbor posebnih sezonskih predmeta!
Vrati se brzo!
diff --git a/Habitica/res/values-hu/strings.xml b/Habitica/res/values-hu/strings.xml
index 57bf15125..8f93f2017 100755
--- a/Habitica/res/values-hu/strings.xml
+++ b/Habitica/res/values-hu/strings.xml
@@ -16,7 +16,7 @@
A Habitica nyelvének megváltoztatása
A QR kódod
Kapcsolat
- Hiba történt...
+ Hiba történt…
Fiók
A hét első napja
A hét első napja minden naptárban
diff --git a/Habitica/res/values-in/strings.xml b/Habitica/res/values-in/strings.xml
index 3825855f0..e69168d09 100644
--- a/Habitica/res/values-in/strings.xml
+++ b/Habitica/res/values-in/strings.xml
@@ -474,7 +474,7 @@
Kamu perlu lebih banyak Jam Pasir Mistis untuk membeli item ini!
Dapatkan jam pasir
Berlangganan untuk Jam Pasir
- Dapatkan satu Jam Pasir Mistis setiap tiga bulan berturut-turut kamu berlangganan, lalu gunakan untuk membuka item-item edisi terbatas, peliharaan, dan tunggangan dari masa lalu... dan masa depan!
+ Dapatkan satu Jam Pasir Mistis setiap tiga bulan berturut-turut kamu berlangganan, lalu gunakan untuk membuka item-item edisi terbatas, peliharaan, dan tunggangan dari masa lalu… dan masa depan!
Aku mau Berlangganan
Grand Gala diadakan dekat dengan titik balik matahari dan ekuinoks, jadi cek kembali nanti untuk menemukan sekumpulan seru item musiman yang spesial!
Datang kembali nanti!
diff --git a/Habitica/res/values-it/strings.profile.xml b/Habitica/res/values-it/strings.profile.xml
index c8d1466cb..6b3f96257 100644
--- a/Habitica/res/values-it/strings.profile.xml
+++ b/Habitica/res/values-it/strings.profile.xml
@@ -3,13 +3,12 @@
Animali e cavalcature
Animali trovati
Cavalcature addomesticate
- Caricamento dati utente...
+ Caricamento dati utente…
Invia messaggio a %s
Messaggio inviato a %s
Livello:
Bonus classe:
Allocati:
- Messaggio privato
Medaglie
diff --git a/Habitica/res/values-it/strings.xml b/Habitica/res/values-it/strings.xml
index 8a5085e4c..687bffa83 100644
--- a/Habitica/res/values-it/strings.xml
+++ b/Habitica/res/values-it/strings.xml
@@ -501,7 +501,7 @@
Ti servono più Clessidre Mistiche per comprare questo oggetto!
Ottieni clessidre
Abbonati per le Clessidre
- Ottieni una Clessidra Mistica per ogni tre mesi di abbonamento consecutivi, che puoi usare per sbloccare elementi in edizione limitata come oggetti, animali e cavalcature del passato... o del futuro!
+ Ottieni una Clessidra Mistica per ogni tre mesi di abbonamento consecutivi, che puoi usare per sbloccare elementi in edizione limitata come oggetti, animali e cavalcature del passato… o del futuro!
Voglio abbonarmi
I Gran Galà stagionali hanno luogo nei pressi dei solstizi e degli equinozi, quindi torna più avanti per trovare un vivace assortimento di oggetti stagionali!
Torna presto!
diff --git a/Habitica/res/values-ko/strings.profile.xml b/Habitica/res/values-ko/strings.profile.xml
index d8cf52cb2..0417aa818 100644
--- a/Habitica/res/values-ko/strings.profile.xml
+++ b/Habitica/res/values-ko/strings.profile.xml
@@ -10,5 +10,5 @@
할당된 포인트:
개인 메시지
업적
- 회원 정보를 불러오는 중입니다...
+ 회원 정보를 불러오는 중입니다…
\ No newline at end of file
diff --git a/Habitica/res/values-ko/strings.xml b/Habitica/res/values-ko/strings.xml
index e3012995c..b69a9923a 100644
--- a/Habitica/res/values-ko/strings.xml
+++ b/Habitica/res/values-ko/strings.xml
@@ -511,7 +511,7 @@
이 아이템을 구입하려면 더 많은 신비한 모래시계가 필요합니다!
모래시계 받기
모래시계를 얻으려면 정기 구독을 해주세요
- 연속 정기구독 3달마다 신비한 모래시계 한 개씩을 얻을 수 있고 그것을 사용해서 과거와... 그리고 미래의 한정판 아이템, 펫, 그리고 탑승펫 등을 열 수 있습니다!
+ 연속 정기구독 3달마다 신비한 모래시계 한 개씩을 얻을 수 있고 그것을 사용해서 과거와… 그리고 미래의 한정판 아이템, 펫, 그리고 탑승펫 등을 열 수 있습니다!
정기후원 하고 싶어요
그랜드 갈라는 춘분, 하지, 추분 그리고 동지 즈음에 열리니 그 때마다 재미있는 여러 계절별 특별 아이템을 찾으러 오세요!
어서 다시 만나요!
diff --git a/Habitica/res/values-lt/strings.profile.xml b/Habitica/res/values-lt/strings.profile.xml
index 4f2f467b1..7f40fabb0 100644
--- a/Habitica/res/values-lt/strings.profile.xml
+++ b/Habitica/res/values-lt/strings.profile.xml
@@ -9,7 +9,7 @@
Klasės-Bonusai:
Priskirta:
Privati Žinutė
- Įkeliami narių duomenys ...
+ Įkeliami narių duomenys …
Pasiekimai
diff --git a/Habitica/res/values-nl/strings.profile.xml b/Habitica/res/values-nl/strings.profile.xml
index 1ed354dd6..9bb14e813 100644
--- a/Habitica/res/values-nl/strings.profile.xml
+++ b/Habitica/res/values-nl/strings.profile.xml
@@ -3,7 +3,7 @@
Huis- & rijdieren
Gevonden huisdieren
Getemde rijdieren
- Gebruikersgegevens aan het laden...
+ Gebruikersgegevens aan het laden…
Stuur bericht naar %s
Bericht verzonden naar %s
Niveau:
diff --git a/Habitica/res/values-pl/strings.profile.xml b/Habitica/res/values-pl/strings.profile.xml
index 2e545c82b..4fcf4db36 100644
--- a/Habitica/res/values-pl/strings.profile.xml
+++ b/Habitica/res/values-pl/strings.profile.xml
@@ -3,7 +3,7 @@
Chowańce i Wierzchowce
Znalezione chowańce
Okiełznane wierzchowce
- Ładowanie danych użytkownika...
+ Ładowanie danych użytkownika…
Wyślij wiadomość do %s
Wiadomość wysłana do %s
Poziom:
diff --git a/Habitica/res/values-pt-rBR/strings.profile.xml b/Habitica/res/values-pt-rBR/strings.profile.xml
index 3536adfcf..89b3cfb8c 100644
--- a/Habitica/res/values-pt-rBR/strings.profile.xml
+++ b/Habitica/res/values-pt-rBR/strings.profile.xml
@@ -3,7 +3,7 @@
Mascotes & Montarias
Mascotes Encontrados
Montarias Domesticadas
- Carregando informações dos membros...
+ Carregando informações dos membros…
Enviar mensagem para %s
Mensagem enviada para %s
Nível:
diff --git a/Habitica/res/values-pt-rBR/strings.xml b/Habitica/res/values-pt-rBR/strings.xml
index 806100508..ba81a6076 100644
--- a/Habitica/res/values-pt-rBR/strings.xml
+++ b/Habitica/res/values-pt-rBR/strings.xml
@@ -88,7 +88,7 @@
Por completar seus objetivos da vida real, você subiu de nível e agora está totalmente curado!
Hurra!
Não se desespere!
- Você perdeu um Nível, seu Ouro, e uma peça de Equipamento, mas você pode ganhar todos eles de volta com trabalho duro! Boa sorte -- Você se sairá bem.
+ Você perdeu um Nível, seu Ouro, e uma peça de Equipamento, mas você pode ganhar todos eles de volta com trabalho duro! Boa sorte — Você se sairá bem.
Você perdeu toda sua Vida!
Restaurar Vida & Tentar Novamente
Filtro
@@ -503,7 +503,7 @@
Você precisará de mais Ampulhetas Místicas para comprar este item!
Obter ampulhetas
Assinar pelas Ampulhetas
- Receba uma Ampulheta Mística a cada três meses de assinatura consecutiva então as use para liberar itens, mascotes e montarias de edição limitada do passado... e do futuro!
+ Receba uma Ampulheta Mística a cada três meses de assinatura consecutiva então as use para liberar itens, mascotes e montarias de edição limitada do passado… e do futuro!
Eu quero Assinar
As Grande Galas acontecem próximo da virada das quatro estações do ano, então volte aqui nesses períodos para ver os itens sazonais especiais!
Volte logo!
@@ -858,9 +858,9 @@
Título da tarefa
Adicionar autenticação local
Derrotar
- Você enviou para %s uma assinatura por % s mês/meses no Habitica e a mesma assinatura foi aplicada à sua conta para a nossa promoção \"Presenteie com uma e ganhe outra\"!
+ Você enviou para %s uma assinatura por %s mês/meses no Habitica e a mesma assinatura foi aplicada à sua conta para a nossa promoção \"Presenteie com uma e ganhe outra\"!
Você enviou algumas gemas para %s.
- Você enviou para %s uma assinatura por % s mês/meses no Habitica.
+ Você enviou para %s uma assinatura por %s mês/meses no Habitica.
Selecione abaixo o pacote de gemas que você deseja presentear!
Dê o nome de usuário abaixo a um amigo ou vá para %s para conhecer potenciais camaradas!
Ouro insuficiente
diff --git a/Habitica/res/values-pt-rPT/strings.profile.xml b/Habitica/res/values-pt-rPT/strings.profile.xml
index 8d8d7050c..328dce075 100644
--- a/Habitica/res/values-pt-rPT/strings.profile.xml
+++ b/Habitica/res/values-pt-rPT/strings.profile.xml
@@ -3,7 +3,7 @@
Animais de Estimação e Montadas
Animais de Estimação Encontrados
Montadas Domesticadas
- A carregar os dados de membro...
+ A carregar os dados de membro…
Enviar mensagem para %s
Mensagem enviada para %s
Nível:
diff --git a/Habitica/res/values-pt-rPT/strings.xml b/Habitica/res/values-pt-rPT/strings.xml
index a2041dd1a..b7a511925 100644
--- a/Habitica/res/values-pt-rPT/strings.xml
+++ b/Habitica/res/values-pt-rPT/strings.xml
@@ -643,7 +643,7 @@
Volta rápido!
As Grandes Galas acontecem perto dos solstícios e equinócios, então volta nesses períodos para encontrar itens sazonais especiais!
Eu quero assinar
- Recebe uma Ampulheta Mística por cada três meses consecutivos de assinatura e então usa-as para desbloquear itens, mascotes e montarias de edição limitada do passado... e futuro!
+ Recebe uma Ampulheta Mística por cada três meses consecutivos de assinatura e então usa-as para desbloquear itens, mascotes e montarias de edição limitada do passado… e futuro!
Assinar por Ampulhetas
Conseguir Ampulhetas
Precisarás de mais Ampulhetas Místicas para comprar este item!
diff --git a/Habitica/res/values-ro/strings.xml b/Habitica/res/values-ro/strings.xml
index 3ae7b2ad5..de52a20bc 100755
--- a/Habitica/res/values-ro/strings.xml
+++ b/Habitica/res/values-ro/strings.xml
@@ -479,7 +479,7 @@
Ai nevoie de mai multe Clepsidre Mistice pentru a cumpăra acest obiect!
Fă rost de clepsidre
Abonează-te pentru Clepsidre
- Câștigă o Clepsidră Mistică pentru fiecare trei luni consecutive de abonare, apoi utilizează-le pentru a debloca obiecte în ediție limitată, animale de companie sau de călărit din trecut... și viitor!
+ Câștigă o Clepsidră Mistică pentru fiecare trei luni consecutive de abonare, apoi utilizează-le pentru a debloca obiecte în ediție limitată, animale de companie sau de călărit din trecut… și viitor!
Vreau să mă abonez
Galele Grand au loc în apropierea solstițiilor și echinocțiilor, așa că întoarce-te atunci pentru a găsi un asortiment de obiecte sezonale speciale!
Revino în curând!
diff --git a/Habitica/res/values-ru/strings.profile.xml b/Habitica/res/values-ru/strings.profile.xml
index b55dc4b05..363b05cb9 100644
--- a/Habitica/res/values-ru/strings.profile.xml
+++ b/Habitica/res/values-ru/strings.profile.xml
@@ -3,7 +3,7 @@
Питомцы и Скакуны
Питомцев найдено
Пойманных скакунов
- Загрузка данных участника...
+ Загрузка данных участника…
Отправить сообщение %s
Сообщение отправлено %s
Уровень:
diff --git a/Habitica/res/values-ru/strings.xml b/Habitica/res/values-ru/strings.xml
index 43b4142ac..19afc99ed 100644
--- a/Habitica/res/values-ru/strings.xml
+++ b/Habitica/res/values-ru/strings.xml
@@ -494,7 +494,7 @@
Вам нужно больше мистических песочных очков чтобы купить этот предмет!
Получить песочные часы
Оформите подписку для получения Мистических песочных часов
- Зарабатывайте одни мистические песочные часы за каждые три последующие месяца подписки, чтобы потом использовать их для открытия труднодоступного снаряжения, питомцев и скакунов из прошлого... и даже будущего!
+ Зарабатывайте одни мистические песочные часы за каждые три последующие месяца подписки, чтобы потом использовать их для открытия труднодоступного снаряжения, питомцев и скакунов из прошлого… и даже будущего!
Я хочу подписаться
Великие праздники случаются ближе к солнцестоянию и равноденствия, поэтому в это время возможно найти забавный ассортимент специальных сезонных предметов!
Возвращайся скорее!
diff --git a/Habitica/res/values-sv/strings.profile.xml b/Habitica/res/values-sv/strings.profile.xml
index 391f24087..dc156683d 100644
--- a/Habitica/res/values-sv/strings.profile.xml
+++ b/Habitica/res/values-sv/strings.profile.xml
@@ -6,7 +6,7 @@
Level:
Meddelande skickat till %s
Skicka meddelande till %s
- Laddar medlemmens data...
+ Laddar medlemmens data…
Tama riddjur
Sällskapsdjur funna
Sällskapsdjur & Riddjur
diff --git a/Habitica/res/values-sv/strings.xml b/Habitica/res/values-sv/strings.xml
index 2a3f58ba9..61125e69d 100755
--- a/Habitica/res/values-sv/strings.xml
+++ b/Habitica/res/values-sv/strings.xml
@@ -452,7 +452,7 @@
Du behöver mer Mystiska Timglas för att köpa detta objekt!
Skaffa timglas
Prenumerera för Timglas
- Tjäna ett Mystiskt timglas för varje tredje månad du prenumererat i följd. Använd dom sen för att låsa upp begränsade utgåvor, husdjur och riddjur från det förflutna... och framtiden!
+
Jag vill Prenumerera
Kom tillbaka snart!
Nivå
diff --git a/Habitica/res/values-tr/strings.profile.xml b/Habitica/res/values-tr/strings.profile.xml
index c9b401367..9753e7c5c 100644
--- a/Habitica/res/values-tr/strings.profile.xml
+++ b/Habitica/res/values-tr/strings.profile.xml
@@ -3,7 +3,7 @@
Evcil & Binek Hayvanlar
Bulunan Evcil Hayvanlar
Evcilleştirilen Binek Hayvanları
- Üye verileri yükleniyor...
+ Üye verileri yükleniyor…
%s kişisine mesaj gönder
%s kişisine mesaj gönderildi
Seviye:
diff --git a/Habitica/res/values-tr/strings.sidebar.xml b/Habitica/res/values-tr/strings.sidebar.xml
index c20d92837..1e0a14ab5 100644
--- a/Habitica/res/values-tr/strings.sidebar.xml
+++ b/Habitica/res/values-tr/strings.sidebar.xml
@@ -6,7 +6,6 @@
Mesajlar
Taverna
Takım
- Elmas Satın Al
Loncalar
Mücadeleler
Envanter
diff --git a/Habitica/res/values-tr/strings.xml b/Habitica/res/values-tr/strings.xml
index d411f70eb..53dd24872 100644
--- a/Habitica/res/values-tr/strings.xml
+++ b/Habitica/res/values-tr/strings.xml
@@ -504,7 +504,7 @@
Bu eşyayı almak için daha çok Mistik Kum Saatine ihtiyacın var!
Kum Saatleri al
Kum Saatleri için abone ol
- "Her 3 aylık devamlı üyelik başına bir Mistik Kum Saati kazan, daha sonra onu kullanarak sınırlı sayıdaki ekipmanların, hayvanların ve bineklerin kilidini aç, geçmişten ..._ ve gelecekten!"
+ "Her 3 aylık devamlı üyelik başına bir Mistik Kum Saati kazan, daha sonra onu kullanarak sınırlı sayıdaki ekipmanların, hayvanların ve bineklerin kilidini aç, geçmişten …_ ve gelecekten!"
Abone olmak istiyorum
Büyük Galalar gündönümü ve ekinoks zamanlarına yakın gerçekleşirler, çeşit çeşit özel mevsimsel eşyalar bulmak için bu zamanlarda ziyaret et!
Yakında yine gel!
diff --git a/Habitica/res/values-uk/strings.profile.xml b/Habitica/res/values-uk/strings.profile.xml
index 661c1d03b..6a2f3e23e 100644
--- a/Habitica/res/values-uk/strings.profile.xml
+++ b/Habitica/res/values-uk/strings.profile.xml
@@ -7,7 +7,7 @@
Рівень:
Повідомлення відправлено %s
Відправити повідомлення %s
- Завантаження даних учасника...
+ Завантаження даних учасника…
Приручені скакуни
Знайдені улюбленці
Улюбленці та Скакуни
diff --git a/Habitica/res/values-vi/strings.profile.xml b/Habitica/res/values-vi/strings.profile.xml
index 4ca03cce2..b4750afcb 100644
--- a/Habitica/res/values-vi/strings.profile.xml
+++ b/Habitica/res/values-vi/strings.profile.xml
@@ -2,7 +2,7 @@
Thú cưng & Thú cưỡi
Thú cưng Đã có
- Đang tải dữ liệu thành viên...
+ Đang tải dữ liệu thành viên…
Gửi tin nhắn tới %s
Tin nhắn đã gửi tới %s
Cấp độ:
diff --git a/Habitica/res/values-vi/strings.xml b/Habitica/res/values-vi/strings.xml
index a5c3f6348..b350bf701 100755
--- a/Habitica/res/values-vi/strings.xml
+++ b/Habitica/res/values-vi/strings.xml
@@ -580,7 +580,7 @@
Quay trở lại sớm nhé!
Những buổi tiệc lớn xảy ra gần các thời điểm Chí và Phân trong năm, vì vậy nhớ ghé xem để tìm thấy các vật phẩm đặc biệt theo mùa thú vị các loại!
Tôi muốn Đăng ký
- Kiếm một Đồng hồ cát Bí ẩn mỗi ba tháng liên tục đăng kí, và sau đó sử dụng chúng để mở khóa những vật phẩm giới hạn, thú cưng, và thú cưỡi từ quá khứ... và tương lai!
+ Kiếm một Đồng hồ cát Bí ẩn mỗi ba tháng liên tục đăng kí, và sau đó sử dụng chúng để mở khóa những vật phẩm giới hạn, thú cưng, và thú cưỡi từ quá khứ… và tương lai!
Đăng kí để có Đồng hồ cát
Lấy đồng hồ cát
Bạn sẽ cần nhiều Đồng hồ cát bí ẩn hơn để mua vật phẩm này!
diff --git a/Habitica/res/values-zh/strings.profile.xml b/Habitica/res/values-zh/strings.profile.xml
index 374b5f69a..daa37e3fb 100644
--- a/Habitica/res/values-zh/strings.profile.xml
+++ b/Habitica/res/values-zh/strings.profile.xml
@@ -3,7 +3,7 @@
宠物和坐骑
发现的宠物
驯养的坐骑
- 正在加载成员数据...
+ 正在加载成员数据…
给%s发送信息
发送给%s的信息
级别:
diff --git a/Habitica/res/values/dimens.xml b/Habitica/res/values/dimens.xml
index 676a722bb..eecdca919 100644
--- a/Habitica/res/values/dimens.xml
+++ b/Habitica/res/values/dimens.xml
@@ -3,7 +3,6 @@
16dp
8dp
- 4dip
18.0sp
14.0sp
@@ -11,9 +10,7 @@
6dp
6dp
16dp
- 6dp
- 34dp
5dp
46dp
4dp
diff --git a/Habitica/res/values/strings.profile.xml b/Habitica/res/values/strings.profile.xml
index 0c2734e1c..dedf8fecb 100644
--- a/Habitica/res/values/strings.profile.xml
+++ b/Habitica/res/values/strings.profile.xml
@@ -3,13 +3,11 @@
Pets & Mounts
Pets Found
Mounts Tamed
- Loading member data...
+ Loading member data…
Send message to %s
Message sent to %s
Level:
Class-Bonus:
Allocated:
- Private Message
Achievements
-
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaBaseApplication.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaBaseApplication.kt
index 042b6e886..8d67b9787 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaBaseApplication.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaBaseApplication.kt
@@ -18,7 +18,7 @@ import com.amplitude.api.Identify
import com.facebook.drawee.backends.pipeline.Fresco
import com.facebook.imagepipeline.core.ImagePipelineConfig
import com.google.firebase.analytics.FirebaseAnalytics
-import com.google.firebase.iid.FirebaseInstanceId
+import com.google.firebase.installations.FirebaseInstallations
import com.google.firebase.remoteconfig.FirebaseRemoteConfig
import com.google.firebase.remoteconfig.FirebaseRemoteConfigSettings
import com.habitrpg.android.habitica.api.HostConfig
@@ -170,7 +170,7 @@ abstract class HabiticaBaseApplication : Application() {
return "DONT-NEED-IT"
}
- override fun getCache(): Cache? {
+ override fun getCache(): Cache {
return Billing.newCache()
}
@@ -193,16 +193,12 @@ abstract class HabiticaBaseApplication : Application() {
}
private fun setupNotifications() {
- FirebaseInstanceId.getInstance().instanceId.addOnCompleteListener { task ->
+ FirebaseInstallations.getInstance().id.addOnCompleteListener { task ->
if (!task.isSuccessful) {
Log.w("Token", "getInstanceId failed", task.exception)
return@addOnCompleteListener
}
-
- // Get new Instance ID token
- val token = task.result?.token
-
- // Log and toast
+ val token = task.result
if (BuildConfig.DEBUG) {
Log.d("Token", "Firebase Notification Token: $token")
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaPurchaseVerifier.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaPurchaseVerifier.kt
index 1695509aa..f042a67ee 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaPurchaseVerifier.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/HabiticaPurchaseVerifier.kt
@@ -112,7 +112,7 @@ class HabiticaPurchaseVerifier(context: Context, apiClient: ApiClient) : BasePur
private fun loadPendingGifts(): MutableMap {
val outputMap: MutableMap = HashMap()
try {
- val jsonString = preferences?.getString(PENDING_GIFTS_KEY, JSONObject().toString())
+ val jsonString = preferences?.getString(PENDING_GIFTS_KEY, JSONObject().toString()) ?: ""
val jsonObject = JSONObject(jsonString)
val keysItr = jsonObject.keys()
while (keysItr.hasNext()) {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/UserRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/UserRepository.kt
index 2cd201072..e7222f05a 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/UserRepository.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/UserRepository.kt
@@ -38,9 +38,8 @@ interface UserRepository : BaseRepository {
fun getSpecialItems(user: User): Flowable>
- fun useSkill(user: User?, key: String, target: String?, taskId: String): Flowable
-
- fun useSkill(user: User?, key: String, target: String?): Flowable
+ fun useSkill(key: String, target: String?, taskId: String): Flowable
+ fun useSkill(key: String, target: String?): Flowable
fun changeClass(): Flowable
@@ -73,9 +72,9 @@ interface UserRepository : BaseRepository {
fun verifyUsername(username: String): Flowable
fun allocatePoint(stat: String): Flowable
+ fun bulkAllocatePoints(strength: Int, intelligence: Int, constitution: Int, perception: Int): Flowable
- fun bulkAllocatePoints(user: User?, strength: Int, intelligence: Int, constitution: Int, perception: Int): Flowable
- fun useCustomization(user: User?, type: String, category: String?, identifier: String): Flowable
+ fun useCustomization(type: String, category: String?, identifier: String): Flowable
fun retrieveAchievements(): Flowable>
fun getAchievements(): Flowable>
fun getQuestAchievements(): Flowable>
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TaskRepositoryImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TaskRepositoryImpl.kt
index 2b2e0c41a..15daaa33d 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TaskRepositoryImpl.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/TaskRepositoryImpl.kt
@@ -100,6 +100,10 @@ class TaskRepositoryImpl(localRepository: TaskLocalRepository, apiClient: ApiCli
.map { (res, user): Pair ->
// save local task changes
val result = TaskScoringResult()
+ if (res.lvl == 0) {
+ // Team tasks that require approval have weird data that we should just ignore.
+ return@map result
+ }
val stats = user.stats
result.healthDelta = res.hp - (stats?.hp ?: 0.0)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt
index f84e644ee..d73563a59 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt
@@ -23,7 +23,9 @@ import com.habitrpg.android.habitica.models.user.Stats
import com.habitrpg.android.habitica.models.user.User
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.core.Maybe
+import io.reactivex.rxjava3.functions.BiFunction
import io.realm.RealmResults
+import org.reactivestreams.Publisher
import java.util.*
import java.util.concurrent.TimeUnit
@@ -112,27 +114,21 @@ class UserRepositoryImpl(localRepository: UserLocalRepository, apiClient: ApiCli
override fun getSpecialItems(user: User): Flowable> =
localRepository.getSpecialItems(user)
- override fun useSkill(user: User?, key: String, target: String?, taskId: String): Flowable {
- return apiClient.useSkill(key, target ?: "", taskId).doOnNext { skillResponse ->
- if (user != null) {
- mergeUser(user, skillResponse.user)
- }
+ override fun useSkill(key: String, target: String?, taskId: String): Flowable {
+ return zipWithLiveUser(apiClient.useSkill(key, target ?: "", taskId)) { skillResponse, user ->
+ mergeUser(user, skillResponse.user)
+ skillResponse
}
}
- override fun useSkill(user: User?, key: String, target: String?): Flowable {
- return apiClient.useSkill(key, target ?: "")
- .map { response ->
- response.hpDiff = response.user.stats?.hp ?: 0 - (user?.stats?.hp ?: 0.0)
- response.expDiff = response.user.stats?.exp ?: 0 - (user?.stats?.exp ?: 0.0)
- response.goldDiff = response.user.stats?.gp ?: 0 - (user?.stats?.gp ?: 0.0)
+ override fun useSkill(key: String, target: String?): Flowable {
+ return zipWithLiveUser(apiClient.useSkill(key, target ?: "")) { response, user ->
+ response.hpDiff = response.user.stats?.hp ?: 0 - (user.stats?.hp ?: 0.0)
+ response.expDiff = response.user.stats?.exp ?: 0 - (user.stats?.exp ?: 0.0)
+ response.goldDiff = response.user.stats?.gp ?: 0 - (user.stats?.gp ?: 0.0)
+ mergeUser(user, response.user)
response
}
- .doOnNext { skillResponse ->
- if (user != null) {
- mergeUser(user, skillResponse.user)
- }
- }
}
override fun changeClass(): Flowable = apiClient.changeClass().flatMap { retrieveUser(withTasks = false, forced = true) }
@@ -146,14 +142,16 @@ class UserRepositoryImpl(localRepository: UserLocalRepository, apiClient: ApiCli
if (path.last() == '.' && customization.type == "background") {
path += user?.preferences?.background
}
- return Flowable.zip(apiClient.unlockPath(path), localRepository.getUser(userID).firstElement().toFlowable(), { unlockResponse, copiedUser ->
- copiedUser.preferences = unlockResponse.preferences
- copiedUser.purchased = unlockResponse.purchased
- copiedUser.items = unlockResponse.items
- copiedUser.balance = copiedUser.balance - (customization.price ?: 0) / 4.0
- localRepository.saveUser(copiedUser, false)
+ return zipWithLiveUser(apiClient.unlockPath(path)) { unlockResponse, copiedUser ->
+ localRepository.modify(copiedUser) { copiedUser ->
+ copiedUser.preferences = unlockResponse.preferences
+ copiedUser.purchased = unlockResponse.purchased
+ copiedUser.items = unlockResponse.items
+ copiedUser.balance = copiedUser.balance - (customization.price ?: 0) / 4.0
+ localRepository.saveUser(copiedUser, false)
+ }
unlockResponse
- })
+ }
}
override fun unlockPath(set: CustomizationSet): Flowable {
@@ -165,7 +163,9 @@ class UserRepositoryImpl(localRepository: UserLocalRepository, apiClient: ApiCli
return Flowable.just(null)
}
path = path.substring(1)
- return Flowable.zip(apiClient.unlockPath(path), localRepository.getUser(userID).firstElement().toFlowable(), { unlockResponse, copiedUser ->
+ return Flowable.zip(apiClient.unlockPath(path), localRepository.getUser(userID).firstElement().toFlowable()
+ .map { localRepository.getLiveObject(it) }
+ .skipNil(), { unlockResponse, copiedUser ->
copiedUser.preferences = unlockResponse.preferences
copiedUser.purchased = unlockResponse.purchased
copiedUser.items = unlockResponse.items
@@ -240,32 +240,32 @@ class UserRepositoryImpl(localRepository: UserLocalRepository, apiClient: ApiCli
apiClient.updatePassword(oldPassword.trim(), newPassword.trim(), newPasswordConfirmation.trim())
override fun allocatePoint(stat: String): Flowable {
- localRepository.getUser(userID).subscribe( { liveUser ->
- when (stat) {
- Stats.STRENGTH -> liveUser.stats?.strength = liveUser.stats?.strength?.inc()
- Stats.INTELLIGENCE -> liveUser.stats?.intelligence = liveUser.stats?.intelligence?.inc()
- Stats.CONSTITUTION -> liveUser.stats?.constitution= liveUser.stats?.constitution?.inc()
- Stats.PERCEPTION -> liveUser.stats?.per = liveUser.stats?.per?.inc()
- }
- liveUser.stats?.points = liveUser.stats?.points?.dec()
- }, RxErrorHandler.handleEmptyError())
- return apiClient.allocatePoint(stat)
- .doOnNext { stats ->
- /*localRepository.modify(user) { liveUser ->
- liveUser.stats?.strength = stats.strength
- liveUser.stats?.constitution = stats.constitution
- liveUser.stats?.per = stats.per
- liveUser.stats?.intelligence = stats.intelligence
- liveUser.stats?.points = stats.points
- liveUser.stats?.mp = stats.mp
- }*/
+ getLiveUser().firstElement().subscribe( { liveUser ->
+ localRepository.executeTransaction {
+ when (stat) {
+ Stats.STRENGTH -> liveUser.stats?.strength = liveUser.stats?.strength?.inc()
+ Stats.INTELLIGENCE -> liveUser.stats?.intelligence = liveUser.stats?.intelligence?.inc()
+ Stats.CONSTITUTION -> liveUser.stats?.constitution= liveUser.stats?.constitution?.inc()
+ Stats.PERCEPTION -> liveUser.stats?.per = liveUser.stats?.per?.inc()
}
+ liveUser.stats?.points = liveUser.stats?.points?.dec()
+ }
+ }, RxErrorHandler.handleEmptyError())
+ return zipWithLiveUser(apiClient.allocatePoint(stat)) { stats, user ->
+ localRepository.modify(user) { liveUser ->
+ liveUser.stats?.strength = stats.strength
+ liveUser.stats?.constitution = stats.constitution
+ liveUser.stats?.per = stats.per
+ liveUser.stats?.intelligence = stats.intelligence
+ liveUser.stats?.points = stats.points
+ liveUser.stats?.mp = stats.mp
+ }
+ stats
+ }
}
- override fun bulkAllocatePoints(user: User?, strength: Int, intelligence: Int, constitution: Int, perception: Int): Flowable =
- apiClient.bulkAllocatePoints(strength, intelligence, constitution, perception)
- .doOnNext { stats ->
- if (user != null && user.isManaged) {
+ override fun bulkAllocatePoints(strength: Int, intelligence: Int, constitution: Int, perception: Int): Flowable =
+ zipWithLiveUser(apiClient.bulkAllocatePoints(strength, intelligence, constitution, perception)) { stats, user ->
localRepository.modify(user) { liveUser ->
liveUser.stats?.strength = stats.strength
liveUser.stats?.constitution = stats.constitution
@@ -274,8 +274,8 @@ class UserRepositoryImpl(localRepository: UserLocalRepository, apiClient: ApiCli
liveUser.stats?.points = stats.points
liveUser.stats?.mp = stats.mp
}
- }
- }
+ stats
+ }
override fun runCron(tasks: MutableList) {
var observable: Maybe = localRepository.getUser(userID).firstElement()
@@ -302,26 +302,28 @@ class UserRepositoryImpl(localRepository: UserLocalRepository, apiClient: ApiCli
.subscribe({ }, RxErrorHandler.handleEmptyError())
}
- override fun useCustomization(user: User?, type: String, category: String?, identifier: String): Flowable {
- if (user != null && appConfigManager.enableLocalChanges()) {
- localRepository.modify(user) { liveUser ->
- when (type) {
- "skin" -> liveUser.preferences?.skin =identifier
- "shirt" -> liveUser.preferences?.shirt = identifier
- "hair" -> {
- when (category) {
- "color" -> liveUser.preferences?.hair?.color = identifier
- "flower" -> liveUser.preferences?.hair?.flower = identifier.toInt()
- "mustache" -> liveUser.preferences?.hair?.mustache = identifier.toInt()
- "beard" -> liveUser.preferences?.hair?.beard = identifier.toInt()
- "bangs" -> liveUser.preferences?.hair?.bangs = identifier.toInt()
- "base" -> liveUser.preferences?.hair?.base = identifier.toInt()
+ override fun useCustomization(type: String, category: String?, identifier: String): Flowable {
+ if (appConfigManager.enableLocalChanges()) {
+ localRepository.getUser(userID).firstElement().subscribe( { liveUser ->
+ localRepository.modify(liveUser) { liveUser ->
+ when (type) {
+ "skin" -> liveUser.preferences?.skin = identifier
+ "shirt" -> liveUser.preferences?.shirt = identifier
+ "hair" -> {
+ when (category) {
+ "color" -> liveUser.preferences?.hair?.color = identifier
+ "flower" -> liveUser.preferences?.hair?.flower = identifier.toInt()
+ "mustache" -> liveUser.preferences?.hair?.mustache = identifier.toInt()
+ "beard" -> liveUser.preferences?.hair?.beard = identifier.toInt()
+ "bangs" -> liveUser.preferences?.hair?.bangs = identifier.toInt()
+ "base" -> liveUser.preferences?.hair?.base = identifier.toInt()
+ }
}
+ "background" -> liveUser.preferences?.background = identifier
+ "chair" -> liveUser.preferences?.chair = identifier
}
- "background" -> liveUser.preferences?.background = identifier
- "chair" -> liveUser.preferences?.chair = identifier
}
- }
+ }, RxErrorHandler.handleEmptyError())
}
var updatePath = "preferences.$type"
if (category != null) {
@@ -376,6 +378,16 @@ class UserRepositoryImpl(localRepository: UserLocalRepository, apiClient: ApiCli
return localRepository.getTeamPlan(teamID)
}
+ private fun getLiveUser(): Flowable {
+ return localRepository.getUser(userID)
+ .map { localRepository.getLiveObject(it) }
+ .skipNil()
+ }
+
+ private fun zipWithLiveUser(flowable: Flowable, mergeFunc: BiFunction): Flowable {
+ return Flowable.zip(flowable, getLiveUser().firstElement().toFlowable(), mergeFunc)
+ }
+
private fun mergeUser(oldUser: User?, newUser: User): User {
if (oldUser == null || !oldUser.isValid) {
return oldUser ?: newUser
@@ -413,3 +425,8 @@ class UserRepositoryImpl(localRepository: UserLocalRepository, apiClient: ApiCli
return copiedUser
}
}
+
+private fun Flowable.skipNil(): Flowable {
+ @Suppress("UNCHECKED_CAST")
+ return skipWhile { it == null } as? Flowable ?: Flowable.empty()
+}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationOpenHandler.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationOpenHandler.kt
index 723cf8d75..0cb6bae89 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationOpenHandler.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationOpenHandler.kt
@@ -13,7 +13,7 @@ class NotificationOpenHandler {
companion object {
- fun handleOpenedByNotification(identifier: String, intent: Intent, user: User?) {
+ fun handleOpenedByNotification(identifier: String, intent: Intent) {
GlobalScope.launch(context = Dispatchers.Main) {
when (identifier) {
PushNotificationManager.PARTY_INVITE_PUSH_NOTIFICATION_KEY -> openPartyScreen()
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseMessagingService.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseMessagingService.kt
index b9971cebe..12395505b 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseMessagingService.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/HabiticaFirebaseMessagingService.kt
@@ -1,6 +1,6 @@
package com.habitrpg.android.habitica.helpers.notifications
-import com.google.firebase.iid.FirebaseInstanceId
+import com.google.firebase.messaging.FirebaseMessaging
import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage
import com.habitrpg.android.habitica.HabiticaBaseApplication
@@ -34,9 +34,12 @@ class HabiticaFirebaseMessagingService : FirebaseMessagingService() {
override fun onNewToken(s: String) {
super.onNewToken(s)
userComponent?.inject(this)
- val refreshedToken = FirebaseInstanceId.getInstance().token
- if (refreshedToken != null && this::pushNotificationManager.isInitialized) {
- pushNotificationManager.refreshedToken = refreshedToken
+ FirebaseMessaging.getInstance().token.addOnCompleteListener { task ->
+ val refreshedToken = task.result
+ if (refreshedToken != null && this::pushNotificationManager.isInitialized) {
+ pushNotificationManager.refreshedToken = refreshedToken
+ }
}
+
}
}
\ No newline at end of file
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.kt
index 02272b51b..a94ab90a1 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/notifications/PushNotificationManager.kt
@@ -3,7 +3,7 @@ package com.habitrpg.android.habitica.helpers.notifications
import android.content.Context
import android.content.SharedPreferences
import androidx.core.content.edit
-import com.google.firebase.iid.FirebaseInstanceId
+import com.google.firebase.messaging.FirebaseMessaging
import com.google.firebase.messaging.RemoteMessage
import com.habitrpg.android.habitica.data.ApiClient
import com.habitrpg.android.habitica.helpers.AmplitudeManager
@@ -32,7 +32,7 @@ class PushNotificationManager(var apiClient: ApiClient, private val sharedPrefer
fun addPushDeviceUsingStoredToken() {
if (this.refreshedToken.isEmpty()) {
- this.refreshedToken = FirebaseInstanceId.getInstance().token ?: ""
+ this.refreshedToken = FirebaseMessaging.getInstance().token.result
}
if (this.refreshedToken.isEmpty() || this.user == null || this.userHasPushDevice() || !this.userIsSubscribedToNotifications()) {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/LevelUpUseCase.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/LevelUpUseCase.kt
index 81311c32e..9236c4064 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/LevelUpUseCase.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/LevelUpUseCase.kt
@@ -32,7 +32,7 @@ constructor(private val soundManager: SoundManager, threadExecutor: ThreadExecut
return@defer Flowable.just(requestValues.user.stats)
}
- if (requestValues.newLevel == 10L) {
+ if (requestValues.newLevel == 10) {
val binding = DialogLevelup10Binding.inflate(requestValues.activity.layoutInflater)
binding.healerIconView.setImageBitmap(HabiticaIconsHelper.imageOfHealerLightBg())
binding.mageIconView.setImageBitmap(HabiticaIconsHelper.imageOfMageLightBg())
@@ -89,7 +89,7 @@ constructor(private val soundManager: SoundManager, threadExecutor: ThreadExecut
.subscribe({ }, RxErrorHandler.handleEmptyError())
}
- class RequestValues(val user: User, val level: Long?, val activity: AppCompatActivity) : UseCase.RequestValues {
- val newLevel: Long = level ?: 0
+ class RequestValues(val user: User, val level: Int?, val activity: AppCompatActivity) : UseCase.RequestValues {
+ val newLevel: Int = level ?: 0
}
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/NotifyUserUseCase.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/NotifyUserUseCase.kt
index aa30bb7d7..722a11da8 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/NotifyUserUseCase.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/NotifyUserUseCase.kt
@@ -53,7 +53,7 @@ constructor(threadExecutor: ThreadExecutor, postExecutionThread: PostExecutionTh
}
}
- class RequestValues( val context: AppCompatActivity, val snackbarTargetView: ViewGroup, val user: User?, val xp: Double?, val hp: Double?, val gold: Double?, val mp: Double?, val questDamage: Double?, val hasLeveledUp: Boolean?, val level: Long?) : UseCase.RequestValues
+ class RequestValues( val context: AppCompatActivity, val snackbarTargetView: ViewGroup, val user: User?, val xp: Double?, val hp: Double?, val gold: Double?, val mp: Double?, val questDamage: Double?, val hasLeveledUp: Boolean?, val level: Int?) : UseCase.RequestValues
companion object {
@@ -107,7 +107,7 @@ constructor(threadExecutor: ThreadExecutor, postExecutionThread: PostExecutionTh
return textView
}
- fun getNotificationAndAddStatsToUserAsText(context: Context, xp: Double, hp: Double, gold: Double, mp: Double): Pair {
+ fun getNotificationAndAddStatsToUserAsText(xp: Double, hp: Double, gold: Double, mp: Double): Pair {
val builder = SpannableStringBuilder()
var displayType = SnackbarDisplayType.NORMAL
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/ScoreTaskLocallyInteractor.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/ScoreTaskLocallyInteractor.kt
index 71c44d2cf..0d8afd231 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/ScoreTaskLocallyInteractor.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/ScoreTaskLocallyInteractor.kt
@@ -75,10 +75,10 @@ class ScoreTaskLocallyInteractor {
}
if (result.exp >= stats.toNextLevel?.toDouble() ?: 0.0) {
result.exp = result.exp - (stats.toNextLevel?.toDouble() ?: 0.0)
- result.lvl = (user.stats?.lvl ?: 0 + 1).toLong()
+ result.lvl = user.stats?.lvl ?: 0 + 1
result.hp = 50.0
} else {
- result.lvl = (user.stats?.lvl ?: 0).toLong()
+ result.lvl = user.stats?.lvl ?: 0
}
result
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/responses/TaskDirectionData.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/responses/TaskDirectionData.kt
index 31fde57f5..13c8412bd 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/responses/TaskDirectionData.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/responses/TaskDirectionData.kt
@@ -1,11 +1,6 @@
package com.habitrpg.android.habitica.models.responses
-/**
- * This class represent the data sent back from the API when calling /user/tasks/{id}/{direction}.
- * It holds almost the same thing as Stats, except toNextLevel & maxHealth & maxHP.
- * It also holds a delta, which represent the task value modification.
- * Created by MagicMicky on 12/06/2014.
- */
+
class TaskDirectionData {
var delta: Float = 0.toFloat()
var _tmp: TaskDirectionDataTemp? = null
@@ -13,5 +8,5 @@ class TaskDirectionData {
var hp: Double = 0.0
var gp: Double = 0.0
var mp: Double = 0.0
- var lvl: Long = 0
+ var lvl: Int = 0
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/responses/TaskScoringResult.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/responses/TaskScoringResult.kt
index 5aee0d490..db134dff0 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/responses/TaskScoringResult.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/responses/TaskScoringResult.kt
@@ -1,14 +1,13 @@
package com.habitrpg.android.habitica.models.responses
-class TaskScoringResult() {
-
+class TaskScoringResult {
var drop: TaskDirectionDataDrop? = null
var experienceDelta: Double? = null
var healthDelta: Double? = null
var goldDelta: Double? = null
var manaDelta: Double? = null
var hasLeveledUp: Boolean = false
- var level: Long? = null
+ var level: Int? = null
var questDamage: Double? = null
var questItemsFound: Int? = null
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.kt
index 367d07c28..a1d88a5ff 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/Task.kt
@@ -39,7 +39,7 @@ open class Task : RealmObject, BaseObject, Parcelable {
var text: String = ""
var notes: String? = null
@TaskTypes
- var type: String = ""
+ var type: String = Task.TYPE_HABIT
var challengeID: String? = null
var challengeBroken: String? = null
var attribute: String? = Stats.STRENGTH
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ChallengeFormActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ChallengeFormActivity.kt
index 6bb7d5eb6..2f414a9b6 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ChallengeFormActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ChallengeFormActivity.kt
@@ -1,7 +1,6 @@
package com.habitrpg.android.habitica.ui.activities
import android.app.Activity
-import android.app.ProgressDialog
import android.content.Context
import android.content.Intent
import android.graphics.drawable.ColorDrawable
@@ -10,8 +9,8 @@ import android.view.*
import android.widget.AdapterView
import android.widget.ArrayAdapter
import android.widget.EditText
+import android.widget.TextView
import androidx.appcompat.widget.AppCompatCheckedTextView
-import androidx.appcompat.widget.AppCompatTextView
import androidx.appcompat.widget.Toolbar
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.components.UserComponent
@@ -33,6 +32,7 @@ import com.habitrpg.android.habitica.ui.fragments.social.challenges.ChallengesOv
import com.habitrpg.android.habitica.ui.helpers.ToolbarColorHelper
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
+import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaProgressDialog
import io.reactivex.rxjava3.core.Flowable
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
@@ -130,8 +130,7 @@ class ChallengeFormActivity : BaseActivity() {
override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (item.itemId == R.id.action_save && !savingInProgress && validateAllFields()) {
savingInProgress = true
- @Suppress("DEPRECATION")
- val dialog = ProgressDialog.show(this, "", "Saving challenge data. Please wait...", true, false)
+ val dialog = HabiticaProgressDialog.show(this, R.string.saving)
val observable: Flowable = if (editMode) {
updateChallenge()
@@ -145,7 +144,7 @@ class ChallengeFormActivity : BaseActivity() {
challengeRepository.retrieveChallenges(0, true)
}
.subscribe({
- dialog.dismiss()
+ dialog?.dismiss()
savingInProgress = false
finish()
if (!editMode) {
@@ -155,7 +154,7 @@ class ChallengeFormActivity : BaseActivity() {
}
}
}, { throwable ->
- dialog.dismiss()
+ dialog?.dismiss()
savingInProgress = false
RxErrorHandler.reportError(throwable)
}))
@@ -520,7 +519,7 @@ class ChallengeFormActivity : BaseActivity() {
private class GroupArrayAdapter(context: Context) : ArrayAdapter(context, android.R.layout.simple_spinner_item) {
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
- val checkedTextView = super.getView(position, convertView, parent) as? AppCompatTextView
+ val checkedTextView = super.getView(position, convertView, parent) as? TextView
checkedTextView?.text = getItem(position)?.name
return checkedTextView ?: View(context)
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ClassSelectionActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ClassSelectionActivity.kt
index 1ab0b3682..63dfc037c 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ClassSelectionActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ClassSelectionActivity.kt
@@ -18,6 +18,7 @@ import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.android.habitica.models.user.*
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
+import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaProgressDialog
import io.reactivex.rxjava3.functions.Consumer
import javax.inject.Inject
@@ -49,8 +50,7 @@ class ClassSelectionActivity : BaseActivity(), Consumer {
@Inject
lateinit var userRepository: UserRepository
- @Suppress("DEPRECATION")
- private var progressDialog: ProgressDialog? = null
+ private var progressDialog: HabiticaProgressDialog? = null
override fun getLayoutResId(): Int {
return R.layout.activity_class_selection
@@ -260,8 +260,7 @@ class ClassSelectionActivity : BaseActivity(), Consumer {
}
private fun displayProgressDialog(progressText: String) {
- @Suppress("DEPRECATION")
- progressDialog = ProgressDialog.show(this, progressText, null, true)
+ val dialog = HabiticaProgressDialog.show(this, progressText)
}
override fun accept(user: User) {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FixCharacterValuesActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FixCharacterValuesActivity.kt
index 79f86bd6d..5604383b8 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FixCharacterValuesActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FixCharacterValuesActivity.kt
@@ -18,6 +18,7 @@ import com.habitrpg.android.habitica.models.user.Stats
import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.modules.AppModule
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
+import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaProgressDialog
import javax.inject.Inject
import javax.inject.Named
@@ -73,8 +74,7 @@ class FixCharacterValuesActivity: BaseActivity() {
val id = item.itemId
if (id == R.id.action_save_changes) {
- @Suppress("DEPRECATION")
- val progressDialog = ProgressDialog.show(this, getString(R.string.saving), "")
+ val dialog = HabiticaProgressDialog.show(this, R.string.saving)
val userInfo = HashMap()
userInfo["stats.hp"] = binding.healthEditText.getDoubleValue()
userInfo["stats.exp"] = binding.experienceEditText.getDoubleValue()
@@ -85,7 +85,7 @@ class FixCharacterValuesActivity: BaseActivity() {
compositeSubscription.add(repository.updateUser(userInfo)
.flatMap { repository.retrieveUser(false, true, true) }
.subscribe({}, RxErrorHandler.handleEmptyError(), {
- progressDialog.dismiss()
+ dialog?.dismiss()
finish()
}))
return true
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt
index 997ba799c..9e1372f2f 100755
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt
@@ -376,7 +376,7 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction {
additionalData["identifier"] = identifier
AmplitudeManager.sendEvent("open notification", AmplitudeManager.EVENT_CATEGORY_BEHAVIOUR, AmplitudeManager.EVENT_HITTYPE_EVENT, additionalData)
retrieveUser(true)
- NotificationOpenHandler.handleOpenedByNotification(identifier, intent, user)
+ NotificationOpenHandler.handleOpenedByNotification(identifier, intent)
}
launchTrace?.stop()
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ReportMessageActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ReportMessageActivity.kt
index 891700c37..aef01c53c 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ReportMessageActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ReportMessageActivity.kt
@@ -56,7 +56,7 @@ class ReportMessageActivity : BaseActivity() {
raisedElevation = binding.appBar.elevation
setStatusBarDim(true)
- binding.contentContainer.setOnTouchListener { _, _ -> true }
+ binding.bottomSheet.setOnTouchListener { _, _ -> true }
binding.touchOutside.setOnClickListener { finish() }
binding.reportExplanationTextview.setMarkdown(getString(R.string.report_explanation))
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/SkillTasksRecyclerViewAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/SkillTasksRecyclerViewAdapter.kt
index 29f6c7963..119fe78cc 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/SkillTasksRecyclerViewAdapter.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/SkillTasksRecyclerViewAdapter.kt
@@ -32,9 +32,7 @@ class SkillTasksRecyclerViewAdapter : BaseRecyclerViewAdapter {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/ChallengesListViewAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/ChallengesListViewAdapter.kt
index ac3bac6fe..a71669cc2 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/ChallengesListViewAdapter.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/ChallengesListViewAdapter.kt
@@ -28,7 +28,7 @@ class ChallengesListViewAdapter(private val viewUserChallengesOnly: Boolean, pri
}
override fun onBindViewHolder(holder: ChallengeViewHolder, position: Int) {
- data?.get(position)?.let { challenge ->
+ data[position].let { challenge ->
holder.bind(challenge, challengeMemberships?.first { challenge.id == it.challengeID } != null)
holder.itemView.setOnClickListener {
if (challenge.isManaged && challenge.isValid) {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/GuildListAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/GuildListAdapter.kt
index c6a6e58ad..4c5d32449 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/GuildListAdapter.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/GuildListAdapter.kt
@@ -4,7 +4,6 @@ import android.view.View
import android.view.ViewGroup
import android.widget.Filter
import android.widget.Filterable
-import android.widget.TextView
import androidx.core.content.ContextCompat
import androidx.core.os.bundleOf
import androidx.recyclerview.widget.RecyclerView
@@ -17,33 +16,26 @@ import com.habitrpg.android.habitica.extensions.inflate
import com.habitrpg.android.habitica.extensions.layoutInflater
import com.habitrpg.android.habitica.helpers.MainNavigationController
import com.habitrpg.android.habitica.helpers.NumberAbbreviator
-import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.android.habitica.models.social.Group
import com.habitrpg.android.habitica.ui.adapter.BaseRecyclerViewAdapter
import com.habitrpg.android.habitica.ui.helpers.EmojiParser
-import com.habitrpg.android.habitica.ui.helpers.setMarkdown
-import com.habitrpg.android.habitica.ui.views.HabiticaIcons
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import io.realm.Case
import io.realm.OrderedRealmCollection
import java.util.*
-class GuildListAdapter(private val onlyShowUsersGuilds: Boolean) : BaseRecyclerViewAdapter(), Filterable {
+class GuildListAdapter : BaseRecyclerViewAdapter(), Filterable {
var socialRepository: SocialRepository? = null
- private var memberGuildIDs: List = listOf()
- fun setMemberGuildIDs(memberGuildIDs: List) {
- this.memberGuildIDs = memberGuildIDs
- }
+ var onlyShowUsersGuilds = false
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
- val guildViewHolder = if (onlyShowUsersGuilds) {
+ return if (onlyShowUsersGuilds) {
UserGuildViewHolder(parent.inflate(R.layout.item_user_guild))
} else {
GuildViewHolder(parent.inflate(R.layout.item_public_guild))
}
- return guildViewHolder
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
@@ -51,19 +43,14 @@ class GuildListAdapter(private val onlyShowUsersGuilds: Boolean) : BaseRecyclerV
if (onlyShowUsersGuilds && holder is UserGuildViewHolder) {
holder.bind(guild)
} else if (holder is GuildViewHolder) {
- val isInGroup = isInGroup(guild)
- holder.bind(guild, isInGroup)
+ holder.bind(guild)
holder.itemView.tag = guild
}
- holder.itemView.setOnClickListener { v ->
+ holder.itemView.setOnClickListener {
MainNavigationController.navigate(R.id.guildFragment, bundleOf(Pair("groupID", guild.id)))
}
}
- private fun isInGroup(guild: Group): Boolean {
- return this.memberGuildIDs.contains(guild.id)
- }
-
private var unfilteredData: OrderedRealmCollection? = null
fun setUnfilteredData(data: OrderedRealmCollection?) {
@@ -120,7 +107,7 @@ class GuildListAdapter(private val onlyShowUsersGuilds: Boolean) : BaseRecyclerV
class GuildViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val binding = ItemPublicGuildBinding.bind(itemView)
- fun bind(guild: Group, isInGroup: Boolean) {
+ fun bind(guild: Group) {
binding.nameTextView.text = guild.name
val number = when {
guild.memberCount < 1000 -> 2
@@ -135,10 +122,10 @@ class GuildListAdapter(private val onlyShowUsersGuilds: Boolean) : BaseRecyclerV
binding.guildBadgeView.setImageBitmap(HabiticaIconsHelper.imageOfGuildCrestSmall(guild.memberCount.toFloat()))
binding.tagWrapper.removeAllViews()
- guild.categories?.forEach {
+ guild.categories?.forEach { category ->
val textView = PillTextviewBinding.inflate(itemView.context.layoutInflater, binding.tagWrapper, true)
- textView.root.text = it.name?.split("_")?.map { it.capitalize(Locale.getDefault()) }?.joinToString(" ")
- textView.root.background = if (it.slug == "habitica_official") {
+ textView.root.text = category.name?.split("_")?.joinToString(" ") { it.capitalize(Locale.getDefault()) }
+ textView.root.background = if (category.slug == "habitica_official") {
textView.root.setTextColor(ContextCompat.getColor(itemView.context, R.color.white))
ContextCompat.getDrawable(itemView.context, R.drawable.pill_bg_purple_400)
} else {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/StatsFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/StatsFragment.kt
index b5e55a0fe..c7a9764fd 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/StatsFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/StatsFragment.kt
@@ -204,36 +204,6 @@ class StatsFragment: BaseMainFragment() {
}
private fun updateStats(user: User) {
- val levelStat = min((user.stats?.lvl ?: 0) / 2.0f, 50f).toInt()
-
- totalStrength = levelStat
- totalIntelligence = levelStat
- totalConstitution = levelStat
- totalPerception = levelStat
-
- binding?.strengthStatsView?.levelValue = levelStat
- binding?.intelligenceStatsView?.levelValue = levelStat
- binding?.constitutionStatsView?.levelValue = levelStat
- binding?.perceptionStatsView?.levelValue = levelStat
-
- totalStrength += user.stats?.buffs?.str?.toInt() ?: 0
- totalIntelligence += user.stats?.buffs?._int?.toInt() ?: 0
- totalConstitution += user.stats?.buffs?.con?.toInt() ?: 0
- totalPerception += user.stats?.buffs?.per?.toInt() ?: 0
- binding?.strengthStatsView?.buffValue = user.stats?.buffs?.str?.toInt() ?: 0
- binding?.intelligenceStatsView?.buffValue = user.stats?.buffs?._int?.toInt() ?: 0
- binding?.constitutionStatsView?.buffValue = user.stats?.buffs?.con?.toInt() ?: 0
- binding?.perceptionStatsView?.buffValue = user.stats?.buffs?.per?.toInt() ?: 0
-
- totalStrength += user.stats?.strength ?: 0
- totalIntelligence += user.stats?.intelligence ?: 0
- totalConstitution += user.stats?.constitution ?: 0
- totalPerception += user.stats?.per ?: 0
- binding?.strengthStatsView?.allocatedValue = user.stats?.strength ?: 0
- binding?.intelligenceStatsView?.allocatedValue = user.stats?.intelligence ?: 0
- binding?.constitutionStatsView?.allocatedValue = user.stats?.constitution ?: 0
- binding?.perceptionStatsView?.allocatedValue = user.stats?.per ?: 0
-
val outfit = user.items?.gear?.equipped
val outfitList = ArrayList()
outfit?.let { thisOutfit ->
@@ -249,35 +219,63 @@ class StatsFragment: BaseMainFragment() {
compositeSubscription.add(inventoryRepository.getEquipment(outfitList).firstElement()
.retry(1)
- .subscribe(Consumer {
- val userStatComputer = UserStatComputer()
- val statsRows = user?.let { it1 -> userStatComputer.computeClassBonus(it, it1) } ?: return@Consumer
+ .subscribe( {
+ val levelStat = min((user.stats?.lvl ?: 0) / 2.0f, 50f).toInt()
- var strength = 0
- var intelligence = 0
- var constitution = 0
- var perception = 0
+ totalStrength = levelStat
+ totalIntelligence = levelStat
+ totalConstitution = levelStat
+ totalPerception = levelStat
- for (row in statsRows) {
- if (row.javaClass == UserStatComputer.AttributeRow::class.java) {
- val attributeRow = row as UserStatComputer.AttributeRow
- strength += attributeRow.strVal.toInt()
- intelligence += attributeRow.intVal.toInt()
- constitution += attributeRow.conVal.toInt()
- perception += attributeRow.perVal.toInt()
- }
- }
+ binding?.strengthStatsView?.levelValue = levelStat
+ binding?.intelligenceStatsView?.levelValue = levelStat
+ binding?.constitutionStatsView?.levelValue = levelStat
+ binding?.perceptionStatsView?.levelValue = levelStat
- totalStrength += strength
- totalIntelligence += intelligence
- totalConstitution += constitution
- totalPerception += perception
+ totalStrength += user.stats?.buffs?.str?.toInt() ?: 0
+ totalIntelligence += user.stats?.buffs?._int?.toInt() ?: 0
+ totalConstitution += user.stats?.buffs?.con?.toInt() ?: 0
+ totalPerception += user.stats?.buffs?.per?.toInt() ?: 0
+ binding?.strengthStatsView?.buffValue = user.stats?.buffs?.str?.toInt() ?: 0
+ binding?.intelligenceStatsView?.buffValue = user.stats?.buffs?._int?.toInt() ?: 0
+ binding?.constitutionStatsView?.buffValue = user.stats?.buffs?.con?.toInt() ?: 0
+ binding?.perceptionStatsView?.buffValue = user.stats?.buffs?.per?.toInt() ?: 0
+
+ totalStrength += user.stats?.strength ?: 0
+ totalIntelligence += user.stats?.intelligence ?: 0
+ totalConstitution += user.stats?.constitution ?: 0
+ totalPerception += user.stats?.per ?: 0
+ binding?.strengthStatsView?.allocatedValue = user.stats?.strength ?: 0
+ binding?.intelligenceStatsView?.allocatedValue = user.stats?.intelligence ?: 0
+ binding?.constitutionStatsView?.allocatedValue = user.stats?.constitution ?: 0
+ binding?.perceptionStatsView?.allocatedValue = user.stats?.per ?: 0
+ val userStatComputer = UserStatComputer()
+ val statsRows = userStatComputer.computeClassBonus(it, user)
+
+ var strength = 0
+ var intelligence = 0
+ var constitution = 0
+ var perception = 0
+
+ for (row in statsRows) {
+ if (row.javaClass == UserStatComputer.AttributeRow::class.java) {
+ val attributeRow = row as UserStatComputer.AttributeRow
+ strength += attributeRow.strVal.toInt()
+ intelligence += attributeRow.intVal.toInt()
+ constitution += attributeRow.conVal.toInt()
+ perception += attributeRow.perVal.toInt()
+ }
+ }
+
+ totalStrength += strength
+ totalIntelligence += intelligence
+ totalConstitution += constitution
+ totalPerception += perception
binding?.strengthStatsView?.equipmentValue = strength
binding?.intelligenceStatsView?.equipmentValue = intelligence
binding?.constitutionStatsView?.equipmentValue = constitution
binding?.perceptionStatsView?.equipmentValue = perception
- }, RxErrorHandler.handleEmptyError()))
+ }, RxErrorHandler.handleEmptyError()))
}
-
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarCustomizationFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarCustomizationFragment.kt
index 68170e97c..2a0eaa97c 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarCustomizationFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarCustomizationFragment.kt
@@ -49,7 +49,7 @@ class AvatarCustomizationFragment : BaseMainFragment
context?.let { HabiticaBaseApplication.logout(it) }
activity?.finish()
}) { throwable ->
- dialog.dismiss()
+ dialog?.dismiss()
RxErrorHandler.reportError(throwable)
})
}
@@ -264,10 +263,9 @@ class AuthenticationPreferenceFragment: BasePreferencesFragment() {
}
private fun resetAccount() {
- @Suppress("DEPRECATION")
- val dialog = ProgressDialog.show(context, context?.getString(R.string.resetting_account), null, true)
- compositeSubscription.add(userRepository.resetAccount().subscribe({ dialog.dismiss() }) { throwable ->
- dialog.dismiss()
+ val dialog = HabiticaProgressDialog.show(context, R.string.resetting_account)
+ compositeSubscription.add(userRepository.resetAccount().subscribe({ dialog?.dismiss() }) { throwable ->
+ dialog?.dismiss()
RxErrorHandler.reportError(throwable)
})
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/skills/SkillsFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/skills/SkillsFragment.kt
index c7c9962b6..906894033 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/skills/SkillsFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/skills/SkillsFragment.kt
@@ -150,9 +150,9 @@ class SkillsFragment : BaseMainFragment() {
return
}
val observable: Flowable = if (taskId != null) {
- userRepository.useSkill(user, skill.key, skill.target, taskId)
+ userRepository.useSkill(skill.key, skill.target, taskId)
} else {
- userRepository.useSkill(user, skill.key, skill.target)
+ userRepository.useSkill(skill.key, skill.target)
}
compositeSubscription.add(observable.subscribe({ skillResponse -> this.displaySkillResult(skill, skillResponse) },
RxErrorHandler.handleEmptyError()))
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildListFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildListFragment.kt
index 789a41fe5..92002899e 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildListFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildListFragment.kt
@@ -17,18 +17,19 @@ import com.habitrpg.android.habitica.ui.helpers.KeyboardUtil
import com.habitrpg.android.habitica.ui.helpers.SafeDefaultItemAnimator
import javax.inject.Inject
-class GuildListFragment(val onlyShowUsersGuilds: Boolean) : BaseFragment(), SearchView.OnQueryTextListener, SwipeRefreshLayout.OnRefreshListener {
+class GuildListFragment : BaseFragment(), SearchView.OnQueryTextListener, SwipeRefreshLayout.OnRefreshListener {
@Inject
lateinit var socialRepository: SocialRepository
override var binding: FragmentGuildListBinding? = null
+ var onlyShowUsersGuilds: Boolean = false
override fun createBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentGuildListBinding {
return FragmentGuildListBinding.inflate(inflater, container, false)
}
- private var viewAdapter = GuildListAdapter(onlyShowUsersGuilds)
+ private var viewAdapter = GuildListAdapter()
override fun injectFragment(component: UserComponent) {
component.inject(this)
@@ -38,15 +39,13 @@ class GuildListFragment(val onlyShowUsersGuilds: Boolean) : BaseFragment membership.groupID } }
- .subscribeWithErrorHandler { viewAdapter.setMemberGuildIDs(it) })
viewAdapter.socialRepository = socialRepository
binding?.recyclerView?.adapter = viewAdapter
binding?.recyclerView?.itemAnimator = SafeDefaultItemAnimator()
binding?.refreshLayout?.setOnRefreshListener(this)
+ viewAdapter.onlyShowUsersGuilds = onlyShowUsersGuilds
if (onlyShowUsersGuilds) {
compositeSubscription.add(socialRepository.getUserGroups("guild").subscribe({ viewAdapter.setUnfilteredData(it) }, RxErrorHandler.handleEmptyError()))
} else {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildOverviewFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildOverviewFragment.kt
index 202fc8cd1..1c773b9f9 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildOverviewFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/guilds/GuildOverviewFragment.kt
@@ -32,8 +32,8 @@ class GuildOverviewFragment : BaseMainFragment(), Sear
}
private var statePagerAdapter: FragmentStatePagerAdapter? = null
- private var userGuildsFragment: GuildListFragment? = GuildListFragment(true)
- private var publicGuildsFragment: GuildListFragment? = GuildListFragment(false)
+ private var userGuildsFragment: GuildListFragment? = GuildListFragment()
+ private var publicGuildsFragment: GuildListFragment? = GuildListFragment()
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
@@ -111,8 +111,10 @@ class GuildOverviewFragment : BaseMainFragment(), Sear
override fun getItem(position: Int): Fragment {
return if (position == 0) {
+ userGuildsFragment?.onlyShowUsersGuilds = true
userGuildsFragment
} else {
+ userGuildsFragment?.onlyShowUsersGuilds = false
publicGuildsFragment
} ?: Fragment()
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/NoPartyFragmentFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/NoPartyFragmentFragment.kt
index df579880a..d016aa122 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/NoPartyFragmentFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/party/NoPartyFragmentFragment.kt
@@ -155,7 +155,9 @@ class NoPartyFragmentFragment : BaseMainFragment() {
userRepository.retrieveUser(false)
}
.subscribe({
- fragmentManager?.popBackStack()
+ if (isAdded) {
+ parentFragmentManager.popBackStack()
+ }
MainNavigationController.navigate(R.id.partyFragment,
bundleOf(Pair("partyID", user?.party?.id)))
}, RxErrorHandler.handleEmptyError())
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/RewardsRecyclerviewFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/RewardsRecyclerviewFragment.kt
index 7adf2cc55..a89cdb403 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/RewardsRecyclerviewFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/RewardsRecyclerviewFragment.kt
@@ -103,8 +103,7 @@ class RewardsRecyclerviewFragment : TaskRecyclerViewFragment() {
when (requestCode) {
11 -> {
if (resultCode == Activity.RESULT_OK) {
- userRepository.useSkill(null,
- selectedCard?.key ?: "",
+ userRepository.useSkill(selectedCard?.key ?: "",
"member",
data.getStringExtra("member_id") ?: "")
.subscribeWithErrorHandler(Consumer {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TasksFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TasksFragment.kt
index 9619c64cc..cb8543b94 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TasksFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TasksFragment.kt
@@ -160,7 +160,7 @@ class TasksFragment : BaseMainFragment(), SearchView.O
private fun showFilterDialog() {
context?.let {
- var disposable: Disposable? = null
+ var disposable: Disposable
val dialog = TaskFilterDialog(it, HabiticaBaseApplication.userComponent)
disposable = tagRepository.getTags().subscribe({ tagsList -> dialog.setTags(tagsList)}, RxErrorHandler.handleEmptyError())
dialog.setActiveTags(taskFilterHelper.tags)
@@ -184,7 +184,7 @@ class TasksFragment : BaseMainFragment(), SearchView.O
}
})
dialog.setOnDismissListener {
- if (disposable?.isDisposed == false) {
+ if (!disposable.isDisposed) {
disposable.dispose()
}
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TeamBoardFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TeamBoardFragment.kt
index e06687468..feb7e923d 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TeamBoardFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TeamBoardFragment.kt
@@ -173,7 +173,7 @@ class TeamBoardFragment : BaseMainFragment(), SearchVi
private fun showFilterDialog() {
context?.let {
- var disposable: Disposable? = null
+ val disposable: Disposable
val dialog = TaskFilterDialog(it, HabiticaBaseApplication.userComponent)
disposable = tagRepository.getTags().subscribe({ tagsList -> dialog.setTags(tagsList)}, RxErrorHandler.handleEmptyError())
dialog.setActiveTags(taskFilterHelper.tags)
@@ -197,7 +197,7 @@ class TeamBoardFragment : BaseMainFragment(), SearchVi
}
})
dialog.setOnDismissListener {
- if (disposable?.isDisposed == false) {
+ if (!disposable.isDisposed) {
disposable.dispose()
}
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/AutocompleteAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/AutocompleteAdapter.kt
index 5b7916fbc..f7e067b70 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/AutocompleteAdapter.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/AutocompleteAdapter.kt
@@ -15,10 +15,7 @@ import com.habitrpg.android.habitica.models.social.ChatMessage
import com.habitrpg.android.habitica.models.social.FindUsernameResult
import com.habitrpg.android.habitica.models.user.Authentication
import com.habitrpg.android.habitica.models.user.Profile
-import com.habitrpg.android.habitica.ui.views.HabiticaEmojiTextView
import com.habitrpg.android.habitica.ui.views.social.UsernameLabel
-import com.habitrpg.android.habitica.ui.helpers.EmojiMap
-import com.habitrpg.android.habitica.ui.helpers.EmojiParser
import java.util.*
class AutocompleteAdapter(val context: Context, val socialRepository: SocialRepository? = null, var autocompleteContext: String? = null, var groupID: String? = null, val remoteAutocomplete: Boolean = false) : BaseAdapter(), Filterable {
@@ -97,8 +94,7 @@ class AutocompleteAdapter(val context: Context, val socialRepository: SocialRepo
} else {
val view = parent?.inflate(R.layout.autocomplete_emoji)
val result = getItem(position) as? String
- val emojiTextView = view?.findViewById(R.id.emoji_textview)
- //emojiTextView?.setEmojiconSize(24.dpToPx(context))
+ val emojiTextView = view?.findViewById(R.id.emoji_textview)
emojiTextView?.text = EmojiParser.parseEmojis(result)
view?.findViewById(R.id.label)?.text = result
view
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/DataBindingUtils.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/DataBindingUtils.kt
index f37c21136..0f0552b5b 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/DataBindingUtils.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/DataBindingUtils.kt
@@ -83,7 +83,7 @@ object DataBindingUtils {
}
override fun onFailureImpl(dataSource: DataSource>) {
- dataSource?.close()
+ dataSource.close()
}
}, CallerThreadExecutor.getInstance())
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/MarginDecoration.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/MarginDecoration.kt
index ea972706a..6e86a2845 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/MarginDecoration.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/helpers/MarginDecoration.kt
@@ -6,9 +6,8 @@ import android.view.View
import androidx.recyclerview.widget.RecyclerView
import com.habitrpg.android.habitica.R
-class MarginDecoration(context: Context?, noMarginViewTypes: Set = setOf()) : RecyclerView.ItemDecoration() {
+class MarginDecoration(context: Context?, private var noMarginViewTypes: Set = setOf()) : RecyclerView.ItemDecoration() {
private val margin: Int = context?.resources?.getDimensionPixelSize(R.dimen.grid_item_margin) ?: 0
- private var noMarginViewTypes = noMarginViewTypes
override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) {
val position = parent.getChildAdapterPosition(view)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/ChecklistedViewHolder.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/ChecklistedViewHolder.kt
index 352cc1ba3..fffd5ed39 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/ChecklistedViewHolder.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/ChecklistedViewHolder.kt
@@ -2,7 +2,6 @@ package com.habitrpg.android.habitica.ui.viewHolders.tasks
import android.content.Context
import android.graphics.PorterDuff
-import android.graphics.drawable.BitmapDrawable
import android.view.*
import android.widget.*
import androidx.core.content.ContextCompat
@@ -17,8 +16,6 @@ import com.habitrpg.android.habitica.models.tasks.ChecklistItem
import com.habitrpg.android.habitica.models.tasks.Task
import com.habitrpg.android.habitica.ui.helpers.MarkdownParser
import com.habitrpg.android.habitica.ui.helpers.setParsedMarkdown
-import com.habitrpg.android.habitica.ui.views.HabiticaEmojiTextView
-import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import io.reactivex.rxjava3.core.Observable
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.schedulers.Schedulers
@@ -106,7 +103,7 @@ abstract class ChecklistedViewHolder(itemView: View, scoreTaskFunc: ((Task, Task
} else {
R.color.checkbox_fill
}) ?: R.color.checkbox_fill)
- val textView = itemView?.findViewById(R.id.checkedTextView)
+ val textView = itemView?.findViewById(R.id.checkedTextView)
// Populate the data into the template view using the data object
textView?.text = item.text
textView?.setTextColor(ContextCompat.getColor(context, if (item.completed) R.color.text_dimmed else R.color.text_secondary))
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/DailyViewHolder.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/DailyViewHolder.kt
index f9e19956f..fb6160e3b 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/DailyViewHolder.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/DailyViewHolder.kt
@@ -18,33 +18,33 @@ class DailyViewHolder(itemView: View, scoreTaskFunc: ((Task, TaskDirection) -> U
return isVisible
}
- override fun bind(newTask: Task, position: Int, displayMode: String) {
- this.task = newTask
- setChecklistIndicatorBackgroundActive(newTask.isChecklistDisplayActive)
+ override fun bind(data: Task, position: Int, displayMode: String) {
+ this.task = data
+ setChecklistIndicatorBackgroundActive(data.isChecklistDisplayActive)
- if (newTask.reminders?.size == 0) {
+ if (data.reminders?.size == 0) {
reminderTextView.visibility = View.GONE
} else {
reminderTextView.visibility = View.VISIBLE
val now = Date()
val calendar = Calendar.getInstance()
- val nextReminder = newTask.reminders?.firstOrNull {
+ val nextReminder = data.reminders?.firstOrNull {
calendar.time = now
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DATE), it.time?.hours ?: 0, it.time?.minutes ?: 0, 0)
now < calendar.time
- } ?: newTask.reminders?.first()
+ } ?: data.reminders?.first()
var reminderString = ""
if (nextReminder?.time != null) {
reminderString += formatter.format(nextReminder.time)
}
- if ((newTask.reminders?.size ?: 0) > 1) {
- reminderString = "$reminderString (+${(newTask.reminders?.size ?: 0)-1})"
+ if ((data.reminders?.size ?: 0) > 1) {
+ reminderString = "$reminderString (+${(data.reminders?.size ?: 0)-1})"
}
reminderTextView.text = reminderString
}
- super.bind(newTask, position, displayMode)
+ super.bind(data, position, displayMode)
}
override fun shouldDisplayAsActive(newTask: Task?): Boolean {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/TodoViewHolder.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/TodoViewHolder.kt
index 8dfbf14d3..c6ba11ca4 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/TodoViewHolder.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/TodoViewHolder.kt
@@ -12,12 +12,12 @@ class TodoViewHolder(itemView: View, scoreTaskFunc: ((Task, TaskDirection) -> Un
private val dateFormatter: DateFormat = android.text.format.DateFormat.getDateFormat(context)
- override fun bind(newTask: Task, position: Int, displayMode: String) {
- this.task = newTask
- setChecklistIndicatorBackgroundActive(newTask.isChecklistDisplayActive)
+ override fun bind(data: Task, position: Int, displayMode: String) {
+ this.task = data
+ setChecklistIndicatorBackgroundActive(data.isChecklistDisplayActive)
reminderTextView.visibility = View.GONE
this.streakTextView.visibility = View.GONE
- super.bind(newTask, position, displayMode)
+ super.bind(data, position, displayMode)
}
override fun configureSpecialTaskTextView(task: Task) {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/DragLinearLayout.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/DragLinearLayout.kt
index 042f80630..f8f186784 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/DragLinearLayout.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/DragLinearLayout.kt
@@ -200,34 +200,6 @@ open class DragLinearLayout @JvmOverloads constructor(context: Context, attrs: A
super.setOrientation(orientation)
}
- /**
- * Calls [.addView] followed by [.setViewDraggable].
- */
- fun addDragView(child: View, dragHandle: View) {
- addView(child)
- setViewDraggable(child, dragHandle)
- }
-
- /**
- * Calls [.addView] followed by
- * [.setViewDraggable] and correctly updates the
- * drag-ability state of all existing views.
- */
- fun addDragView(child: View, dragHandle: View, index: Int) {
- addView(child, index)
-
- // update drag-able children mappings
- val numMappings = draggableChildren.size()
- for (i in numMappings - 1 downTo 0) {
- val key = draggableChildren.keyAt(i)
- if (key >= index) {
- draggableChildren.put(key + 1, draggableChildren.get(key))
- }
- }
-
- setViewDraggable(child, dragHandle)
- }
-
/**
* Makes the child a candidate for dragging. Must be an existing child of this layout.
*/
@@ -250,44 +222,11 @@ open class DragLinearLayout @JvmOverloads constructor(context: Context, attrs: A
}
}
- /**
- * Calls [.removeView] and correctly updates the drag-ability state of
- * all remaining views.
- */
- fun removeDragView(child: View) {
- if (this === child.parent) {
- val index = indexOfChild(child)
- removeView(child)
-
- // update drag-able children mappings
- val mappings = draggableChildren.size()
- for (i in 0 until mappings) {
- val key = draggableChildren.keyAt(i)
- if (key >= index) {
- val next = draggableChildren.get(key + 1)
- if (null == next) {
- draggableChildren.delete(key)
- } else {
- draggableChildren.put(key, next)
- }
- }
- }
- }
- }
-
override fun removeAllViews() {
super.removeAllViews()
draggableChildren.clear()
}
- /**
- * If this layout is within a [android.widget.ScrollView], register it here so that it
- * can be scrolled during item drags.
- */
- fun setContainerScrollView(scrollView: ScrollView) {
- this.containerScrollView = scrollView
- }
-
/**
* See [com.habitrpg.android.habitica.ui.views.DragLinearLayout.OnViewSwapListener].
*/
@@ -598,7 +537,7 @@ open class DragLinearLayout @JvmOverloads constructor(context: Context, attrs: A
}
override fun onTouchEvent(event: MotionEvent): Boolean {
- when (MotionEventCompat.getActionMasked(event)) {
+ when (event.actionMasked) {
MotionEvent.ACTION_DOWN -> {
if (!draggedItem.detecting || draggedItem.settling()) return false
startDrag()
@@ -609,7 +548,7 @@ open class DragLinearLayout @JvmOverloads constructor(context: Context, attrs: A
if (INVALID_POINTER_ID == activePointerId) return false
val pointerIndex = event.findPointerIndex(activePointerId)
- val lastEventY = MotionEventCompat.getY(event, pointerIndex).toInt()
+ val lastEventY = event.getY(pointerIndex).toInt()
val deltaY = lastEventY - downY
onDrag(deltaY)
@@ -617,8 +556,8 @@ open class DragLinearLayout @JvmOverloads constructor(context: Context, attrs: A
}
MotionEvent.ACTION_POINTER_UP -> {
run {
- val pointerIndex = MotionEventCompat.getActionIndex(event)
- val pointerId = MotionEventCompat.getPointerId(event, pointerIndex)
+ val pointerIndex = event.actionIndex
+ val pointerId = event.getPointerId(pointerIndex)
if (pointerId != activePointerId)
return false // if active pointer, fall through and cancel!
@@ -655,7 +594,8 @@ open class DragLinearLayout @JvmOverloads constructor(context: Context, attrs: A
private inner class DragHandleOnTouchListener(private val view: View) : OnTouchListener {
override fun onTouch(v: View, event: MotionEvent): Boolean {
- if (MotionEvent.ACTION_DOWN == MotionEventCompat.getActionMasked(event)) {
+ view.performClick()
+ if (MotionEvent.ACTION_DOWN == event.actionMasked) {
startDetectingDrag(view)
}
return false
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/EllipsisTextView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/EllipsisTextView.kt
index 2842b3002..2d4caaa49 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/EllipsisTextView.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/EllipsisTextView.kt
@@ -16,8 +16,9 @@ package com.habitrpg.android.habitica.ui.views
import android.content.Context
import android.util.AttributeSet
+import androidx.appcompat.widget.AppCompatTextView
-class EllipsisTextView : HabiticaEmojiTextView {
+class EllipsisTextView : AppCompatTextView {
private val ellipsesListeners = ArrayList()
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaEmojiTextView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaEmojiTextView.kt
deleted file mode 100644
index 949c6d712..000000000
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaEmojiTextView.kt
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.habitrpg.android.habitica.ui.views
-
-import android.content.Context
-import android.util.AttributeSet
-import androidx.appcompat.widget.AppCompatTextView
-
-open class HabiticaEmojiTextView : AppCompatTextView {
-
- constructor(context: Context) : super(context)
-
- constructor(context: Context, attrs: AttributeSet) : super(context, attrs)
-
- constructor(context: Context, attrs: AttributeSet, defStyle: Int) : super(context, attrs, defStyle)
-}
\ No newline at end of file
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaProgressBar.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaProgressBar.kt
index 713706086..4e5fb59c8 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaProgressBar.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaProgressBar.kt
@@ -9,7 +9,6 @@ import android.view.View
import android.widget.FrameLayout
import android.widget.ImageView
import android.widget.LinearLayout
-import androidx.core.content.ContextCompat
import androidx.core.widget.ImageViewCompat
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.databinding.ProgressBarBinding
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaSnackbar.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaSnackbar.kt
index 1a3333ae8..1f7f14724 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaSnackbar.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaSnackbar.kt
@@ -79,8 +79,9 @@ private constructor(parent: ViewGroup, content: View, callback: ContentViewCallb
return this
}
- private class ContentViewCallback(private val content: View) : BaseTransientBottomBar.ContentViewCallback {
+ private class ContentViewCallback(private val content: View) : com.google.android.material.snackbar.ContentViewCallback {
+ @Suppress("SameParameterValue")
override fun animateContentIn(delay: Int, duration: Int) {
content.scaleY = 0f
content.scaleX = 0f
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/Typewriter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/Typewriter.kt
index 5b0f453cd..34dce71ce 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/Typewriter.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/Typewriter.kt
@@ -2,7 +2,6 @@ package com.habitrpg.android.habitica.ui.views
import android.content.Context
-import android.os.Handler
import androidx.core.content.ContextCompat
import android.text.Spannable
import android.text.SpannableStringBuilder
@@ -10,9 +9,11 @@ import android.text.style.ForegroundColorSpan
import android.util.AttributeSet
import com.habitrpg.android.habitica.R
+import kotlinx.coroutines.*
// http://stackoverflow.com/a/6700718/1315039
class Typewriter : androidx.appcompat.widget.AppCompatTextView {
+ private var job: Job? = null
private var stringBuilder: SpannableStringBuilder? = null
private var visibleSpan: Any? = null
@@ -20,17 +21,6 @@ class Typewriter : androidx.appcompat.widget.AppCompatTextView {
private var index: Int = 0
private var delay: Long = 30
- private val textHandler = Handler()
- private val characterAdder = object : Runnable {
- override fun run() {
- stringBuilder?.setSpan(visibleSpan, 0, index++, Spannable.SPAN_INCLUSIVE_INCLUSIVE)
- text = stringBuilder
- if (index <= stringBuilder?.length ?: 0) {
- textHandler.postDelayed(this, delay)
- }
- }
- }
-
val isAnimating: Boolean
get() = index < stringBuilder?.length ?: 0
@@ -43,6 +33,11 @@ class Typewriter : androidx.appcompat.widget.AppCompatTextView {
setupTextColors(context)
}
+ override fun onDetachedFromWindow() {
+ job?.cancel()
+ super.onDetachedFromWindow()
+ }
+
private fun setupTextColors(context: Context) {
visibleSpan = ForegroundColorSpan(ContextCompat.getColor(context, R.color.text_primary))
hiddenSpan = ForegroundColorSpan(ContextCompat.getColor(context, R.color.transparent))
@@ -54,12 +49,14 @@ class Typewriter : androidx.appcompat.widget.AppCompatTextView {
index = 0
setText(stringBuilder)
- textHandler.removeCallbacks(characterAdder)
- textHandler.postDelayed(characterAdder, delay)
- }
-
- fun setCharacterDelay(millis: Long) {
- delay = millis
+ job?.cancel()
+ job = GlobalScope.launch(Dispatchers.Main) {
+ while (index <= stringBuilder?.length ?: 0) {
+ stringBuilder?.setSpan(visibleSpan, 0, index++, Spannable.SPAN_INCLUSIVE_INCLUSIVE)
+ setText(stringBuilder)
+ delay(delay)
+ }
+ }
}
fun stopTextAnimation() {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/WrapContentDraweeView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/WrapContentDraweeView.kt
index 25bb4e5c0..09d5a6513 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/WrapContentDraweeView.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/WrapContentDraweeView.kt
@@ -15,11 +15,9 @@ class WrapContentDraweeView : SimpleDraweeView {
// we set a listener and update the view's aspect ratio depending on the loaded image
private val listener = object : BaseControllerListener() {
override fun onIntermediateImageSet(id: String?, imageInfo: ImageInfo?) {
- updateViewSize(imageInfo)
}
override fun onFinalImageSet(id: String?, imageInfo: ImageInfo?, animatable: Animatable?) {
- updateViewSize(imageInfo)
}
}
@@ -40,8 +38,4 @@ class WrapContentDraweeView : SimpleDraweeView {
.build()
setController(controller)
}
-
- internal fun updateViewSize(imageInfo: ImageInfo?) {
-
- }
}
\ No newline at end of file
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/HabiticaProgressDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/HabiticaProgressDialog.kt
new file mode 100644
index 000000000..781083c84
--- /dev/null
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/HabiticaProgressDialog.kt
@@ -0,0 +1,22 @@
+package com.habitrpg.android.habitica.ui.views.dialogs
+
+import android.content.Context
+import com.habitrpg.android.habitica.R
+import com.habitrpg.android.habitica.extensions.dpToPx
+
+class HabiticaProgressDialog(context: Context) : HabiticaAlertDialog(context) {
+ companion object {
+ fun show(context: Context?, titleID: Int): HabiticaProgressDialog? {
+ return show(context, context?.getString(titleID))
+ }
+
+ fun show(context: Context?, title: String?): HabiticaProgressDialog? {
+ val dialog = context?.let { HabiticaProgressDialog(it) }
+ context?.let { dialog?.setAdditionalContentView(R.layout.circular_progress) }
+ dialog?.dialogWidth = 150.dpToPx(context)
+ dialog?.setTitle(title)
+ dialog?.enqueue()
+ return dialog
+ }
+ }
+}
\ No newline at end of file
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/QuestCompletedDialogContent.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/QuestCompletedDialogContent.kt
index 2ece0fe4c..d1f4023ed 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/QuestCompletedDialogContent.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/dialogs/QuestCompletedDialogContent.kt
@@ -48,12 +48,12 @@ class QuestCompletedDialogContent : LinearLayout {
if (questContent.drop != null && questContent.drop?.items != null) {
questContent.drop?.items
- ?.filterNot { it.isOnlyOwner }
+ ?.filterNot { it.onlyOwner }
?.forEach { addRewardsRow(inflater, it, binding.rewardsList) }
var hasOwnerRewards = false
for (item in questContent.drop?.items ?: emptyList()) {
- if (item.isOnlyOwner) {
+ if (item.onlyOwner) {
addRewardsRow(inflater, item, binding.ownerRewardsList)
hasOwnerRewards = true
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/navigation/HabiticaBottomNavigationView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/navigation/HabiticaBottomNavigationView.kt
index b25498494..b19922156 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/navigation/HabiticaBottomNavigationView.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/navigation/HabiticaBottomNavigationView.kt
@@ -95,7 +95,7 @@ class HabiticaBottomNavigationView @JvmOverloads constructor(
animateButtonTap()
true
}
- binding.addButton.setOnTouchListener { view, event ->
+ binding.addButton.setOnTouchListener { _, event ->
if (event.action == MotionEvent.ACTION_DOWN) {
val animX = ObjectAnimator.ofFloat(binding.addButton, "scaleX", 1f, 1.1f)
animX.duration = 100
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt
index 2519494df..bfd3b804b 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt
@@ -310,7 +310,7 @@ class PurchaseDialog(context: Context, component: UserComponent?, val item: Shop
} else if (shopItem.purchaseType == "quests" && shopItem.currency == "gold") {
observable = inventoryRepository.purchaseQuest(shopItem.key).cast(Any::class.java)
} else if (shopItem.purchaseType == "debuffPotion") {
- observable = userRepository.useSkill(user, shopItem.key, null).cast(Any::class.java)
+ observable = userRepository.useSkill(shopItem.key, null).cast(Any::class.java)
} else if (shopItem.purchaseType == "card") {
purchaseCardAction?.invoke(shopItem)
dismiss()
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogQuestContent.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogQuestContent.kt
index 7ff929403..612be8a1c 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogQuestContent.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialogQuestContent.kt
@@ -49,12 +49,12 @@ class PurchaseDialogQuestContent(context: Context) : PurchaseDialogContent(conte
if (questContent.drop != null && questContent.drop?.items != null) {
questContent.drop?.items
- ?.filterNot { it.isOnlyOwner }
+ ?.filterNot { it.onlyOwner }
?.forEach { addRewardsRow(inflater, it, binding.rewardsList) }
var hasOwnerRewards = false
for (item in questContent.drop?.items ?: emptyList()) {
- if (item.isOnlyOwner) {
+ if (item.onlyOwner) {
addRewardsRow(inflater, item, binding.ownerRewardsList)
hasOwnerRewards = true
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/InvitationsView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/InvitationsView.kt
index 22baf82af..8f3b4fc48 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/InvitationsView.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/InvitationsView.kt
@@ -16,7 +16,6 @@ class InvitationsView @JvmOverloads constructor(
var setLeader: ((String) -> Unit)? = null
var leaderID: String? = null
var groupName: String? = null
- var leaderName: String? = null
init {
orientation = VERTICAL
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/stats/BulkAllocateStatsDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/stats/BulkAllocateStatsDialog.kt
index 735d79982..1f10be678 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/stats/BulkAllocateStatsDialog.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/stats/BulkAllocateStatsDialog.kt
@@ -1,6 +1,6 @@
package com.habitrpg.android.habitica.ui.views.stats
-import android.app.ProgressDialog
+import android.annotation.SuppressLint
import android.content.Context
import android.os.Bundle
import androidx.appcompat.app.AlertDialog
@@ -12,7 +12,6 @@ import com.habitrpg.android.habitica.databinding.DialogBulkAllocateBinding
import com.habitrpg.android.habitica.extensions.getThemeColor
import com.habitrpg.android.habitica.extensions.layoutInflater
import com.habitrpg.android.habitica.helpers.RxErrorHandler
-import com.habitrpg.android.habitica.models.user.User
import io.reactivex.rxjava3.disposables.Disposable
import javax.inject.Inject
@@ -43,16 +42,6 @@ class BulkAllocateStatsDialog(context: Context, component: UserComponent?) : Ale
binding.perceptionSliderView.maxValue = pointsToAllocate
}
- private var user: User? = null
- set(value) {
- field = value
- pointsToAllocate = user?.stats?.points ?: 0
- binding.strengthSliderView.previousValue = user?.stats?.strength ?: 0
- binding.intelligenceSliderView.previousValue = user?.stats?.intelligence ?: 0
- binding.constitutionSliderView.previousValue = user?.stats?.constitution ?: 0
- binding.perceptionSliderView.previousValue = user?.stats?.per ?: 0
- }
-
init {
component?.inject(this)
@@ -66,18 +55,15 @@ class BulkAllocateStatsDialog(context: Context, component: UserComponent?) : Ale
}
private fun saveChanges() {
- @Suppress("DEPRECATION")
- val progressDialog = ProgressDialog.show(context, context.getString(R.string.allocating_points), null, true)
- userRepository.bulkAllocatePoints(user, binding.strengthSliderView.currentValue,
+ getButton(BUTTON_POSITIVE).isEnabled = false
+ userRepository.bulkAllocatePoints(binding.strengthSliderView.currentValue,
binding.intelligenceSliderView.currentValue,
binding.constitutionSliderView.currentValue,
binding.perceptionSliderView.currentValue)
.subscribe({
- progressDialog.dismiss()
this.dismiss()
}, {
RxErrorHandler.reportError(it)
- progressDialog.dismiss()
this.dismiss()
})
}
@@ -85,7 +71,11 @@ class BulkAllocateStatsDialog(context: Context, component: UserComponent?) : Ale
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
subscription = userRepository.getUser().subscribe({
- user = it
+ pointsToAllocate = it.stats?.points ?: 0
+ binding.strengthSliderView.previousValue = it.stats?.strength ?: 0
+ binding.intelligenceSliderView.previousValue = it.stats?.intelligence ?: 0
+ binding.constitutionSliderView.previousValue = it.stats?.constitution ?: 0
+ binding.perceptionSliderView.previousValue = it.stats?.per ?: 0
}, RxErrorHandler.handleEmptyError())
binding.strengthSliderView.allocateAction = {
@@ -141,6 +131,7 @@ class BulkAllocateStatsDialog(context: Context, component: UserComponent?) : Ale
super.dismiss()
}
+ @SuppressLint("SetTextI18n")
private fun updateTitle() {
binding.allocatedTitle.text = "$allocatedPoints/$pointsToAllocate"
if (allocatedPoints > 0) {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/yesterdailies/YesterdailyDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/yesterdailies/YesterdailyDialog.kt
index 81d9777d0..1e9b05e47 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/yesterdailies/YesterdailyDialog.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/yesterdailies/YesterdailyDialog.kt
@@ -2,7 +2,6 @@ package com.habitrpg.android.habitica.ui.views.yesterdailies
import android.app.Activity
import android.content.Context
-import android.graphics.PorterDuff
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@@ -19,11 +18,9 @@ import com.habitrpg.android.habitica.helpers.AmplitudeManager
import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.android.habitica.models.tasks.ChecklistItem
import com.habitrpg.android.habitica.models.tasks.Task
-import com.habitrpg.android.habitica.ui.views.HabiticaEmojiTextView
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import io.reactivex.rxjava3.core.Observable
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
-import io.reactivex.rxjava3.functions.Consumer
import java.util.*
import java.util.concurrent.TimeUnit
import kotlin.math.abs
@@ -156,7 +153,7 @@ class YesterdailyDialog private constructor(context: Context, private val userRe
checkboxBackground.setBackgroundResource(R.drawable.daily_unchecked)
}
- val emojiView = taskView.findViewById(R.id.text_view) as? HabiticaEmojiTextView
+ val emojiView = taskView.findViewById(R.id.text_view)
emojiView?.text = task.markdownText { emojiView?.text = it }
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/BaseWidgetProvider.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/BaseWidgetProvider.kt
index 9194e713a..6084cdef4 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/BaseWidgetProvider.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/BaseWidgetProvider.kt
@@ -66,7 +66,7 @@ abstract class BaseWidgetProvider : AppWidgetProvider() {
protected fun showToastForTaskDirection(context: Context, data: TaskScoringResult?) {
if (data != null) {
- val pair = NotifyUserUseCase.getNotificationAndAddStatsToUserAsText(context, data.experienceDelta!!, data.healthDelta!!, data.goldDelta!!, data.manaDelta!!)
+ val pair = NotifyUserUseCase.getNotificationAndAddStatsToUserAsText(data.experienceDelta!!, data.healthDelta!!, data.goldDelta!!, data.manaDelta!!)
val toast = Toast.makeText(context, pair.first, Toast.LENGTH_LONG)
toast.show()
}
diff --git a/Habitica/staff/release/output-metadata.json b/Habitica/staff/release/output-metadata.json
index 55c3bd572..515469728 100644
--- a/Habitica/staff/release/output-metadata.json
+++ b/Habitica/staff/release/output-metadata.json
@@ -10,8 +10,8 @@
{
"type": "SINGLE",
"filters": [],
- "versionCode": 2828,
- "versionName": "3.2",
+ "versionCode": 2835,
+ "versionName": "3.2.1",
"outputFile": "Habitica-staff-release.apk"
}
]