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) {