fix bulk allocation issues. Fixes #865

This commit is contained in:
Phillip Thelen 2017-11-15 19:30:01 +01:00
parent 12f7c340e1
commit 7ff1830310
11 changed files with 67 additions and 51 deletions

View file

@ -37,28 +37,28 @@
android:layout_height="wrap_content"
android:padding="18dp"
android:orientation="vertical">
<com.habitrpg.android.habitica.ui.views.StatsSliderView
<com.habitrpg.android.habitica.ui.views.stats.StatsSliderView
android:id="@+id/strengthSliderView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:statsTitle="@string/str_abbrv"
app:statsColor="@color/red_100"
app:statsTextColor="@color/red_10"/>
<com.habitrpg.android.habitica.ui.views.StatsSliderView
<com.habitrpg.android.habitica.ui.views.stats.StatsSliderView
android:id="@+id/intelligenceSliderView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:statsTitle="@string/int_abbrv"
app:statsColor="@color/blue_100"
app:statsTextColor="@color/blue_10"/>
<com.habitrpg.android.habitica.ui.views.StatsSliderView
<com.habitrpg.android.habitica.ui.views.stats.StatsSliderView
android:id="@+id/constitutionSliderView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:statsTitle="@string/con_abbrv"
app:statsColor="@color/yellow_100"
app:statsTextColor="@color/yellow_10"/>
<com.habitrpg.android.habitica.ui.views.StatsSliderView
<com.habitrpg.android.habitica.ui.views.stats.StatsSliderView
android:id="@+id/perceptionSliderView"
android:layout_width="match_parent"
android:layout_height="wrap_content"

View file

@ -40,7 +40,7 @@
android:layout_height="24dp"
android:scaleType="fitCenter"/>
</LinearLayout>
<com.habitrpg.android.habitica.ui.views.StatsView
<com.habitrpg.android.habitica.ui.views.stats.StatsView
android:id="@+id/strengthStatsView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -48,7 +48,7 @@
app:titleBackgroundColor="@color/red_50"
app:statsColor="@color/red_10"
android:layout_marginBottom="12dp"/>
<com.habitrpg.android.habitica.ui.views.StatsView
<com.habitrpg.android.habitica.ui.views.stats.StatsView
android:id="@+id/intelligenceStatsView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -56,7 +56,7 @@
app:titleBackgroundColor="@color/blue_50"
app:statsColor="@color/blue_10"
android:layout_marginBottom="12dp"/>
<com.habitrpg.android.habitica.ui.views.StatsView
<com.habitrpg.android.habitica.ui.views.stats.StatsView
android:id="@+id/constitutionStatsView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -64,7 +64,7 @@
app:titleBackgroundColor="@color/yellow_10"
app:statsColor="@color/yellow_5"
android:layout_marginBottom="12dp"/>
<com.habitrpg.android.habitica.ui.views.StatsView
<com.habitrpg.android.habitica.ui.views.stats.StatsView
android:id="@+id/perceptionStatsView"
android:layout_width="match_parent"
android:layout_height="wrap_content"

View file

@ -20,11 +20,11 @@
android:src="@drawable/ic_emoticon_grey600_24dp"
android:scaleType="center"
android:backgroundTint="@color/transparent"
android:contentDescription="Toogle Emojis"
android:contentDescription="@string/toogle_emojis"
android:tint="@color/brand_400"
android:layout_gravity="center"/>
<net.pherth.android.emoji_library.EmojiEditText
<android.support.v7.widget.AppCompatEditText
android:id="@+id/chatEditText"
android:layout_width="0dp"
android:layout_height="wrap_content"
@ -32,7 +32,7 @@
android:layout_margin="5dp"
android:hint="@string/write_message"
android:textColor="@android:color/black"
android:inputType="textCapSentences|textMultiLine" />
android:inputType="textCapSentences|textMultiLine"/>
<ImageButton
android:id="@+id/sendButton"
android:layout_width="30dp"
@ -40,7 +40,8 @@
android:layout_gravity="center"
android:background="@color/transparent"
android:tint="@color/md_grey_400"
android:src="@drawable/ic_send_grey_600_24dp"/>
android:src="@drawable/ic_send_grey_600_24dp"
android:contentDescription="@string/send"/>
</LinearLayout>
<TextView
android:id="@+id/communityGuidelinesView"

View file

@ -718,4 +718,5 @@
<string name="class_equipment_shop_dialog">This item is only available to a specific class.\nYou can change your class from Settings.</string>
<string name="class_gear_disclaimer">You can only purchase gear for your current class</string>
<string name="available_stats" formatted="false">%d points</string>
<string name="toogle_emojis">Toogle Emojis</string>
</resources>

View file

@ -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;

View file

@ -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

View file

@ -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())

View file

@ -127,24 +127,24 @@ public class HabiticaSnackbar extends BaseTransientBottomBar<HabiticaSnackbar> {
}
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)

View file

@ -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

View file

@ -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())
}
}

View file

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