From 7ff18303105d903076af37b2911d68693b56a072 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Wed, 15 Nov 2017 19:30:01 +0100 Subject: [PATCH] fix bulk allocation issues. Fixes #865 --- Habitica/res/layout/dialog_bulk_allocate.xml | 8 +-- Habitica/res/layout/fragment_stats.xml | 8 +-- .../res/layout/tavern_chat_new_entry_item.xml | 9 ++-- Habitica/res/values/strings.xml | 1 + .../habitica/components/AppComponent.java | 2 +- .../habitica/ui/fragments/StatsFragment.kt | 11 ++-- .../ui/fragments/social/ChatListFragment.kt | 53 +++++++++++-------- .../habitica/ui/views/HabiticaSnackbar.java | 10 ++-- .../{ => stats}/BulkAllocateStatsDialog.kt | 3 +- .../ui/views/{ => stats}/StatsSliderView.kt | 10 ++-- .../ui/views/{ => stats}/StatsView.kt | 3 +- 11 files changed, 67 insertions(+), 51 deletions(-) rename Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/{ => stats}/BulkAllocateStatsDialog.kt (97%) rename Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/{ => stats}/StatsSliderView.kt (89%) rename Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/{ => stats}/StatsView.kt (96%) diff --git a/Habitica/res/layout/dialog_bulk_allocate.xml b/Habitica/res/layout/dialog_bulk_allocate.xml index 3cddcfc2b..8a7abbc83 100644 --- a/Habitica/res/layout/dialog_bulk_allocate.xml +++ b/Habitica/res/layout/dialog_bulk_allocate.xml @@ -37,28 +37,28 @@ android:layout_height="wrap_content" android:padding="18dp" android:orientation="vertical"> - - - - - - - - - + android:inputType="textCapSentences|textMultiLine"/> + android:src="@drawable/ic_send_grey_600_24dp" + android:contentDescription="@string/send"/> This item is only available to a specific class.\nYou can change your class from Settings. You can only purchase gear for your current class %d points + Toogle Emojis diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/components/AppComponent.java b/Habitica/src/main/java/com/habitrpg/android/habitica/components/AppComponent.java index e374f70a9..cbb192e7e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/components/AppComponent.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/components/AppComponent.java @@ -87,7 +87,7 @@ import com.habitrpg.android.habitica.ui.fragments.social.party.PartyInviteFragme import com.habitrpg.android.habitica.ui.fragments.social.party.PartyMemberListFragment; import com.habitrpg.android.habitica.ui.fragments.tasks.TaskRecyclerViewFragment; import com.habitrpg.android.habitica.ui.fragments.tasks.TasksFragment; -import com.habitrpg.android.habitica.ui.views.BulkAllocateStatsDialog; +import com.habitrpg.android.habitica.ui.views.stats.BulkAllocateStatsDialog; import com.habitrpg.android.habitica.ui.views.shops.PurchaseDialog; import com.habitrpg.android.habitica.ui.views.tasks.TaskFilterDialog; import com.habitrpg.android.habitica.widget.AvatarStatsWidgetProvider; 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 0776807ae..e4daa766a 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 @@ -17,7 +17,7 @@ import com.habitrpg.android.habitica.helpers.RxErrorHandler import com.habitrpg.android.habitica.helpers.UserStatComputer import com.habitrpg.android.habitica.models.user.Stats import com.habitrpg.android.habitica.modules.AppModule -import com.habitrpg.android.habitica.ui.views.BulkAllocateStatsDialog +import com.habitrpg.android.habitica.ui.views.stats.BulkAllocateStatsDialog import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper import kotlinx.android.synthetic.main.fragment_stats.* import rx.functions.Action1 @@ -25,6 +25,7 @@ import java.util.* import javax.inject.Inject import javax.inject.Named + class StatsFragment: BaseMainFragment() { @field:[Inject Named(AppModule.NAMED_USER_ID)] @@ -55,12 +56,12 @@ class StatsFragment: BaseMainFragment() { } override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - super.onCreateView(inflater, container, savedInstanceState) - hideToolbar() - tutorialStepIdentifier = "stats" tutorialText = getString(R.string.tutorial_stats) + super.onCreateView(inflater, container, savedInstanceState) + hideToolbar() + return container?.inflate(R.layout.fragment_stats) } @@ -198,7 +199,7 @@ class StatsFragment: BaseMainFragment() { private fun updateStats() { val currentUser = user ?: return - val levelStat = Math.min(currentUser.stats.getLvl()!! / 2.0f, 50f).toInt() + val levelStat = Math.min(currentUser.stats.getLvl() / 2.0f, 50f).toInt() totalStrength = levelStat totalIntelligence = levelStat diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatListFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatListFragment.kt index ffcf6d822..d715b5c65 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatListFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatListFragment.kt @@ -12,7 +12,6 @@ import android.support.v7.widget.LinearLayoutManager import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import butterknife.ButterKnife import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.components.AppComponent import com.habitrpg.android.habitica.data.SocialRepository @@ -41,7 +40,7 @@ class ChatListFragment : BaseFragment(), SwipeRefreshLayout.OnRefreshListener { lateinit var socialRepository: SocialRepository @Inject lateinit var userRepository: UserRepository - var isTavern: Boolean = false + private var isTavern: Boolean = false internal var layoutManager: LinearLayoutManager? = null private var groupId: String? = null private var user: User? = null @@ -73,7 +72,7 @@ class ChatListFragment : BaseFragment(), SwipeRefreshLayout.OnRefreshListener { if (savedInstanceState.containsKey("userId")) { this.userId = savedInstanceState.getString("userId") if (this.userId != null) { - userRepository!!.getUser(userId!!).subscribe(Action1 { habitRPGUser -> this.user = habitRPGUser }, RxErrorHandler.handleEmptyError()) + userRepository.getUser(userId!!).subscribe(Action1 { habitRPGUser -> this.user = habitRPGUser }, RxErrorHandler.handleEmptyError()) } } @@ -99,7 +98,7 @@ class ChatListFragment : BaseFragment(), SwipeRefreshLayout.OnRefreshListener { super.onViewCreated(view, savedInstanceState) refreshLayout.setOnRefreshListener(this) - layoutManager = recyclerView.layoutManager as LinearLayoutManager + layoutManager = recyclerView.layoutManager as LinearLayoutManager? if (layoutManager == null) { layoutManager = LinearLayoutManager(context) @@ -162,30 +161,38 @@ class ChatListFragment : BaseFragment(), SwipeRefreshLayout.OnRefreshListener { val messageText = ClipData.newPlainText("Chat message", chatMessage.text) clipMan.primaryClip = messageText val activity = activity as MainActivity? - showSnackbar(activity!!.getFloatingMenuWrapper(), getString(R.string.chat_message_copied), SnackbarDisplayType.NORMAL) + if (activity != null) { + showSnackbar(activity.getFloatingMenuWrapper(), getString(R.string.chat_message_copied), SnackbarDisplayType.NORMAL) + } } private fun showFlagConfirmationDialog(chatMessage: ChatMessage) { - val builder = AlertDialog.Builder(activity!!) - builder.setMessage(R.string.chat_flag_confirmation) - .setPositiveButton(R.string.flag_confirm) { dialog, id -> - socialRepository.flagMessage(chatMessage) - .subscribe(Action1 { aVoid -> - val activity = activity as MainActivity? - showSnackbar(activity!!.getFloatingMenuWrapper(), "Flagged message by " + chatMessage.user, SnackbarDisplayType.NORMAL) - }, RxErrorHandler.handleEmptyError()) - } - .setNegativeButton(R.string.action_cancel) { dialog, id -> } - builder.show() + val context = context + if (context != null) { + val builder = AlertDialog.Builder(context) + builder.setMessage(R.string.chat_flag_confirmation) + .setPositiveButton(R.string.flag_confirm) { _, _ -> + socialRepository.flagMessage(chatMessage) + .subscribe(Action1 { + val activity = activity as MainActivity? + showSnackbar(activity!!.getFloatingMenuWrapper(), "Flagged message by " + chatMessage.user, SnackbarDisplayType.NORMAL) + }, RxErrorHandler.handleEmptyError()) + } + .setNegativeButton(R.string.action_cancel) { _, _ -> } + builder.show() + } } private fun showDeleteConfirmationDialog(chatMessage: ChatMessage) { - AlertDialog.Builder(context!!) - .setTitle(R.string.confirm_delete_tag_title) - .setMessage(R.string.confirm_delete_tag_message) - .setIcon(android.R.drawable.ic_dialog_alert) - .setPositiveButton(android.R.string.yes) { _, _ -> socialRepository.deleteMessage(chatMessage).subscribe(Action1 { }, RxErrorHandler.handleEmptyError()) } - .setNegativeButton(android.R.string.no, null).show() + val context = context + if (context != null) { + AlertDialog.Builder(context) + .setTitle(R.string.confirm_delete_tag_title) + .setMessage(R.string.confirm_delete_tag_message) + .setIcon(android.R.drawable.ic_dialog_alert) + .setPositiveButton(android.R.string.yes) { _, _ -> socialRepository.deleteMessage(chatMessage).subscribe(Action1 { }, RxErrorHandler.handleEmptyError()) } + .setNegativeButton(android.R.string.no, null).show() + } } private fun copyMessageAsTodo(chatMessage: ChatMessage) { @@ -208,7 +215,7 @@ class ChatListFragment : BaseFragment(), SwipeRefreshLayout.OnRefreshListener { markMessagesAsSeen() } - fun sendChatMessage(chatText: String) { + private fun sendChatMessage(chatText: String) { socialRepository.postGroupChat(groupId, chatText).subscribe(Action1 { recyclerView?.scrollToPosition(0) }, RxErrorHandler.handleEmptyError()) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaSnackbar.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaSnackbar.java index 6d3457b72..f92bd0af8 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaSnackbar.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/HabiticaSnackbar.java @@ -127,24 +127,24 @@ public class HabiticaSnackbar extends BaseTransientBottomBar { } - public static void showSnackbar(ViewGroup container, CharSequence content, SnackbarDisplayType displayType) { + public static void showSnackbar(@NonNull ViewGroup container, CharSequence content, SnackbarDisplayType displayType) { showSnackbar(container, null, null, content, null, null, 0, null, displayType); } - public static void showSnackbar(ViewGroup container, Drawable leftImage, CharSequence title, CharSequence content, SnackbarDisplayType displayType) { + public static void showSnackbar(@NonNull ViewGroup container, Drawable leftImage, CharSequence title, CharSequence content, SnackbarDisplayType displayType) { showSnackbar(container, leftImage, title, content, null, null, 0, null, displayType); } - public static void showSnackbar(ViewGroup container, CharSequence title, CharSequence content, Drawable rightIcon, int rightTextColor, String rightText, SnackbarDisplayType displayType) { + public static void showSnackbar(@NonNull ViewGroup container, CharSequence title, CharSequence content, Drawable rightIcon, int rightTextColor, String rightText, SnackbarDisplayType displayType) { showSnackbar(container, null, title, content, null, rightIcon, rightTextColor, rightText, displayType); } - public static void showSnackbar(ViewGroup container, CharSequence title, CharSequence content, View specialView, SnackbarDisplayType displayType) { + public static void showSnackbar(@NonNull ViewGroup container, CharSequence title, CharSequence content, View specialView, SnackbarDisplayType displayType) { showSnackbar(container, null, title, content, specialView, null, 0, null, displayType); } - public static void showSnackbar(ViewGroup container, Drawable leftImage, CharSequence title, CharSequence content, View specialView, Drawable rightIcon, int rightTextColor, String rightText, SnackbarDisplayType displayType) { + public static void showSnackbar(@NonNull ViewGroup container, Drawable leftImage, CharSequence title, CharSequence content, View specialView, Drawable rightIcon, int rightTextColor, String rightText, SnackbarDisplayType displayType) { HabiticaSnackbar snackbar = HabiticaSnackbar.make(container, Snackbar.LENGTH_LONG) .setTitle(title) .setText(content) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/BulkAllocateStatsDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/stats/BulkAllocateStatsDialog.kt similarity index 97% rename from Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/BulkAllocateStatsDialog.kt rename to Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/stats/BulkAllocateStatsDialog.kt index 667298bb3..5cbfcf1c9 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/BulkAllocateStatsDialog.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/stats/BulkAllocateStatsDialog.kt @@ -1,4 +1,4 @@ -package com.habitrpg.android.habitica.ui.views +package com.habitrpg.android.habitica.ui.views.stats import android.app.ProgressDialog import android.content.Context @@ -11,6 +11,7 @@ import com.habitrpg.android.habitica.components.AppComponent import com.habitrpg.android.habitica.data.UserRepository import com.habitrpg.android.habitica.helpers.RxErrorHandler import com.habitrpg.android.habitica.models.user.User +import com.habitrpg.android.habitica.ui.views.stats.StatsSliderView import kotlinx.android.synthetic.main.dialog_bulk_allocate.* import rx.Subscription import rx.functions.Action1 diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/StatsSliderView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/stats/StatsSliderView.kt similarity index 89% rename from Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/StatsSliderView.kt rename to Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/stats/StatsSliderView.kt index d931a56a5..a14fc371e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/StatsSliderView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/stats/StatsSliderView.kt @@ -1,4 +1,4 @@ -package com.habitrpg.android.habitica.ui.views +package com.habitrpg.android.habitica.ui.views.stats import android.content.Context import android.content.res.ColorStateList @@ -35,6 +35,9 @@ class StatsSliderView(context: Context, attrs: AttributeSet?) : LinearLayout(con field = value statsSeekBar.progress = value valueEditText.setText(value.toString()) + if (valueEditText.isFocused) { + valueEditText.setSelection(valueEditText.length()) + } } var allocateAction: ((Int) -> Unit)? = null @@ -70,11 +73,12 @@ class StatsSliderView(context: Context, attrs: AttributeSet?) : LinearLayout(con } catch (e: NumberFormatException) { 0 } - if (newValue != currentValue && newValue < maxValue) { + if (newValue != currentValue && newValue <= maxValue && newValue > 0) { currentValue = newValue allocateAction?.invoke(currentValue) - } else if (newValue > maxValue) { + } else if (newValue > maxValue || newValue < 0) { valueEditText.setText(currentValue.toString()) + valueEditText.setSelection(valueEditText.length()) } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/StatsView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/stats/StatsView.kt similarity index 96% rename from Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/StatsView.kt rename to Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/stats/StatsView.kt index 1e23dcd0e..9a58b3fa8 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/StatsView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/stats/StatsView.kt @@ -1,4 +1,4 @@ -package com.habitrpg.android.habitica.ui.views +package com.habitrpg.android.habitica.ui.views.stats import android.content.Context import android.graphics.PorterDuff @@ -7,6 +7,7 @@ import android.util.AttributeSet import android.view.View import android.widget.LinearLayout import com.habitrpg.android.habitica.R +import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper import kotlinx.android.synthetic.main.stats_view.view.* class StatsView(context: Context?, attrs: AttributeSet?) : LinearLayout(context, attrs) {