From 75b61675656ec0114c821e2d097691d88975eca5 Mon Sep 17 00:00:00 2001 From: Eyal Date: Sat, 22 Aug 2020 01:43:52 +0300 Subject: [PATCH 001/113] added the intro message. there is still a bug that on entering the chat dialog, and on refreshing, the chat scroll moves to the bottom instead of to the top --- .../res/layout/tavern_chat_intro_item.xml | 80 +++++++++++++++++++ .../adapter/social/ChatRecyclerViewAdapter.kt | 6 +- .../ui/adapter/social/InboxAdapter.kt | 54 ++++++++++--- .../social/InboxMessageListFragment.kt | 34 ++++---- .../ui/viewHolders/ChatRecyclerViewHolder.kt | 30 ++++++- 5 files changed, 172 insertions(+), 32 deletions(-) create mode 100644 Habitica/res/layout/tavern_chat_intro_item.xml diff --git a/Habitica/res/layout/tavern_chat_intro_item.xml b/Habitica/res/layout/tavern_chat_intro_item.xml new file mode 100644 index 000000000..10fbf184c --- /dev/null +++ b/Habitica/res/layout/tavern_chat_intro_item.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/ChatRecyclerViewAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/ChatRecyclerViewAdapter.kt index afb4dad1e..00bbe1e3e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/ChatRecyclerViewAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/ChatRecyclerViewAdapter.kt @@ -9,7 +9,7 @@ import com.habitrpg.android.habitica.extensions.inflate import com.habitrpg.android.habitica.models.social.ChatMessage import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.ui.helpers.bindView -import com.habitrpg.android.habitica.ui.viewHolders.ChatRecyclerViewHolder +import com.habitrpg.android.habitica.ui.viewHolders.ChatRecyclerMessageViewHolder import io.reactivex.BackpressureStrategy import io.reactivex.Flowable import io.reactivex.subjects.PublishSubject @@ -40,7 +40,7 @@ class ChatRecyclerViewAdapter(data: OrderedRealmCollection?, autoUp return if (viewType == 0) { SystemChatMessageViewHolder(parent.inflate(R.layout.system_chat_message)) } else { - ChatRecyclerViewHolder(parent.inflate(R.layout.tavern_chat_item), uuid, isTavern) + ChatRecyclerMessageViewHolder(parent.inflate(R.layout.tavern_chat_item), uuid, isTavern) } } @@ -49,7 +49,7 @@ class ChatRecyclerViewAdapter(data: OrderedRealmCollection?, autoUp if (data[position].isSystemMessage) { (holder as? SystemChatMessageViewHolder)?.bind(data[position]) } else { - val chatHolder = holder as? ChatRecyclerViewHolder ?: return + val chatHolder = holder as? ChatRecyclerMessageViewHolder ?: return val message = data[position] chatHolder.bind(message, uuid, diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/InboxAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/InboxAdapter.kt index c14967dad..b14b872ee 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/InboxAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/InboxAdapter.kt @@ -8,11 +8,14 @@ import com.habitrpg.android.habitica.extensions.inflate import com.habitrpg.android.habitica.models.social.ChatMessage import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.ui.viewHolders.ChatRecyclerViewHolder +import com.habitrpg.android.habitica.ui.viewHolders.ChatRecyclerIntroViewHolder +import com.habitrpg.android.habitica.ui.viewHolders.ChatRecyclerMessageViewHolder import io.reactivex.BackpressureStrategy import io.reactivex.Flowable import io.reactivex.subjects.PublishSubject +import com.habitrpg.android.habitica.models.members.Member -class InboxAdapter(private var user: User?) : PagedListAdapter(DIFF_CALLBACK) { +class InboxAdapter(private var user: User?, private var replyToUser : Member) : PagedListAdapter(DIFF_CALLBACK) { private var expandedMessageId: String? = null private val likeMessageEvents = PublishSubject.create() @@ -22,24 +25,49 @@ class InboxAdapter(private var user: User?) : PagedListAdapter() private val copyMessageEvents = PublishSubject.create() - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ChatRecyclerViewHolder { - return ChatRecyclerViewHolder(parent.inflate(R.layout.tavern_chat_item), user?.id ?: "", false) + override fun getItemViewType(position: Int): Int { + return when (position == super.getItemCount()) { + true -> 1 + false -> 0 + } } - override fun onBindViewHolder(holder: ChatRecyclerViewHolder, position: Int) { - val message = getItem(position) ?: return + override fun getItemCount(): Int { + return super.getItemCount() + 1 + } - holder.bind(message, + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ChatRecyclerViewHolder { + return if (viewType == 1) ChatRecyclerIntroViewHolder(parent.inflate(R.layout.tavern_chat_intro_item), replyToUser.id!!) + else ChatRecyclerMessageViewHolder(parent.inflate(R.layout.tavern_chat_item), user?.id ?: "", false) + } + + fun getFirstMessage() : ChatMessage + { + var firstMessage = ChatMessage() + return firstMessage + } + override fun onBindViewHolder(holder: ChatRecyclerViewHolder, position: Int) { + val firstMessage : Boolean = getItemViewType(position) == 1 + if (firstMessage) { + val introHolder = holder as ChatRecyclerIntroViewHolder + introHolder.bind(replyToUser) + introHolder.onOpenProfile = { userLabelClickEvents.onNext(it) } + } + else { + val message : ChatMessage = getItem(position) ?: return + val messageHolder = holder as ChatRecyclerMessageViewHolder + messageHolder.bind(message, user?.id ?: "", user, expandedMessageId == message.id) - holder.onShouldExpand = { expandMessage(message.id, position) } - holder.onLikeMessage = { likeMessageEvents.onNext(it) } - holder.onOpenProfile = { userLabelClickEvents.onNext(it) } - holder.onReply = { replyMessageEvents.onNext(it) } - holder.onCopyMessage = { copyMessageEvents.onNext(it) } - holder.onFlagMessage = { flagMessageEvents.onNext(it) } - holder.onDeleteMessage = { deleteMessageEvents.onNext(it) } + messageHolder.onShouldExpand = { expandMessage(message.id, position) } + messageHolder.onLikeMessage = { likeMessageEvents.onNext(it) } + messageHolder.onOpenProfile = { userLabelClickEvents.onNext(it) } + messageHolder.onReply = { replyMessageEvents.onNext(it) } + messageHolder.onCopyMessage = { copyMessageEvents.onNext(it) } + messageHolder.onFlagMessage = { flagMessageEvents.onNext(it) } + messageHolder.onDeleteMessage = { deleteMessageEvents.onNext(it) } + } } fun getLikeMessageFlowable(): Flowable { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxMessageListFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxMessageListFragment.kt index 165aef00b..d4701b0fd 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxMessageListFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxMessageListFragment.kt @@ -68,21 +68,25 @@ class InboxMessageListFragment : BaseMainFragment(), androidx.swiperefreshlayout val layoutManager = androidx.recyclerview.widget.LinearLayoutManager(this.getActivity()) recyclerView.layoutManager = layoutManager - chatAdapter = InboxAdapter(user) - viewModel?.messages?.observe(this.viewLifecycleOwner, Observer { chatAdapter?.submitList(it) }) - viewModel?.getMemberData()?.observe(this.viewLifecycleOwner, Observer { - activity?.binding?.toolbarTitle?.text = it?.profile?.name - }) - recyclerView.adapter = chatAdapter - recyclerView.itemAnimator = SafeDefaultItemAnimator() - chatAdapter?.let { adapter -> - compositeSubscription.add(adapter.getUserLabelClickFlowable().subscribe(Consumer { - FullProfileActivity.open(it) - }, RxErrorHandler.handleEmptyError())) - compositeSubscription.add(adapter.getDeleteMessageFlowable().subscribe(Consumer { this.showDeleteConfirmationDialog(it) }, RxErrorHandler.handleEmptyError())) - compositeSubscription.add(adapter.getFlagMessageClickFlowable().subscribe(Consumer { this.showFlagConfirmationDialog(it) }, RxErrorHandler.handleEmptyError())) - compositeSubscription.add(adapter.getCopyMessageFlowable().subscribe(Consumer { this.copyMessageToClipboard(it) }, RxErrorHandler.handleEmptyError())) - } + compositeSubscription.add(apiClient.getMember(replyToUserUUID!!).subscribe( Consumer + { member -> + chatAdapter = InboxAdapter(user, member) + viewModel?.messages?.observe(this.viewLifecycleOwner, Observer { chatAdapter?.submitList(it) }) + + viewModel?.getMemberData()?.observe(this.viewLifecycleOwner, Observer { + activity?.binding?.toolbarTitle?.text = it?.profile?.name + }) + recyclerView.adapter = chatAdapter + recyclerView.itemAnimator = SafeDefaultItemAnimator() + chatAdapter?.let { adapter -> + compositeSubscription.add(adapter.getUserLabelClickFlowable().subscribe(Consumer { + FullProfileActivity.open(it) + }, RxErrorHandler.handleEmptyError())) + compositeSubscription.add(adapter.getDeleteMessageFlowable().subscribe(Consumer { this.showDeleteConfirmationDialog(it) }, RxErrorHandler.handleEmptyError())) + compositeSubscription.add(adapter.getFlagMessageClickFlowable().subscribe(Consumer { this.showFlagConfirmationDialog(it) }, RxErrorHandler.handleEmptyError())) + compositeSubscription.add(adapter.getCopyMessageFlowable().subscribe(Consumer { this.copyMessageToClipboard(it) }, RxErrorHandler.handleEmptyError())) + } + })) chatBarView.sendAction = { sendMessage(it) } chatBarView.maxChatLength = configManager.maxChatLength() diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/ChatRecyclerViewHolder.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/ChatRecyclerViewHolder.kt index 03e98f73f..7038a6dab 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/ChatRecyclerViewHolder.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/ChatRecyclerViewHolder.kt @@ -28,8 +28,36 @@ import com.habitrpg.android.habitica.ui.views.social.UsernameLabel import io.reactivex.Maybe import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.schedulers.Schedulers +import com.habitrpg.android.habitica.models.members.Member -class ChatRecyclerViewHolder(itemView: View, private var userId: String, private val isTavern: Boolean) : RecyclerView.ViewHolder(itemView) { +open class ChatRecyclerViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + +} + +class ChatRecyclerIntroViewHolder(itemView: View, replyToUUID: String) : ChatRecyclerViewHolder(itemView) { + private val avatarView: AvatarView by bindView(R.id.avatar_view) + private val displayNameView: UsernameLabel by bindView(R.id.display_name_textview) + private val sublineTextView: TextView by bindView(R.id.subline_textview) + private val messageText: HabiticaEmojiTextView by bindView(R.id.message_text) + + var onOpenProfile: ((String) -> Unit)? = null + + init { + avatarView.setOnClickListener { onOpenProfile?.invoke(replyToUUID) } + displayNameView.setOnClickListener { onOpenProfile?.invoke(replyToUUID) } + sublineTextView.setOnClickListener { onOpenProfile?.invoke(replyToUUID) } + } + + fun bind(member: Member) { + avatarView.setAvatar(member) + displayNameView.username = member.displayName + displayNameView.tier = member.contributor?.level ?: 0 + sublineTextView.text = "@" + member.username + } +} + + +class ChatRecyclerMessageViewHolder(itemView: View, private var userId: String, private val isTavern: Boolean) : ChatRecyclerViewHolder(itemView) { private val messageWrapper: ViewGroup by bindView(R.id.message_wrapper) private val avatarView: AvatarView by bindView(R.id.avatar_view) From ea23626c6c61f8e05137a9c8ea60f13b4d80f66b Mon Sep 17 00:00:00 2001 From: Wojciech Matusiak Date: Tue, 28 Jul 2020 22:06:44 +0200 Subject: [PATCH 002/113] Displaying number of user collected items in quest progress view --- Habitica/res/layout/quest_progress_old.xml | 6 ++++++ .../android/habitica/models/inventory/QuestProgress.kt | 1 + .../habitica/ui/views/social/OldQuestProgressView.kt | 6 ++++++ .../habitrpg/android/habitica/utils/QuestDeserializer.kt | 3 +++ 4 files changed, 16 insertions(+) diff --git a/Habitica/res/layout/quest_progress_old.xml b/Habitica/res/layout/quest_progress_old.xml index 56070eb1b..fc3b14751 100644 --- a/Habitica/res/layout/quest_progress_old.xml +++ b/Habitica/res/layout/quest_progress_old.xml @@ -36,4 +36,10 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"/> + \ No newline at end of file diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/QuestProgress.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/QuestProgress.kt index eed63d322..8ab4e1d8e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/QuestProgress.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/QuestProgress.kt @@ -11,6 +11,7 @@ open class QuestProgress : RealmObject() { var key: String? = null var hp: Double = 0.0 var rage: Double = 0.0 + var collectedItems: Int = 0 var collect: RealmList? = null var down: Float = 0.0f var up: Float = 0.0f diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/OldQuestProgressView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/OldQuestProgressView.kt index f399b96e1..0ade30c86 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/OldQuestProgressView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/OldQuestProgressView.kt @@ -31,6 +31,7 @@ class OldQuestProgressView : LinearLayout { private val bossHealthView: ValueBar by bindView(R.id.bossHealthView) private val bossRageView: ValueBar by bindView(R.id.bossRageView) private val collectionContainer: ViewGroup by bindView(R.id.collectionContainer) + private val collectedItemsNumberView: TextView by bindView(R.id.collectedItemsNumberView) private val rect = RectF() private val displayDensity = context.resources.displayMetrics.density @@ -84,10 +85,12 @@ class OldQuestProgressView : LinearLayout { } bossNameView.visibility = View.VISIBLE bossHealthView.visibility = View.VISIBLE + collectedItemsNumberView.visibility = View.GONE } else { bossNameView.visibility = View.GONE bossHealthView.visibility = View.GONE bossRageView.visibility = View.GONE + collectedItemsNumberView.visibility = View.VISIBLE if (progress != null) { val inflater = LayoutInflater.from(context) @@ -109,14 +112,17 @@ class OldQuestProgressView : LinearLayout { fun configure(user: User, userOnQuest: Boolean?) { val value = (user.party?.quest?.progress?.up ?: 0F).toDouble() + val collectedItems = user.party?.quest?.progress?.collectedItems if (userOnQuest == true) { bossHealthView.pendingValue = value bossHealthView.description = String.format("%.01f dmg pending", value) bossHealthView.descriptionIconView.visibility = View.VISIBLE + collectedItemsNumberView.text = "+$collectedItems items found" } else { bossHealthView.pendingValue = 0.0 bossHealthView.description = "" bossHealthView.descriptionIconView.visibility = View.GONE + collectedItemsNumberView.text = "" } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/QuestDeserializer.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/QuestDeserializer.kt index 346919239..eecff35b8 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/QuestDeserializer.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/QuestDeserializer.kt @@ -33,6 +33,9 @@ class QuestDeserializer : JsonDeserializer { if (progressObj.has("down")) { progress.down = progressObj.get("down").asFloat } + if (progressObj.has("collectedItems")) { + progress.collectedItems = progressObj.get("collectedItems").asInt + } if (progressObj.has("collect")) { progress.collect = RealmList() for ((key, value) in progressObj.getAsJsonObject("collect").entrySet()) { From 2da5d8221242f92168d6b3c59e27d878305dc0be Mon Sep 17 00:00:00 2001 From: Wojciech Matusiak Date: Wed, 29 Jul 2020 22:30:40 +0200 Subject: [PATCH 003/113] Collected items number in new (world boss?) quest view --- Habitica/res/layout/quest_progress.xml | 6 ++++++ .../android/habitica/ui/views/social/QuestProgressView.kt | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/Habitica/res/layout/quest_progress.xml b/Habitica/res/layout/quest_progress.xml index 685e1049f..464ae6c9f 100644 --- a/Habitica/res/layout/quest_progress.xml +++ b/Habitica/res/layout/quest_progress.xml @@ -147,6 +147,12 @@ android:orientation="vertical" android:paddingLeft="@dimen/spacing_large" android:paddingRight="@dimen/spacing_large"/> + Date: Tue, 4 Aug 2020 20:48:04 +0200 Subject: [PATCH 004/113] Added info about found quest items in a snackbar MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When user finds an item as a result, the information is displayed in the same way, as for other found items. If he/she finds both — quest item and some other treasure both are displayed in the same dialog. Three subsequent notifications would be quite unhandy and also it seemed easier to be accomplished this way. --- .../data/implementation/TaskRepositoryImpl.kt | 2 ++ .../habitica/interactors/DisplayItemDropUseCase.kt | 14 +++++++++++--- .../models/responses/TaskDirectionDataTemp.kt | 1 + .../habitica/models/responses/TaskScoringResult.kt | 1 + .../android/habitica/ui/activities/MainActivity.kt | 3 +-- 5 files changed, 16 insertions(+), 5 deletions(-) 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 b5663043c..f2c153885 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 @@ -76,6 +76,7 @@ class TaskRepositoryImpl(localRepository: TaskLocalRepository, apiClient: ApiCli result.goldDelta = localData.gp - (stats?.gp ?: 0.0) result.hasLeveledUp = localData.lvl > stats?.lvl ?: 0 result.questDamage = localData._tmp?.quest?.progressDelta + result.questItemsFound = localData._tmp?.quest?.collection result.drop = localData._tmp?.drop notifyFunc?.invoke(result) @@ -108,6 +109,7 @@ class TaskRepositoryImpl(localRepository: TaskLocalRepository, apiClient: ApiCli result.goldDelta = res.gp - (stats?.gp ?: 0.0) result.hasLeveledUp = res.lvl > stats?.lvl ?: 0 result.questDamage = res._tmp?.quest?.progressDelta + result.questItemsFound = res._tmp?.quest?.collection result.drop = res._tmp?.drop if (localData == null) { notifyFunc?.invoke(result) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/DisplayItemDropUseCase.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/DisplayItemDropUseCase.kt index 5776d9cb9..0e218f350 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/DisplayItemDropUseCase.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/DisplayItemDropUseCase.kt @@ -9,6 +9,7 @@ import com.habitrpg.android.habitica.helpers.SoundManager import com.habitrpg.android.habitica.models.responses.TaskScoringResult import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar import io.reactivex.Flowable +import java.lang.StringBuilder import javax.inject.Inject class DisplayItemDropUseCase @Inject @@ -17,11 +18,18 @@ constructor(private val soundManager: SoundManager, threadExecutor: ThreadExecut override fun buildUseCaseObservable(requestValues: RequestValues): Flowable { return Flowable.defer { val data = requestValues.data + var snackbarText = StringBuilder(data?.drop?.dialog ?: "") - if (data?.drop != null) { + if (data?.questItemsFound ?: 0 > 0 && requestValues.showQuestItems) { + if (snackbarText.isNotEmpty()) + snackbarText.append('\n') + snackbarText.append("+${data!!.questItemsFound} quest items") + } + + if (snackbarText.isNotEmpty()) { Handler().postDelayed({ HabiticaSnackbar.showSnackbar(requestValues.snackbarTargetView, - data.drop?.dialog, HabiticaSnackbar.SnackbarDisplayType.DROP) + snackbarText, HabiticaSnackbar.SnackbarDisplayType.DROP) soundManager.loadAndPlayAudio(SoundManager.SoundItemDrop) }, 3000L) } @@ -30,5 +38,5 @@ constructor(private val soundManager: SoundManager, threadExecutor: ThreadExecut } } - class RequestValues(val data: TaskScoringResult?, val context: AppCompatActivity, val snackbarTargetView: ViewGroup) : UseCase.RequestValues + class RequestValues(val data: TaskScoringResult?, val context: AppCompatActivity, val snackbarTargetView: ViewGroup, val showQuestItems: Boolean) : UseCase.RequestValues } \ No newline at end of file diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/responses/TaskDirectionDataTemp.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/responses/TaskDirectionDataTemp.kt index 42f4e3e7c..3d31263ba 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/responses/TaskDirectionDataTemp.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/responses/TaskDirectionDataTemp.kt @@ -9,6 +9,7 @@ class TaskDirectionDataTemp { class TaskDirectionDataQuest { var progressDelta: Double = 0.0 + var collection: Int = 0 } class TaskDirectionDataDrop { 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 bd20eb9b1..c27faede5 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 @@ -9,4 +9,5 @@ class TaskScoringResult { var manaDelta: Double? = null var hasLeveledUp: Boolean = false var questDamage: Double? = null + var questItemsFound: Int? = null } 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 6afef229a..bed0a3ac3 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 @@ -83,7 +83,6 @@ import io.realm.Realm import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.Subscribe import java.util.* -import java.util.concurrent.TimeUnit import javax.inject.Inject open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction { @@ -500,7 +499,7 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction { .subscribe(Consumer { }, RxErrorHandler.handleEmptyError())) } - compositeSubscription.add(displayItemDropUseCase.observable(DisplayItemDropUseCase.RequestValues(data, this, snackbarContainer)) + compositeSubscription.add(displayItemDropUseCase.observable(DisplayItemDropUseCase.RequestValues(data, this, snackbarContainer, userIsOnQuest)) .subscribe(Consumer { }, RxErrorHandler.handleEmptyError())) } From 6e18bfe0ad9611db7d21b43dcbcdd3a418c11987 Mon Sep 17 00:00:00 2001 From: Wojciech Matusiak Date: Tue, 4 Aug 2020 21:48:27 +0200 Subject: [PATCH 005/113] Localized strings for indicated number of quest items --- Habitica/res/values-fr/strings.xml | 1 + Habitica/res/values-pl/strings.xml | 1 + Habitica/res/values/strings.xml | 1 + .../android/habitica/interactors/DisplayItemDropUseCase.kt | 5 ++++- .../android/habitica/ui/views/social/OldQuestProgressView.kt | 2 +- .../android/habitica/ui/views/social/QuestProgressView.kt | 3 ++- 6 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Habitica/res/values-fr/strings.xml b/Habitica/res/values-fr/strings.xml index 3124b420d..b62fb8862 100644 --- a/Habitica/res/values-fr/strings.xml +++ b/Habitica/res/values-fr/strings.xml @@ -220,6 +220,7 @@ Quêtes Familiers Montures + Vous avez trouvé %d objets pour la quête Vous avez trouvé une pièce d\'équipement rare dans l\'Armoire : %s! Génial ! Vous farfouillez dans l\'Armoire et trouvez une %1$s %2$s. Qu\'est-ce que ça fait là ? Vous luttez contre l\'Armoire et gagnez de l\'expérience. Prends ça ! diff --git a/Habitica/res/values-pl/strings.xml b/Habitica/res/values-pl/strings.xml index ecd26f5fd..543bd4c0e 100644 --- a/Habitica/res/values-pl/strings.xml +++ b/Habitica/res/values-pl/strings.xml @@ -213,6 +213,7 @@ Misje Zwierzaki Wierzchowce + Znalazłeś %d przedmiot(y/ów) z zadania Znalazłeś element rzadkiego Ekwipunku w Skrzyni: %s! Super! Przeszukujesz Skrzynię i znajdujesz %1$s %2$s. Co to tam robi? Mocujesz się ze Skrzynią i zyskujesz Doświadczenie. A masz! diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml index eca3d05e5..14a90d4ad 100644 --- a/Habitica/res/values/strings.xml +++ b/Habitica/res/values/strings.xml @@ -271,6 +271,7 @@ Pets Mounts + You\'ve found %d quest items You found %s in the Armoire You rummage in the Armoire and find %1$s %2$s. What\'s that doing in here? You wrestle with the Armoire and gain Experience. Take that! diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/DisplayItemDropUseCase.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/DisplayItemDropUseCase.kt index 0e218f350..a0e0dfaa8 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/DisplayItemDropUseCase.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/DisplayItemDropUseCase.kt @@ -1,8 +1,11 @@ package com.habitrpg.android.habitica.interactors +import android.content.Context import android.os.Handler +import android.provider.Settings.Global.getString import android.view.ViewGroup import androidx.appcompat.app.AppCompatActivity +import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.executors.PostExecutionThread import com.habitrpg.android.habitica.executors.ThreadExecutor import com.habitrpg.android.habitica.helpers.SoundManager @@ -23,7 +26,7 @@ constructor(private val soundManager: SoundManager, threadExecutor: ThreadExecut if (data?.questItemsFound ?: 0 > 0 && requestValues.showQuestItems) { if (snackbarText.isNotEmpty()) snackbarText.append('\n') - snackbarText.append("+${data!!.questItemsFound} quest items") + snackbarText.append(requestValues.context.getString(R.string.quest_items_found, data!!.questItemsFound)) } if (snackbarText.isNotEmpty()) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/OldQuestProgressView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/OldQuestProgressView.kt index 0ade30c86..ee3efc790 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/OldQuestProgressView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/OldQuestProgressView.kt @@ -117,7 +117,7 @@ class OldQuestProgressView : LinearLayout { bossHealthView.pendingValue = value bossHealthView.description = String.format("%.01f dmg pending", value) bossHealthView.descriptionIconView.visibility = View.VISIBLE - collectedItemsNumberView.text = "+$collectedItems items found" + collectedItemsNumberView.text = context.getString(R.string.quest_items_found, collectedItems) } else { bossHealthView.pendingValue = 0.0 bossHealthView.description = "" diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/QuestProgressView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/QuestProgressView.kt index 69e89ae88..ad5b081a3 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/QuestProgressView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/social/QuestProgressView.kt @@ -189,7 +189,8 @@ class QuestProgressView : LinearLayout { fun configure(user: User) { pendingDamageTextView.text = String.format("%.01f dmg pending", (user.party?.quest?.progress?.up ?: 0F) ) - collectedItemsNumber.text = "+${user.party?.quest?.progress?.collectedItems ?: 0} items found" + val collectedItems = user.party?.quest?.progress?.collectedItems ?: 0 + collectedItemsNumber.text = context.getString(R.string.quest_items_found, collectedItems) } private fun setupRageStrikeViews() { From a00a6e4f1451b9283705f2703ed8af6c05c48281 Mon Sep 17 00:00:00 2001 From: Wojciech Matusiak Date: Wed, 5 Aug 2020 23:10:29 +0200 Subject: [PATCH 006/113] Damage/items found shown in snackbar only for quests that require it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Instead of just looking for quest participants we also check progress   to see whether it requires dealing damage or collecting items - Result of this check is represented by an enum - This only works after progress with required data is fetched. It means   (according to my understanding) after quest is seen in party screen   at least once. (But current devel also has this issue with damage notifications   so I guess it's acceptable for now). - Inspired by #1132 --- .../android/habitica/data/UserRepository.kt | 3 ++- .../data/implementation/UserRepositoryImpl.kt | 5 +++-- .../data/local/UserLocalRepository.kt | 9 +++++++- .../RealmUserLocalRepository.kt | 10 +++++++-- .../habitica/ui/activities/MainActivity.kt | 21 ++++++++++++++----- 5 files changed, 37 insertions(+), 11 deletions(-) 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 d4fdf1409..0bf5f7339 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 @@ -1,5 +1,6 @@ package com.habitrpg.android.habitica.data +import com.habitrpg.android.habitica.data.local.UserQuestStatus import com.habitrpg.android.habitica.models.Achievement import com.habitrpg.android.habitica.models.QuestAchievement import com.habitrpg.android.habitica.models.Skill @@ -77,5 +78,5 @@ interface UserRepository : BaseRepository { fun getAchievements(): Flowable> fun getQuestAchievements(): Flowable> - fun getIsUserOnQuest(): Flowable + fun getUserQuestStatus(): Flowable } 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 c0c320941..ecc4a0e0b 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 @@ -4,6 +4,7 @@ import com.habitrpg.android.habitica.data.ApiClient import com.habitrpg.android.habitica.data.TaskRepository import com.habitrpg.android.habitica.data.UserRepository import com.habitrpg.android.habitica.data.local.UserLocalRepository +import com.habitrpg.android.habitica.data.local.UserQuestStatus import com.habitrpg.android.habitica.helpers.AppConfigManager import com.habitrpg.android.habitica.helpers.RxErrorHandler import com.habitrpg.android.habitica.models.Achievement @@ -172,8 +173,8 @@ class UserRepositoryImpl(localRepository: UserLocalRepository, apiClient: ApiCli } override fun readNotification(id: String): Flowable> = apiClient.readNotification(id) - override fun getIsUserOnQuest(): Flowable { - return localRepository.getIsUserOnQuest(userID) + override fun getUserQuestStatus(): Flowable { + return localRepository.getUserQuestStatus(userID) } override fun readNotifications(notificationIds: Map>): Flowable> = diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/UserLocalRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/UserLocalRepository.kt index abd490bde..8193a221b 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/UserLocalRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/UserLocalRepository.kt @@ -9,6 +9,13 @@ import com.habitrpg.android.habitica.models.user.User import io.reactivex.Flowable import io.realm.RealmResults +enum class UserQuestStatus { + NO_QUEST, + QUEST_COLLECT, + QUEST_BOSS, + QUEST_UNKNOWN +} + interface UserLocalRepository : BaseLocalRepository { fun getTutorialSteps(): Flowable> @@ -24,5 +31,5 @@ interface UserLocalRepository : BaseLocalRepository { fun getSpecialItems(user: User): Flowable> fun getAchievements(): Flowable> fun getQuestAchievements(userID: String): Flowable> - fun getIsUserOnQuest(userID: String): Flowable + fun getUserQuestStatus(userID: String): Flowable } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmUserLocalRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmUserLocalRepository.kt index 75ec17204..67e911f19 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmUserLocalRepository.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/local/implementation/RealmUserLocalRepository.kt @@ -1,6 +1,7 @@ package com.habitrpg.android.habitica.data.local.implementation import com.habitrpg.android.habitica.data.local.UserLocalRepository +import com.habitrpg.android.habitica.data.local.UserQuestStatus import com.habitrpg.android.habitica.models.* import com.habitrpg.android.habitica.models.social.ChallengeMembership import com.habitrpg.android.habitica.models.social.ChatMessage @@ -13,7 +14,7 @@ import io.realm.Realm import io.realm.RealmResults class RealmUserLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), UserLocalRepository { - override fun getIsUserOnQuest(userID: String): Flowable { + override fun getUserQuestStatus(userID: String): Flowable { return getUser(userID) .map { it.party?.id ?: "" } .filter { it.isNotBlank() } @@ -25,7 +26,12 @@ class RealmUserLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), .filter { groups -> groups.size > 0 } .map { groups -> groups.first() } } - .map { it.quest?.members?.find { questMember -> questMember.key == userID } != null } + .map { when { + it.quest?.members?.find { questMember -> questMember.key == userID } === null -> UserQuestStatus.NO_QUEST + it.quest?.progress?.collect?.isNotEmpty() ?: false -> UserQuestStatus.QUEST_COLLECT + it.quest?.progress?.hp ?: 0.0 > 0.0 -> UserQuestStatus.QUEST_BOSS + else -> UserQuestStatus.QUEST_UNKNOWN + }} } override fun getAchievements(): Flowable> { 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 bed0a3ac3..f6c5bd6f4 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 @@ -34,6 +34,7 @@ import com.habitrpg.android.habitica.api.HostConfig import com.habitrpg.android.habitica.api.MaintenanceApiService import com.habitrpg.android.habitica.components.UserComponent import com.habitrpg.android.habitica.data.* +import com.habitrpg.android.habitica.data.local.UserQuestStatus import com.habitrpg.android.habitica.databinding.ActivityMainBinding import com.habitrpg.android.habitica.events.* import com.habitrpg.android.habitica.events.commands.FeedCommand @@ -136,7 +137,7 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction { private var drawerFragment: NavigationDrawerFragment? = null var drawerToggle: ActionBarDrawerToggle? = null private var resumeFromActivity = false - private var userIsOnQuest = false + private var userQuestStatus = UserQuestStatus.NO_QUEST private var connectionIssueHandler: Handler? = null @@ -184,8 +185,8 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction { this@MainActivity.user = newUser this@MainActivity.setUserData() }, RxErrorHandler.handleEmptyError())) - compositeSubscription.add(userRepository.getIsUserOnQuest().subscribeWithErrorHandler(Consumer { - userIsOnQuest = it + compositeSubscription.add(userRepository.getUserQuestStatus().subscribeWithErrorHandler(Consumer { + userQuestStatus = it })) val viewModel = ViewModelProviders.of(this) @@ -494,12 +495,22 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction { internal fun displayTaskScoringResponse(data: TaskScoringResult?) { if (user != null && data != null) { + val damageValue = when (userQuestStatus) { + UserQuestStatus.QUEST_BOSS, + UserQuestStatus.QUEST_UNKNOWN -> data.questDamage + else -> 0.0 + } compositeSubscription.add(notifyUserUseCase.observable(NotifyUserUseCase.RequestValues(this, snackbarContainer, - user, data.experienceDelta, data.healthDelta, data.goldDelta, data.manaDelta, if (userIsOnQuest) data.questDamage else 0.0, data.hasLeveledUp)) + user, data.experienceDelta, data.healthDelta, data.goldDelta, data.manaDelta, damageValue, data.hasLeveledUp)) .subscribe(Consumer { }, RxErrorHandler.handleEmptyError())) } - compositeSubscription.add(displayItemDropUseCase.observable(DisplayItemDropUseCase.RequestValues(data, this, snackbarContainer, userIsOnQuest)) + val showItemsFound = when (userQuestStatus) { + UserQuestStatus.QUEST_COLLECT, + UserQuestStatus.QUEST_UNKNOWN -> true + else -> false + } + compositeSubscription.add(displayItemDropUseCase.observable(DisplayItemDropUseCase.RequestValues(data, this, snackbarContainer, showItemsFound)) .subscribe(Consumer { }, RxErrorHandler.handleEmptyError())) } From 876e0da557d37a80a87ca073c8f12fe566c8787a Mon Sep 17 00:00:00 2001 From: Eyal Date: Wed, 26 Aug 2020 19:57:23 +0300 Subject: [PATCH 007/113] Fixed the final bug. Now there is a bug of opening a new chat with a new user. Not sure it is because of my changes. --- .../res/layout/tavern_chat_intro_item.xml | 6 ++-- .../ui/adapter/social/InboxAdapter.kt | 36 +++++++++++-------- .../social/InboxMessageListFragment.kt | 7 ++-- .../habitica/ui/viewmodels/InboxViewModel.kt | 30 +++++++++++----- 4 files changed, 48 insertions(+), 31 deletions(-) diff --git a/Habitica/res/layout/tavern_chat_intro_item.xml b/Habitica/res/layout/tavern_chat_intro_item.xml index 10fbf184c..9dd30971e 100644 --- a/Habitica/res/layout/tavern_chat_intro_item.xml +++ b/Habitica/res/layout/tavern_chat_intro_item.xml @@ -3,7 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" - android:layout_height="match_parent" + android:layout_height="200dp" android:gravity="center_horizontal" android:orientation="vertical"> @@ -19,7 +19,7 @@ tools:visibility="visible" /> (DIFF_CALLBACK) { - private var expandedMessageId: String? = null + private val FIRST_MESSAGE = 0 + private val NORMAL_MESSAGE = 1 + private var expandedMessageId: String? = null private val likeMessageEvents = PublishSubject.create() private val userLabelClickEvents = PublishSubject.create() private val deleteMessageEvents = PublishSubject.create() @@ -25,29 +29,29 @@ class InboxAdapter(private var user: User?, private var replyToUser : Member) : private val replyMessageEvents = PublishSubject.create() private val copyMessageEvents = PublishSubject.create() - override fun getItemViewType(position: Int): Int { - return when (position == super.getItemCount()) { - true -> 1 - false -> 0 - } + private fun isPositionIntroMessage(position: Int) : Boolean { + return (position == super.getItemCount() - 1) } - override fun getItemCount(): Int { - return super.getItemCount() + 1 + override fun getItemViewType(position: Int): Int { + return if (isPositionIntroMessage(position)) FIRST_MESSAGE else NORMAL_MESSAGE + } + + override fun getItemId(position: Int): Long { + return if (isPositionIntroMessage(position)) -1 else super.getItemId(position) + } + + override fun getItem(position: Int) : ChatMessage? { + return if (isPositionIntroMessage(position)) ChatMessage() else super.getItem(position) } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ChatRecyclerViewHolder { - return if (viewType == 1) ChatRecyclerIntroViewHolder(parent.inflate(R.layout.tavern_chat_intro_item), replyToUser.id!!) + return if (viewType == FIRST_MESSAGE) ChatRecyclerIntroViewHolder(parent.inflate(R.layout.tavern_chat_intro_item), replyToUser.id!!) else ChatRecyclerMessageViewHolder(parent.inflate(R.layout.tavern_chat_item), user?.id ?: "", false) } - fun getFirstMessage() : ChatMessage - { - var firstMessage = ChatMessage() - return firstMessage - } override fun onBindViewHolder(holder: ChatRecyclerViewHolder, position: Int) { - val firstMessage : Boolean = getItemViewType(position) == 1 + val firstMessage : Boolean = getItemViewType(position) == FIRST_MESSAGE if (firstMessage) { val introHolder = holder as ChatRecyclerIntroViewHolder introHolder.bind(replyToUser) @@ -95,6 +99,8 @@ class InboxAdapter(private var user: User?, private var replyToUser : Member) : } private fun expandMessage(id: String, position: Int) { + if (isPositionIntroMessage(position)) + return expandedMessageId = if (expandedMessageId == id) { null } else { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxMessageListFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxMessageListFragment.kt index d4701b0fd..34b39eeb3 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxMessageListFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxMessageListFragment.kt @@ -8,6 +8,8 @@ import android.view.* import androidx.appcompat.app.AlertDialog import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProviders +import androidx.paging.DataSource +import androidx.paging.PagedList import com.habitrpg.android.habitica.MainNavDirections import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.components.UserComponent @@ -31,6 +33,7 @@ import io.reactivex.functions.Action import io.reactivex.functions.Consumer import kotlinx.android.synthetic.main.fragment_inbox_message_list.* import kotlinx.android.synthetic.main.tavern_chat_new_entry_item.* +import java.lang.Exception import java.util.concurrent.TimeUnit import javax.inject.Inject @@ -67,15 +70,11 @@ class InboxMessageListFragment : BaseMainFragment(), androidx.swiperefreshlayout val layoutManager = androidx.recyclerview.widget.LinearLayoutManager(this.getActivity()) recyclerView.layoutManager = layoutManager - compositeSubscription.add(apiClient.getMember(replyToUserUUID!!).subscribe( Consumer { member -> chatAdapter = InboxAdapter(user, member) viewModel?.messages?.observe(this.viewLifecycleOwner, Observer { chatAdapter?.submitList(it) }) - viewModel?.getMemberData()?.observe(this.viewLifecycleOwner, Observer { - activity?.binding?.toolbarTitle?.text = it?.profile?.name - }) recyclerView.adapter = chatAdapter recyclerView.itemAnimator = SafeDefaultItemAnimator() chatAdapter?.let { adapter -> diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/InboxViewModel.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/InboxViewModel.kt index bb1f81a9b..50aa1a3e3 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/InboxViewModel.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewmodels/InboxViewModel.kt @@ -37,7 +37,7 @@ class InboxViewModel(recipientID: String?, recipientUsername: String?) : BaseVie .setEnablePlaceholders(false) .build() - private val dataSourceFactory = MessagesDataSourceFactory(socialRepository, recipientID) + private val dataSourceFactory = MessagesDataSourceFactory(socialRepository, recipientID, ChatMessage()) val messages: LiveData> = dataSourceFactory.toLiveData(config) private val member: MutableLiveData by lazy { MutableLiveData() @@ -86,7 +86,7 @@ class InboxViewModel(recipientID: String?, recipientUsername: String?) : BaseVie } } -private class MessagesDataSource(val socialRepository: SocialRepository, var recipientID: String?): +private class MessagesDataSource(val socialRepository: SocialRepository, var recipientID: String?, var footer : ChatMessage?): PositionalDataSource() { private var lastFetchWasEnd = false override fun loadRange(params: LoadRangeParams, callback: LoadRangeCallback) { @@ -99,8 +99,15 @@ private class MessagesDataSource(val socialRepository: SocialRepository, var rec val page = ceil(params.startPosition.toFloat() / params.loadSize.toFloat()).toInt() socialRepository.retrieveInboxMessages(recipientID ?: "", page) .subscribe(Consumer { - if (it.size != 10) lastFetchWasEnd = true - callback.onResult(it) + if (it.size < 10) { + lastFetchWasEnd = true + if (footer != null) + callback.onResult(it.plusElement(footer!!)) + else + callback.onResult(it) + } + else + callback.onResult(it) }, RxErrorHandler.handleEmptyError()) } } @@ -116,23 +123,28 @@ private class MessagesDataSource(val socialRepository: SocialRepository, var rec if (recipientID?.isNotBlank() != true) { return@flatMapPublisher Flowable.just(it) } socialRepository.retrieveInboxMessages(recipientID ?: "", 0) .doOnNext { - messages -> if (messages.size != 10) lastFetchWasEnd = true + messages -> if (messages.size < 10) { + lastFetchWasEnd = true + } } } else { Flowable.just(it) } } .subscribe(Consumer { - callback.onResult(it, 0) + if (it.size < 10 && footer != null) + callback.onResult(it.plusElement(footer!!), 0) + else + callback.onResult(it, 0) }, RxErrorHandler.handleEmptyError()) } } } -private class MessagesDataSourceFactory(val socialRepository: SocialRepository, var recipientID: String?) : +private class MessagesDataSourceFactory(val socialRepository: SocialRepository, var recipientID: String?, val footer : ChatMessage?) : DataSource.Factory() { val sourceLiveData = MutableLiveData() - var latestSource: MessagesDataSource = MessagesDataSource(socialRepository, recipientID) + var latestSource: MessagesDataSource = MessagesDataSource(socialRepository, recipientID, footer) fun updateRecipientID(newID: String?) { recipientID = newID @@ -140,7 +152,7 @@ private class MessagesDataSourceFactory(val socialRepository: SocialRepository, } override fun create(): DataSource { - latestSource = MessagesDataSource(socialRepository, recipientID) + latestSource = MessagesDataSource(socialRepository, recipientID, footer) sourceLiveData.postValue(latestSource) return latestSource } From f34ec2724f883f2065098e93f029970ca5129645 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Thu, 3 Sep 2020 16:18:00 +0200 Subject: [PATCH 008/113] Fix bulk buying gems --- .../java/com/habitrpg/android/habitica/models/shops/ShopItem.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/shops/ShopItem.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/shops/ShopItem.kt index 5e7fa29f4..4b8f67976 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/shops/ShopItem.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/shops/ShopItem.kt @@ -69,7 +69,7 @@ open class ShopItem : RealmObject() { get() = "pets" == purchaseType || "mounts" == purchaseType val canPurchaseBulk: Boolean - get() = "eggs" == purchaseType || "hatchingPotions" == purchaseType || "food" == purchaseType + get() = "eggs" == purchaseType || "hatchingPotions" == purchaseType || "food" == purchaseType || "gems" == purchaseType fun canAfford(user: User?, quantity: Int): Boolean = when(currency) { "gold" -> (value * quantity) <= user?.stats?.gp ?: 0.0 From 4cebaa4be0ce36f50b5808bef98a8d37bfba97a0 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Thu, 3 Sep 2020 17:11:41 +0200 Subject: [PATCH 009/113] Fix showing right deletion dialog for broken challenges # Conflicts: # Habitica/build.gradle --- .../habitrpg/android/habitica/ui/activities/TaskFormActivity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt index 77f5e90df..ff8a20da7 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/TaskFormActivity.kt @@ -507,7 +507,7 @@ class TaskFormActivity : BaseActivity() { } private fun deleteTask() { - if (task?.challengeID?.isNotBlank() == true && task?.challengeBroken?.isNotBlank() != true) { + if (task?.challengeID?.isNotBlank() == true) { showChallengeDeleteTask() return } From 0728eed1af55ed6efe8777ab1c6c6573c722e884 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Fri, 4 Sep 2020 18:17:34 +0200 Subject: [PATCH 010/113] Begin implementing dark mode --- Habitica/AndroidManifest.xml | 2 - Habitica/AndroidManifestTesting.xml | 4 - Habitica/build.gradle | 4 +- .../drawable-mdpi/layout_rounded_bg_gray.xml | 2 +- .../drawable/achievement_section_badge_bg.xml | 2 +- .../drawable/adventure_guide_menu_card_bg.xml | 2 +- .../adventure_guide_menu_card_gray.xml | 2 +- Habitica/res/drawable/badge_gray.xml | 2 +- .../res/drawable/border_1f000000_white.xml | 2 +- .../drawable/button_background_gray_700.xml | 2 +- ...y_600.xml => button_background_offset.xml} | 2 +- Habitica/res/drawable/button_gray_100.xml | 6 +- Habitica/res/drawable/circle_gray300.xml | 2 +- .../{circle_gray600.xml => circle_offset.xml} | 2 +- Habitica/res/drawable/daily_checked.xml | 2 +- Habitica/res/drawable/edittext.xml | 4 +- Habitica/res/drawable/gradient_white.xml | 4 +- .../res/drawable/habit_circle_disabled.xml | 2 +- .../res/drawable/habit_scoring_circle.xml | 2 +- ...rder.xml => layout_rounded_bg_content.xml} | 3 +- ...5.xml => layout_rounded_bg_content_15.xml} | 2 +- .../drawable/layout_rounded_bg_gray_50.xml | 2 +- .../drawable/layout_rounded_bg_light_gray.xml | 2 +- ...y_700.xml => layout_rounded_bg_offset.xml} | 2 +- .../drawable/layout_rounded_bg_shopitem.xml | 2 +- .../layout_rounded_bg_shopitem_price.xml | 2 +- .../res/drawable/layout_rounded_bg_white.xml | 2 +- ...y_600.xml => layout_rounded_bg_window.xml} | 2 +- ... layout_rounded_bg_window_blue_border.xml} | 2 +- ...layout_rounded_bg_window_brand_border.xml} | 2 +- ...> layout_rounded_bg_window_red_border.xml} | 2 +- .../layout_rounded_bg_window_tint_border.xml | 7 + ...ayout_rounded_bg_window_yellow_border.xml} | 2 +- .../res/drawable/layout_top_rounded_bg.xml | 2 +- .../res/drawable/nav_item_color_state.xml | 4 +- Habitica/res/drawable/pill_bg.xml | 2 +- ...{pill_bg_white.xml => pill_bg_content.xml} | 2 +- Habitica/res/drawable/pill_bg_gray.xml | 2 +- Habitica/res/drawable/pill_bg_gray_100.xml | 2 +- Habitica/res/drawable/pill_bg_purple_400.xml | 2 +- .../res/drawable/pill_bg_radio_unselected.xml | 4 +- ...ill_bg_gray_700.xml => pill_bg_window.xml} | 2 +- Habitica/res/drawable/progressbar_red.xml | 2 +- .../drawable/purchase_button_background.xml | 4 +- Habitica/res/drawable/quest_difficulty_bg.xml | 2 +- Habitica/res/drawable/rounded_border.xml | 2 +- ...r_white.xml => rounded_border_content.xml} | 4 +- .../res/drawable/rounded_purple_square.xml | 13 +- Habitica/res/drawable/seekbar_thumb.xml | 4 +- Habitica/res/drawable/subscription_box_bg.xml | 2 +- .../drawable/subscription_box_bg_selected.xml | 4 +- .../res/drawable/system_chat_background.xml | 2 +- Habitica/res/drawable/task_background.xml | 2 +- .../res/drawable/task_form_control_bg.xml | 4 +- Habitica/res/drawable/todo_checked.xml | 2 +- Habitica/res/drawable/vertical_divider.xml | 2 +- Habitica/res/layout/achievement_grid_item.xml | 8 +- Habitica/res/layout/achievement_list_item.xml | 4 +- .../res/layout/achievement_quest_item.xml | 6 +- .../res/layout/achievement_section_header.xml | 2 +- Habitica/res/layout/activity_about.xml | 47 --- .../res/layout/activity_adventure_guide.xml | 167 +++++---- .../res/layout/activity_class_selection.xml | 6 +- .../res/layout/activity_create_challenge.xml | 4 +- Habitica/res/layout/activity_fixcharacter.xml | 28 +- Habitica/res/layout/activity_full_profile.xml | 2 +- Habitica/res/layout/activity_gem_purchase.xml | 4 +- .../res/layout/activity_gift1get1_info.xml | 8 +- Habitica/res/layout/activity_gift_gems.xml | 6 +- .../res/layout/activity_gift_subscription.xml | 6 +- Habitica/res/layout/activity_group_form.xml | 16 +- Habitica/res/layout/activity_guidelines.xml | 2 +- Habitica/res/layout/activity_main.xml | 10 +- .../res/layout/activity_notifications.xml | 2 +- Habitica/res/layout/activity_party_invite.xml | 8 +- Habitica/res/layout/activity_prefs.xml | 2 +- .../res/layout/activity_report_message.xml | 16 +- .../res/layout/activity_skill_members.xml | 2 +- Habitica/res/layout/activity_skill_tasks.xml | 4 +- Habitica/res/layout/activity_task_form.xml | 6 +- .../res/layout/activity_verify_username.xml | 22 +- .../layout/adventure_guide_menu_banner.xml | 6 +- Habitica/res/layout/avatar_with_bars.xml | 9 +- Habitica/res/layout/challenge_item.xml | 2 +- .../res/layout/challenge_task_divider.xml | 3 +- ...t_new_entry_item.xml => chat_bar_view.xml} | 8 +- .../{tavern_chat_item.xml => chat_item.xml} | 16 +- .../res/layout/customization_grid_item.xml | 4 +- .../layout/customization_section_header.xml | 8 +- Habitica/res/layout/daily_item_card.xml | 2 +- .../res/layout/dialog_achievement_detail.xml | 2 +- Habitica/res/layout/dialog_bulk_allocate.xml | 10 +- .../layout/dialog_challenge_detail_habit.xml | 4 +- .../layout/dialog_challenge_detail_reward.xml | 2 - .../dialog_challenge_detail_task_group.xml | 4 +- .../dialog_choose_message_recipient.xml | 2 +- Habitica/res/layout/dialog_first_drop.xml | 8 +- Habitica/res/layout/dialog_habitica_base.xml | 8 +- Habitica/res/layout/dialog_levelup.xml | 2 +- Habitica/res/layout/dialog_levelup_10.xml | 4 +- .../res/layout/dialog_login_incentive.xml | 2 +- .../res/layout/dialog_pet_suggest_hatch.xml | 10 +- .../layout/dialog_purchase_content_gear.xml | 2 +- .../layout/dialog_purchase_content_item.xml | 5 +- .../layout/dialog_purchase_content_quest.xml | 4 +- .../layout/dialog_purchase_customization.xml | 2 +- Habitica/res/layout/dialog_purchase_gems.xml | 4 +- .../dialog_purchase_shopitem_button.xml | 2 +- .../dialog_purchase_shopitem_header.xml | 4 +- Habitica/res/layout/dialog_task_filter.xml | 8 +- Habitica/res/layout/dialog_yesterdaily.xml | 2 +- .../res/layout/dialog_yesterdaily_task.xml | 7 +- Habitica/res/layout/drawer_main.xml | 2 +- Habitica/res/layout/drawer_main_item.xml | 2 +- .../res/layout/drawer_main_section_header.xml | 15 +- .../res/layout/empty_view_seasonal_shop.xml | 4 +- .../res/layout/empty_view_timetravelers.xml | 4 +- .../res/layout/equipment_overview_item.xml | 4 +- Habitica/res/layout/fixvalues_edittext.xml | 6 +- Habitica/res/layout/form_stepper_value.xml | 10 +- Habitica/res/layout/fragment_about.xml | 19 +- .../res/layout/fragment_challenge_detail.xml | 16 +- Habitica/res/layout/fragment_faq_detail.xml | 4 +- Habitica/res/layout/fragment_faq_overview.xml | 8 +- Habitica/res/layout/fragment_gem_purchase.xml | 8 +- .../res/layout/fragment_gift_gem_balance.xml | 4 +- .../res/layout/fragment_gift_gem_purchase.xml | 4 +- Habitica/res/layout/fragment_guild_detail.xml | 18 +- Habitica/res/layout/fragment_inbox.xml | 2 +- Habitica/res/layout/fragment_items.xml | 2 +- Habitica/res/layout/fragment_no_party.xml | 16 +- Habitica/res/layout/fragment_party_detail.xml | 8 +- Habitica/res/layout/fragment_promo_info.xml | 8 +- Habitica/res/layout/fragment_quest_detail.xml | 8 +- Habitica/res/layout/fragment_recyclerview.xml | 6 +- .../layout/fragment_recyclerview_stable.xml | 2 +- .../layout/fragment_refresh_recyclerview.xml | 6 +- Habitica/res/layout/fragment_skills.xml | 2 +- Habitica/res/layout/fragment_stats.xml | 18 +- Habitica/res/layout/fragment_subscription.xml | 28 +- .../res/layout/fragment_support_bug_fix.xml | 16 +- Habitica/res/layout/fragment_support_main.xml | 28 +- .../res/layout/fragment_tavern_detail.xml | 4 +- Habitica/res/layout/fragment_viewpager.xml | 2 +- Habitica/res/layout/fragment_welcome.xml | 10 +- Habitica/res/layout/gear_list_item.xml | 8 +- Habitica/res/layout/habit_item_card.xml | 2 +- Habitica/res/layout/help_header.xml | 2 +- Habitica/res/layout/item_inbox_overview.xml | 2 +- Habitica/res/layout/item_item.xml | 2 + Habitica/res/layout/main_navigation_view.xml | 16 +- Habitica/res/layout/menu_bottom_sheet.xml | 2 +- Habitica/res/layout/mount_overview_item.xml | 2 +- Habitica/res/layout/notification_item.xml | 2 +- .../layout/notification_item_actionable.xml | 2 +- Habitica/res/layout/notifications_header.xml | 6 +- Habitica/res/layout/party_member.xml | 12 +- Habitica/res/layout/pet_detail_item.xml | 4 +- Habitica/res/layout/pet_overview_item.xml | 4 +- Habitica/res/layout/preference_category.xml | 2 +- .../res/layout/preference_child_summary.xml | 2 +- .../layout/preference_child_summary_error.xml | 2 +- .../res/layout/profile_new_message_dialog.xml | 2 +- Habitica/res/layout/progress_bar.xml | 2 - .../res/layout/promo_gift_one_get_one.xml | 2 +- Habitica/res/layout/promo_menu.xml | 6 +- .../layout/promo_subscription_buy_gems.xml | 6 +- .../res/layout/purchase_subscription_view.xml | 2 +- Habitica/res/layout/quest_menu_view.xml | 6 +- Habitica/res/layout/quest_progress.xml | 14 +- Habitica/res/layout/reward_item_card.xml | 2 +- Habitica/res/layout/row_quest_reward.xml | 2 +- .../res/layout/row_quest_reward_imageview.xml | 2 +- Habitica/res/layout/row_shopitem.xml | 6 +- Habitica/res/layout/shop_section_header.xml | 2 +- Habitica/res/layout/skill_list_item.xml | 2 +- Habitica/res/layout/skill_task_item_card.xml | 2 +- Habitica/res/layout/speechbubble.xml | 2 +- Habitica/res/layout/stats_slider_view.xml | 12 +- Habitica/res/layout/stats_view.xml | 10 +- Habitica/res/layout/subscription_details.xml | 4 +- .../layout/support_collapsible_section.xml | 2 +- Habitica/res/layout/support_faq_item.xml | 2 +- Habitica/res/layout/system_chat_message.xml | 2 +- .../res/layout/task_form_task_scheduling.xml | 12 +- Habitica/res/layout/task_main_content.xml | 3 +- Habitica/res/layout/todo_item_card.xml | 2 +- .../res/layout/view_collapsible_section.xml | 4 +- Habitica/res/values-night/colors.xml | 39 ++ Habitica/res/values/colors.xml | 57 ++- Habitica/res/values/strings.xml | 3 + Habitica/res/values/styles.xml | 149 +++++--- Habitica/res/values/values.xml | 12 + Habitica/res/xml/preferences_fragment.xml | 7 +- .../habitica/HabiticaBaseApplication.kt | 2 +- .../habitica/components/UserComponent.java | 6 - .../data/implementation/ApiClientImpl.kt | 2 +- .../implementation/InventoryRepositoryImpl.kt | 6 +- .../implementation/SocialRepositoryImpl.kt | 4 +- .../data/implementation/TagRepositoryImpl.kt | 2 +- .../data/implementation/TaskRepositoryImpl.kt | 4 +- .../data/implementation/UserRepositoryImpl.kt | 4 +- .../RealmInventoryLocalRepository.kt | 2 +- .../RealmSocialLocalRepository.kt | 8 +- .../habitica/extensions/Context-Extensions.kt | 11 + .../habitica/helpers/AppConfigManager.kt | 4 - .../habitica/helpers/NotificationsManager.kt | 4 +- .../android/habitica/helpers/SoundManager.kt | 2 +- .../habitica/helpers/TaskAlarmManager.kt | 4 +- .../notifications/PushNotificationManager.kt | 4 +- .../habitica/interactors/LevelUpUseCase.kt | 4 +- .../android/habitica/models/tasks/Task.kt | 4 +- .../habitica/models/user/ContributorInfo.java | 3 +- .../android/habitica/models/user/User.kt | 5 +- .../LocalNotificationActionReceiver.kt | 18 +- .../receivers/NotificationPublisher.kt | 2 +- .../android/habitica/ui/AvatarView.kt | 9 +- .../habitica/ui/AvatarWithBarsViewModel.kt | 11 - .../habitica/ui/activities/AboutActivity.kt | 111 ------ .../ui/activities/AdventureGuideActivity.kt | 10 +- .../habitica/ui/activities/BaseActivity.kt | 82 +++-- .../ui/activities/ChallengeFormActivity.kt | 12 +- .../ui/activities/ClassSelectionActivity.kt | 16 +- .../activities/FixCharacterValuesActivity.kt | 6 +- .../ui/activities/FullProfileActivity.kt | 18 +- .../ui/activities/GemPurchaseActivity.kt | 2 +- .../ui/activities/GiftGemsActivity.kt | 2 +- .../ui/activities/GiftSubscriptionActivity.kt | 10 +- .../ui/activities/GroupInviteActivity.kt | 2 +- .../activities/HabitButtonWidgetActivity.kt | 4 +- .../habitica/ui/activities/IntroActivity.kt | 2 +- .../habitica/ui/activities/LoginActivity.kt | 12 +- .../habitica/ui/activities/MainActivity.kt | 73 ++-- .../ui/activities/MaintenanceActivity.kt | 2 +- .../ui/activities/NotificationsActivity.kt | 6 +- .../ui/activities/ReportMessageActivity.kt | 6 +- .../habitica/ui/activities/SetupActivity.kt | 12 +- .../ui/activities/SkillMemberActivity.kt | 4 +- .../ui/activities/SkillTasksActivity.kt | 4 +- .../ui/activities/TaskFormActivity.kt | 20 +- .../ui/activities/VerifyUsernameActivity.kt | 6 +- ...stomizationEquipmentRecyclerViewAdapter.kt | 5 +- .../CustomizationRecyclerViewAdapter.kt | 5 +- .../ui/adapter/NavigationDrawerAdapter.kt | 6 +- .../ui/adapter/SkillsRecyclerViewAdapter.kt | 16 +- .../inventory/EquipmentRecyclerViewAdapter.kt | 4 +- .../adapter/inventory/ItemRecyclerAdapter.kt | 4 +- .../inventory/PetDetailRecyclerAdapter.kt | 5 - .../inventory/StableRecyclerAdapter.kt | 8 +- .../adapter/social/ChatRecyclerViewAdapter.kt | 2 +- .../ui/adapter/social/InboxAdapter.kt | 2 +- .../social/PublicGuildsRecyclerViewAdapter.kt | 4 +- .../ChallengeTasksRecyclerViewAdapter.kt | 2 +- .../tasks/BaseTasksRecyclerViewAdapter.kt | 2 +- .../ui/fragments/AchievementsFragment.kt | 10 +- .../habitica/ui/fragments/BaseMainFragment.kt | 2 +- .../ui/fragments/NavigationDrawerFragment.kt | 49 ++- .../habitica/ui/fragments/NewsFragment.kt | 2 +- .../habitica/ui/fragments/StatsFragment.kt | 10 +- .../AvatarCustomizationFragment.kt | 12 +- .../customization/AvatarEquipmentFragment.kt | 10 +- .../customization/AvatarOverviewFragment.kt | 4 +- .../equipment/EquipmentDetailFragment.kt | 4 +- .../equipment/EquipmentOverviewFragment.kt | 8 +- .../inventory/items/ItemRecyclerFragment.kt | 18 +- .../fragments/inventory/shops/ShopFragment.kt | 14 +- .../inventory/shops/ShopsFragment.kt | 3 +- .../stable/MountDetailRecyclerFragment.kt | 6 +- .../stable/PetDetailRecyclerFragment.kt | 10 +- .../stable/StableRecyclerFragment.kt | 10 +- .../AuthenticationPreferenceFragment.kt | 10 +- .../preferences/BasePreferencesFragment.kt | 2 +- .../EmailNotificationsPreferencesFragment.kt | 2 +- .../preferences/PreferencesFragment.kt | 17 +- .../preferences/ProfilePreferencesFragment.kt | 2 +- .../PushNotificationsPreferencesFragment.kt | 2 +- .../purchases/GemsPurchaseFragment.kt | 10 +- .../purchases/GiftBalanceGemsFragment.kt | 2 +- .../purchases/GiftPurchaseGemsFragment.kt | 8 +- .../purchases/SubscriptionFragment.kt | 18 +- .../ui/fragments/setup/AvatarSetupFragment.kt | 6 +- .../ui/fragments/setup/WelcomeFragment.kt | 4 +- .../skills/SkillTasksRecyclerViewFragment.kt | 6 +- .../ui/fragments/skills/SkillsFragment.kt | 8 +- .../ui/fragments/social/ChatFragment.kt | 77 ++-- .../ui/fragments/social/ChatListFragment.kt | 286 --------------- .../fragments/social/GuildDetailFragment.kt | 6 +- .../ui/fragments/social/GuildFragment.kt | 8 +- .../social/GuildsOverviewFragment.kt | 4 +- .../social/InboxMessageListFragment.kt | 59 ++- .../fragments/social/InboxOverviewFragment.kt | 6 +- .../social/NoPartyFragmentFragment.kt | 12 +- .../fragments/social/PublicGuildsFragment.kt | 6 +- .../fragments/social/QuestDetailFragment.kt | 22 +- .../fragments/social/TavernDetailFragment.kt | 10 +- .../ui/fragments/social/TavernFragment.kt | 24 +- .../challenges/ChallengeDetailFragment.kt | 21 +- .../challenges/ChallengeListFragment.kt | 8 +- .../social/party/PartyDetailFragment.kt | 22 +- .../fragments/social/party/PartyFragment.kt | 2 +- .../ui/fragments/support/FAQDetailFragment.kt | 2 +- .../tasks/RewardsRecyclerviewFragment.kt | 10 +- .../tasks/TaskRecyclerViewFragment.kt | 32 +- .../ui/fragments/tasks/TasksFragment.kt | 6 +- .../habitica/ui/helpers/MarginDecoration.kt | 4 +- .../ui/helpers/SafeDefaultItemAnimator.kt | 14 +- .../ui/viewHolders/MountViewHolder.kt | 2 +- .../habitica/ui/viewHolders/PetViewHolder.kt | 6 +- .../ui/viewHolders/ShopItemViewHolder.kt | 29 +- .../viewHolders/tasks/BaseTaskViewHolder.kt | 9 +- .../tasks/ChecklistedViewHolder.kt | 30 +- .../ui/viewHolders/tasks/HabitViewHolder.kt | 22 +- .../ui/viewHolders/tasks/RewardViewHolder.kt | 6 +- .../habitica/ui/viewmodels/BaseViewModel.kt | 4 +- .../habitica/ui/viewmodels/GroupViewModel.kt | 28 +- .../habitica/ui/viewmodels/InboxViewModel.kt | 8 +- .../ui/viewmodels/NotificationsViewModel.kt | 16 +- .../habitica/ui/viewmodels/PartyViewModel.kt | 8 +- .../android/habitica/ui/views/CurrencyView.kt | 5 +- .../habitica/ui/views/CurrencyViews.kt | 4 +- .../habitica/ui/views/DragLinearLayout.kt | 22 +- .../habitica/ui/views/HabiticaIcons.java | 339 ++++++++++-------- .../ui/views/HabiticaIconsHelper.java | 27 ++ .../habitica/ui/views/HabiticaProgressBar.kt | 1 - .../habitica/ui/views/NPCBannerView.kt | 4 +- .../ui/views/SupportCollapsibleSection.kt | 4 +- .../android/habitica/ui/views/Typewriter.kt | 2 +- .../android/habitica/ui/views/ValueBar.kt | 5 +- .../ui/views/dialogs/HabiticaAlertDialog.kt | 6 +- .../ui/views/dialogs/PetSuggestHatchDialog.kt | 4 +- .../views/equipment/EquipmentOverviewItem.kt | 4 +- .../views/equipment/EquipmentOverviewView.kt | 3 +- .../HabiticaBottomNavigationView.kt | 15 +- .../habitica/ui/views/promo/PromoMenuView.kt | 2 +- .../promo/SubscriptionBuyGemsPromoView.kt | 2 +- .../habitica/ui/views/shops/PurchaseDialog.kt | 44 ++- .../views/shops/PurchaseDialogGearContent.kt | 4 +- .../habitica/ui/views/social/ChatBarView.kt | 82 +++-- .../ui/views/social/OldQuestProgressView.kt | 6 +- .../ui/views/social/QuestProgressView.kt | 2 +- .../ui/views/stats/BulkAllocateStatsDialog.kt | 4 +- .../habitica/ui/views/stats/StatsView.kt | 12 +- .../subscriptions/SubscriptionOptionView.kt | 12 +- .../ui/views/tasks/TaskFilterDialog.kt | 6 +- .../views/tasks/form/ChecklistItemFormView.kt | 2 +- .../tasks/form/HabitResetStreakButtons.kt | 6 +- .../tasks/form/HabitScoringButtonsView.kt | 6 +- .../views/tasks/form/ReminderItemFormView.kt | 2 +- .../views/tasks/form/TaskDifficultyButtons.kt | 6 +- .../tasks/form/TaskSchedulingControls.kt | 8 +- .../views/yesterdailies/YesterdailyDialog.kt | 8 +- .../widget/AvatarStatsWidgetProvider.kt | 4 +- .../widget/HabitButtonWidgetProvider.kt | 2 +- .../widget/HabitButtonWidgetService.kt | 2 +- .../habitica/widget/TaskListFactory.kt | 2 +- .../habitica/widget/TaskListWidgetProvider.kt | 2 +- .../habitica/models/inventory/MountTest.kt | 2 +- .../habitica/models/inventory/PetTest.kt | 2 +- build.gradle | 4 +- 359 files changed, 1810 insertions(+), 2004 deletions(-) rename Habitica/res/drawable/{button_background_gray_600.xml => button_background_offset.xml} (81%) rename Habitica/res/drawable/{circle_gray600.xml => circle_offset.xml} (71%) rename Habitica/res/drawable/{layout_rounded_bg_gray_700_brand_border.xml => layout_rounded_bg_content.xml} (70%) rename Habitica/res/drawable/{layout_rounded_bg_white_15.xml => layout_rounded_bg_content_15.xml} (83%) rename Habitica/res/drawable/{layout_rounded_bg_gray_700.xml => layout_rounded_bg_offset.xml} (83%) rename Habitica/res/drawable/{layout_rounded_bg_gray_600.xml => layout_rounded_bg_window.xml} (83%) rename Habitica/res/drawable/{layout_rounded_bg_brand_700_blue_border.xml => layout_rounded_bg_window_blue_border.xml} (85%) rename Habitica/res/drawable/{layout_rounded_bg_brand_700_brand_border.xml => layout_rounded_bg_window_brand_border.xml} (85%) rename Habitica/res/drawable/{layout_rounded_bg_brand_700_red_border.xml => layout_rounded_bg_window_red_border.xml} (85%) create mode 100644 Habitica/res/drawable/layout_rounded_bg_window_tint_border.xml rename Habitica/res/drawable/{layout_rounded_bg_brand_700_yellow_border.xml => layout_rounded_bg_window_yellow_border.xml} (85%) rename Habitica/res/drawable/{pill_bg_white.xml => pill_bg_content.xml} (81%) rename Habitica/res/drawable/{pill_bg_gray_700.xml => pill_bg_window.xml} (82%) rename Habitica/res/drawable/{rounded_border_white.xml => rounded_border_content.xml} (63%) delete mode 100644 Habitica/res/layout/activity_about.xml rename Habitica/res/layout/{tavern_chat_new_entry_item.xml => chat_bar_view.xml} (95%) rename Habitica/res/layout/{tavern_chat_item.xml => chat_item.xml} (93%) create mode 100644 Habitica/res/values-night/colors.xml delete mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/AboutActivity.kt delete mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatListFragment.kt diff --git a/Habitica/AndroidManifest.xml b/Habitica/AndroidManifest.xml index a36049ec9..bf458dd69 100644 --- a/Habitica/AndroidManifest.xml +++ b/Habitica/AndroidManifest.xml @@ -128,8 +128,6 @@ - - - + \ No newline at end of file diff --git a/Habitica/res/drawable/achievement_section_badge_bg.xml b/Habitica/res/drawable/achievement_section_badge_bg.xml index ae119c105..d71c5e6da 100644 --- a/Habitica/res/drawable/achievement_section_badge_bg.xml +++ b/Habitica/res/drawable/achievement_section_badge_bg.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/Habitica/res/drawable/adventure_guide_menu_card_bg.xml b/Habitica/res/drawable/adventure_guide_menu_card_bg.xml index be6da8b36..e0ff6fc6e 100644 --- a/Habitica/res/drawable/adventure_guide_menu_card_bg.xml +++ b/Habitica/res/drawable/adventure_guide_menu_card_bg.xml @@ -1,6 +1,6 @@ - + diff --git a/Habitica/res/drawable/adventure_guide_menu_card_gray.xml b/Habitica/res/drawable/adventure_guide_menu_card_gray.xml index 4a16d5346..264f19e60 100644 --- a/Habitica/res/drawable/adventure_guide_menu_card_gray.xml +++ b/Habitica/res/drawable/adventure_guide_menu_card_gray.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/Habitica/res/drawable/badge_gray.xml b/Habitica/res/drawable/badge_gray.xml index 206ef9eac..eb5012f9f 100644 --- a/Habitica/res/drawable/badge_gray.xml +++ b/Habitica/res/drawable/badge_gray.xml @@ -4,7 +4,7 @@ + android:color="@color/offset_background" /> diff --git a/Habitica/res/drawable/border_1f000000_white.xml b/Habitica/res/drawable/border_1f000000_white.xml index d873a2142..feea4b815 100644 --- a/Habitica/res/drawable/border_1f000000_white.xml +++ b/Habitica/res/drawable/border_1f000000_white.xml @@ -1,7 +1,7 @@ - + - + \ No newline at end of file diff --git a/Habitica/res/drawable/button_background_gray_600.xml b/Habitica/res/drawable/button_background_offset.xml similarity index 81% rename from Habitica/res/drawable/button_background_gray_600.xml rename to Habitica/res/drawable/button_background_offset.xml index 9d6ccf7a2..f2b1e94c5 100644 --- a/Habitica/res/drawable/button_background_gray_600.xml +++ b/Habitica/res/drawable/button_background_offset.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/Habitica/res/drawable/button_gray_100.xml b/Habitica/res/drawable/button_gray_100.xml index cb6e59ecd..eb34b9075 100644 --- a/Habitica/res/drawable/button_gray_100.xml +++ b/Habitica/res/drawable/button_gray_100.xml @@ -5,7 +5,7 @@ + android:color="@color/inverted_background_offset"/> @@ -34,7 +34,7 @@ diff --git a/Habitica/res/drawable/circle_gray300.xml b/Habitica/res/drawable/circle_gray300.xml index ba3d669da..771682691 100644 --- a/Habitica/res/drawable/circle_gray300.xml +++ b/Habitica/res/drawable/circle_gray300.xml @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/Habitica/res/drawable/circle_gray600.xml b/Habitica/res/drawable/circle_offset.xml similarity index 71% rename from Habitica/res/drawable/circle_gray600.xml rename to Habitica/res/drawable/circle_offset.xml index e2ac51390..736390730 100644 --- a/Habitica/res/drawable/circle_gray600.xml +++ b/Habitica/res/drawable/circle_offset.xml @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/Habitica/res/drawable/daily_checked.xml b/Habitica/res/drawable/daily_checked.xml index 4791df6b4..a4e22f21e 100644 --- a/Habitica/res/drawable/daily_checked.xml +++ b/Habitica/res/drawable/daily_checked.xml @@ -4,7 +4,7 @@ - + diff --git a/Habitica/res/drawable/edittext.xml b/Habitica/res/drawable/edittext.xml index d396af7fa..c6d6d5cff 100644 --- a/Habitica/res/drawable/edittext.xml +++ b/Habitica/res/drawable/edittext.xml @@ -2,14 +2,14 @@ - + - + diff --git a/Habitica/res/drawable/gradient_white.xml b/Habitica/res/drawable/gradient_white.xml index bb76b3c28..23d57b8da 100644 --- a/Habitica/res/drawable/gradient_white.xml +++ b/Habitica/res/drawable/gradient_white.xml @@ -2,7 +2,7 @@ \ No newline at end of file diff --git a/Habitica/res/drawable/habit_circle_disabled.xml b/Habitica/res/drawable/habit_circle_disabled.xml index a28001791..02b91d8f0 100644 --- a/Habitica/res/drawable/habit_circle_disabled.xml +++ b/Habitica/res/drawable/habit_circle_disabled.xml @@ -2,5 +2,5 @@ - + \ No newline at end of file diff --git a/Habitica/res/drawable/habit_scoring_circle.xml b/Habitica/res/drawable/habit_scoring_circle.xml index 92011318e..170bb9a37 100644 --- a/Habitica/res/drawable/habit_scoring_circle.xml +++ b/Habitica/res/drawable/habit_scoring_circle.xml @@ -2,5 +2,5 @@ - + \ No newline at end of file diff --git a/Habitica/res/drawable/layout_rounded_bg_gray_700_brand_border.xml b/Habitica/res/drawable/layout_rounded_bg_content.xml similarity index 70% rename from Habitica/res/drawable/layout_rounded_bg_gray_700_brand_border.xml rename to Habitica/res/drawable/layout_rounded_bg_content.xml index 995c49409..9f6e1d1b0 100644 --- a/Habitica/res/drawable/layout_rounded_bg_gray_700_brand_border.xml +++ b/Habitica/res/drawable/layout_rounded_bg_content.xml @@ -1,7 +1,6 @@ - + - \ No newline at end of file diff --git a/Habitica/res/drawable/layout_rounded_bg_white_15.xml b/Habitica/res/drawable/layout_rounded_bg_content_15.xml similarity index 83% rename from Habitica/res/drawable/layout_rounded_bg_white_15.xml rename to Habitica/res/drawable/layout_rounded_bg_content_15.xml index 105d509bf..857440121 100644 --- a/Habitica/res/drawable/layout_rounded_bg_white_15.xml +++ b/Habitica/res/drawable/layout_rounded_bg_content_15.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/Habitica/res/drawable/layout_rounded_bg_gray_50.xml b/Habitica/res/drawable/layout_rounded_bg_gray_50.xml index 5956941ef..3ee982385 100644 --- a/Habitica/res/drawable/layout_rounded_bg_gray_50.xml +++ b/Habitica/res/drawable/layout_rounded_bg_gray_50.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/Habitica/res/drawable/layout_rounded_bg_light_gray.xml b/Habitica/res/drawable/layout_rounded_bg_light_gray.xml index cfa64aed6..051bbab11 100644 --- a/Habitica/res/drawable/layout_rounded_bg_light_gray.xml +++ b/Habitica/res/drawable/layout_rounded_bg_light_gray.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/Habitica/res/drawable/layout_rounded_bg_gray_700.xml b/Habitica/res/drawable/layout_rounded_bg_offset.xml similarity index 83% rename from Habitica/res/drawable/layout_rounded_bg_gray_700.xml rename to Habitica/res/drawable/layout_rounded_bg_offset.xml index a5b041924..e2b945656 100644 --- a/Habitica/res/drawable/layout_rounded_bg_gray_700.xml +++ b/Habitica/res/drawable/layout_rounded_bg_offset.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/Habitica/res/drawable/layout_rounded_bg_shopitem.xml b/Habitica/res/drawable/layout_rounded_bg_shopitem.xml index cff7a3e3c..026862756 100644 --- a/Habitica/res/drawable/layout_rounded_bg_shopitem.xml +++ b/Habitica/res/drawable/layout_rounded_bg_shopitem.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/Habitica/res/drawable/layout_rounded_bg_shopitem_price.xml b/Habitica/res/drawable/layout_rounded_bg_shopitem_price.xml index d6f0b7a0c..fb3137234 100644 --- a/Habitica/res/drawable/layout_rounded_bg_shopitem_price.xml +++ b/Habitica/res/drawable/layout_rounded_bg_shopitem_price.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/Habitica/res/drawable/layout_rounded_bg_white.xml b/Habitica/res/drawable/layout_rounded_bg_white.xml index 7afab5887..9f6e1d1b0 100644 --- a/Habitica/res/drawable/layout_rounded_bg_white.xml +++ b/Habitica/res/drawable/layout_rounded_bg_white.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/Habitica/res/drawable/layout_rounded_bg_gray_600.xml b/Habitica/res/drawable/layout_rounded_bg_window.xml similarity index 83% rename from Habitica/res/drawable/layout_rounded_bg_gray_600.xml rename to Habitica/res/drawable/layout_rounded_bg_window.xml index 30464dd0d..f3645d99d 100644 --- a/Habitica/res/drawable/layout_rounded_bg_gray_600.xml +++ b/Habitica/res/drawable/layout_rounded_bg_window.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/Habitica/res/drawable/layout_rounded_bg_brand_700_blue_border.xml b/Habitica/res/drawable/layout_rounded_bg_window_blue_border.xml similarity index 85% rename from Habitica/res/drawable/layout_rounded_bg_brand_700_blue_border.xml rename to Habitica/res/drawable/layout_rounded_bg_window_blue_border.xml index dc327ae97..8046a6e8e 100644 --- a/Habitica/res/drawable/layout_rounded_bg_brand_700_blue_border.xml +++ b/Habitica/res/drawable/layout_rounded_bg_window_blue_border.xml @@ -1,6 +1,6 @@ - + diff --git a/Habitica/res/drawable/layout_rounded_bg_brand_700_brand_border.xml b/Habitica/res/drawable/layout_rounded_bg_window_brand_border.xml similarity index 85% rename from Habitica/res/drawable/layout_rounded_bg_brand_700_brand_border.xml rename to Habitica/res/drawable/layout_rounded_bg_window_brand_border.xml index 5f9772be1..d178b01ac 100644 --- a/Habitica/res/drawable/layout_rounded_bg_brand_700_brand_border.xml +++ b/Habitica/res/drawable/layout_rounded_bg_window_brand_border.xml @@ -1,6 +1,6 @@ - + diff --git a/Habitica/res/drawable/layout_rounded_bg_brand_700_red_border.xml b/Habitica/res/drawable/layout_rounded_bg_window_red_border.xml similarity index 85% rename from Habitica/res/drawable/layout_rounded_bg_brand_700_red_border.xml rename to Habitica/res/drawable/layout_rounded_bg_window_red_border.xml index 122801662..2a67aca44 100644 --- a/Habitica/res/drawable/layout_rounded_bg_brand_700_red_border.xml +++ b/Habitica/res/drawable/layout_rounded_bg_window_red_border.xml @@ -1,6 +1,6 @@ - + diff --git a/Habitica/res/drawable/layout_rounded_bg_window_tint_border.xml b/Habitica/res/drawable/layout_rounded_bg_window_tint_border.xml new file mode 100644 index 000000000..d896b0dc6 --- /dev/null +++ b/Habitica/res/drawable/layout_rounded_bg_window_tint_border.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Habitica/res/drawable/layout_rounded_bg_brand_700_yellow_border.xml b/Habitica/res/drawable/layout_rounded_bg_window_yellow_border.xml similarity index 85% rename from Habitica/res/drawable/layout_rounded_bg_brand_700_yellow_border.xml rename to Habitica/res/drawable/layout_rounded_bg_window_yellow_border.xml index dfb258934..984a3d92f 100644 --- a/Habitica/res/drawable/layout_rounded_bg_brand_700_yellow_border.xml +++ b/Habitica/res/drawable/layout_rounded_bg_window_yellow_border.xml @@ -1,6 +1,6 @@ - + diff --git a/Habitica/res/drawable/layout_top_rounded_bg.xml b/Habitica/res/drawable/layout_top_rounded_bg.xml index dc5b74047..bc5828111 100644 --- a/Habitica/res/drawable/layout_top_rounded_bg.xml +++ b/Habitica/res/drawable/layout_top_rounded_bg.xml @@ -1,6 +1,6 @@ - + \ 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 index 0f4955173..c9ab128ae 100644 --- a/Habitica/res/drawable/nav_item_color_state.xml +++ b/Habitica/res/drawable/nav_item_color_state.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/Habitica/res/drawable/pill_bg.xml b/Habitica/res/drawable/pill_bg.xml index c5f636827..70382d6db 100644 --- a/Habitica/res/drawable/pill_bg.xml +++ b/Habitica/res/drawable/pill_bg.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/Habitica/res/drawable/pill_bg_white.xml b/Habitica/res/drawable/pill_bg_content.xml similarity index 81% rename from Habitica/res/drawable/pill_bg_white.xml rename to Habitica/res/drawable/pill_bg_content.xml index f90c324d3..34654a9f6 100644 --- a/Habitica/res/drawable/pill_bg_white.xml +++ b/Habitica/res/drawable/pill_bg_content.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/Habitica/res/drawable/pill_bg_gray.xml b/Habitica/res/drawable/pill_bg_gray.xml index 37fceb493..04853c7e8 100644 --- a/Habitica/res/drawable/pill_bg_gray.xml +++ b/Habitica/res/drawable/pill_bg_gray.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/Habitica/res/drawable/pill_bg_gray_100.xml b/Habitica/res/drawable/pill_bg_gray_100.xml index d4d0a7406..83a555366 100644 --- a/Habitica/res/drawable/pill_bg_gray_100.xml +++ b/Habitica/res/drawable/pill_bg_gray_100.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/Habitica/res/drawable/pill_bg_purple_400.xml b/Habitica/res/drawable/pill_bg_purple_400.xml index 6d8163ecf..a97045794 100644 --- a/Habitica/res/drawable/pill_bg_purple_400.xml +++ b/Habitica/res/drawable/pill_bg_purple_400.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/Habitica/res/drawable/pill_bg_radio_unselected.xml b/Habitica/res/drawable/pill_bg_radio_unselected.xml index d115dede9..3c7f7ed72 100644 --- a/Habitica/res/drawable/pill_bg_radio_unselected.xml +++ b/Habitica/res/drawable/pill_bg_radio_unselected.xml @@ -1,7 +1,7 @@ - + - + \ No newline at end of file diff --git a/Habitica/res/drawable/pill_bg_gray_700.xml b/Habitica/res/drawable/pill_bg_window.xml similarity index 82% rename from Habitica/res/drawable/pill_bg_gray_700.xml rename to Habitica/res/drawable/pill_bg_window.xml index fc8626c84..70382d6db 100644 --- a/Habitica/res/drawable/pill_bg_gray_700.xml +++ b/Habitica/res/drawable/pill_bg_window.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/Habitica/res/drawable/progressbar_red.xml b/Habitica/res/drawable/progressbar_red.xml index 07df2d1a5..2a756725a 100644 --- a/Habitica/res/drawable/progressbar_red.xml +++ b/Habitica/res/drawable/progressbar_red.xml @@ -4,7 +4,7 @@ diff --git a/Habitica/res/drawable/purchase_button_background.xml b/Habitica/res/drawable/purchase_button_background.xml index 34ccf9ad2..0937d0259 100644 --- a/Habitica/res/drawable/purchase_button_background.xml +++ b/Habitica/res/drawable/purchase_button_background.xml @@ -26,7 +26,7 @@ + android:color="@color/inverted_background_offset"> @@ -36,7 +36,7 @@ + android:color="@color/color_accent"> diff --git a/Habitica/res/drawable/quest_difficulty_bg.xml b/Habitica/res/drawable/quest_difficulty_bg.xml index 96c52e317..7bcd3ecde 100644 --- a/Habitica/res/drawable/quest_difficulty_bg.xml +++ b/Habitica/res/drawable/quest_difficulty_bg.xml @@ -1,7 +1,7 @@ - + \ No newline at end of file diff --git a/Habitica/res/drawable/rounded_border.xml b/Habitica/res/drawable/rounded_border.xml index 8ceff4312..d239815b8 100644 --- a/Habitica/res/drawable/rounded_border.xml +++ b/Habitica/res/drawable/rounded_border.xml @@ -3,6 +3,6 @@ + android:color="@color/offset_background"/> diff --git a/Habitica/res/drawable/rounded_border_white.xml b/Habitica/res/drawable/rounded_border_content.xml similarity index 63% rename from Habitica/res/drawable/rounded_border_white.xml rename to Habitica/res/drawable/rounded_border_content.xml index b1e7cce44..c768d51cf 100644 --- a/Habitica/res/drawable/rounded_border_white.xml +++ b/Habitica/res/drawable/rounded_border_content.xml @@ -1,8 +1,8 @@ - + + android:color="@color/offset_background"/> diff --git a/Habitica/res/drawable/rounded_purple_square.xml b/Habitica/res/drawable/rounded_purple_square.xml index 0dc0c7e65..043026ceb 100644 --- a/Habitica/res/drawable/rounded_purple_square.xml +++ b/Habitica/res/drawable/rounded_purple_square.xml @@ -2,15 +2,6 @@ - - - - - - - - - + + \ No newline at end of file diff --git a/Habitica/res/drawable/seekbar_thumb.xml b/Habitica/res/drawable/seekbar_thumb.xml index 9babaf6f2..74a3d4b0a 100644 --- a/Habitica/res/drawable/seekbar_thumb.xml +++ b/Habitica/res/drawable/seekbar_thumb.xml @@ -10,10 +10,10 @@ - + + android:color="@color/content_background_offset" /> diff --git a/Habitica/res/drawable/subscription_box_bg.xml b/Habitica/res/drawable/subscription_box_bg.xml index cc3311445..bc7b82302 100644 --- a/Habitica/res/drawable/subscription_box_bg.xml +++ b/Habitica/res/drawable/subscription_box_bg.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/Habitica/res/drawable/subscription_box_bg_selected.xml b/Habitica/res/drawable/subscription_box_bg_selected.xml index 3c5034039..3051368c3 100644 --- a/Habitica/res/drawable/subscription_box_bg_selected.xml +++ b/Habitica/res/drawable/subscription_box_bg_selected.xml @@ -1,7 +1,7 @@ - + - + \ No newline at end of file diff --git a/Habitica/res/drawable/system_chat_background.xml b/Habitica/res/drawable/system_chat_background.xml index 13de39f8d..ca5a8cd52 100644 --- a/Habitica/res/drawable/system_chat_background.xml +++ b/Habitica/res/drawable/system_chat_background.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/Habitica/res/drawable/task_background.xml b/Habitica/res/drawable/task_background.xml index b803f0bfa..f4d0bf2b5 100644 --- a/Habitica/res/drawable/task_background.xml +++ b/Habitica/res/drawable/task_background.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/Habitica/res/drawable/task_form_control_bg.xml b/Habitica/res/drawable/task_form_control_bg.xml index 64cd42452..4e8a5ba4f 100644 --- a/Habitica/res/drawable/task_form_control_bg.xml +++ b/Habitica/res/drawable/task_form_control_bg.xml @@ -2,14 +2,14 @@ - + - + diff --git a/Habitica/res/drawable/todo_checked.xml b/Habitica/res/drawable/todo_checked.xml index 35960c7b5..bbf9ee7d8 100644 --- a/Habitica/res/drawable/todo_checked.xml +++ b/Habitica/res/drawable/todo_checked.xml @@ -4,7 +4,7 @@ - + diff --git a/Habitica/res/drawable/vertical_divider.xml b/Habitica/res/drawable/vertical_divider.xml index bbf847fc5..8f0c41fc4 100644 --- a/Habitica/res/drawable/vertical_divider.xml +++ b/Habitica/res/drawable/vertical_divider.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/Habitica/res/layout/achievement_grid_item.xml b/Habitica/res/layout/achievement_grid_item.xml index acf0fb446..cb586e0f6 100644 --- a/Habitica/res/layout/achievement_grid_item.xml +++ b/Habitica/res/layout/achievement_grid_item.xml @@ -8,13 +8,13 @@ android:gravity="center_vertical" android:paddingTop="13dp" android:paddingBottom="13dp" - tools:background="@color/white"> + tools:background="?attr/colorContentBackground"> + android:textColor="@color/text_primary"/> + android:textColor="@color/text_secondary"/> \ No newline at end of file diff --git a/Habitica/res/layout/achievement_quest_item.xml b/Habitica/res/layout/achievement_quest_item.xml index e02d3234a..16ca8fd0e 100644 --- a/Habitica/res/layout/achievement_quest_item.xml +++ b/Habitica/res/layout/achievement_quest_item.xml @@ -12,9 +12,9 @@ android:layout_width="40dp" android:layout_height="40dp" android:gravity="center" - android:textColor="@color/gray_200" + android:textColor="@color/text_ternary" style="@style/Body1" - android:background="@drawable/circle_gray600" + android:background="@drawable/circle_offset" tools:text="12" android:layout_marginStart="35dp" android:layout_marginEnd="25dp"/> @@ -23,6 +23,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" style="@style/Body1" - android:textColor="@color/gray_100" + android:textColor="@color/text_secondary" tools:text="This is the quest title"/> \ No newline at end of file diff --git a/Habitica/res/layout/achievement_section_header.xml b/Habitica/res/layout/achievement_section_header.xml index 3701fd96a..a89675365 100644 --- a/Habitica/res/layout/achievement_section_header.xml +++ b/Habitica/res/layout/achievement_section_header.xml @@ -24,7 +24,7 @@ android:background="@drawable/achievement_section_badge_bg" android:paddingStart="2dp" android:paddingEnd="2dp" - android:textColor="@color/gray_200" + android:textColor="@color/text_ternary" style="@style/Overline" tools:text="1"/> \ No newline at end of file diff --git a/Habitica/res/layout/activity_about.xml b/Habitica/res/layout/activity_about.xml deleted file mode 100644 index 0329f6e21..000000000 --- a/Habitica/res/layout/activity_about.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Habitica/res/layout/activity_adventure_guide.xml b/Habitica/res/layout/activity_adventure_guide.xml index 5feab0ad1..bee332101 100644 --- a/Habitica/res/layout/activity_adventure_guide.xml +++ b/Habitica/res/layout/activity_adventure_guide.xml @@ -4,9 +4,9 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".ui.activities.PrefsActivity" + android:background="?attr/colorContentBackground" android:orientation="vertical" - android:background="@color/white"> + tools:context=".ui.activities.PrefsActivity"> + app:popupTheme="@style/Theme.AppCompat.Light" /> - - - - - - - - - - - - - - + android:layout_height="match_parent" + android:scrollbarSize="3dp" + android:scrollbarThumbVertical="@color/scrollbarThumb" + android:scrollbars="vertical"> + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Habitica/res/layout/activity_class_selection.xml b/Habitica/res/layout/activity_class_selection.xml index c27526a99..b267aa597 100644 --- a/Habitica/res/layout/activity_class_selection.xml +++ b/Habitica/res/layout/activity_class_selection.xml @@ -5,7 +5,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" - android:background="@color/white"> + android:background="@color/content_background"> @@ -16,10 +16,10 @@ android:layout_height="wrap_content" android:minHeight="?attr/actionBarSize" android:theme="@style/Toolbar" - android:background="@color/white" + android:background="@color/content_background" app:layout_scrollFlags="scroll|enterAlways" app:title="@string/choose_class" - app:titleTextColor="@color/gray_50" + app:titleTextColor="@color/text_primary" app:theme="@style/ToolbarDarkBackArrow" app:popupTheme="@style/ThemeOverlay.AppCompat.Dark"/> diff --git a/Habitica/res/layout/activity_create_challenge.xml b/Habitica/res/layout/activity_create_challenge.xml index 9c5cab514..1bca0492d 100644 --- a/Habitica/res/layout/activity_create_challenge.xml +++ b/Habitica/res/layout/activity_create_challenge.xml @@ -6,7 +6,7 @@ android:layout_height="match_parent" tools:context=".ui.activities.PrefsActivity" android:orientation="vertical" - android:background="@color/white"> + android:background="?attr/colorContentBackground"> diff --git a/Habitica/res/layout/activity_fixcharacter.xml b/Habitica/res/layout/activity_fixcharacter.xml index 7dce1e80b..38a142606 100644 --- a/Habitica/res/layout/activity_fixcharacter.xml +++ b/Habitica/res/layout/activity_fixcharacter.xml @@ -6,7 +6,7 @@ android:layout_height="match_parent" android:orientation="vertical" tools:context="com.habitrpg.android.habitica.ui.activities.FixCharacterValuesActivity" - android:background="@color/white"> + android:background="?attr/colorContentBackground"> @@ -32,7 +32,7 @@ android:layout_height="wrap_content" android:padding="@dimen/outer_inset" android:text="@string/fix_character_description" - android:background="@color/gray_700" + android:background="@color/window_background" android:layout_marginBottom="16dp" /> @@ -76,7 +76,7 @@ android:layout_width="match_parent" android:layout_height="2dp" android:layout_gravity="bottom" - android:background="@color/gray_500" + android:background="@color/content_background_offset" android:layout_marginEnd="56dp"/> @@ -119,7 +119,7 @@ android:layout_width="match_parent" android:layout_height="2dp" android:layout_gravity="bottom" - android:background="@color/gray_500" + android:background="@color/content_background_offset" android:layout_marginEnd="56dp"/> @@ -162,7 +162,7 @@ android:layout_width="match_parent" android:layout_height="2dp" android:layout_gravity="bottom" - android:background="@color/gray_500" + android:background="@color/content_background_offset" android:layout_marginEnd="56dp"/> @@ -205,7 +205,7 @@ android:layout_width="match_parent" android:layout_height="2dp" android:layout_gravity="bottom" - android:background="@color/gray_500" + android:background="@color/content_background_offset" android:layout_marginEnd="56dp"/> @@ -248,7 +248,7 @@ android:layout_width="match_parent" android:layout_height="2dp" android:layout_gravity="bottom" - android:background="@color/gray_500" + android:background="@color/content_background_offset" android:layout_marginEnd="56dp"/> @@ -292,7 +292,7 @@ android:layout_width="match_parent" android:layout_height="2dp" android:layout_gravity="bottom" - android:background="@color/gray_500" + android:background="@color/content_background_offset" android:layout_marginEnd="56dp"/> diff --git a/Habitica/res/layout/activity_full_profile.xml b/Habitica/res/layout/activity_full_profile.xml index e5b00b214..4bc855e1a 100644 --- a/Habitica/res/layout/activity_full_profile.xml +++ b/Habitica/res/layout/activity_full_profile.xml @@ -7,7 +7,7 @@ android:layout_height="match_parent" android:orientation="vertical" tools:context="com.habitrpg.android.habitica.ui.activities.FixCharacterValuesActivity" - android:background="@color/white"> + android:background="?attr/colorContentBackground"> diff --git a/Habitica/res/layout/activity_gem_purchase.xml b/Habitica/res/layout/activity_gem_purchase.xml index aa1383e4c..1dea4dc04 100644 --- a/Habitica/res/layout/activity_gem_purchase.xml +++ b/Habitica/res/layout/activity_gem_purchase.xml @@ -21,7 +21,7 @@ android:id="@+id/fragment_container" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@android:color/white" + android:background="@color/content_background" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> diff --git a/Habitica/res/layout/activity_gift1get1_info.xml b/Habitica/res/layout/activity_gift1get1_info.xml index 7834af30f..304d8cfc0 100644 --- a/Habitica/res/layout/activity_gift1get1_info.xml +++ b/Habitica/res/layout/activity_gift1get1_info.xml @@ -4,14 +4,14 @@ android:layout_width="match_parent" android:layout_height="match_parent" xmlns:tools="http://schemas.android.com/tools" - android:background="@color/white"> + android:background="@color/content_background"> + android:background="@color/content_background"> diff --git a/Habitica/res/layout/activity_gift_gems.xml b/Habitica/res/layout/activity_gift_gems.xml index faa1191b7..4fe107bcd 100644 --- a/Habitica/res/layout/activity_gift_gems.xml +++ b/Habitica/res/layout/activity_gift_gems.xml @@ -3,7 +3,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@color/white"> + android:background="@color/content_background"> + android:background="@color/content_background"> + android:background="@color/content_background" /> diff --git a/Habitica/res/layout/activity_gift_subscription.xml b/Habitica/res/layout/activity_gift_subscription.xml index 6a1cea61e..ef143df9f 100644 --- a/Habitica/res/layout/activity_gift_subscription.xml +++ b/Habitica/res/layout/activity_gift_subscription.xml @@ -6,7 +6,7 @@ android:layout_height="match_parent" android:orientation="vertical" tools:context="com.habitrpg.android.habitica.ui.activities.FixCharacterValuesActivity" - android:background="@color/white"> + android:background="@color/content_background"> @@ -49,7 +49,7 @@ android:id="@+id/username_textview" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:textColor="@color/gray_300" + android:textColor="@color/text_quad" android:textSize="12sp" android:layout_gravity="center_horizontal" android:layout_marginBottom="@dimen/spacing_large"/> @@ -59,7 +59,7 @@ android:layout_gravity="center_horizontal" android:gravity="center_horizontal" android:text="@string/gift_subscription_subtitle" - android:textColor="@color/gray_300" + android:textColor="@color/text_quad" android:layout_marginLeft="@dimen/spacing_large" android:layout_marginRight="@dimen/spacing_large"/> + android:background="@color/window_background"> + android:background="?attr/colorContentBackground"> + android:textColorHint="@color/text_primary"> @@ -72,7 +72,7 @@ android:layout_marginLeft="@dimen/spacing_large" android:layout_marginRight="@dimen/spacing_large" android:background="@drawable/edittext" - android:textColorHint="@color/gray_50"> + android:textColorHint="@color/text_primary"> diff --git a/Habitica/res/layout/activity_guidelines.xml b/Habitica/res/layout/activity_guidelines.xml index e22db839a..87588e8ec 100644 --- a/Habitica/res/layout/activity_guidelines.xml +++ b/Habitica/res/layout/activity_guidelines.xml @@ -6,7 +6,7 @@ android:layout_height="match_parent" tools:context=".ui.activities.PrefsActivity" android:orientation="vertical" - android:background="@color/white"> + android:background="@color/content_background"> + android:background="@color/content_background"> @@ -53,10 +53,10 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:minHeight="?attr/actionBarSize" - android:theme="@style/Toolbar.Modern" + style="@style/Toolbar.Modern" android:background="?attr/headerBackgroundColor" app:layout_collapseMode="pin" - app:popupTheme="@style/Theme.AppCompat.Light"> + app:popupTheme="@style/Theme.AppCompat.DayNight"> + android:background="?attr/colorContentBackground"> + android:background="@color/content_background"> + android:background="@color/content_background"> + android:background="@color/content_background" /> diff --git a/Habitica/res/layout/activity_prefs.xml b/Habitica/res/layout/activity_prefs.xml index 2139a4a7f..8667bdae2 100644 --- a/Habitica/res/layout/activity_prefs.xml +++ b/Habitica/res/layout/activity_prefs.xml @@ -6,7 +6,7 @@ android:layout_height="match_parent" tools:context=".ui.activities.PrefsActivity" android:orientation="vertical" - android:background="@color/white"> + android:background="?attr/colorContentBackground">