mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-05-25 15:16:01 +00:00
Refactor code to use less events
This commit is contained in:
parent
644b4d8840
commit
4461d10353
93 changed files with 410 additions and 587 deletions
|
|
@ -25,7 +25,6 @@ import com.habitrpg.android.habitica.api.HostConfig
|
|||
import com.habitrpg.android.habitica.components.AppComponent
|
||||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
import com.habitrpg.android.habitica.data.ApiClient
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.modules.UserModule
|
||||
import com.habitrpg.android.habitica.modules.UserRepositoryModule
|
||||
|
|
@ -186,7 +185,7 @@ abstract class HabiticaBaseApplication : MultiDexApplication() {
|
|||
}
|
||||
})
|
||||
|
||||
billing.notNull { checkout = Checkout.forApplication(it) }
|
||||
billing?.let { checkout = Checkout.forApplication(it) }
|
||||
}
|
||||
|
||||
private fun setupRemoteConfig() {
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ package com.habitrpg.android.habitica.data.implementation
|
|||
import com.habitrpg.android.habitica.data.ApiClient
|
||||
import com.habitrpg.android.habitica.data.SocialRepository
|
||||
import com.habitrpg.android.habitica.data.local.SocialLocalRepository
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.models.Achievement
|
||||
import com.habitrpg.android.habitica.models.inventory.Quest
|
||||
|
|
@ -246,7 +245,7 @@ class SocialRepositoryImpl(localRepository: SocialLocalRepository, apiClient: Ap
|
|||
override fun acceptQuest(user: User?, partyId: String): Flowable<Void> {
|
||||
return apiClient.acceptQuest(partyId)
|
||||
.doOnNext {
|
||||
user.notNull {
|
||||
user?.let {
|
||||
localRepository.updateRSVPNeeded(it, false)
|
||||
}
|
||||
}
|
||||
|
|
@ -255,7 +254,7 @@ class SocialRepositoryImpl(localRepository: SocialLocalRepository, apiClient: Ap
|
|||
override fun rejectQuest(user: User?, partyId: String): Flowable<Void> {
|
||||
return apiClient.rejectQuest(partyId)
|
||||
.doOnNext { _ ->
|
||||
user.notNull {
|
||||
user?.let {
|
||||
localRepository.updateRSVPNeeded(it, false)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ package com.habitrpg.android.habitica.data.local.implementation
|
|||
|
||||
import android.content.Context
|
||||
import com.habitrpg.android.habitica.data.local.InventoryLocalRepository
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.models.inventory.*
|
||||
import com.habitrpg.android.habitica.models.shops.ShopItem
|
||||
|
|
@ -175,7 +174,7 @@ class RealmInventoryLocalRepository(realm: Realm, private val context: Context)
|
|||
}
|
||||
|
||||
override fun changeOwnedCount(item: OwnedItem, amountToAdd: Int?) {
|
||||
amountToAdd.notNull { amount ->
|
||||
amountToAdd?.let { amount ->
|
||||
realm.executeTransaction { item.numberOwned = item.numberOwned + amount }
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,17 +0,0 @@
|
|||
package com.habitrpg.android.habitica.events;
|
||||
|
||||
import com.habitrpg.android.habitica.models.TutorialStep;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by viirus on 26/01/16.
|
||||
*/
|
||||
public class DisplayTutorialEvent {
|
||||
|
||||
public TutorialStep step;
|
||||
public String tutorialText;
|
||||
|
||||
public List<String> tutorialTexts;
|
||||
public boolean canBeDeferred;
|
||||
}
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
package com.habitrpg.android.habitica.events;
|
||||
|
||||
public class OpenMysteryItemEvent {
|
||||
|
||||
}
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
package com.habitrpg.android.habitica.events.commands;
|
||||
|
||||
import com.habitrpg.android.habitica.models.tasks.ChecklistItem;
|
||||
import com.habitrpg.android.habitica.models.tasks.Task;
|
||||
|
||||
public class ChecklistCheckedCommand {
|
||||
|
||||
public Task task;
|
||||
public ChecklistItem item;
|
||||
}
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
package com.habitrpg.android.habitica.events.commands;
|
||||
|
||||
public class EquipCommand {
|
||||
|
||||
public String key;
|
||||
public String type;
|
||||
|
||||
}
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
package com.habitrpg.android.habitica.events.commands;
|
||||
|
||||
import com.habitrpg.android.habitica.models.inventory.Egg;
|
||||
import com.habitrpg.android.habitica.models.inventory.HatchingPotion;
|
||||
|
||||
public class HatchingCommand {
|
||||
|
||||
public Egg usingEgg;
|
||||
public HatchingPotion usingHatchingPotion;
|
||||
|
||||
}
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
package com.habitrpg.android.habitica.events.commands;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Created by viirus on 13/01/16.
|
||||
*/
|
||||
public class UpdateUserCommand {
|
||||
|
||||
public Map<String, Object> updateData;
|
||||
|
||||
}
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
package com.habitrpg.android.habitica.events.commands;
|
||||
|
||||
import com.habitrpg.android.habitica.models.Skill;
|
||||
|
||||
/**
|
||||
* Created by viirus on 28/11/15.
|
||||
*/
|
||||
public class UseSkillCommand {
|
||||
|
||||
public Skill skill;
|
||||
}
|
||||
|
|
@ -7,10 +7,6 @@ import java.util.concurrent.TimeUnit
|
|||
* Created by phillip on 01.02.18.
|
||||
*/
|
||||
|
||||
fun <T : Any> T?.notNull(f: (it: T) -> Unit) {
|
||||
if (this != null) f(this)
|
||||
}
|
||||
|
||||
fun runDelayed(interval: Long, timeUnit: TimeUnit, function: () -> Unit) {
|
||||
Completable.complete().delay(interval, timeUnit)
|
||||
.subscribe(function)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
package com.habitrpg.android.habitica.interactors
|
||||
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.models.responses.TaskDirection
|
||||
import com.habitrpg.android.habitica.models.responses.TaskDirectionData
|
||||
import com.habitrpg.android.habitica.models.tasks.Task
|
||||
|
|
@ -133,7 +132,7 @@ class ScoreTaskLocallyInteractor {
|
|||
|
||||
val outfit = user.items?.gear?.equipped
|
||||
val outfitList = ArrayList<String>()
|
||||
outfit.notNull { thisOutfit ->
|
||||
outfit?.let { thisOutfit ->
|
||||
outfitList.add(thisOutfit.armor)
|
||||
outfitList.add(thisOutfit.back)
|
||||
outfitList.add(thisOutfit.body)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
package com.habitrpg.android.habitica.models.social
|
||||
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.models.tasks.TasksOrder
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import io.realm.RealmObject
|
||||
|
|
@ -40,19 +39,19 @@ open class Challenge : RealmObject() {
|
|||
val map = HashMap<String, Array<String>>()
|
||||
|
||||
if (dailyList?.isNotEmpty() == true) {
|
||||
dailyList?.split(",".toRegex())?.dropLastWhile { it.isEmpty() }?.toTypedArray().notNull { map[TASK_ORDER_DAILYS] }
|
||||
dailyList?.split(",".toRegex())?.dropLastWhile { it.isEmpty() }?.toTypedArray()?.let { map[TASK_ORDER_DAILYS] }
|
||||
}
|
||||
|
||||
if (habitList?.isNotEmpty() == true) {
|
||||
habitList?.split(",".toRegex())?.dropLastWhile { it.isEmpty() }?.toTypedArray().notNull { map[TASK_ORDER_HABITS] }
|
||||
habitList?.split(",".toRegex())?.dropLastWhile { it.isEmpty() }?.toTypedArray()?.let { map[TASK_ORDER_HABITS] }
|
||||
}
|
||||
|
||||
if (rewardList?.isNotEmpty() == true) {
|
||||
rewardList?.split(",".toRegex())?.dropLastWhile { it.isEmpty() }?.toTypedArray().notNull { map[TASK_ORDER_REWARDS] }
|
||||
rewardList?.split(",".toRegex())?.dropLastWhile { it.isEmpty() }?.toTypedArray()?.let { map[TASK_ORDER_REWARDS] }
|
||||
}
|
||||
|
||||
if (todoList?.isNotEmpty() == true) {
|
||||
todoList?.split(",".toRegex())?.dropLastWhile { it.isEmpty() }?.toTypedArray().notNull { map[TASK_ORDER_TODOS] }
|
||||
todoList?.split(",".toRegex())?.dropLastWhile { it.isEmpty() }?.toTypedArray()?.let { map[TASK_ORDER_TODOS] }
|
||||
}
|
||||
|
||||
return map
|
||||
|
|
|
|||
|
|
@ -17,7 +17,6 @@ import com.habitrpg.android.habitica.components.UserComponent
|
|||
import com.habitrpg.android.habitica.data.ChallengeRepository
|
||||
import com.habitrpg.android.habitica.data.SocialRepository
|
||||
import com.habitrpg.android.habitica.data.UserRepository
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.models.social.Challenge
|
||||
import com.habitrpg.android.habitica.models.social.Group
|
||||
|
|
@ -348,10 +347,10 @@ class ChallengeFormActivity : BaseActivity() {
|
|||
|
||||
|
||||
val taskList = ArrayList<Task>()
|
||||
addHabit.notNull { taskList.add(it) }
|
||||
addDaily.notNull { taskList.add(it) }
|
||||
addTodo.notNull { taskList.add(it) }
|
||||
addReward.notNull { taskList.add(it) }
|
||||
addHabit?.let { taskList.add(it) }
|
||||
addDaily?.let { taskList.add(it) }
|
||||
addTodo?.let { taskList.add(it) }
|
||||
addReward?.let { taskList.add(it) }
|
||||
|
||||
challengeTasks.setTasks(taskList)
|
||||
compositeSubscription.add(challengeTasks.addItemObservable().subscribe(Consumer { t ->
|
||||
|
|
@ -374,7 +373,7 @@ class ChallengeFormActivity : BaseActivity() {
|
|||
}
|
||||
|
||||
private fun fillControlsByChallenge() {
|
||||
challengeId.notNull {
|
||||
challengeId?.let {
|
||||
challengeRepository.getChallenge(it).subscribe(Consumer { challenge ->
|
||||
groupID = challenge.groupId
|
||||
editMode = true
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@ import com.habitrpg.android.habitica.components.UserComponent
|
|||
import com.habitrpg.android.habitica.data.ApiClient
|
||||
import com.habitrpg.android.habitica.data.InventoryRepository
|
||||
import com.habitrpg.android.habitica.data.SocialRepository
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.MainNavigationController
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.helpers.UserStatComputer
|
||||
|
|
@ -181,8 +180,8 @@ class FullProfileActivity : BaseActivity() {
|
|||
blurbTextView.text = MarkdownParser.parseMarkdown(blurbText)
|
||||
}
|
||||
|
||||
user.authentication?.timestamps?.createdAt.notNull { joinedView.text = dateFormatter.format(it) }
|
||||
user.authentication?.timestamps?.lastLoggedIn.notNull { lastLoginView.text = dateFormatter.format(it) }
|
||||
user.authentication?.timestamps?.createdAt?.let { joinedView.text = dateFormatter.format(it) }
|
||||
user.authentication?.timestamps?.lastLoggedIn?.let { lastLoginView.text = dateFormatter.format(it) }
|
||||
totalCheckinsView.text = user.loginIncentives.toString()
|
||||
|
||||
usernameText.text = user.username
|
||||
|
|
@ -354,7 +353,7 @@ class FullProfileActivity : BaseActivity() {
|
|||
}
|
||||
}
|
||||
|
||||
user.stats.notNull { addNormalAddBuffAttributes(it) }
|
||||
user.stats?.let { addNormalAddBuffAttributes(it) }
|
||||
}
|
||||
|
||||
private fun gotCostume(obj: List<Equipment>) {
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@ import com.habitrpg.android.habitica.R
|
|||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
import com.habitrpg.android.habitica.data.UserRepository
|
||||
import com.habitrpg.android.habitica.events.ConsumablePurchasedEvent
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.PurchaseTypes
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.models.user.ABTest
|
||||
|
|
@ -154,7 +153,7 @@ class GemPurchaseActivity : BaseActivity(), InAppMessageListener {
|
|||
}
|
||||
|
||||
private fun setupCheckout() {
|
||||
HabiticaBaseApplication.getInstance(this)?.billing.notNull {
|
||||
HabiticaBaseApplication.getInstance(this)?.billing?.let {
|
||||
activityCheckout = Checkout.forActivity(this, it)
|
||||
activityCheckout?.start()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@ import com.habitrpg.android.habitica.components.UserComponent
|
|||
import com.habitrpg.android.habitica.data.SocialRepository
|
||||
import com.habitrpg.android.habitica.events.ConsumablePurchasedEvent
|
||||
import com.habitrpg.android.habitica.extensions.addOkButton
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
||||
import com.habitrpg.android.habitica.helpers.PurchaseTypes
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
|
|
@ -87,7 +86,7 @@ class GiftIAPActivity: BaseActivity() {
|
|||
giftedUsername = intent.getStringExtra("username")
|
||||
|
||||
subscriptionButton?.setOnClickListener {
|
||||
selectedSubscriptionSku?.notNull { sku -> purchaseSubscription(sku) }
|
||||
selectedSubscriptionSku?.let { sku -> purchaseSubscription(sku) }
|
||||
}
|
||||
|
||||
giftOneGetOneContainer?.isVisible = appConfigManager.enableGiftOneGetOne()
|
||||
|
|
@ -174,7 +173,7 @@ class GiftIAPActivity: BaseActivity() {
|
|||
}
|
||||
|
||||
private fun setupCheckout() {
|
||||
HabiticaBaseApplication.getInstance(this)?.billing.notNull {
|
||||
HabiticaBaseApplication.getInstance(this)?.billing?.let {
|
||||
activityCheckout = Checkout.forActivity(this, it)
|
||||
activityCheckout?.start()
|
||||
}
|
||||
|
|
@ -236,7 +235,7 @@ class GiftIAPActivity: BaseActivity() {
|
|||
if (giftedUserID?.isNotEmpty() != true) {
|
||||
return
|
||||
}
|
||||
activityCheckout.notNull {
|
||||
activityCheckout?.let {
|
||||
HabiticaPurchaseVerifier.pendingGifts[sku.id.code] = giftedUserID
|
||||
billingRequests?.purchase(ProductTypes.IN_APP, sku.id.code, null, it.purchaseFlow)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ import android.view.View
|
|||
import android.widget.*
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.ui.helpers.*
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaAutocompleteTextView
|
||||
|
||||
|
|
@ -39,7 +38,7 @@ class GroupFormActivity : BaseActivity() {
|
|||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
intent.extras.notNull {bundle ->
|
||||
intent.extras?.let {bundle ->
|
||||
groupID = bundle.getString("groupID")
|
||||
groupType = bundle.getString("groupType")
|
||||
groupName = bundle.getString("name")
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@ import com.habitrpg.android.habitica.R
|
|||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
import com.habitrpg.android.habitica.data.SocialRepository
|
||||
import com.habitrpg.android.habitica.data.UserRepository
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.extensions.runDelayed
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
|
|
@ -164,7 +163,7 @@ class GroupInviteActivity : BaseActivity() {
|
|||
|
||||
val inviteData = HashMap<String, Any>()
|
||||
val invites = ArrayList<String>()
|
||||
userIdToInvite.notNull {
|
||||
userIdToInvite?.let {
|
||||
invites.add(it)
|
||||
}
|
||||
inviteData["uuids"] = invites
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ import androidx.recyclerview.widget.RecyclerView
|
|||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
import com.habitrpg.android.habitica.data.TaskRepository
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.models.tasks.Task
|
||||
import com.habitrpg.android.habitica.modules.AppModule
|
||||
|
|
@ -67,7 +66,7 @@ class HabitButtonWidgetActivity : BaseActivity() {
|
|||
adapter = SkillTasksRecyclerViewAdapter(null, true)
|
||||
adapter?.getTaskSelectionEvents()?.subscribe(Consumer { task -> taskSelected(task.id) },
|
||||
RxErrorHandler.handleEmptyError())
|
||||
.notNull { compositeSubscription.add(it) }
|
||||
?.let { compositeSubscription.add(it) }
|
||||
recyclerView.adapter = adapter
|
||||
|
||||
compositeSubscription.add(taskRepository.getTasks(Task.TYPE_HABIT, userId).firstElement().subscribe(Consumer { adapter?.updateData(it) }, RxErrorHandler.handleEmptyError()))
|
||||
|
|
|
|||
|
|
@ -40,7 +40,6 @@ import com.habitrpg.android.habitica.data.UserRepository
|
|||
import com.habitrpg.android.habitica.extensions.addCancelButton
|
||||
import com.habitrpg.android.habitica.extensions.addCloseButton
|
||||
import com.habitrpg.android.habitica.extensions.addOkButton
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.AmplitudeManager
|
||||
import com.habitrpg.android.habitica.helpers.KeyHelper
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
|
|
@ -372,7 +371,7 @@ class LoginActivity : BaseActivity(), Consumer<UserAuthResponse> {
|
|||
.subscribe(this@LoginActivity, Consumer { throwable ->
|
||||
throwable.printStackTrace()
|
||||
hideProgress()
|
||||
throwable.cause.notNull {
|
||||
throwable.cause?.let {
|
||||
if (GoogleAuthException::class.java.isAssignableFrom(it.javaClass)) {
|
||||
handleGoogleAuthException(throwable.cause as GoogleAuthException)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,12 +37,12 @@ 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.events.*
|
||||
import com.habitrpg.android.habitica.events.commands.ChecklistCheckedCommand
|
||||
import com.habitrpg.android.habitica.events.ShareEvent
|
||||
import com.habitrpg.android.habitica.events.ShowCheckinDialog
|
||||
import com.habitrpg.android.habitica.events.ShowConnectionProblemEvent
|
||||
import com.habitrpg.android.habitica.events.ShowSnackbarEvent
|
||||
import com.habitrpg.android.habitica.events.commands.FeedCommand
|
||||
import com.habitrpg.android.habitica.events.commands.HatchingCommand
|
||||
import com.habitrpg.android.habitica.extensions.DateUtils
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.extensions.subscribeWithErrorHandler
|
||||
import com.habitrpg.android.habitica.helpers.*
|
||||
import com.habitrpg.android.habitica.helpers.notifications.PushNotificationManager
|
||||
|
|
@ -233,7 +233,7 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction {
|
|||
}
|
||||
|
||||
// Set the drawer toggle as the DrawerListener
|
||||
drawerToggle.notNull { drawerLayout.addDrawerListener(it) }
|
||||
drawerToggle?.let { drawerLayout.addDrawerListener(it) }
|
||||
|
||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
supportActionBar?.setHomeButtonEnabled(true)
|
||||
|
|
@ -358,8 +358,8 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction {
|
|||
if (user != null) {
|
||||
val preferences = user?.preferences
|
||||
|
||||
preferences?.language.notNull { apiClient.setLanguageCode(it) }
|
||||
preferences?.sound.notNull { soundManager.soundTheme = it }
|
||||
preferences?.language?.let { apiClient.setLanguageCode(it) }
|
||||
preferences?.sound?.let { soundManager.soundTheme = it }
|
||||
|
||||
displayDeathDialogIfNeeded()
|
||||
YesterdailyDialog.showDialogIfNeeded(this, user?.id, userRepository, taskRepository)
|
||||
|
|
@ -422,55 +422,6 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction {
|
|||
super.onDestroy()
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
fun openMysteryItem(event: OpenMysteryItemEvent) {
|
||||
compositeSubscription.add(inventoryRepository.openMysteryItem(user)
|
||||
.flatMap { userRepository.retrieveUser(false) }
|
||||
.subscribe(Consumer { }, RxErrorHandler.handleEmptyError()))
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
fun onEvent(tutorialEvent: DisplayTutorialEvent) {
|
||||
if (tutorialEvent.tutorialText != null) {
|
||||
this.displayTutorialStep(tutorialEvent.step, tutorialEvent.tutorialText, tutorialEvent.canBeDeferred)
|
||||
} else {
|
||||
this.displayTutorialStep(tutorialEvent.step, tutorialEvent.tutorialTexts, tutorialEvent.canBeDeferred)
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
fun onEvent(event: HatchingCommand) {
|
||||
if (event.usingEgg == null || event.usingHatchingPotion == null) {
|
||||
return
|
||||
}
|
||||
compositeSubscription.add(this.inventoryRepository.hatchPet(event.usingEgg, event.usingHatchingPotion) {
|
||||
val petWrapper = View.inflate(this, R.layout.pet_imageview, null) as? FrameLayout
|
||||
val petImageView = petWrapper?.findViewById(R.id.pet_imageview) as? SimpleDraweeView
|
||||
|
||||
DataBindingUtils.loadImage(petImageView, "Pet-" + event.usingEgg.key + "-" + event.usingHatchingPotion.key)
|
||||
val potionName = event.usingHatchingPotion.text
|
||||
val eggName = event.usingEgg.text
|
||||
val dialog = HabiticaAlertDialog(this@MainActivity)
|
||||
dialog.setTitle(getString(R.string.hatched_pet_title, potionName, eggName))
|
||||
dialog.setAdditionalContentView(petWrapper)
|
||||
dialog.addButton(R.string.onwards, true) { hatchingDialog, _ -> hatchingDialog.dismiss() }
|
||||
dialog.addButton(R.string.share, false) { hatchingDialog, _ ->
|
||||
val event1 = ShareEvent()
|
||||
event1.sharedMessage = getString(R.string.share_hatched, potionName, eggName) + " https://habitica.com/social/hatch-pet"
|
||||
val petImageSideLength = 140
|
||||
val sharedImage = Bitmap.createBitmap(petImageSideLength, petImageSideLength, Bitmap.Config.ARGB_8888)
|
||||
val canvas = Canvas(sharedImage)
|
||||
canvas.drawColor(ContextCompat.getColor(this, R.color.brand_300))
|
||||
petImageView?.drawable?.setBounds(0, 0, petImageSideLength, petImageSideLength)
|
||||
petImageView?.drawable?.draw(canvas)
|
||||
event1.shareImage = sharedImage
|
||||
EventBus.getDefault().post(event1)
|
||||
hatchingDialog.dismiss()
|
||||
}
|
||||
dialog.show()
|
||||
}.subscribe(Consumer { }, RxErrorHandler.handleEmptyError()))
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
fun onEvent(event: FeedCommand) {
|
||||
if (event.usingFood == null || event.usingPet == null) {
|
||||
|
|
@ -537,7 +488,7 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction {
|
|||
hpBarView?.setIcon(HabiticaIconsHelper.imageOfHeartLightBg())
|
||||
|
||||
val dialogAvatarView = customView.findViewById<View>(R.id.avatarView) as? AvatarView
|
||||
user.notNull { dialogAvatarView?.setAvatar(it) }
|
||||
user?.let { dialogAvatarView?.setAvatar(it) }
|
||||
}
|
||||
|
||||
this.faintDialog = HabiticaAlertDialog(this)
|
||||
|
|
@ -545,7 +496,7 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction {
|
|||
faintDialog?.setAdditionalContentView(customView)
|
||||
faintDialog?.addButton(R.string.faint_button, true) { _, _ ->
|
||||
faintDialog = null
|
||||
user.notNull {
|
||||
user?.let {
|
||||
userRepository.revive(it).subscribe(Consumer { }, RxErrorHandler.handleEmptyError())
|
||||
}
|
||||
}
|
||||
|
|
@ -578,7 +529,7 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction {
|
|||
}
|
||||
}
|
||||
|
||||
private fun displayTutorialStep(step: TutorialStep, text: String, canBeDeferred: Boolean) {
|
||||
fun displayTutorialStep(step: TutorialStep, text: String, canBeDeferred: Boolean) {
|
||||
removeActiveTutorialView()
|
||||
val view = TutorialView(this, step, this)
|
||||
this.activeTutorialView = view
|
||||
|
|
@ -594,7 +545,7 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction {
|
|||
AmplitudeManager.sendEvent("tutorial", AmplitudeManager.EVENT_CATEGORY_BEHAVIOUR, AmplitudeManager.EVENT_HITTYPE_EVENT, additionalData)
|
||||
}
|
||||
|
||||
private fun displayTutorialStep(step: TutorialStep, texts: List<String>, canBeDeferred: Boolean) {
|
||||
fun displayTutorialStep(step: TutorialStep, texts: List<String>, canBeDeferred: Boolean) {
|
||||
removeActiveTutorialView()
|
||||
val view = TutorialView(this, step, this)
|
||||
this.activeTutorialView = view
|
||||
|
|
@ -654,11 +605,6 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction {
|
|||
startActivity(Intent.createChooser(sharingIntent, getString(R.string.share_using)))
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
fun onEvent(event: ChecklistCheckedCommand) {
|
||||
compositeSubscription.add(taskRepository.scoreChecklistItem(event.task.id ?: "", event.item.id ?: "").subscribe(Consumer { }, RxErrorHandler.handleEmptyError()))
|
||||
}
|
||||
|
||||
private fun checkMaintenance() {
|
||||
compositeSubscription.add(this.maintenanceService.maintenanceStatus
|
||||
.subscribeOn(Schedulers.io())
|
||||
|
|
@ -755,7 +701,6 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction {
|
|||
}
|
||||
|
||||
companion object {
|
||||
|
||||
const val SELECT_CLASS_RESULT = 11
|
||||
const val GEM_PURCHASE_REQUEST = 111
|
||||
const val NOTIFICATION_CLICK = 222
|
||||
|
|
|
|||
|
|
@ -5,17 +5,17 @@ import android.content.Intent
|
|||
import android.graphics.drawable.Drawable
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.FragmentManager
|
||||
import androidx.fragment.app.FragmentPagerAdapter
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.viewpager.widget.ViewPager
|
||||
import androidx.appcompat.content.res.AppCompatResources
|
||||
import androidx.preference.PreferenceManager
|
||||
import android.view.View
|
||||
import android.view.inputmethod.InputMethodManager
|
||||
import android.widget.Button
|
||||
import androidx.appcompat.content.res.AppCompatResources
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.content.edit
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.FragmentManager
|
||||
import androidx.fragment.app.FragmentPagerAdapter
|
||||
import androidx.preference.PreferenceManager
|
||||
import androidx.viewpager.widget.ViewPager
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.api.HostConfig
|
||||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
|
|
@ -23,9 +23,6 @@ import com.habitrpg.android.habitica.data.ApiClient
|
|||
import com.habitrpg.android.habitica.data.InventoryRepository
|
||||
import com.habitrpg.android.habitica.data.TaskRepository
|
||||
import com.habitrpg.android.habitica.data.UserRepository
|
||||
import com.habitrpg.android.habitica.events.commands.EquipCommand
|
||||
import com.habitrpg.android.habitica.events.commands.UpdateUserCommand
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.AmplitudeManager
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
|
|
@ -38,7 +35,6 @@ import com.viewpagerindicator.IconPageIndicator
|
|||
import com.viewpagerindicator.IconPagerAdapter
|
||||
import io.reactivex.BackpressureStrategy
|
||||
import io.reactivex.functions.Consumer
|
||||
import org.greenrobot.eventbus.Subscribe
|
||||
import java.util.*
|
||||
import javax.inject.Inject
|
||||
|
||||
|
|
@ -125,18 +121,6 @@ class SetupActivity : BaseActivity(), ViewPager.OnPageChangeListener {
|
|||
indicator.setViewPager(pager)
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
fun onEvent(event: UpdateUserCommand) {
|
||||
compositeSubscription.add(this.userRepository.updateUser(user, event.updateData)
|
||||
.subscribe(Consumer<User> { this.onUserReceived(it) }, RxErrorHandler.handleEmptyError()))
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
fun onEvent(event: EquipCommand) {
|
||||
compositeSubscription.add(this.inventoryRepository.equip(user, event.type, event.key)
|
||||
.subscribe(Consumer { }, RxErrorHandler.handleEmptyError()))
|
||||
}
|
||||
|
||||
private fun nextClicked() {
|
||||
val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)
|
||||
sharedPreferences.edit {
|
||||
|
|
@ -148,7 +132,7 @@ class SetupActivity : BaseActivity(), ViewPager.OnPageChangeListener {
|
|||
}
|
||||
val newTasks = this.taskSetupFragment?.createSampleTasks()
|
||||
this.completedSetup = true
|
||||
newTasks.notNull {
|
||||
newTasks?.let {
|
||||
this.taskRepository.createTasks(it).subscribe(Consumer { onUserReceived(user) }, RxErrorHandler.handleEmptyError())
|
||||
}
|
||||
} else if (pager.currentItem == 0) {
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ import android.widget.*
|
|||
import androidx.core.content.ContextCompat
|
||||
import com.facebook.drawee.view.SimpleDraweeView
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.MainNavigationController
|
||||
import com.habitrpg.android.habitica.models.inventory.Customization
|
||||
import com.habitrpg.android.habitica.models.inventory.CustomizationSet
|
||||
|
|
@ -181,7 +180,7 @@ class CustomizationRecyclerViewAdapter : androidx.recyclerview.widget.RecyclerVi
|
|||
return@addButton
|
||||
}
|
||||
|
||||
customization.notNull {
|
||||
customization?.let {
|
||||
unlockCustomizationEvents.onNext(it)
|
||||
}
|
||||
}
|
||||
|
|
@ -196,7 +195,7 @@ class CustomizationRecyclerViewAdapter : androidx.recyclerview.widget.RecyclerVi
|
|||
return
|
||||
}
|
||||
|
||||
customization.notNull {
|
||||
customization?.let {
|
||||
selectCustomizationEvents.onNext(it)
|
||||
}
|
||||
}
|
||||
|
|
@ -247,7 +246,7 @@ class CustomizationRecyclerViewAdapter : androidx.recyclerview.widget.RecyclerVi
|
|||
.filter { !it.isUsable && it.customizationSet != null && it.customizationSet == set?.identifier }
|
||||
.forEach { set?.customizations?.add(it) }
|
||||
}
|
||||
set.notNull {
|
||||
set?.let {
|
||||
unlockSetEvents.onNext(it)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ import android.widget.Button
|
|||
import android.widget.TextView
|
||||
import androidx.core.os.bundleOf
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.MainNavigationController
|
||||
import com.habitrpg.android.habitica.models.FAQArticle
|
||||
import com.habitrpg.android.habitica.ui.activities.MainActivity
|
||||
|
|
@ -87,7 +86,7 @@ class FAQOverviewRecyclerAdapter : androidx.recyclerview.widget.RecyclerView.Ada
|
|||
}
|
||||
|
||||
override fun onClick(v: View) {
|
||||
article.notNull {
|
||||
article?.let {
|
||||
MainNavigationController.navigate(FAQOverviewFragmentDirections.openFAQDetail(it.position))
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import android.view.View
|
|||
import android.view.ViewGroup
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.models.tasks.Task
|
||||
import com.habitrpg.android.habitica.ui.helpers.bindView
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaEmojiTextView
|
||||
|
|
@ -38,7 +37,7 @@ class SkillTasksRecyclerViewAdapter(data: OrderedRealmCollection<Task>?, autoUpd
|
|||
}
|
||||
|
||||
override fun onBindViewHolder(holder: TaskViewHolder, position: Int) {
|
||||
data.notNull {
|
||||
data?.let {
|
||||
holder.bindHolder(it[position])
|
||||
}
|
||||
}
|
||||
|
|
@ -74,7 +73,7 @@ class SkillTasksRecyclerViewAdapter(data: OrderedRealmCollection<Task>?, autoUpd
|
|||
|
||||
override fun onClick(v: View) {
|
||||
if (v == itemView) {
|
||||
task.notNull {
|
||||
task?.let {
|
||||
taskSelectionEvents.onNext(it)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,24 +3,27 @@ package com.habitrpg.android.habitica.ui.adapter
|
|||
import android.content.Context
|
||||
import android.graphics.drawable.BitmapDrawable
|
||||
import android.graphics.drawable.Drawable
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.Button
|
||||
import android.widget.TextView
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.facebook.drawee.view.SimpleDraweeView
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.events.commands.UseSkillCommand
|
||||
import com.habitrpg.android.habitica.extensions.inflate
|
||||
import com.habitrpg.android.habitica.models.Skill
|
||||
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
|
||||
import com.habitrpg.android.habitica.ui.helpers.bindView
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
import io.reactivex.BackpressureStrategy
|
||||
import io.reactivex.subjects.PublishSubject
|
||||
|
||||
class SkillsRecyclerViewAdapter : RecyclerView.Adapter<SkillsRecyclerViewAdapter.SkillViewHolder>() {
|
||||
|
||||
private val useSkillSubject = PublishSubject.create<Skill>()
|
||||
val useSkillEvents = useSkillSubject.toFlowable(BackpressureStrategy.DROP)
|
||||
|
||||
var mana: Double = 0.toDouble()
|
||||
set(value) {
|
||||
field = value
|
||||
|
|
@ -33,7 +36,6 @@ class SkillsRecyclerViewAdapter : RecyclerView.Adapter<SkillsRecyclerViewAdapter
|
|||
this.notifyDataSetChanged()
|
||||
}
|
||||
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SkillViewHolder {
|
||||
return SkillViewHolder(parent.inflate(R.layout.skill_list_item))
|
||||
}
|
||||
|
|
@ -92,10 +94,7 @@ class SkillsRecyclerViewAdapter : RecyclerView.Adapter<SkillsRecyclerViewAdapter
|
|||
}
|
||||
|
||||
override fun onClick(v: View) {
|
||||
val event = UseSkillCommand()
|
||||
event.skill = this.skill
|
||||
|
||||
EventBus.getDefault().post(event)
|
||||
skill?.let { useSkillSubject.onNext(it) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ import android.widget.FrameLayout
|
|||
import android.widget.TextView
|
||||
import com.facebook.drawee.view.SimpleDraweeView
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.ui.helpers.bindView
|
||||
import com.habitrpg.android.habitica.models.inventory.Equipment
|
||||
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
|
||||
|
|
@ -34,7 +33,7 @@ class EquipmentRecyclerViewAdapter(data: OrderedRealmCollection<Equipment>?, aut
|
|||
}
|
||||
|
||||
override fun onBindViewHolder(holder: GearViewHolder, position: Int) {
|
||||
data.notNull {
|
||||
data?.let {
|
||||
holder.bind(it[position])
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,11 +8,8 @@ import android.widget.TextView
|
|||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.facebook.drawee.view.SimpleDraweeView
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.events.OpenMysteryItemEvent
|
||||
import com.habitrpg.android.habitica.events.commands.FeedCommand
|
||||
import com.habitrpg.android.habitica.events.commands.HatchingCommand
|
||||
import com.habitrpg.android.habitica.extensions.inflate
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.models.inventory.*
|
||||
import com.habitrpg.android.habitica.models.user.OwnedItem
|
||||
import com.habitrpg.android.habitica.models.user.OwnedPet
|
||||
|
|
@ -49,6 +46,9 @@ class ItemRecyclerAdapter(data: OrderedRealmCollection<OwnedItem>?, autoUpdate:
|
|||
|
||||
private val sellItemEvents = PublishSubject.create<OwnedItem>()
|
||||
private val questInvitationEvents = PublishSubject.create<QuestContent>()
|
||||
private val openMysteryItemEvents = PublishSubject.create<Item>()
|
||||
private val startHatchingSubject = PublishSubject.create<Item>()
|
||||
private val hatchPetSubject = PublishSubject.create<Pair<HatchingPotion, Egg>>()
|
||||
|
||||
fun getSellItemFlowable(): Flowable<OwnedItem> {
|
||||
return sellItemEvents.toFlowable(BackpressureStrategy.DROP)
|
||||
|
|
@ -57,13 +57,19 @@ class ItemRecyclerAdapter(data: OrderedRealmCollection<OwnedItem>?, autoUpdate:
|
|||
fun getQuestInvitationFlowable(): Flowable<QuestContent> {
|
||||
return questInvitationEvents.toFlowable(BackpressureStrategy.DROP)
|
||||
}
|
||||
fun getOpenMysteryItemFlowable(): Flowable<Item> {
|
||||
return openMysteryItemEvents.toFlowable(BackpressureStrategy.DROP)
|
||||
}
|
||||
|
||||
val startHatchingEvents = startHatchingSubject.toFlowable(BackpressureStrategy.DROP)
|
||||
val hatchPetEvents = hatchPetSubject.toFlowable(BackpressureStrategy.DROP)
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
|
||||
return ItemViewHolder(parent.inflate(R.layout.item_item))
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
|
||||
data.notNull {
|
||||
data?.let {
|
||||
val ownedItem = it[position]
|
||||
holder.bind(ownedItem, items?.get(ownedItem.key))
|
||||
}
|
||||
|
|
@ -162,29 +168,21 @@ class ItemRecyclerAdapter(data: OrderedRealmCollection<OwnedItem>?, autoUpdate:
|
|||
}
|
||||
}
|
||||
menu.setSelectionRunnable { index ->
|
||||
item.notNull { selectedItem ->
|
||||
item?.let { selectedItem ->
|
||||
if (!(selectedItem is QuestContent || selectedItem is SpecialItem) && index == 0) {
|
||||
ownedItem?.let { selectedOwnedItem -> sellItemEvents.onNext(selectedOwnedItem) }
|
||||
return@notNull
|
||||
return@let
|
||||
}
|
||||
when (selectedItem) {
|
||||
is Egg -> {
|
||||
val event = HatchingCommand()
|
||||
event.usingEgg = selectedItem
|
||||
EventBus.getDefault().post(event)
|
||||
}
|
||||
is Egg -> item?.let { startHatchingSubject.onNext(it) }
|
||||
is Food -> {
|
||||
val event = FeedCommand()
|
||||
event.usingFood = selectedItem
|
||||
EventBus.getDefault().post(event)
|
||||
}
|
||||
is HatchingPotion -> {
|
||||
val event = HatchingCommand()
|
||||
event.usingHatchingPotion = selectedItem
|
||||
EventBus.getDefault().post(event)
|
||||
}
|
||||
is HatchingPotion -> item?.let { startHatchingSubject.onNext(it) }
|
||||
is QuestContent -> questInvitationEvents.onNext(selectedItem)
|
||||
is SpecialItem -> EventBus.getDefault().post(OpenMysteryItemEvent())
|
||||
is SpecialItem -> openMysteryItemEvents.onNext(selectedItem)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -193,16 +191,13 @@ class ItemRecyclerAdapter(data: OrderedRealmCollection<OwnedItem>?, autoUpdate:
|
|||
if (!this.canHatch) {
|
||||
return
|
||||
}
|
||||
if (item is Egg) {
|
||||
val event = HatchingCommand()
|
||||
event.usingEgg = item as Egg
|
||||
event.usingHatchingPotion = hatchingItem as HatchingPotion?
|
||||
EventBus.getDefault().post(event)
|
||||
} else if (item is HatchingPotion) {
|
||||
val event = HatchingCommand()
|
||||
event.usingHatchingPotion = item as HatchingPotion
|
||||
event.usingEgg = hatchingItem as Egg?
|
||||
EventBus.getDefault().post(event)
|
||||
val firstItem = item ?: return
|
||||
if (firstItem is Egg) {
|
||||
val potion = hatchingItem as HatchingPotion
|
||||
hatchPetSubject.onNext(Pair(potion, firstItem))
|
||||
} else if (firstItem is HatchingPotion) {
|
||||
val egg = hatchingItem as Egg
|
||||
hatchPetSubject.onNext(Pair(firstItem, egg))
|
||||
}
|
||||
fragment?.dismiss()
|
||||
} else if (isFeeding) {
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ import android.widget.TextView
|
|||
import com.facebook.drawee.view.SimpleDraweeView
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.extensions.inflate
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.models.inventory.Mount
|
||||
import com.habitrpg.android.habitica.models.user.OwnedMount
|
||||
|
|
@ -44,7 +43,7 @@ class MountDetailRecyclerAdapter(data: OrderedRealmCollection<Mount>?, autoUpdat
|
|||
}
|
||||
|
||||
override fun onBindViewHolder(holder: MountViewHolder, position: Int) {
|
||||
data.notNull { holder.bind(it[position], ownedMounts?.get(it[position].key)) }
|
||||
data?.let { holder.bind(it[position], ownedMounts?.get(it[position].key)) }
|
||||
}
|
||||
|
||||
fun setOwnedMounts(ownedMounts: Map<String, OwnedMount>) {
|
||||
|
|
@ -96,7 +95,7 @@ class MountDetailRecyclerAdapter(data: OrderedRealmCollection<Mount>?, autoUpdat
|
|||
val menu = BottomSheetMenu(itemView.context)
|
||||
menu.addMenuItem(BottomSheetMenuItem(resources.getString(R.string.use_animal)))
|
||||
menu.setSelectionRunnable {
|
||||
animal.notNull { equipEvents.onNext(it.key) }
|
||||
animal?.let { equipEvents.onNext(it.key) }
|
||||
}
|
||||
menu.show()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ import com.facebook.drawee.view.SimpleDraweeView
|
|||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.events.commands.FeedCommand
|
||||
import com.habitrpg.android.habitica.extensions.inflate
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.models.inventory.Mount
|
||||
import com.habitrpg.android.habitica.models.inventory.Pet
|
||||
|
|
@ -49,7 +48,7 @@ class PetDetailRecyclerAdapter(data: OrderedRealmCollection<Pet>?, autoUpdate: B
|
|||
}
|
||||
|
||||
override fun onBindViewHolder(holder: PetViewHolder, position: Int) {
|
||||
data.notNull {
|
||||
data?.let {
|
||||
holder.bind(it[position], ownedPets?.get(it[position]?.key ?: ""))
|
||||
}
|
||||
}
|
||||
|
|
@ -138,7 +137,7 @@ class PetDetailRecyclerAdapter(data: OrderedRealmCollection<Pet>?, autoUpdate: B
|
|||
}
|
||||
menu.setSelectionRunnable { index ->
|
||||
if (index == 0) {
|
||||
animal.notNull {
|
||||
animal?.let {
|
||||
equipEvents.onNext(it.key)
|
||||
}
|
||||
} else if (index == 1) {
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ import android.widget.TextView
|
|||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.ui.helpers.bindView
|
||||
import com.habitrpg.android.habitica.extensions.inflate
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.MainNavigationController
|
||||
import com.habitrpg.android.habitica.models.inventory.Item
|
||||
import com.habitrpg.android.habitica.models.shops.Shop
|
||||
|
|
@ -109,13 +108,13 @@ class ShopRecyclerAdapter : androidx.recyclerview.widget.RecyclerView.Adapter<an
|
|||
val obj = getItem(position)
|
||||
if (obj != null) {
|
||||
when (obj.javaClass) {
|
||||
Shop::class.java -> (obj as? Shop).notNull { (holder as? ShopHeaderViewHolder)?.bind(it, shopSpriteSuffix) }
|
||||
Shop::class.java -> (obj as? Shop)?.let { (holder as? ShopHeaderViewHolder)?.bind(it, shopSpriteSuffix) }
|
||||
ShopCategory::class.java -> {
|
||||
val category = obj as? ShopCategory
|
||||
val sectionHolder = holder as? SectionViewHolder ?: return
|
||||
sectionHolder.bind(category?.text ?: "")
|
||||
if (gearCategories.contains(category)) {
|
||||
context.notNull {context ->
|
||||
context?.let {context ->
|
||||
val adapter = HabiticaClassArrayAdapter(context, R.layout.class_spinner_dropdown_item, gearCategories.map { it.identifier })
|
||||
sectionHolder.spinnerAdapter = adapter
|
||||
sectionHolder.selectedItem = gearCategories.indexOf(category)
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ import android.view.ViewGroup
|
|||
import android.widget.TextView
|
||||
import com.facebook.drawee.view.SimpleDraweeView
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.MainNavigationController
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.models.inventory.Animal
|
||||
|
|
@ -50,7 +49,7 @@ class StableRecyclerAdapter : androidx.recyclerview.widget.RecyclerView.Adapter<
|
|||
if (obj.javaClass == String::class.java) {
|
||||
(holder as? SectionViewHolder)?.bind(obj as? String ?: "")
|
||||
} else {
|
||||
(obj as? Animal).notNull { (holder as? StableViewHolder)?.bind(it) }
|
||||
(obj as? Animal)?.let { (holder as? StableViewHolder)?.bind(it) }
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,22 +2,19 @@ package com.habitrpg.android.habitica.ui.adapter.setup
|
|||
|
||||
import android.content.Context
|
||||
import android.graphics.PorterDuff
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.events.commands.EquipCommand
|
||||
import com.habitrpg.android.habitica.events.commands.UpdateUserCommand
|
||||
import com.habitrpg.android.habitica.extensions.inflate
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.models.SetupCustomization
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import com.habitrpg.android.habitica.ui.helpers.bindView
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
import java.util.*
|
||||
import io.reactivex.BackpressureStrategy
|
||||
import io.reactivex.subjects.PublishSubject
|
||||
|
||||
internal class CustomizationSetupAdapter : RecyclerView.Adapter<CustomizationSetupAdapter.CustomizationViewHolder>() {
|
||||
|
||||
|
|
@ -25,6 +22,11 @@ internal class CustomizationSetupAdapter : RecyclerView.Adapter<CustomizationSet
|
|||
var user: User? = null
|
||||
private var customizationList: List<SetupCustomization> = emptyList()
|
||||
|
||||
private val equipGearEventSubject = PublishSubject.create<String>()
|
||||
val equipGearEvents = equipGearEventSubject.toFlowable(BackpressureStrategy.DROP)
|
||||
private val updateUserEventsSubject = PublishSubject.create<HashMap<String, Any>>()
|
||||
val updateUserEvents = updateUserEventsSubject.toFlowable(BackpressureStrategy.DROP)
|
||||
|
||||
fun setCustomizationList(newCustomizationList: List<SetupCustomization>) {
|
||||
this.customizationList = newCustomizationList
|
||||
this.notifyDataSetChanged()
|
||||
|
|
@ -121,25 +123,19 @@ internal class CustomizationSetupAdapter : RecyclerView.Adapter<CustomizationSet
|
|||
}
|
||||
|
||||
override fun onClick(v: View) {
|
||||
customization.notNull { selectedCustomization ->
|
||||
customization?.let { selectedCustomization ->
|
||||
if (selectedCustomization.path == "glasses") {
|
||||
val command = EquipCommand()
|
||||
if (selectedCustomization.key.isEmpty()) {
|
||||
command.key = user?.items?.gear?.equipped?.eyeWear
|
||||
val key = if (selectedCustomization.key.isEmpty()) {
|
||||
user?.items?.gear?.equipped?.eyeWear
|
||||
} else {
|
||||
command.key = selectedCustomization.key
|
||||
selectedCustomization.key
|
||||
}
|
||||
command.type = "equipped"
|
||||
EventBus.getDefault().post(command)
|
||||
key?.let { equipGearEventSubject.onNext(it) }
|
||||
} else {
|
||||
val command = UpdateUserCommand()
|
||||
val updateData = HashMap<String, Any>()
|
||||
val updatePath = "preferences." + selectedCustomization.path
|
||||
updateData[updatePath] = selectedCustomization.key
|
||||
|
||||
command.updateData = updateData
|
||||
|
||||
EventBus.getDefault().post(command)
|
||||
updateUserEventsSubject.onNext(updateData)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ import android.view.ViewGroup
|
|||
import android.widget.TextView
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.extensions.inflate
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.ui.helpers.bindView
|
||||
import java.util.*
|
||||
|
||||
|
|
@ -61,7 +60,7 @@ class TaskSetupAdapter : RecyclerView.Adapter<TaskSetupAdapter.TaskViewHolder>()
|
|||
this.taskGroup = taskGroup
|
||||
this.isChecked = isChecked
|
||||
|
||||
taskGroup.notNull {
|
||||
taskGroup?.let {
|
||||
textView.text = it[0]
|
||||
}
|
||||
if (this.isChecked == true) {
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ import androidx.core.content.ContextCompat
|
|||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.extensions.inflate
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.models.social.Challenge
|
||||
import com.habitrpg.android.habitica.models.social.ChallengeMembership
|
||||
import com.habitrpg.android.habitica.ui.fragments.social.challenges.ChallengeFilterOptions
|
||||
|
|
@ -33,11 +32,11 @@ class ChallengesListViewAdapter(data: OrderedRealmCollection<Challenge>?, autoUp
|
|||
}
|
||||
|
||||
override fun onBindViewHolder(holder: ChallengeViewHolder, position: Int) {
|
||||
data?.get(position).notNull { challenge ->
|
||||
data?.get(position)?.let { challenge ->
|
||||
holder.bind(challenge, challengeMemberships?.first { challenge.id == it.challengeID } != null)
|
||||
holder.itemView.setOnClickListener {
|
||||
if (challenge.isManaged) {
|
||||
challenge.id.notNull {
|
||||
challenge.id?.let {
|
||||
openChallengeFragmentEvents.onNext(it)
|
||||
}
|
||||
}
|
||||
|
|
@ -75,7 +74,7 @@ class ChallengesListViewAdapter(data: OrderedRealmCollection<Challenge>?, autoUp
|
|||
}
|
||||
}
|
||||
|
||||
query.notNull {
|
||||
query?.let {
|
||||
this.updateData(it.findAll())
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@ import androidx.recyclerview.widget.RecyclerView
|
|||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.extensions.dpToPx
|
||||
import com.habitrpg.android.habitica.extensions.inflate
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.extensions.setScaledPadding
|
||||
import com.habitrpg.android.habitica.models.social.ChatMessage
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
|
|
@ -64,7 +63,7 @@ class ChatRecyclerViewAdapter(data: OrderedRealmCollection<ChatMessage>?, autoUp
|
|||
}
|
||||
|
||||
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
|
||||
data.notNull {
|
||||
data?.let {
|
||||
if (it[position].isSystemMessage) {
|
||||
(holder as? SystemChatMessageViewHolder)?.bind(it[position])
|
||||
} else {
|
||||
|
|
@ -134,27 +133,27 @@ class ChatRecyclerViewAdapter(data: OrderedRealmCollection<ChatMessage>?, autoUp
|
|||
itemView.setOnClickListener {
|
||||
expandMessage()
|
||||
}
|
||||
tvLikes.setOnClickListener { chatMessage.notNull { likeMessageEvents.onNext(it) } }
|
||||
tvLikes.setOnClickListener { chatMessage?.let { likeMessageEvents.onNext(it) } }
|
||||
messageText.setOnClickListener { expandMessage() }
|
||||
messageText.movementMethod = LinkMovementMethod.getInstance()
|
||||
userLabel.setOnClickListener { chatMessage?.uuid.notNull {userLabelClickEvents.onNext(it) } }
|
||||
avatarView.setOnClickListener { chatMessage?.uuid.notNull {userLabelClickEvents.onNext(it) } }
|
||||
userLabel.setOnClickListener { chatMessage?.uuid?.let {userLabelClickEvents.onNext(it) } }
|
||||
avatarView.setOnClickListener { chatMessage?.uuid?.let {userLabelClickEvents.onNext(it) } }
|
||||
replyButton.setOnClickListener {
|
||||
if (chatMessage?.username != null) {
|
||||
chatMessage?.username.notNull { replyMessageEvents.onNext(it) }
|
||||
chatMessage?.username?.let { replyMessageEvents.onNext(it) }
|
||||
} else {
|
||||
chatMessage?.user.notNull { replyMessageEvents.onNext(it) }
|
||||
chatMessage?.user?.let { replyMessageEvents.onNext(it) }
|
||||
}
|
||||
}
|
||||
replyButton.setCompoundDrawablesWithIntrinsicBounds(BitmapDrawable(res, HabiticaIconsHelper.imageOfChatReplyIcon()),
|
||||
null, null, null)
|
||||
copyButton.setOnClickListener { chatMessage.notNull { copyMessageEvents.onNext(it) } }
|
||||
copyButton.setOnClickListener { chatMessage?.let { copyMessageEvents.onNext(it) } }
|
||||
copyButton.setCompoundDrawablesWithIntrinsicBounds(BitmapDrawable(res, HabiticaIconsHelper.imageOfChatCopyIcon()),
|
||||
null, null, null)
|
||||
reportButton.setOnClickListener { chatMessage.notNull { flagMessageEvents.onNext(it) } }
|
||||
reportButton.setOnClickListener { chatMessage?.let { flagMessageEvents.onNext(it) } }
|
||||
reportButton.setCompoundDrawablesWithIntrinsicBounds(BitmapDrawable(res, HabiticaIconsHelper.imageOfChatReportIcon()),
|
||||
null, null, null)
|
||||
deleteButton.setOnClickListener { chatMessage.notNull { deleteMessageEvents.onNext(it) } }
|
||||
deleteButton.setOnClickListener { chatMessage?.let { deleteMessageEvents.onNext(it) } }
|
||||
deleteButton.setCompoundDrawablesWithIntrinsicBounds(BitmapDrawable(res, HabiticaIconsHelper.imageOfChatDeleteIcon()),
|
||||
null, null, null)
|
||||
}
|
||||
|
|
@ -211,7 +210,7 @@ class ChatRecyclerViewAdapter(data: OrderedRealmCollection<ChatMessage>?, autoUp
|
|||
val dpWidth = displayMetrics.widthPixels / displayMetrics.density
|
||||
if (dpWidth > 350) {
|
||||
avatarView.visibility = View.VISIBLE
|
||||
msg.userStyles.notNull {
|
||||
msg.userStyles?.let {
|
||||
avatarView.setAvatar(it)
|
||||
}
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ package com.habitrpg.android.habitica.ui.adapter.social
|
|||
import android.view.ViewGroup
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.extensions.inflate
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.models.members.Member
|
||||
import com.habitrpg.android.habitica.ui.viewHolders.GroupMemberViewHolder.GroupMemberViewHolder
|
||||
import io.reactivex.BackpressureStrategy
|
||||
|
|
@ -23,7 +22,7 @@ class PartyMemberRecyclerViewAdapter(data: OrderedRealmCollection<Member>?, auto
|
|||
}
|
||||
|
||||
override fun onBindViewHolder(holder: GroupMemberViewHolder, position: Int) {
|
||||
data.notNull {
|
||||
data?.let {
|
||||
holder.bind(it[position], leaderID)
|
||||
holder.onClickEvent = {
|
||||
userClickedEvents.onNext(it[position].id ?: "")
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ import androidx.recyclerview.widget.RecyclerView
|
|||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.data.SocialRepository
|
||||
import com.habitrpg.android.habitica.extensions.inflate
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.MainNavigationController
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.models.social.Group
|
||||
|
|
@ -65,7 +64,7 @@ class PublicGuildsRecyclerViewAdapter(data: OrderedRealmCollection<Group>?, auto
|
|||
}
|
||||
|
||||
override fun onBindViewHolder(holder: GuildViewHolder, position: Int) {
|
||||
data.notNull {
|
||||
data?.let {
|
||||
val guild = it[position]
|
||||
val isInGroup = isInGroup(guild)
|
||||
holder.bind(guild, isInGroup)
|
||||
|
|
@ -94,7 +93,7 @@ class PublicGuildsRecyclerViewAdapter(data: OrderedRealmCollection<Group>?, auto
|
|||
}
|
||||
|
||||
override fun publishResults(constraint: CharSequence, results: FilterResults) {
|
||||
unfilteredData.notNull {
|
||||
unfilteredData?.let {
|
||||
if (constraint.isNotEmpty()) {
|
||||
updateData(it.where()
|
||||
.contains("name", constraint.toString(), Case.INSENSITIVE)
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ import android.widget.Button
|
|||
import android.widget.TextView
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.TaskFilterHelper
|
||||
import com.habitrpg.android.habitica.models.tasks.Task
|
||||
import com.habitrpg.android.habitica.ui.adapter.tasks.SortableTasksRecyclerViewAdapter
|
||||
|
|
@ -67,10 +66,10 @@ class ChallengeTasksRecyclerViewAdapter(taskFilterHelper: TaskFilterHelper?, lay
|
|||
TYPE_HABIT -> HabitViewHolder(getContentView(parent, R.layout.habit_item_card), { _, _ -> }) { task ->
|
||||
taskOpenEventsSubject.onNext(task)
|
||||
}
|
||||
TYPE_DAILY -> DailyViewHolder(getContentView(parent, R.layout.daily_item_card), { _, _ -> }) { task ->
|
||||
TYPE_DAILY -> DailyViewHolder(getContentView(parent, R.layout.daily_item_card), { _, _ -> }, { _, _ -> }) { task ->
|
||||
taskOpenEventsSubject.onNext(task)
|
||||
}
|
||||
TYPE_TODO -> TodoViewHolder(getContentView(parent, R.layout.todo_item_card), { _, _ -> }) { task ->
|
||||
TYPE_TODO -> TodoViewHolder(getContentView(parent, R.layout.todo_item_card), { _, _ -> }, { _, _ -> }) { task ->
|
||||
taskOpenEventsSubject.onNext(task)
|
||||
}
|
||||
TYPE_REWARD -> RewardViewHolder(getContentView(parent, R.layout.reward_item_card), { _, _ -> }) { task ->
|
||||
|
|
@ -114,7 +113,7 @@ class ChallengeTasksRecyclerViewAdapter(taskFilterHelper: TaskFilterHelper?, lay
|
|||
|
||||
init {
|
||||
addBtn.isClickable = true
|
||||
addBtn.setOnClickListener { newTask.notNull { callback.onNext(it) } }
|
||||
addBtn.setOnClickListener { newTask?.let { callback.onNext(it) } }
|
||||
}
|
||||
|
||||
override fun bind(newTask: Task, position: Int) {
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@ import android.view.View
|
|||
import android.view.ViewGroup
|
||||
import android.widget.CheckBox
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.models.social.Group
|
||||
import com.habitrpg.android.habitica.ui.helpers.bindView
|
||||
import java.util.*
|
||||
|
|
@ -22,7 +21,7 @@ class ChallengesFilterRecyclerViewAdapter(entries: Collection<Group>) : Recycler
|
|||
|
||||
for (h in holderList) {
|
||||
if (h.checkbox.isChecked) {
|
||||
h.group.notNull {
|
||||
h.group?.let {
|
||||
result.add(it)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ import androidx.recyclerview.widget.RecyclerView
|
|||
import com.habitrpg.android.habitica.HabiticaBaseApplication
|
||||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
import com.habitrpg.android.habitica.data.TaskRepository
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.helpers.TaskFilterHelper
|
||||
import com.habitrpg.android.habitica.models.tasks.Task
|
||||
|
|
@ -35,7 +34,7 @@ abstract class BaseTasksRecyclerViewAdapter<VH : BindableViewHolder<Task>>(var t
|
|||
this.setHasStableIds(true)
|
||||
this.context = newContext.applicationContext
|
||||
this.filteredContent = ArrayList()
|
||||
HabiticaBaseApplication.userComponent.notNull { injectThis(it) }
|
||||
HabiticaBaseApplication.userComponent?.let { injectThis(it) }
|
||||
|
||||
if (loadFromDatabase()) {
|
||||
this.loadContent(true)
|
||||
|
|
@ -88,7 +87,7 @@ abstract class BaseTasksRecyclerViewAdapter<VH : BindableViewHolder<Task>>(var t
|
|||
filteredContent = content
|
||||
} else {
|
||||
filteredContent = ArrayList()
|
||||
content.notNull {
|
||||
content?.let {
|
||||
filteredContent?.addAll(this.taskFilterHelper.filter(it))
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,7 +11,8 @@ import io.realm.OrderedRealmCollection
|
|||
class DailiesRecyclerViewHolder(data: OrderedRealmCollection<Task>?, autoUpdate: Boolean, layoutResource: Int, taskFilterHelper: TaskFilterHelper) : RealmBaseTasksRecyclerViewAdapter<DailyViewHolder>(data, autoUpdate, layoutResource, taskFilterHelper) {
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DailyViewHolder =
|
||||
DailyViewHolder(getContentView(parent), { task, direction -> taskScoreEventsSubject.onNext(Pair(task, direction)) }) {
|
||||
DailyViewHolder(getContentView(parent), { task, direction -> taskScoreEventsSubject.onNext(Pair(task, direction)) },
|
||||
{ task, item -> checklistItemScoreSubject.onNext(Pair(task, item))}) {
|
||||
task -> taskOpenEventsSubject.onNext(task)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import android.view.View
|
|||
import android.view.ViewGroup
|
||||
import com.habitrpg.android.habitica.helpers.TaskFilterHelper
|
||||
import com.habitrpg.android.habitica.models.responses.TaskDirection
|
||||
import com.habitrpg.android.habitica.models.tasks.ChecklistItem
|
||||
import com.habitrpg.android.habitica.models.tasks.Task
|
||||
import com.habitrpg.android.habitica.ui.viewHolders.tasks.BaseTaskViewHolder
|
||||
import io.reactivex.BackpressureStrategy
|
||||
|
|
@ -50,11 +51,13 @@ abstract class RealmBaseTasksRecyclerViewAdapter<VH : BaseTaskViewHolder>(privat
|
|||
private set
|
||||
|
||||
private var errorButtonEventsSubject = PublishSubject.create<String>()
|
||||
override val errorButtonEvents = errorButtonEventsSubject.toFlowable(BackpressureStrategy.DROP)
|
||||
override val errorButtonEvents: Flowable<String> = errorButtonEventsSubject.toFlowable(BackpressureStrategy.DROP)
|
||||
protected var taskScoreEventsSubject = PublishSubject.create<Pair<Task, TaskDirection>>()
|
||||
override val taskScoreEvents: Flowable<Pair<Task, TaskDirection>> = taskScoreEventsSubject.toFlowable(BackpressureStrategy.LATEST)
|
||||
override val taskScoreEvents: Flowable<Pair<Task, TaskDirection>> = taskScoreEventsSubject.toFlowable(BackpressureStrategy.DROP)
|
||||
protected var checklistItemScoreSubject = PublishSubject.create<Pair<Task, ChecklistItem>>()
|
||||
override val checklistItemScoreEvents: Flowable<Pair<Task, ChecklistItem>> = checklistItemScoreSubject.toFlowable(BackpressureStrategy.DROP)
|
||||
protected var taskOpenEventsSubject = PublishSubject.create<Task>()
|
||||
override val taskOpenEvents: Flowable<Task> = taskOpenEventsSubject.toFlowable(BackpressureStrategy.LATEST)
|
||||
override val taskOpenEvents: Flowable<Task> = taskOpenEventsSubject.toFlowable(BackpressureStrategy.DROP)
|
||||
|
||||
private val isDataValid: Boolean
|
||||
get() = data?.isValid ?: false
|
||||
|
|
@ -78,7 +81,6 @@ abstract class RealmBaseTasksRecyclerViewAdapter<VH : BaseTaskViewHolder>(privat
|
|||
override fun onDetachedFromRecyclerView(recyclerView: androidx.recyclerview.widget.RecyclerView) {
|
||||
super.onDetachedFromRecyclerView(recyclerView)
|
||||
if (hasAutoUpdates && isDataValid) {
|
||||
|
||||
removeListener(data)
|
||||
}
|
||||
}
|
||||
|
|
@ -89,18 +91,18 @@ abstract class RealmBaseTasksRecyclerViewAdapter<VH : BaseTaskViewHolder>(privat
|
|||
|
||||
fun getItem(index: Int): Task? = if (isDataValid) data?.get(index) else null
|
||||
|
||||
override fun updateData(data: OrderedRealmCollection<Task>?) {
|
||||
override fun updateData(tasks: OrderedRealmCollection<Task>?) {
|
||||
if (hasAutoUpdates) {
|
||||
if (isDataValid) {
|
||||
|
||||
removeListener(this.data)
|
||||
removeListener(tasks)
|
||||
}
|
||||
if (data != null) {
|
||||
addListener(data)
|
||||
if (tasks != null) {
|
||||
addListener(tasks)
|
||||
}
|
||||
}
|
||||
|
||||
this.data = data
|
||||
this.data = tasks
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import androidx.recyclerview.widget.RecyclerView
|
|||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.models.responses.TaskDirection
|
||||
import com.habitrpg.android.habitica.models.shops.ShopItem
|
||||
import com.habitrpg.android.habitica.models.tasks.ChecklistItem
|
||||
import com.habitrpg.android.habitica.models.tasks.Task
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import com.habitrpg.android.habitica.ui.viewHolders.ShopItemViewHolder
|
||||
|
|
@ -24,6 +25,8 @@ class RewardsRecyclerViewAdapter(private var customRewards: OrderedRealmCollecti
|
|||
override val errorButtonEvents = errorButtonEventsSubject.toFlowable(BackpressureStrategy.DROP)
|
||||
private var taskScoreEventsSubject = PublishSubject.create<Pair<Task, TaskDirection>>()
|
||||
override val taskScoreEvents: Flowable<Pair<Task, TaskDirection>> = taskScoreEventsSubject.toFlowable(BackpressureStrategy.LATEST)
|
||||
protected var checklistItemScoreSubject = PublishSubject.create<Pair<Task, ChecklistItem>>()
|
||||
override val checklistItemScoreEvents: Flowable<Pair<Task, ChecklistItem>> = checklistItemScoreSubject.toFlowable(BackpressureStrategy.DROP)
|
||||
protected var taskOpenEventsSubject = PublishSubject.create<Task>()
|
||||
override val taskOpenEvents: Flowable<Task> = taskOpenEventsSubject.toFlowable(BackpressureStrategy.LATEST)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.habitrpg.android.habitica.ui.adapter.tasks
|
||||
|
||||
import com.habitrpg.android.habitica.models.responses.TaskDirection
|
||||
import com.habitrpg.android.habitica.models.tasks.ChecklistItem
|
||||
import com.habitrpg.android.habitica.models.tasks.Task
|
||||
import io.reactivex.Flowable
|
||||
import io.realm.OrderedRealmCollection
|
||||
|
|
@ -22,5 +23,6 @@ interface TaskRecyclerViewAdapter {
|
|||
fun updateUnfilteredData(data: OrderedRealmCollection<Task>?)
|
||||
|
||||
val taskScoreEvents: Flowable<Pair<Task, TaskDirection>>
|
||||
val checklistItemScoreEvents: Flowable<Pair<Task, ChecklistItem>>
|
||||
val taskOpenEvents: Flowable<Task>
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,7 +11,8 @@ import io.realm.OrderedRealmCollection
|
|||
class TodosRecyclerViewAdapter(data: OrderedRealmCollection<Task>?, autoUpdate: Boolean, layoutResource: Int, taskFilterHelper: TaskFilterHelper) : RealmBaseTasksRecyclerViewAdapter<TodoViewHolder>(data, autoUpdate, layoutResource, taskFilterHelper) {
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TodoViewHolder =
|
||||
TodoViewHolder(getContentView(parent), { task, direction -> taskScoreEventsSubject.onNext(Pair(task, direction)) }) {
|
||||
TodoViewHolder(getContentView(parent), { task, direction -> taskScoreEventsSubject.onNext(Pair(task, direction)) },
|
||||
{ task, item -> checklistItemScoreSubject.onNext(Pair(task, item))}) {
|
||||
task -> taskOpenEventsSubject.onNext(task)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@ import androidx.core.net.toUri
|
|||
import com.google.firebase.analytics.FirebaseAnalytics
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
||||
import com.habitrpg.android.habitica.helpers.AppTestingLevel
|
||||
import com.habitrpg.android.habitica.modules.AppModule
|
||||
|
|
@ -66,14 +65,14 @@ class AboutFragment : BaseMainFragment() {
|
|||
versionInfo.setOnClickListener {
|
||||
versionNumberTappedCount += 1
|
||||
when (versionNumberTappedCount) {
|
||||
1 -> context.notNull { context ->
|
||||
1 -> context?.let { context ->
|
||||
Toast.makeText(context, "Oh! You tapped me!", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
in 5..7 -> context.notNull { context ->
|
||||
in 5..7 -> context?.let { context ->
|
||||
Toast.makeText(context, "Only ${8 - versionNumberTappedCount} taps left!", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
8 -> {
|
||||
context.notNull { context ->
|
||||
context?.let { context ->
|
||||
Toast.makeText(context, "You were blessed with cats!", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
doTheThing()
|
||||
|
|
@ -162,7 +161,7 @@ class AboutFragment : BaseMainFragment() {
|
|||
context?.let { FirebaseAnalytics.getInstance(it).logEvent("found_easter_egg", null) }
|
||||
DataBindingUtils.loadImage("Pet-Sabretooth-Base") {bitmap ->
|
||||
activity?.runOnUiThread {
|
||||
activity.notNull {
|
||||
activity?.let {
|
||||
ParticleSystem(it, 50, bitmap, 3000)
|
||||
.setAcceleration(0.00013f, 90)
|
||||
.setSpeedByComponentsRange(-0.08f, 0.08f, 0.05f, 0.1f)
|
||||
|
|
@ -174,7 +173,7 @@ class AboutFragment : BaseMainFragment() {
|
|||
}
|
||||
DataBindingUtils.loadImage("Pet-Sabretooth-Golden") {bitmap ->
|
||||
activity?.runOnUiThread {
|
||||
activity.notNull {
|
||||
activity?.let {
|
||||
ParticleSystem(it, 50, bitmap, 3000)
|
||||
.setAcceleration(0.00013f, 90)
|
||||
.setSpeedByComponentsRange(-0.08f, 0.08f, 0.05f, 0.1f)
|
||||
|
|
@ -186,7 +185,7 @@ class AboutFragment : BaseMainFragment() {
|
|||
}
|
||||
DataBindingUtils.loadImage("Pet-Sabretooth-Red") {bitmap ->
|
||||
activity?.runOnUiThread {
|
||||
activity.notNull {
|
||||
activity?.let {
|
||||
ParticleSystem(it, 50, bitmap, 3000)
|
||||
.setAcceleration(0.00013f, 90)
|
||||
.setSpeedByComponentsRange(-0.08f, 0.08f, 0.05f, 0.1f)
|
||||
|
|
|
|||
|
|
@ -8,9 +8,8 @@ import androidx.fragment.app.DialogFragment
|
|||
import com.habitrpg.android.habitica.HabiticaBaseApplication
|
||||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
import com.habitrpg.android.habitica.data.TutorialRepository
|
||||
import com.habitrpg.android.habitica.events.DisplayTutorialEvent
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.ui.activities.MainActivity
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.disposables.CompositeDisposable
|
||||
import io.reactivex.functions.Consumer
|
||||
|
|
@ -41,7 +40,7 @@ abstract class BaseFragment : DialogFragment() {
|
|||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
HabiticaBaseApplication.userComponent.notNull {
|
||||
HabiticaBaseApplication.userComponent?.let {
|
||||
injectFragment(it)
|
||||
}
|
||||
this.showsDialog = false
|
||||
|
|
@ -76,15 +75,12 @@ abstract class BaseFragment : DialogFragment() {
|
|||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(Consumer { step ->
|
||||
if (step != null && step.isValid && step.isManaged && step.shouldDisplay()) {
|
||||
val event = DisplayTutorialEvent()
|
||||
event.step = step
|
||||
val mainActivity = activity as? MainActivity ?: return@Consumer
|
||||
if (tutorialText != null) {
|
||||
event.tutorialText = tutorialText
|
||||
mainActivity.displayTutorialStep(step, tutorialText ?: "", tutorialCanBeDeferred)
|
||||
} else {
|
||||
event.tutorialTexts = tutorialTexts
|
||||
mainActivity.displayTutorialStep(step, tutorialTexts, tutorialCanBeDeferred)
|
||||
}
|
||||
event.canBeDeferred = tutorialCanBeDeferred
|
||||
EventBus.getDefault().post(event)
|
||||
}
|
||||
}, RxErrorHandler.handleEmptyError()))
|
||||
}
|
||||
|
|
@ -100,7 +96,7 @@ abstract class BaseFragment : DialogFragment() {
|
|||
}
|
||||
|
||||
super.onDestroyView()
|
||||
context.notNull {
|
||||
context?.let {
|
||||
val refWatcher = HabiticaBaseApplication.getInstance(it)?.refWatcher
|
||||
refWatcher?.watch(this)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ import android.widget.TextView
|
|||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
import com.habitrpg.android.habitica.extensions.inflate
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.AmplitudeManager
|
||||
import com.habitrpg.android.habitica.helpers.PurchaseTypes
|
||||
import com.habitrpg.android.habitica.proxy.CrashlyticsProxy
|
||||
|
|
@ -111,7 +110,7 @@ class GemsPurchaseFragment : BaseFragment(), GemPurchaseActivity.CheckoutFragmen
|
|||
}
|
||||
|
||||
fun purchaseGems(sku: String) {
|
||||
listener?.activityCheckout.notNull {
|
||||
listener?.activityCheckout?.let {
|
||||
billingRequests?.purchase(ProductTypes.IN_APP, sku, null, it.purchaseFlow)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,6 @@ import com.habitrpg.android.habitica.data.InventoryRepository
|
|||
import com.habitrpg.android.habitica.data.SocialRepository
|
||||
import com.habitrpg.android.habitica.data.UserRepository
|
||||
import com.habitrpg.android.habitica.extensions.getThemeColor
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.extensions.subscribeWithErrorHandler
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.models.inventory.Quest
|
||||
|
|
@ -82,7 +81,7 @@ class NavigationDrawerFragment : DialogFragment() {
|
|||
val questContent = this.questContent
|
||||
if (quest == null || questContent == null || !quest.active) {
|
||||
questMenuView.visibility = View.GONE
|
||||
context.notNull {
|
||||
context?.let {
|
||||
adapter.tintColor = it.getThemeColor(R.attr.colorPrimary)
|
||||
adapter.backgroundTintColor = it.getThemeColor(R.attr.colorPrimaryOffset)
|
||||
}
|
||||
|
|
@ -150,7 +149,7 @@ class NavigationDrawerFragment : DialogFragment() {
|
|||
// Indicate that this fragment would like to influence the set of actions in the action bar.
|
||||
setHasOptionsMenu(true)
|
||||
|
||||
context?.notNull {recyclerView.setPadding(0, 0, 0, NavbarUtils.getNavbarHeight(it)) }
|
||||
context?.let {recyclerView.setPadding(0, 0, 0, NavbarUtils.getNavbarHeight(it)) }
|
||||
recyclerView.clipToPadding = false
|
||||
}
|
||||
|
||||
|
|
@ -253,7 +252,7 @@ class NavigationDrawerFragment : DialogFragment() {
|
|||
|
||||
private fun initializeMenuItems() {
|
||||
val items = ArrayList<HabiticaDrawerItem>()
|
||||
context.notNull {context ->
|
||||
context?.let {context ->
|
||||
items.add(HabiticaDrawerItem(R.id.tasksFragment, SIDEBAR_TASKS, context.getString(R.string.sidebar_tasks)))
|
||||
items.add(HabiticaDrawerItem(R.id.skillsFragment, SIDEBAR_SKILLS, context.getString(R.string.sidebar_skills)))
|
||||
items.add(HabiticaDrawerItem(R.id.statsFragment, SIDEBAR_STATS, context.getString(R.string.sidebar_stats)))
|
||||
|
|
@ -391,7 +390,7 @@ class NavigationDrawerFragment : DialogFragment() {
|
|||
}
|
||||
|
||||
private fun setNotificationsSeen(allSeen: Boolean) {
|
||||
context.notNull {
|
||||
context?.let {
|
||||
val colorId = if (allSeen) R.color.gray_200 else R.color.brand_400
|
||||
|
||||
val bg = notificationsBadge.background as? GradientDrawable
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ import com.habitrpg.android.habitica.components.UserComponent
|
|||
import com.habitrpg.android.habitica.data.InventoryRepository
|
||||
import com.habitrpg.android.habitica.extensions.addOkButton
|
||||
import com.habitrpg.android.habitica.extensions.inflate
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.extensions.setScaledPadding
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.helpers.UserStatComputer
|
||||
|
|
@ -77,7 +76,7 @@ class StatsFragment: BaseMainFragment() {
|
|||
|
||||
leftSparklesView.setImageBitmap(HabiticaIconsHelper.imageOfAttributeSparklesLeft())
|
||||
rightSparklesView.setImageBitmap(HabiticaIconsHelper.imageOfAttributeSparklesRight())
|
||||
context.notNull {
|
||||
context?.let {
|
||||
val color = ContextCompat.getColor(it, R.color.brand_200)
|
||||
distributeEvenlyHelpButton.setImageBitmap(HabiticaIconsHelper.imageOfInfoIcon(color))
|
||||
distributeClassHelpButton.setImageBitmap(HabiticaIconsHelper.imageOfInfoIcon(color))
|
||||
|
|
@ -128,7 +127,7 @@ class StatsFragment: BaseMainFragment() {
|
|||
}
|
||||
|
||||
private fun showBulkAllocateDialog() {
|
||||
context.notNull { context ->
|
||||
context?.let { context ->
|
||||
val dialog = BulkAllocateStatsDialog(context, HabiticaBaseApplication.userComponent)
|
||||
dialog.show()
|
||||
}
|
||||
|
|
@ -175,7 +174,7 @@ class StatsFragment: BaseMainFragment() {
|
|||
intelligenceStatsView.canDistributePoints = canDistributePoints
|
||||
constitutionStatsView.canDistributePoints = canDistributePoints
|
||||
perceptionStatsView.canDistributePoints = canDistributePoints
|
||||
context.notNull { context ->
|
||||
context?.let { context ->
|
||||
if (canDistributePoints) {
|
||||
val points = user.stats?.points ?: 0
|
||||
numberOfPointsTextView.text = getString(R.string.points_to_allocate, points)
|
||||
|
|
@ -231,7 +230,7 @@ class StatsFragment: BaseMainFragment() {
|
|||
|
||||
val outfit = currentUser.items?.gear?.equipped
|
||||
val outfitList = ArrayList<String>()
|
||||
outfit.notNull { thisOutfit ->
|
||||
outfit?.let { thisOutfit ->
|
||||
outfitList.add(thisOutfit.armor)
|
||||
outfitList.add(thisOutfit.back)
|
||||
outfitList.add(thisOutfit.body)
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@ import com.habitrpg.android.habitica.components.UserComponent
|
|||
import com.habitrpg.android.habitica.data.UserRepository
|
||||
import com.habitrpg.android.habitica.events.UserSubscribedEvent
|
||||
import com.habitrpg.android.habitica.extensions.addCancelButton
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.AmplitudeManager
|
||||
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
||||
import com.habitrpg.android.habitica.helpers.PurchaseTypes
|
||||
|
|
@ -222,13 +221,13 @@ class SubscriptionFragment : BaseFragment(), GemPurchaseActivity.CheckoutFragmen
|
|||
}
|
||||
|
||||
private fun purchaseSubscription() {
|
||||
selectedSubscriptionSku?.id?.code.notNull { code ->
|
||||
selectedSubscriptionSku?.id?.code?.let { code ->
|
||||
billingRequests?.isPurchased(ProductTypes.SUBSCRIPTION, code, object : RequestListener<Boolean> {
|
||||
override fun onSuccess(aBoolean: Boolean) {
|
||||
if (!aBoolean) {
|
||||
// no current product exist
|
||||
val checkout = listener?.activityCheckout
|
||||
checkout.notNull {
|
||||
checkout?.let {
|
||||
billingRequests?.purchase(ProductTypes.SUBSCRIPTION, code, null, it.purchaseFlow)
|
||||
}
|
||||
}
|
||||
|
|
@ -262,7 +261,7 @@ class SubscriptionFragment : BaseFragment(), GemPurchaseActivity.CheckoutFragmen
|
|||
|
||||
if (isSubscribed) {
|
||||
this.subscriptionDetailsView?.visibility = View.VISIBLE
|
||||
plan.notNull { this.subscriptionDetailsView?.setPlan(it) }
|
||||
plan?.let { this.subscriptionDetailsView?.setPlan(it) }
|
||||
this.subscribeBenefitsTitle?.setText(R.string.subscribe_prompt_thanks)
|
||||
this.subscriptionOptions?.visibility = View.GONE
|
||||
} else {
|
||||
|
|
@ -283,7 +282,7 @@ class SubscriptionFragment : BaseFragment(), GemPurchaseActivity.CheckoutFragmen
|
|||
private fun showGiftSubscriptionDialog() {
|
||||
val chooseRecipientDialogView = this.activity?.layoutInflater?.inflate(R.layout.dialog_choose_message_recipient, null)
|
||||
|
||||
this.activity.notNull { thisActivity ->
|
||||
this.activity?.let { thisActivity ->
|
||||
val alert = HabiticaAlertDialog(thisActivity)
|
||||
alert.setTitle(getString(R.string.gift_title))
|
||||
alert.addButton(getString(R.string.action_continue), true) { _, _ ->
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ import com.habitrpg.android.habitica.R
|
|||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
import com.habitrpg.android.habitica.data.FAQRepository
|
||||
import com.habitrpg.android.habitica.extensions.inflate
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
|
||||
import com.habitrpg.android.habitica.ui.helpers.MarkdownParser
|
||||
|
|
@ -36,7 +35,7 @@ class FAQDetailFragment : BaseMainFragment() {
|
|||
|
||||
resetViews()
|
||||
|
||||
arguments.notNull {
|
||||
arguments?.let {
|
||||
val args = FAQDetailFragmentArgs.fromBundle(it)
|
||||
compositeSubscription.add(faqRepository.getArticle(args.position).subscribe(Consumer { faq ->
|
||||
this.questionTextView?.text = faq.question
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ import com.habitrpg.android.habitica.R
|
|||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
import com.habitrpg.android.habitica.data.FAQRepository
|
||||
import com.habitrpg.android.habitica.extensions.inflate
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.ui.adapter.FAQOverviewRecyclerAdapter
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
|
||||
|
|
@ -38,10 +37,10 @@ class FAQOverviewFragment : BaseMainFragment() {
|
|||
resetViews()
|
||||
|
||||
adapter = FAQOverviewRecyclerAdapter()
|
||||
adapter?.getResetWalkthroughEvents()?.subscribe(Consumer { this.userRepository.resetTutorial(user) }, RxErrorHandler.handleEmptyError()).notNull { compositeSubscription.add(it) }
|
||||
adapter?.getResetWalkthroughEvents()?.subscribe(Consumer { this.userRepository.resetTutorial(user) }, RxErrorHandler.handleEmptyError())?.let { compositeSubscription.add(it) }
|
||||
adapter?.activity = activity
|
||||
recyclerView?.layoutManager = androidx.recyclerview.widget.LinearLayoutManager(activity)
|
||||
activity.notNull { recyclerView?.addItemDecoration(androidx.recyclerview.widget.DividerItemDecoration(it, androidx.recyclerview.widget.DividerItemDecoration.VERTICAL)) }
|
||||
activity?.let { recyclerView?.addItemDecoration(androidx.recyclerview.widget.DividerItemDecoration(it, androidx.recyclerview.widget.DividerItemDecoration.VERTICAL)) }
|
||||
recyclerView?.adapter = adapter
|
||||
recyclerView?.itemAnimator = SafeDefaultItemAnimator()
|
||||
this.loadArticles()
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ import androidx.recyclerview.widget.GridLayoutManager
|
|||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
import com.habitrpg.android.habitica.data.CustomizationRepository
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.extensions.subscribeWithErrorHandler
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.models.inventory.Customization
|
||||
|
|
@ -73,7 +72,7 @@ class AvatarCustomizationFragment : BaseMainFragment() {
|
|||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
arguments.notNull {
|
||||
arguments?.let {
|
||||
val args = AvatarCustomizationFragmentArgs.fromBundle(it)
|
||||
type = args.type
|
||||
if (args.category.isNotEmpty()) {
|
||||
|
|
@ -126,7 +125,7 @@ class AvatarCustomizationFragment : BaseMainFragment() {
|
|||
|
||||
private fun setGridSpanCount(width: Int) {
|
||||
var itemWidth = 0F
|
||||
context?.resources?.notNull {
|
||||
context?.resources?.let {
|
||||
itemWidth = if (this.type != null && this.type == "background") {
|
||||
context?.resources?.getDimension(R.dimen.avatar_width)
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ import android.view.ViewGroup
|
|||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
import com.habitrpg.android.habitica.data.InventoryRepository
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.models.inventory.Equipment
|
||||
import com.habitrpg.android.habitica.models.user.Items
|
||||
|
|
@ -49,7 +48,7 @@ class EquipmentDetailFragment : BaseMainFragment() {
|
|||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
arguments.notNull {
|
||||
arguments?.let {
|
||||
val args = EquipmentDetailFragmentArgs.fromBundle(it)
|
||||
type = args.type
|
||||
isCostume = args.isCostume
|
||||
|
|
|
|||
|
|
@ -1,16 +1,23 @@
|
|||
package com.habitrpg.android.habitica.ui.fragments.inventory.items
|
||||
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.Canvas
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.Window
|
||||
import android.widget.Button
|
||||
import android.widget.FrameLayout
|
||||
import android.widget.TextView
|
||||
import androidx.core.content.ContextCompat
|
||||
import com.facebook.drawee.view.SimpleDraweeView
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
import com.habitrpg.android.habitica.data.InventoryRepository
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.data.UserRepository
|
||||
import com.habitrpg.android.habitica.events.ShareEvent
|
||||
import com.habitrpg.android.habitica.extensions.subscribeWithErrorHandler
|
||||
import com.habitrpg.android.habitica.helpers.MainNavigationController
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.models.inventory.*
|
||||
|
|
@ -18,17 +25,18 @@ import com.habitrpg.android.habitica.models.user.OwnedPet
|
|||
import com.habitrpg.android.habitica.models.user.User
|
||||
import com.habitrpg.android.habitica.ui.adapter.inventory.ItemRecyclerAdapter
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseFragment
|
||||
import com.habitrpg.android.habitica.ui.helpers.RecyclerViewEmptySupport
|
||||
import com.habitrpg.android.habitica.ui.helpers.SafeDefaultItemAnimator
|
||||
import com.habitrpg.android.habitica.ui.helpers.bindView
|
||||
import com.habitrpg.android.habitica.ui.helpers.resetViews
|
||||
import com.habitrpg.android.habitica.ui.helpers.*
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
||||
import io.reactivex.functions.Consumer
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
import javax.inject.Inject
|
||||
|
||||
class ItemRecyclerFragment : BaseFragment() {
|
||||
|
||||
@Inject
|
||||
lateinit var inventoryRepository: InventoryRepository
|
||||
@Inject
|
||||
lateinit var userRepository: UserRepository
|
||||
val recyclerView: RecyclerViewEmptySupport? by bindView(R.id.recyclerView)
|
||||
val emptyView: View? by bindView(R.id.emptyView)
|
||||
val emptyTextView: TextView? by bindView(R.id.empty_text_view)
|
||||
|
|
@ -93,7 +101,7 @@ class ItemRecyclerFragment : BaseFragment() {
|
|||
}
|
||||
recyclerView?.adapter = adapter
|
||||
|
||||
adapter?.notNull { adapter ->
|
||||
adapter?.let { adapter ->
|
||||
compositeSubscription.add(adapter.getSellItemFlowable()
|
||||
.flatMap { item -> inventoryRepository.sellItem(user, item) }
|
||||
.subscribe(Consumer { }, RxErrorHandler.handleEmptyError()))
|
||||
|
|
@ -101,9 +109,15 @@ class ItemRecyclerFragment : BaseFragment() {
|
|||
compositeSubscription.add(adapter.getQuestInvitationFlowable()
|
||||
.flatMap { quest -> inventoryRepository.inviteToQuest(quest) }
|
||||
.subscribe(Consumer { MainNavigationController.navigate(R.id.partyFragment) }, RxErrorHandler.handleEmptyError()))
|
||||
compositeSubscription.add(adapter.getOpenMysteryItemFlowable()
|
||||
.flatMap { inventoryRepository.openMysteryItem(user) }
|
||||
.flatMap { userRepository.retrieveUser(false) }
|
||||
.subscribe(Consumer { }, RxErrorHandler.handleEmptyError()))
|
||||
compositeSubscription.add(adapter.startHatchingEvents.subscribeWithErrorHandler(Consumer { showHatchingDialog(it) }))
|
||||
compositeSubscription.add(adapter.hatchPetEvents.subscribeWithErrorHandler(Consumer { hatchPet(it.first, it.second) }))
|
||||
}
|
||||
}
|
||||
activity.notNull {
|
||||
activity?.let {
|
||||
recyclerView?.addItemDecoration(androidx.recyclerview.widget.DividerItemDecoration(it, androidx.recyclerview.widget.DividerItemDecoration.VERTICAL))
|
||||
}
|
||||
recyclerView?.itemAnimator = SafeDefaultItemAnimator()
|
||||
|
|
@ -146,6 +160,20 @@ class ItemRecyclerFragment : BaseFragment() {
|
|||
this.loadItems()
|
||||
}
|
||||
|
||||
private fun showHatchingDialog(item: Item) {
|
||||
val fragment = ItemRecyclerFragment()
|
||||
if (item is Egg) {
|
||||
fragment.itemType = "hatchingPotions"
|
||||
fragment.hatchingItem = item
|
||||
} else {
|
||||
fragment.itemType = "eggs"
|
||||
fragment.hatchingItem = item
|
||||
}
|
||||
fragment.isHatching = true
|
||||
fragment.isFeeding = false
|
||||
fragment.show(fragmentManager, "hatchingDialog")
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
if ((this.isHatching || this.isFeeding) && dialog?.window != null) {
|
||||
val params = dialog?.window?.attributes
|
||||
|
|
@ -162,6 +190,35 @@ class ItemRecyclerFragment : BaseFragment() {
|
|||
outState.putString(ITEM_TYPE_KEY, this.itemType)
|
||||
}
|
||||
|
||||
private fun hatchPet(potion: HatchingPotion, egg: Egg) {
|
||||
compositeSubscription.add(this.inventoryRepository.hatchPet(egg, potion) {
|
||||
val petWrapper = View.inflate(context, R.layout.pet_imageview, null) as? FrameLayout
|
||||
val petImageView = petWrapper?.findViewById(R.id.pet_imageview) as? SimpleDraweeView
|
||||
|
||||
DataBindingUtils.loadImage(petImageView, "Pet-" + egg.key + "-" + potion.key)
|
||||
val potionName = potion.text
|
||||
val eggName = egg.text
|
||||
val dialog = context?.let { HabiticaAlertDialog(it) }
|
||||
dialog?.setTitle(getString(R.string.hatched_pet_title, potionName, eggName))
|
||||
dialog?.setAdditionalContentView(petWrapper)
|
||||
dialog?.addButton(R.string.onwards, true) { hatchingDialog, _ -> hatchingDialog.dismiss() }
|
||||
dialog?.addButton(R.string.share, false) { hatchingDialog, _ ->
|
||||
val event1 = ShareEvent()
|
||||
event1.sharedMessage = getString(R.string.share_hatched, potionName, eggName) + " https://habitica.com/social/hatch-pet"
|
||||
val petImageSideLength = 140
|
||||
val sharedImage = Bitmap.createBitmap(petImageSideLength, petImageSideLength, Bitmap.Config.ARGB_8888)
|
||||
val canvas = Canvas(sharedImage)
|
||||
context?.let { canvas.drawColor(ContextCompat.getColor(it, R.color.brand_300)) }
|
||||
petImageView?.drawable?.setBounds(0, 0, petImageSideLength, petImageSideLength)
|
||||
petImageView?.drawable?.draw(canvas)
|
||||
event1.shareImage = sharedImage
|
||||
EventBus.getDefault().post(event1)
|
||||
hatchingDialog.dismiss()
|
||||
}
|
||||
dialog?.show()
|
||||
}.subscribe(Consumer { }, RxErrorHandler.handleEmptyError()))
|
||||
}
|
||||
|
||||
private fun loadItems() {
|
||||
val itemClass: Class<out Item> = when (itemType) {
|
||||
"eggs" -> Egg::class.java
|
||||
|
|
|
|||
|
|
@ -1,21 +1,17 @@
|
|||
package com.habitrpg.android.habitica.ui.fragments.inventory.items
|
||||
|
||||
import android.os.Bundle
|
||||
import com.google.android.material.tabs.TabLayout
|
||||
import androidx.fragment.app.FragmentPagerAdapter
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
|
||||
import androidx.fragment.app.FragmentPagerAdapter
|
||||
import com.google.android.material.tabs.TabLayout
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
import com.habitrpg.android.habitica.events.commands.HatchingCommand
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
|
||||
import com.habitrpg.android.habitica.ui.helpers.bindView
|
||||
import com.habitrpg.android.habitica.ui.helpers.resetViews
|
||||
|
||||
import org.greenrobot.eventbus.Subscribe
|
||||
|
||||
class ItemsFragment : BaseMainFragment() {
|
||||
|
||||
private val viewPager: androidx.viewpager.widget.ViewPager? by bindView(R.id.viewPager)
|
||||
|
|
@ -92,23 +88,4 @@ class ItemsFragment : BaseMainFragment() {
|
|||
tabLayout?.setupWithViewPager(viewPager)
|
||||
tabLayout?.tabMode = TabLayout.MODE_SCROLLABLE
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
fun showHatchingDialog(event: HatchingCommand) {
|
||||
if (event.usingEgg == null || event.usingHatchingPotion == null) {
|
||||
val fragment = ItemRecyclerFragment()
|
||||
if (event.usingEgg != null) {
|
||||
fragment.itemType = "hatchingPotions"
|
||||
fragment.hatchingItem = event.usingEgg
|
||||
} else {
|
||||
fragment.itemType = "eggs"
|
||||
fragment.hatchingItem = event.usingHatchingPotion
|
||||
}
|
||||
fragment.isHatching = true
|
||||
fragment.isFeeding = false
|
||||
fragment.show(fragmentManager!!, "hatchingDialog")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ import com.habitrpg.android.habitica.data.InventoryRepository
|
|||
import com.habitrpg.android.habitica.data.SocialRepository
|
||||
import com.habitrpg.android.habitica.data.UserRepository
|
||||
import com.habitrpg.android.habitica.events.GearPurchasedEvent
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.models.shops.Shop
|
||||
|
|
@ -212,7 +211,7 @@ class ShopFragment : BaseFragment() {
|
|||
|
||||
private fun setGridSpanCount(width: Int) {
|
||||
var spanCount = 0
|
||||
context.notNull { context ->
|
||||
context?.let { context ->
|
||||
val itemWidth: Float = context.resources.getDimension(R.dimen.reward_width)
|
||||
|
||||
spanCount = (width / itemWidth).toInt()
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ import android.view.ViewGroup
|
|||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
import com.habitrpg.android.habitica.data.InventoryRepository
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.models.user.OwnedMount
|
||||
import com.habitrpg.android.habitica.ui.adapter.inventory.MountDetailRecyclerAdapter
|
||||
|
|
@ -49,7 +48,7 @@ class MountDetailRecyclerFragment : BaseMainFragment() {
|
|||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
arguments.notNull {
|
||||
arguments?.let {
|
||||
val args = MountDetailRecyclerFragmentArgs.fromBundle(it)
|
||||
animalGroup = args.group
|
||||
animalType = args.type
|
||||
|
|
@ -69,7 +68,7 @@ class MountDetailRecyclerFragment : BaseMainFragment() {
|
|||
this.loadItems()
|
||||
|
||||
adapter?.getEquipFlowable()?.flatMap { key -> inventoryRepository.equip(user, "mount", key) }
|
||||
?.subscribe(Consumer { }, RxErrorHandler.handleEmptyError()).notNull { compositeSubscription.add(it) }
|
||||
?.subscribe(Consumer { }, RxErrorHandler.handleEmptyError())?.let { compositeSubscription.add(it) }
|
||||
}
|
||||
|
||||
if (savedInstanceState != null) {
|
||||
|
|
@ -87,7 +86,7 @@ class MountDetailRecyclerFragment : BaseMainFragment() {
|
|||
|
||||
private fun setGridSpanCount(width: Int) {
|
||||
var spanCount = 0
|
||||
context?.resources.notNull { resources
|
||||
context?.resources?.let { resources
|
||||
val itemWidth: Float = resources.getDimension(R.dimen.pet_width)
|
||||
|
||||
spanCount = (width / itemWidth).toInt()
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ import com.habitrpg.android.habitica.R
|
|||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
import com.habitrpg.android.habitica.data.InventoryRepository
|
||||
import com.habitrpg.android.habitica.events.commands.FeedCommand
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.models.inventory.Mount
|
||||
import com.habitrpg.android.habitica.models.inventory.Pet
|
||||
|
|
@ -61,7 +60,7 @@ class PetDetailRecyclerFragment : BaseMainFragment() {
|
|||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
arguments.notNull {
|
||||
arguments?.let {
|
||||
val args = MountDetailRecyclerFragmentArgs.fromBundle(it)
|
||||
animalGroup = args.group
|
||||
animalType = args.type
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ import com.habitrpg.android.habitica.R
|
|||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
import com.habitrpg.android.habitica.data.InventoryRepository
|
||||
import com.habitrpg.android.habitica.extensions.inflate
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.models.inventory.Animal
|
||||
import com.habitrpg.android.habitica.models.user.*
|
||||
|
|
@ -75,7 +74,7 @@ class StableRecyclerFragment : BaseFragment() {
|
|||
}
|
||||
}
|
||||
recyclerView?.layoutManager = layoutManager
|
||||
activity.notNull {
|
||||
activity?.let {
|
||||
recyclerView?.addItemDecoration(MarginDecoration(it))
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -13,7 +13,10 @@ import com.google.android.material.textfield.TextInputLayout
|
|||
import com.habitrpg.android.habitica.HabiticaBaseApplication
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.data.ApiClient
|
||||
import com.habitrpg.android.habitica.extensions.*
|
||||
import com.habitrpg.android.habitica.extensions.addCancelButton
|
||||
import com.habitrpg.android.habitica.extensions.addCloseButton
|
||||
import com.habitrpg.android.habitica.extensions.dpToPx
|
||||
import com.habitrpg.android.habitica.extensions.layoutInflater
|
||||
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
||||
import com.habitrpg.android.habitica.helpers.MainNavigationController
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
|
|
@ -97,7 +100,7 @@ class AuthenticationPreferenceFragment: BasePreferencesFragment() {
|
|||
val oldPasswordEditText = view?.findViewById<EditText>(R.id.editText)
|
||||
val passwordEditText = view?.findViewById<EditText>(R.id.passwordEditText)
|
||||
val passwordRepeatEditText = view?.findViewById<EditText>(R.id.passwordRepeatEditText)
|
||||
context.notNull { context ->
|
||||
context?.let { context ->
|
||||
val dialog = HabiticaAlertDialog(context)
|
||||
dialog.setTitle(R.string.change_password)
|
||||
dialog.addButton(R.string.change, true) { _, _ ->
|
||||
|
|
@ -120,7 +123,7 @@ class AuthenticationPreferenceFragment: BasePreferencesFragment() {
|
|||
emailEditText?.setText(user?.authentication?.localAuthentication?.email)
|
||||
view?.findViewById<TextInputLayout>(R.id.input_layout)?.hint = context?.getString(R.string.email)
|
||||
val passwordEditText = view?.findViewById<EditText>(R.id.passwordEditText)
|
||||
context.notNull { context ->
|
||||
context?.let { context ->
|
||||
val dialog = HabiticaAlertDialog(context)
|
||||
dialog.setTitle(R.string.change_email)
|
||||
dialog.addButton(R.string.change, true) { _, _ ->
|
||||
|
|
@ -142,7 +145,7 @@ class AuthenticationPreferenceFragment: BasePreferencesFragment() {
|
|||
val loginNameEditText = view?.findViewById<EditText>(R.id.editText)
|
||||
loginNameEditText?.setText(user?.authentication?.localAuthentication?.username)
|
||||
view?.findViewById<TextInputLayout>(R.id.input_layout)?.hint = context?.getString(R.string.username)
|
||||
context.notNull { context ->
|
||||
context?.let { context ->
|
||||
val dialog = HabiticaAlertDialog(context)
|
||||
dialog.setTitle(R.string.change_username)
|
||||
dialog.addButton(R.string.save, true) { _, _ ->
|
||||
|
|
@ -169,7 +172,7 @@ class AuthenticationPreferenceFragment: BasePreferencesFragment() {
|
|||
editText?.inputType = InputType.TYPE_CLASS_TEXT
|
||||
}
|
||||
view?.findViewById<TextInputLayout>(R.id.input_layout)?.hint = context?.getString(R.string.confirm_deletion)
|
||||
context.notNull { context ->
|
||||
context?.let { context ->
|
||||
val dialog = HabiticaAlertDialog(context)
|
||||
dialog.setTitle(R.string.delete_account)
|
||||
dialog.setMessage(deleteMessage)
|
||||
|
|
@ -189,7 +192,7 @@ class AuthenticationPreferenceFragment: BasePreferencesFragment() {
|
|||
val emailEditText = view?.findViewById<EditText>(R.id.editText)
|
||||
val passwordEditText = view?.findViewById<EditText>(R.id.passwordEditText)
|
||||
val passwordRepeatEditText = view?.findViewById<EditText>(R.id.passwordRepeatEditText)
|
||||
context.notNull { context ->
|
||||
context?.let { context ->
|
||||
val dialog = HabiticaAlertDialog(context)
|
||||
dialog.setTitle(R.string.add_local_authentication)
|
||||
dialog.addButton(R.string.save, true) { thisDialog, _ ->
|
||||
|
|
@ -214,7 +217,7 @@ class AuthenticationPreferenceFragment: BasePreferencesFragment() {
|
|||
@Suppress("DEPRECATION")
|
||||
val dialog = ProgressDialog.show(context, context?.getString(R.string.deleting_account), null, true)
|
||||
compositeSubscription.add(userRepository.deleteAccount(password).subscribe({ _ ->
|
||||
context.notNull { HabiticaBaseApplication.logout(it) }
|
||||
context?.let { HabiticaBaseApplication.logout(it) }
|
||||
activity?.finish()
|
||||
}) { throwable ->
|
||||
dialog.dismiss()
|
||||
|
|
@ -223,7 +226,7 @@ class AuthenticationPreferenceFragment: BasePreferencesFragment() {
|
|||
}
|
||||
|
||||
private fun showAccountResetConfirmation() {
|
||||
context.notNull { context ->
|
||||
context?.let { context ->
|
||||
val dialog = HabiticaAlertDialog(context)
|
||||
dialog.setTitle(R.string.reset_account)
|
||||
dialog.setMessage(R.string.reset_account_description)
|
||||
|
|
@ -237,7 +240,7 @@ class AuthenticationPreferenceFragment: BasePreferencesFragment() {
|
|||
}
|
||||
|
||||
private fun showConfirmUsernameDialog() {
|
||||
context.notNull { context ->
|
||||
context?.let { context ->
|
||||
val dialog = HabiticaAlertDialog(context)
|
||||
dialog.setTitle(R.string.confirm_username_title)
|
||||
dialog.setMessage(R.string.confirm_username_description)
|
||||
|
|
@ -260,9 +263,9 @@ class AuthenticationPreferenceFragment: BasePreferencesFragment() {
|
|||
}
|
||||
|
||||
private fun showSubscriptionStatusDialog() {
|
||||
context.notNull { context ->
|
||||
context?.let { context ->
|
||||
val view = SubscriptionDetailsView(context)
|
||||
user?.purchased?.plan?.notNull {
|
||||
user?.purchased?.plan?.let {
|
||||
view.setPlan(it)
|
||||
}
|
||||
val dialog = HabiticaAlertDialog(context)
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@ import com.habitrpg.android.habitica.HabiticaBaseApplication
|
|||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.data.ApiClient
|
||||
import com.habitrpg.android.habitica.data.ContentRepository
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.*
|
||||
import com.habitrpg.android.habitica.helpers.notifications.PushNotificationManager
|
||||
import com.habitrpg.android.habitica.models.ContentResult
|
||||
|
|
@ -85,7 +84,7 @@ class PreferencesFragment : BasePreferencesFragment(), SharedPreferences.OnShare
|
|||
override fun onPreferenceTreeClick(preference: Preference): Boolean {
|
||||
when(preference.key) {
|
||||
"logout" -> {
|
||||
context.notNull { HabiticaBaseApplication.logout(it) }
|
||||
context?.let { HabiticaBaseApplication.logout(it) }
|
||||
activity?.finish()
|
||||
}
|
||||
"choose_class" -> {
|
||||
|
|
@ -96,7 +95,7 @@ class PreferencesFragment : BasePreferencesFragment(), SharedPreferences.OnShare
|
|||
intent.putExtras(bundle)
|
||||
|
||||
if (user?.flags?.classSelected == true && user?.preferences?.disableClasses == false) {
|
||||
context.notNull { context ->
|
||||
context?.let { context ->
|
||||
val builder = AlertDialog.Builder(context)
|
||||
.setMessage(getString(R.string.change_class_confirmation))
|
||||
.setNegativeButton(getString(R.string.dialog_go_back)) { dialog, _ -> dialog.dismiss() }
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@ import androidx.preference.EditTextPreference
|
|||
import androidx.preference.Preference
|
||||
import androidx.preference.PreferenceCategory
|
||||
import com.habitrpg.android.habitica.HabiticaBaseApplication
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import io.reactivex.Flowable
|
||||
|
|
@ -83,7 +82,7 @@ class ProfilePreferencesFragment: BasePreferencesFragment(), SharedPreferences.O
|
|||
}
|
||||
else -> null
|
||||
}
|
||||
observable?.subscribe(Consumer {}, RxErrorHandler.handleEmptyError()).notNull { compositeSubscription.add(it) }
|
||||
observable?.subscribe(Consumer {}, RxErrorHandler.handleEmptyError())?.let { compositeSubscription.add(it) }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,9 +2,6 @@ package com.habitrpg.android.habitica.ui.fragments.setup
|
|||
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import com.google.android.material.tabs.TabLayout
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import android.util.TypedValue
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
|
|
@ -12,12 +9,16 @@ import android.view.ViewGroup
|
|||
import android.widget.Button
|
||||
import android.widget.ImageView
|
||||
import android.widget.RelativeLayout
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.google.android.material.tabs.TabLayout
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
import com.habitrpg.android.habitica.data.InventoryRepository
|
||||
import com.habitrpg.android.habitica.data.SetupCustomizationRepository
|
||||
import com.habitrpg.android.habitica.events.commands.UpdateUserCommand
|
||||
import com.habitrpg.android.habitica.data.UserRepository
|
||||
import com.habitrpg.android.habitica.extensions.inflate
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.extensions.subscribeWithErrorHandler
|
||||
import com.habitrpg.android.habitica.helpers.AmplitudeManager
|
||||
import com.habitrpg.android.habitica.models.SetupCustomization
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
|
|
@ -29,7 +30,7 @@ import com.habitrpg.android.habitica.ui.fragments.BaseFragment
|
|||
import com.habitrpg.android.habitica.ui.helpers.bindOptionalView
|
||||
import com.habitrpg.android.habitica.ui.helpers.resetViews
|
||||
import com.habitrpg.android.habitica.ui.views.setup.AvatarCategoryView
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
import io.reactivex.functions.Consumer
|
||||
import java.util.*
|
||||
import javax.inject.Inject
|
||||
|
||||
|
|
@ -37,6 +38,10 @@ class AvatarSetupFragment : BaseFragment() {
|
|||
|
||||
@Inject
|
||||
lateinit var customizationRepository: SetupCustomizationRepository
|
||||
@Inject
|
||||
lateinit var userRepository: UserRepository
|
||||
@Inject
|
||||
lateinit var inventoryRepository: InventoryRepository
|
||||
|
||||
var activity: SetupActivity? = null
|
||||
var width: Int = 0
|
||||
|
|
@ -78,6 +83,8 @@ class AvatarSetupFragment : BaseFragment() {
|
|||
|
||||
this.adapter = CustomizationSetupAdapter()
|
||||
this.adapter?.userSize = this.user?.preferences?.size ?: "slim"
|
||||
adapter?.updateUserEvents?.flatMap { userRepository.updateUser(user, it) }?.subscribeWithErrorHandler(Consumer {})?.let { compositeSubscription.add(it) }
|
||||
adapter?.equipGearEvents?.flatMap { inventoryRepository.equip(user, "equipped", it) }?.subscribeWithErrorHandler(Consumer {})?.let { compositeSubscription.add(it) }
|
||||
|
||||
this.adapter?.user = this.user
|
||||
this.layoutManager = LinearLayoutManager(activity)
|
||||
|
|
@ -147,7 +154,7 @@ class AvatarSetupFragment : BaseFragment() {
|
|||
}
|
||||
|
||||
private fun updateAvatar() {
|
||||
user.notNull {
|
||||
user?.let {
|
||||
avatarView?.setAvatar(it)
|
||||
}
|
||||
}
|
||||
|
|
@ -158,8 +165,8 @@ class AvatarSetupFragment : BaseFragment() {
|
|||
this.activeCategory = "body"
|
||||
this.subCategoryTabs?.removeAllTabs()
|
||||
this.subcategories = Arrays.asList("size", "shirt")
|
||||
subCategoryTabs?.newTab()?.setText(R.string.avatar_size).notNull { this.subCategoryTabs?.addTab(it) }
|
||||
subCategoryTabs?.newTab()?.setText(R.string.avatar_shirt).notNull { this.subCategoryTabs?.addTab(it) }
|
||||
subCategoryTabs?.newTab()?.setText(R.string.avatar_size)?.let { this.subCategoryTabs?.addTab(it) }
|
||||
subCategoryTabs?.newTab()?.setText(R.string.avatar_shirt)?.let { this.subCategoryTabs?.addTab(it) }
|
||||
loadCustomizations()
|
||||
}
|
||||
|
||||
|
|
@ -168,7 +175,7 @@ class AvatarSetupFragment : BaseFragment() {
|
|||
this.activeCategory = "skin"
|
||||
this.subCategoryTabs?.removeAllTabs()
|
||||
this.subcategories = listOf("color")
|
||||
subCategoryTabs?.newTab()?.setText(R.string.avatar_skin_color).notNull { this.subCategoryTabs?.addTab(it) }
|
||||
subCategoryTabs?.newTab()?.setText(R.string.avatar_skin_color)?.let { this.subCategoryTabs?.addTab(it) }
|
||||
loadCustomizations()
|
||||
}
|
||||
|
||||
|
|
@ -177,9 +184,9 @@ class AvatarSetupFragment : BaseFragment() {
|
|||
this.activeCategory = "hair"
|
||||
this.subCategoryTabs?.removeAllTabs()
|
||||
this.subcategories = Arrays.asList("bangs", "color", "ponytail")
|
||||
subCategoryTabs?.newTab()?.setText(R.string.avatar_hair_bangs).notNull { this.subCategoryTabs?.addTab(it) }
|
||||
subCategoryTabs?.newTab()?.setText(R.string.avatar_hair_color).notNull { this.subCategoryTabs?.addTab(it) }
|
||||
subCategoryTabs?.newTab()?.setText(R.string.avatar_hair_ponytail).notNull { this.subCategoryTabs?.addTab(it) }
|
||||
subCategoryTabs?.newTab()?.setText(R.string.avatar_hair_bangs)?.let { this.subCategoryTabs?.addTab(it) }
|
||||
subCategoryTabs?.newTab()?.setText(R.string.avatar_hair_color)?.let { this.subCategoryTabs?.addTab(it) }
|
||||
subCategoryTabs?.newTab()?.setText(R.string.avatar_hair_ponytail)?.let { this.subCategoryTabs?.addTab(it) }
|
||||
loadCustomizations()
|
||||
}
|
||||
|
||||
|
|
@ -188,15 +195,14 @@ class AvatarSetupFragment : BaseFragment() {
|
|||
this.activeCategory = "extras"
|
||||
this.subCategoryTabs?.removeAllTabs()
|
||||
this.subcategories = Arrays.asList("glasses", "flower", "wheelchair")
|
||||
subCategoryTabs?.newTab()?.setText(R.string.avatar_glasses).notNull { this.subCategoryTabs?.addTab(it) }
|
||||
subCategoryTabs?.newTab()?.setText(R.string.avatar_flower).notNull { this.subCategoryTabs?.addTab(it) }
|
||||
subCategoryTabs?.newTab()?.setText(R.string.avatar_wheelchair).notNull { this.subCategoryTabs?.addTab(it) }
|
||||
subCategoryTabs?.newTab()?.setText(R.string.avatar_glasses)?.let { this.subCategoryTabs?.addTab(it) }
|
||||
subCategoryTabs?.newTab()?.setText(R.string.avatar_flower)?.let { this.subCategoryTabs?.addTab(it) }
|
||||
subCategoryTabs?.newTab()?.setText(R.string.avatar_wheelchair)?.let { this.subCategoryTabs?.addTab(it) }
|
||||
loadCustomizations()
|
||||
}
|
||||
|
||||
private fun randomizeCharacter() {
|
||||
val user = this.user ?: return
|
||||
val command = UpdateUserCommand()
|
||||
val updateData = HashMap<String, Any>()
|
||||
updateData["preferences.size"] = chooseRandomKey(customizationRepository.getCustomizations("body", "size", user), false)
|
||||
updateData["preferences.shirt"] = chooseRandomKey(customizationRepository.getCustomizations("body", "shirt", user), false)
|
||||
|
|
@ -206,9 +212,7 @@ class AvatarSetupFragment : BaseFragment() {
|
|||
updateData["preferences.hair.bangs"] = chooseRandomKey(customizationRepository.getCustomizations("hair", "bangs", user), false)
|
||||
updateData["preferences.hair.flower"] = chooseRandomKey(customizationRepository.getCustomizations("extras", "flower", user), true)
|
||||
updateData["preferences.chair"] = chooseRandomKey(customizationRepository.getCustomizations("extras", "wheelchair", user), true)
|
||||
command.updateData = updateData
|
||||
|
||||
EventBus.getDefault().post(command)
|
||||
compositeSubscription.add(userRepository.updateUser(user, updateData).subscribeWithErrorHandler(Consumer {}))
|
||||
}
|
||||
|
||||
@Suppress("ReturnCount")
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ import android.widget.TextView
|
|||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
import com.habitrpg.android.habitica.extensions.inflate
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.AmplitudeManager
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseFragment
|
||||
import com.habitrpg.android.habitica.ui.helpers.bindOptionalView
|
||||
|
|
@ -69,7 +68,7 @@ class IntroFragment : BaseFragment() {
|
|||
this.descriptionTextView?.text = this.description
|
||||
}
|
||||
|
||||
backgroundColor.notNull {
|
||||
backgroundColor?.let {
|
||||
this.containerView?.setBackgroundColor(it)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ import androidx.recyclerview.widget.RecyclerView
|
|||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
import com.habitrpg.android.habitica.extensions.inflate
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.AmplitudeManager
|
||||
import com.habitrpg.android.habitica.models.tasks.Days
|
||||
import com.habitrpg.android.habitica.models.tasks.Task
|
||||
|
|
@ -79,7 +78,7 @@ class TaskSetupFragment : BaseFragment() {
|
|||
}
|
||||
|
||||
private fun updateAvatar() {
|
||||
user.notNull {
|
||||
user?.let {
|
||||
avatarView?.setAvatar(it)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,14 +5,13 @@ import android.app.ProgressDialog
|
|||
import android.content.Intent
|
||||
import android.graphics.drawable.BitmapDrawable
|
||||
import android.os.Bundle
|
||||
import androidx.core.content.ContextCompat
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.core.content.ContextCompat
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
import com.habitrpg.android.habitica.events.commands.UseSkillCommand
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.extensions.subscribeWithErrorHandler
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.models.Skill
|
||||
import com.habitrpg.android.habitica.models.responses.SkillResponse
|
||||
|
|
@ -29,7 +28,6 @@ import io.reactivex.Flowable
|
|||
import io.reactivex.Observable
|
||||
import io.reactivex.functions.Consumer
|
||||
import kotlinx.android.synthetic.main.fragment_skills.*
|
||||
import org.greenrobot.eventbus.Subscribe
|
||||
|
||||
class SkillsFragment : BaseMainFragment() {
|
||||
|
||||
|
|
@ -50,6 +48,7 @@ class SkillsFragment : BaseMainFragment() {
|
|||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
||||
super.onCreateView(inflater, container, savedInstanceState)
|
||||
adapter = SkillsRecyclerViewAdapter()
|
||||
adapter?.useSkillEvents?.subscribeWithErrorHandler(Consumer { onSkillSelected(it) })?.let { compositeSubscription.add(it) }
|
||||
checkUserLoadSkills()
|
||||
|
||||
this.tutorialStepIdentifier = "skills"
|
||||
|
|
@ -76,9 +75,7 @@ class SkillsFragment : BaseMainFragment() {
|
|||
if (user == null || adapter == null) {
|
||||
return
|
||||
}
|
||||
|
||||
adapter?.mana = this.user?.stats?.mp ?: 0.toDouble()
|
||||
|
||||
user?.let { user ->
|
||||
Observable.concat(userRepository.getSkills(user).firstElement().toObservable().flatMap { Observable.fromIterable(it) }, userRepository.getSpecialItems(user).firstElement().toObservable().flatMap { Observable.fromIterable(it) })
|
||||
.toList()
|
||||
|
|
@ -86,10 +83,7 @@ class SkillsFragment : BaseMainFragment() {
|
|||
}
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
fun onEvent(command: UseSkillCommand) {
|
||||
val skill = command.skill
|
||||
|
||||
private fun onSkillSelected(skill: Skill) {
|
||||
when {
|
||||
"special" == skill.habitClass -> {
|
||||
selectedSkill = skill
|
||||
|
|
@ -112,7 +106,7 @@ class SkillsFragment : BaseMainFragment() {
|
|||
if ("special" == usedSkill?.habitClass) {
|
||||
showSnackbar(activity.snackbarContainer, context?.getString(R.string.used_skill_without_mana, usedSkill.text), HabiticaSnackbar.SnackbarDisplayType.BLUE)
|
||||
} else {
|
||||
context.notNull {
|
||||
context?.let {
|
||||
showSnackbar(activity.snackbarContainer, null,
|
||||
context?.getString(R.string.used_skill_without_mana, usedSkill?.text),
|
||||
BitmapDrawable(resources, HabiticaIconsHelper.imageOfMagic()),
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@ import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
|||
import com.habitrpg.android.habitica.MainNavDirections
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
||||
import com.habitrpg.android.habitica.helpers.MainNavigationController
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
|
|
@ -73,7 +72,7 @@ class ChatFragment : BaseFragment(), SwipeRefreshLayout.OnRefreshListener {
|
|||
}
|
||||
|
||||
chatAdapter = ChatRecyclerViewAdapter(null, true, null, true)
|
||||
chatAdapter.notNull {adapter ->
|
||||
chatAdapter?.let {adapter ->
|
||||
compositeSubscription.add(adapter.getUserLabelClickFlowable().subscribe(Consumer { userId ->
|
||||
FullProfileActivity.open(userId)
|
||||
}, RxErrorHandler.handleEmptyError()))
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@ import com.habitrpg.android.habitica.R
|
|||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
import com.habitrpg.android.habitica.data.SocialRepository
|
||||
import com.habitrpg.android.habitica.data.UserRepository
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
||||
import com.habitrpg.android.habitica.helpers.MainNavigationController
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
|
|
@ -120,7 +119,7 @@ class ChatListFragment : BaseFragment(), SwipeRefreshLayout.OnRefreshListener {
|
|||
}
|
||||
|
||||
chatAdapter = ChatRecyclerViewAdapter(null, true, user, true)
|
||||
chatAdapter.notNull {adapter ->
|
||||
chatAdapter?.let {adapter ->
|
||||
compositeSubscription.add(adapter.getUserLabelClickFlowable().subscribe(Consumer { userId ->
|
||||
FullProfileActivity.open(userId)
|
||||
}, RxErrorHandler.handleEmptyError()))
|
||||
|
|
@ -139,7 +138,7 @@ class ChatListFragment : BaseFragment(), SwipeRefreshLayout.OnRefreshListener {
|
|||
recyclerView.adapter = chatAdapter
|
||||
recyclerView.itemAnimator = SafeDefaultItemAnimator()
|
||||
|
||||
groupId.notNull { id ->
|
||||
groupId?.let { id ->
|
||||
socialRepository.getGroupChat(id).firstElement()
|
||||
.subscribe(Consumer<RealmResults<ChatMessage>> { this.setChatMessages(it) }, RxErrorHandler.handleEmptyError())
|
||||
}
|
||||
|
|
@ -220,7 +219,7 @@ class ChatListFragment : BaseFragment(), SwipeRefreshLayout.OnRefreshListener {
|
|||
if (isUserInitiated) {
|
||||
refreshLayout.isRefreshing = true
|
||||
}
|
||||
groupId.notNull {id ->
|
||||
groupId?.let {id ->
|
||||
socialRepository.retrieveGroupChat(id)
|
||||
.doOnEvent { _, _ -> refreshLayout?.isRefreshing = false }.subscribe(Consumer {
|
||||
if (isScrolledToTop && recyclerView != null) {
|
||||
|
|
@ -238,7 +237,7 @@ class ChatListFragment : BaseFragment(), SwipeRefreshLayout.OnRefreshListener {
|
|||
private fun markMessagesAsSeen() {
|
||||
if (!isTavern && groupId?.isNotEmpty() == true && gotNewMessages && navigatedOnceToFragment) {
|
||||
gotNewMessages = false
|
||||
groupId.notNull {id ->
|
||||
groupId?.let {id ->
|
||||
socialRepository.markMessagesSeen(id)
|
||||
}
|
||||
}
|
||||
|
|
@ -289,7 +288,7 @@ class ChatListFragment : BaseFragment(), SwipeRefreshLayout.OnRefreshListener {
|
|||
}
|
||||
|
||||
private fun sendChatMessage(chatText: String) {
|
||||
groupId.notNull {id ->
|
||||
groupId?.let {id ->
|
||||
socialRepository.postGroupChat(id, chatText).subscribe({
|
||||
recyclerView?.scrollToPosition(0)
|
||||
}, { throwable ->
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@ import com.habitrpg.android.habitica.R
|
|||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
import com.habitrpg.android.habitica.data.SocialRepository
|
||||
import com.habitrpg.android.habitica.data.UserRepository
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
||||
import com.habitrpg.android.habitica.helpers.MainNavigationController
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
|
|
@ -116,7 +115,7 @@ class GroupInformationFragment : BaseFragment() {
|
|||
startActivityForResult(intent, GroupFormActivity.GROUP_FORM_ACTIVITY)
|
||||
}
|
||||
|
||||
context.notNull { context ->
|
||||
context?.let { context ->
|
||||
DataBindingUtils.loadImage("timeTravelersShop_background_fall") {bitmap ->
|
||||
val aspectRatio = bitmap.width / bitmap.height.toFloat()
|
||||
val height = context.resources.getDimension(R.dimen.shop_height).toInt()
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ import android.widget.TextView
|
|||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
import com.habitrpg.android.habitica.data.SocialRepository
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
||||
import com.habitrpg.android.habitica.helpers.MainNavigationController
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
|
|
@ -84,7 +83,7 @@ class InboxFragment : BaseMainFragment(), androidx.swiperefreshlayout.widget.Swi
|
|||
assert(this.activity != null)
|
||||
this.chooseRecipientDialogView = this.activity?.layoutInflater?.inflate(R.layout.dialog_choose_message_recipient, null)
|
||||
|
||||
this.activity.notNull { thisActivity ->
|
||||
this.activity?.let { thisActivity ->
|
||||
val alert = HabiticaAlertDialog(thisActivity)
|
||||
alert.setTitle(getString(R.string.choose_recipient_title))
|
||||
alert.addButton(getString(R.string.action_continue), true) { _, _ ->
|
||||
|
|
|
|||
|
|
@ -12,9 +12,8 @@ import com.habitrpg.android.habitica.MainNavDirections
|
|||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
import com.habitrpg.android.habitica.data.SocialRepository
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.MainNavigationController
|
||||
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
||||
import com.habitrpg.android.habitica.helpers.MainNavigationController
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.models.social.ChatMessage
|
||||
import com.habitrpg.android.habitica.ui.activities.FullProfileActivity
|
||||
|
|
@ -56,7 +55,7 @@ class InboxMessageListFragment : BaseMainFragment(), androidx.swiperefreshlayout
|
|||
super.onViewCreated(view, savedInstanceState)
|
||||
swipeRefreshLayout?.setOnRefreshListener(this)
|
||||
|
||||
arguments.notNull {
|
||||
arguments?.let {
|
||||
val args = InboxMessageListFragmentArgs.fromBundle(it)
|
||||
setReceivingUser(args.username, args.userID)
|
||||
}
|
||||
|
|
@ -67,7 +66,7 @@ class InboxMessageListFragment : BaseMainFragment(), androidx.swiperefreshlayout
|
|||
chatAdapter = ChatRecyclerViewAdapter(null, true, user, false)
|
||||
recyclerView.adapter = chatAdapter
|
||||
recyclerView.itemAnimator = SafeDefaultItemAnimator()
|
||||
chatAdapter.notNull { adapter ->
|
||||
chatAdapter?.let { adapter ->
|
||||
compositeSubscription.add(adapter.getUserLabelClickFlowable().subscribe(Consumer<String> {
|
||||
FullProfileActivity.open(it)
|
||||
}, RxErrorHandler.handleEmptyError()))
|
||||
|
|
@ -121,7 +120,7 @@ class InboxMessageListFragment : BaseMainFragment(), androidx.swiperefreshlayout
|
|||
}
|
||||
|
||||
private fun sendMessage(chatText: String) {
|
||||
replyToUserUUID?.notNull {userID ->
|
||||
replyToUserUUID?.let {userID ->
|
||||
socialRepository.postPrivateMessage(userID, chatText)
|
||||
.delay(200, TimeUnit.MILLISECONDS)
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ import com.habitrpg.android.habitica.R
|
|||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
import com.habitrpg.android.habitica.data.SocialRepository
|
||||
import com.habitrpg.android.habitica.extensions.inflate
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.extensions.subscribeWithErrorHandler
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.ui.adapter.social.PublicGuildsRecyclerViewAdapter
|
||||
|
|
@ -75,14 +74,14 @@ class PublicGuildsFragment : BaseMainFragment(), SearchView.OnQueryTextListener
|
|||
val searchItem = menu.findItem(R.id.action_guild_search)
|
||||
val guildSearchView = searchItem?.actionView as? SearchView
|
||||
val theTextArea = guildSearchView?.findViewById<SearchView.SearchAutoComplete>(R.id.search_src_text)
|
||||
context.notNull { theTextArea?.setHintTextColor(ContextCompat.getColor(it, R.color.white)) }
|
||||
context?.let { theTextArea?.setHintTextColor(ContextCompat.getColor(it, R.color.white)) }
|
||||
guildSearchView?.queryHint = getString(R.string.guild_search_hint)
|
||||
guildSearchView?.setOnQueryTextListener(this)
|
||||
}
|
||||
|
||||
override fun onQueryTextSubmit(s: String): Boolean {
|
||||
viewAdapter.filter.filter(s)
|
||||
activity.notNull {
|
||||
activity?.let {
|
||||
KeyboardUtil.dismissKeyboard(it)
|
||||
}
|
||||
return true
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@ import com.habitrpg.android.habitica.R
|
|||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
import com.habitrpg.android.habitica.data.InventoryRepository
|
||||
import com.habitrpg.android.habitica.data.SocialRepository
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.models.inventory.Quest
|
||||
import com.habitrpg.android.habitica.models.inventory.QuestContent
|
||||
|
|
@ -76,7 +75,7 @@ class QuestDetailFragment : BaseMainFragment() {
|
|||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
arguments.notNull {
|
||||
arguments?.let {
|
||||
val args = QuestDetailFragmentArgs.fromBundle(it)
|
||||
partyId = args.partyID
|
||||
questKey = args.questKey
|
||||
|
|
@ -108,11 +107,11 @@ class QuestDetailFragment : BaseMainFragment() {
|
|||
party = group
|
||||
quest = group.quest
|
||||
setQuestParticipants(group.quest?.participants)
|
||||
socialRepository.getMember(quest?.leader).firstElement().subscribe(Consumer { member ->
|
||||
compositeSubscription.add(socialRepository.getMember(quest?.leader).firstElement().subscribe(Consumer { member ->
|
||||
if (context != null && questLeaderView != null && member != null) {
|
||||
questLeaderView?.text = context?.getString(R.string.quest_leader_header, member.displayName)
|
||||
}
|
||||
}, RxErrorHandler.handleEmptyError())
|
||||
}, RxErrorHandler.handleEmptyError()))
|
||||
|
||||
if (questLeaderResponseWrapper != null) {
|
||||
if (showParticipatantButtons()) {
|
||||
|
|
@ -174,7 +173,7 @@ class QuestDetailFragment : BaseMainFragment() {
|
|||
textView?.text = participant.displayName
|
||||
val statusTextView = participantView?.findViewById<View>(R.id.status_view) as? TextView
|
||||
if (quest?.active == false) {
|
||||
context.notNull {
|
||||
context?.let {
|
||||
when {
|
||||
participant.participatesInQuest == null -> {
|
||||
statusTextView?.setText(R.string.pending)
|
||||
|
|
@ -219,14 +218,14 @@ class QuestDetailFragment : BaseMainFragment() {
|
|||
}
|
||||
|
||||
private fun onQuestAccept() {
|
||||
partyId.notNull { partyID ->
|
||||
partyId?.let { partyID ->
|
||||
socialRepository.acceptQuest(user, partyID).subscribe(Consumer { }, RxErrorHandler.handleEmptyError())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private fun onQuestReject() {
|
||||
partyId.notNull { partyID ->
|
||||
partyId?.let { partyID ->
|
||||
socialRepository.rejectQuest(user, partyID).subscribe(Consumer { }, RxErrorHandler.handleEmptyError())
|
||||
}
|
||||
}
|
||||
|
|
@ -253,7 +252,7 @@ class QuestDetailFragment : BaseMainFragment() {
|
|||
val alert = HabiticaAlertDialog(it)
|
||||
alert.setMessage(R.string.quest_cancel_message)
|
||||
alert.addButton(R.string.yes, true) { _, _ ->
|
||||
partyId.notNull { partyID ->
|
||||
partyId?.let { partyID ->
|
||||
@Suppress("DEPRECATION")
|
||||
socialRepository.cancelQuest(partyID)
|
||||
.subscribe(Consumer { getActivity()?.fragmentManager?.popBackStack() }, RxErrorHandler.handleEmptyError())
|
||||
|
|
@ -268,7 +267,7 @@ class QuestDetailFragment : BaseMainFragment() {
|
|||
val builder = AlertDialog.Builder(getActivity())
|
||||
.setMessage(R.string.quest_abort_message)
|
||||
.setPositiveButton(R.string.yes) { _, _ ->
|
||||
partyId.notNull { partyID ->
|
||||
partyId?.let { partyID ->
|
||||
@Suppress("DEPRECATION")
|
||||
socialRepository.abortQuest(partyID)
|
||||
.subscribe(Consumer { getActivity()?.fragmentManager?.popBackStack() }, RxErrorHandler.handleEmptyError())
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@ import com.habitrpg.android.habitica.components.UserComponent
|
|||
import com.habitrpg.android.habitica.data.InventoryRepository
|
||||
import com.habitrpg.android.habitica.data.SocialRepository
|
||||
import com.habitrpg.android.habitica.data.UserRepository
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
||||
import com.habitrpg.android.habitica.helpers.MainNavigationController
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
|
|
@ -100,7 +99,7 @@ class TavernDetailFragment : BaseFragment() {
|
|||
|
||||
compositeSubscription.add(socialRepository.retrieveGroup(Group.TAVERN_ID).subscribe(Consumer { }, RxErrorHandler.handleEmptyError()))
|
||||
|
||||
user.notNull { questProgressView.configure(it) }
|
||||
user?.let { questProgressView.configure(it) }
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
|
|
@ -112,7 +111,7 @@ class TavernDetailFragment : BaseFragment() {
|
|||
|
||||
private fun bindButtons() {
|
||||
innButton.setOnClickListener {
|
||||
user?.notNull { user -> userRepository.sleep(user).subscribe(Consumer { }, RxErrorHandler.handleEmptyError()) }
|
||||
user?.let { user -> userRepository.sleep(user).subscribe(Consumer { }, RxErrorHandler.handleEmptyError()) }
|
||||
}
|
||||
guidelinesButton.setOnClickListener {
|
||||
MainNavigationController.navigate(R.id.guidelinesActivity)
|
||||
|
|
@ -147,7 +146,7 @@ class TavernDetailFragment : BaseFragment() {
|
|||
|
||||
private fun addPlayerTiers() {
|
||||
for (tier in PlayerTier.getTiers()) {
|
||||
context.notNull {
|
||||
context?.let {
|
||||
val container = FrameLayout(it)
|
||||
container.background = ContextCompat.getDrawable(it, R.drawable.layout_rounded_bg_gray_700)
|
||||
val label = UsernameLabel(context, null)
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@ import com.habitrpg.android.habitica.components.UserComponent
|
|||
import com.habitrpg.android.habitica.data.ChallengeRepository
|
||||
import com.habitrpg.android.habitica.data.SocialRepository
|
||||
import com.habitrpg.android.habitica.extensions.inflate
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.models.members.Member
|
||||
import com.habitrpg.android.habitica.models.social.Challenge
|
||||
|
|
@ -29,9 +28,9 @@ import com.habitrpg.android.habitica.ui.activities.FullProfileActivity
|
|||
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
|
||||
import com.habitrpg.android.habitica.ui.helpers.MarkdownParser
|
||||
import com.habitrpg.android.habitica.ui.helpers.bindView
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaEmojiTextView
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
||||
import com.habitrpg.android.habitica.ui.views.social.UsernameLabel
|
||||
import io.reactivex.functions.Action
|
||||
import io.reactivex.functions.Consumer
|
||||
|
|
@ -79,7 +78,7 @@ class ChallengeDetailFragment: BaseMainFragment() {
|
|||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
arguments.notNull {
|
||||
arguments?.let {
|
||||
val args = ChallengeDetailFragmentArgs.fromBundle(it)
|
||||
challengeID = args.challengeID
|
||||
}
|
||||
|
|
@ -93,7 +92,7 @@ class ChallengeDetailFragment: BaseMainFragment() {
|
|||
FullProfileActivity.open(leaderID)
|
||||
}
|
||||
|
||||
challengeID.notNull {id ->
|
||||
challengeID?.let {id ->
|
||||
compositeSubscription.add(challengeRepository.getChallenge(id)
|
||||
.doOnNext {
|
||||
set(it)
|
||||
|
|
@ -145,7 +144,7 @@ class ChallengeDetailFragment: BaseMainFragment() {
|
|||
}, RxErrorHandler.handleEmptyError()))
|
||||
}
|
||||
|
||||
joinButton?.setOnClickListener { challenge.notNull { challenge -> challengeRepository.joinChallenge(challenge).subscribe(Consumer {}, RxErrorHandler.handleEmptyError()) } }
|
||||
joinButton?.setOnClickListener { challenge?.let { challenge -> challengeRepository.joinChallenge(challenge).subscribe(Consumer {}, RxErrorHandler.handleEmptyError()) } }
|
||||
leaveButton?.setOnClickListener { showChallengeLeaveDialog() }
|
||||
|
||||
refresh()
|
||||
|
|
@ -179,7 +178,7 @@ class ChallengeDetailFragment: BaseMainFragment() {
|
|||
}
|
||||
|
||||
private fun refresh() {
|
||||
challengeID.notNull {id ->
|
||||
challengeID?.let {id ->
|
||||
challengeRepository.retrieveChallenge(id)
|
||||
.flatMap { challengeRepository.retrieveChallengeTasks(id) }
|
||||
.subscribe(Consumer { }, RxErrorHandler.handleEmptyError(), Action { })
|
||||
|
|
@ -227,7 +226,7 @@ class ChallengeDetailFragment: BaseMainFragment() {
|
|||
|
||||
entry?.findViewById<ImageView>(R.id.lock_icon_plus)?.setImageBitmap(HabiticaIconsHelper.imageOfLocked(Color.parseColor("#DFDEDF")))
|
||||
entry?.findViewById<ImageView>(R.id.lock_icon_minus)?.setImageBitmap(HabiticaIconsHelper.imageOfLocked(Color.parseColor("#DFDEDF")))
|
||||
context.notNull {
|
||||
context?.let {
|
||||
if (task.up == true) {
|
||||
entry?.findViewById<ImageView>(R.id.lock_icon_plus)?.setImageBitmap(HabiticaIconsHelper.imageOfLocked(Color.parseColor("#B3FFFFFF")))
|
||||
entry?.findViewById<View>(R.id.lock_icon_background_plus)?.setBackgroundColor(ContextCompat.getColor(it, task.mediumTaskColor))
|
||||
|
|
@ -265,7 +264,7 @@ class ChallengeDetailFragment: BaseMainFragment() {
|
|||
val title = entry?.findViewById(R.id.daily_title) as? TextView?
|
||||
title?.text = EmojiParser.parseEmojis(task.text)
|
||||
entry?.findViewById<ImageView>(R.id.lock_icon)?.setImageBitmap(HabiticaIconsHelper.imageOfLocked(Color.parseColor("#949494")))
|
||||
context.notNull {
|
||||
context?.let {
|
||||
entry?.findViewById<View>(R.id.lock_icon_background)?.setBackgroundColor(ContextCompat.getColor(it, task.mediumTaskColor))
|
||||
val drawable = ContextCompat.getDrawable(it, R.drawable.circle_white)
|
||||
drawable?.colorFilter = PorterDuffColorFilter(ContextCompat.getColor(it, task.extraLightTaskColor), PorterDuff.Mode.MULTIPLY)
|
||||
|
|
@ -299,7 +298,7 @@ class ChallengeDetailFragment: BaseMainFragment() {
|
|||
val title = entry?.findViewById(R.id.todo_title) as? TextView
|
||||
title?.text = EmojiParser.parseEmojis(task.text)
|
||||
entry?.findViewById<ImageView>(R.id.lock_icon)?.setImageBitmap(HabiticaIconsHelper.imageOfLocked(Color.parseColor("#949494")))
|
||||
context.notNull {
|
||||
context?.let {
|
||||
entry?.findViewById<View>(R.id.lock_icon_background)?.setBackgroundColor(ContextCompat.getColor(it, task.mediumTaskColor))
|
||||
val drawable = ContextCompat.getDrawable(it, R.drawable.circle_white)
|
||||
drawable?.colorFilter = PorterDuffColorFilter(ContextCompat.getColor(it, task.extraLightTaskColor), PorterDuff.Mode.MULTIPLY)
|
||||
|
|
@ -351,13 +350,13 @@ class ChallengeDetailFragment: BaseMainFragment() {
|
|||
}
|
||||
|
||||
private fun showChallengeLeaveDialog() {
|
||||
context.notNull { context ->
|
||||
context?.let { context ->
|
||||
val alert = HabiticaAlertDialog(context)
|
||||
alert.setTitle(this.getString(R.string.challenge_leave_title))
|
||||
alert.setMessage(this.getString(R.string.challenge_leave_text, challenge?.name ?: ""))
|
||||
alert.addButton(R.string.yes, true) { dialog, _ ->
|
||||
dialog.dismiss()
|
||||
challenge.notNull { challenge ->
|
||||
challenge?.let { challenge ->
|
||||
showRemoveTasksDialog(Consumer { keepTasks ->
|
||||
challengeRepository.leaveChallenge(challenge, keepTasks).subscribe(Consumer {}, RxErrorHandler.handleEmptyError())
|
||||
})
|
||||
|
|
@ -371,7 +370,7 @@ class ChallengeDetailFragment: BaseMainFragment() {
|
|||
}
|
||||
|
||||
private fun showRemoveTasksDialog(callback: Consumer<String>) {
|
||||
context.notNull {
|
||||
context?.let {
|
||||
val alert = HabiticaAlertDialog(it)
|
||||
alert.setTitle(this.getString(R.string.challenge_remove_tasks_title))
|
||||
alert.setMessage(this.getString(R.string.challenge_remove_tasks_text))
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ import com.habitrpg.android.habitica.components.UserComponent
|
|||
import com.habitrpg.android.habitica.data.ChallengeRepository
|
||||
import com.habitrpg.android.habitica.data.UserRepository
|
||||
import com.habitrpg.android.habitica.extensions.inflate
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.MainNavigationController
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.models.social.Challenge
|
||||
|
|
@ -76,7 +75,7 @@ class ChallengeListFragment : BaseFragment(), androidx.swiperefreshlayout.widget
|
|||
|
||||
challengeAdapter = ChallengesListViewAdapter(null, true, viewUserChallengesOnly, userId)
|
||||
challengeAdapter?.getOpenDetailFragmentFlowable()?.subscribe(Consumer { openDetailFragment(it) }, RxErrorHandler.handleEmptyError())
|
||||
.notNull { compositeSubscription.add(it) }
|
||||
?.let { compositeSubscription.add(it) }
|
||||
|
||||
swipeRefreshLayout?.setOnRefreshListener(this)
|
||||
|
||||
|
|
@ -155,7 +154,7 @@ class ChallengeListFragment : BaseFragment(), androidx.swiperefreshlayout.widget
|
|||
}
|
||||
|
||||
internal fun showFilterDialog() {
|
||||
activity.notNull {
|
||||
activity?.let {
|
||||
ChallengeFilterDialogHolder.showDialog(it,
|
||||
challenges ?: emptyList(),
|
||||
filterOptions, object : Action1<ChallengeFilterOptions> {
|
||||
|
|
|
|||
|
|
@ -14,7 +14,6 @@ import com.habitrpg.android.habitica.R
|
|||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
import com.habitrpg.android.habitica.data.InventoryRepository
|
||||
import com.habitrpg.android.habitica.extensions.inflate
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.MainNavigationController
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.models.inventory.QuestContent
|
||||
|
|
@ -229,19 +228,19 @@ class PartyDetailFragment : BaseFragment() {
|
|||
}
|
||||
|
||||
private fun onPartyInviteAccepted() {
|
||||
viewModel?.getUserData()?.value?.invitations?.party?.id.notNull {
|
||||
viewModel?.getUserData()?.value?.invitations?.party?.id?.let {
|
||||
viewModel?.joinGroup(it)
|
||||
}
|
||||
}
|
||||
|
||||
private fun onPartyInviteRejected() {
|
||||
viewModel?.getUserData()?.value?.invitations?.party?.id.notNull {
|
||||
viewModel?.getUserData()?.value?.invitations?.party?.id?.let {
|
||||
viewModel?.rejectGroupInvite(it)
|
||||
}
|
||||
}
|
||||
|
||||
private fun questDetailButtonClicked() {
|
||||
viewModel?.getGroupData()?.value.notNull { party ->
|
||||
viewModel?.getGroupData()?.value?.let { party ->
|
||||
MainNavigationController.navigate(PartyFragmentDirections.openQuestDetail(party.id, party.quest?.key ?: ""))
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ import com.habitrpg.android.habitica.R
|
|||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
import com.habitrpg.android.habitica.data.SocialRepository
|
||||
import com.habitrpg.android.habitica.extensions.inflate
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.ui.activities.FullProfileActivity
|
||||
import com.habitrpg.android.habitica.ui.adapter.social.PartyMemberRecyclerViewAdapter
|
||||
|
|
@ -45,7 +44,7 @@ class PartyMemberListFragment : BaseFragment() {
|
|||
|
||||
recyclerView?.layoutManager = androidx.recyclerview.widget.LinearLayoutManager(context)
|
||||
adapter = PartyMemberRecyclerViewAdapter(null, true)
|
||||
adapter?.getUserClickedEvents()?.subscribe(Consumer { userId -> FullProfileActivity.open(userId) }, RxErrorHandler.handleEmptyError()).notNull { compositeSubscription.add(it) }
|
||||
adapter?.getUserClickedEvents()?.subscribe(Consumer { userId -> FullProfileActivity.open(userId) }, RxErrorHandler.handleEmptyError())?.let { compositeSubscription.add(it) }
|
||||
recyclerView?.adapter = adapter
|
||||
recyclerView?.itemAnimator = SafeDefaultItemAnimator()
|
||||
|
||||
|
|
|
|||
|
|
@ -2,14 +2,13 @@ package com.habitrpg.android.habitica.ui.fragments.tasks
|
|||
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.models.shops.ShopItem
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
|
|
@ -40,7 +39,7 @@ class RewardsRecyclerviewFragment : TaskRecyclerViewFragment() {
|
|||
}
|
||||
|
||||
view.post { setGridSpanCount(view.width) }
|
||||
context.notNull {
|
||||
context?.let {
|
||||
recyclerView.setBackgroundColor(ContextCompat.getColor(it, R.color.white))
|
||||
}
|
||||
recyclerView.itemAnimator = SafeDefaultItemAnimator()
|
||||
|
|
|
|||
|
|
@ -17,12 +17,12 @@ import com.habitrpg.android.habitica.data.ApiClient
|
|||
import com.habitrpg.android.habitica.data.InventoryRepository
|
||||
import com.habitrpg.android.habitica.data.TaskRepository
|
||||
import com.habitrpg.android.habitica.data.UserRepository
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.extensions.subscribeWithErrorHandler
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.helpers.SoundManager
|
||||
import com.habitrpg.android.habitica.helpers.TaskFilterHelper
|
||||
import com.habitrpg.android.habitica.models.responses.TaskDirection
|
||||
import com.habitrpg.android.habitica.models.responses.TaskScoringResult
|
||||
import com.habitrpg.android.habitica.models.tasks.Task
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import com.habitrpg.android.habitica.modules.AppModule
|
||||
|
|
@ -72,44 +72,16 @@ open class TaskRecyclerViewFragment : BaseFragment(), androidx.swiperefreshlayou
|
|||
private fun setInnerAdapter() {
|
||||
val adapter: androidx.recyclerview.widget.RecyclerView.Adapter<*>? = when (this.classType) {
|
||||
Task.TYPE_HABIT -> {
|
||||
val adapter = HabitsRecyclerViewAdapter(null, true, R.layout.habit_item_card, taskFilterHelper)
|
||||
compositeSubscription.add(adapter.taskScoreEvents
|
||||
.doOnNext { soundManager.loadAndPlayAudio(if (it.second == TaskDirection.UP) SoundManager.SoundPlusHabit else SoundManager.SoundMinusHabit) }
|
||||
.flatMap { taskRepository.taskChecked(user, it.first, it.second == TaskDirection.UP, false) { result -> (activity as? MainActivity)?.displayTaskScoringResponse(result)} }
|
||||
.subscribeWithErrorHandler(Consumer {}))
|
||||
adapter
|
||||
HabitsRecyclerViewAdapter(null, true, R.layout.habit_item_card, taskFilterHelper)
|
||||
}
|
||||
Task.TYPE_DAILY -> {
|
||||
val adapter = DailiesRecyclerViewHolder(null, true, R.layout.daily_item_card, taskFilterHelper)
|
||||
compositeSubscription.add(adapter.taskScoreEvents
|
||||
.doOnNext { soundManager.loadAndPlayAudio(SoundManager.SoundDaily) }
|
||||
.flatMap { taskRepository.taskChecked(user, it.first, it.second == TaskDirection.UP, false){ result -> (activity as? MainActivity)?.displayTaskScoringResponse(result)} }
|
||||
.subscribeWithErrorHandler(Consumer {}))
|
||||
adapter
|
||||
DailiesRecyclerViewHolder(null, true, R.layout.daily_item_card, taskFilterHelper)
|
||||
}
|
||||
Task.TYPE_TODO -> {
|
||||
val adapter = TodosRecyclerViewAdapter(null, true, R.layout.todo_item_card, taskFilterHelper)
|
||||
compositeSubscription.add(adapter.taskScoreEvents
|
||||
.doOnNext { soundManager.loadAndPlayAudio(SoundManager.SoundTodo) }
|
||||
.flatMap { taskRepository.taskChecked(user, it.first, it.second == TaskDirection.UP, false){ result -> (activity as? MainActivity)?.displayTaskScoringResponse(result)} }
|
||||
.subscribeWithErrorHandler(Consumer {}))
|
||||
adapter
|
||||
TodosRecyclerViewAdapter(null, true, R.layout.todo_item_card, taskFilterHelper)
|
||||
}
|
||||
Task.TYPE_REWARD -> {
|
||||
val adapter = RewardsRecyclerViewAdapter(null, R.layout.reward_item_card, user)
|
||||
compositeSubscription.add(adapter.taskScoreEvents
|
||||
.doOnNext { soundManager.loadAndPlayAudio(SoundManager.SoundTodo) }
|
||||
.flatMap { taskRepository.taskChecked(user, it.first, it.second == TaskDirection.UP, false) { _ ->
|
||||
(activity as? MainActivity)?.let { activity ->
|
||||
HabiticaSnackbar.showSnackbar(activity.snackbarContainer, null, getString(R.string.notification_purchase_reward),
|
||||
BitmapDrawable(resources, HabiticaIconsHelper.imageOfGold()),
|
||||
ContextCompat.getColor(activity, R.color.yellow_10),
|
||||
"-" + it.first.value.toInt(),
|
||||
HabiticaSnackbar.SnackbarDisplayType.DROP)
|
||||
}
|
||||
} }
|
||||
.subscribeWithErrorHandler(Consumer {}))
|
||||
adapter
|
||||
RewardsRecyclerViewAdapter(null, R.layout.reward_item_card, user)
|
||||
}
|
||||
else -> null
|
||||
}
|
||||
|
|
@ -121,13 +93,6 @@ open class TaskRecyclerViewFragment : BaseFragment(), androidx.swiperefreshlayou
|
|||
recyclerAdapter = adapter as? TaskRecyclerViewAdapter
|
||||
recyclerView.adapter = adapter
|
||||
|
||||
recyclerAdapter?.errorButtonEvents?.subscribe(Consumer {
|
||||
taskRepository.syncErroredTasks().subscribe(Consumer {}, RxErrorHandler.handleEmptyError())
|
||||
}, RxErrorHandler.handleEmptyError()).notNull { compositeSubscription.add(it) }
|
||||
recyclerAdapter?.taskOpenEvents?.subscribeWithErrorHandler(Consumer {
|
||||
openTaskForm(it)
|
||||
})
|
||||
|
||||
if (this.classType != null) {
|
||||
compositeSubscription.add(taskRepository.getTasks(this.classType ?: "", userID).firstElement().subscribe(Consumer {
|
||||
this.recyclerAdapter?.updateUnfilteredData(it)
|
||||
|
|
@ -136,6 +101,31 @@ open class TaskRecyclerViewFragment : BaseFragment(), androidx.swiperefreshlayou
|
|||
}
|
||||
}
|
||||
|
||||
private fun handleTaskResult(result: TaskScoringResult, value: Int) {
|
||||
if (classType == Task.TYPE_REWARD) {
|
||||
(activity as? MainActivity)?.let { activity ->
|
||||
HabiticaSnackbar.showSnackbar(activity.snackbarContainer, null, getString(R.string.notification_purchase_reward),
|
||||
BitmapDrawable(resources, HabiticaIconsHelper.imageOfGold()),
|
||||
ContextCompat.getColor(activity, R.color.yellow_10),
|
||||
"-$value",
|
||||
HabiticaSnackbar.SnackbarDisplayType.DROP)
|
||||
}
|
||||
} else {
|
||||
(activity as? MainActivity)?.displayTaskScoringResponse(result)
|
||||
}
|
||||
}
|
||||
|
||||
private fun playSound(direction: TaskDirection) {
|
||||
val soundName = when (classType) {
|
||||
Task.TYPE_HABIT -> if (direction == TaskDirection.UP) SoundManager.SoundPlusHabit else SoundManager.SoundMinusHabit
|
||||
Task.TYPE_DAILY -> SoundManager.SoundDaily
|
||||
Task.TYPE_TODO -> SoundManager.SoundTodo
|
||||
Task.TYPE_REWARD -> SoundManager.SoundReward
|
||||
else -> null
|
||||
}
|
||||
soundName?.let { soundManager.loadAndPlayAudio(it) }
|
||||
}
|
||||
|
||||
private fun allowReordering() {
|
||||
val itemTouchHelper = mItemTouchCallback?.let { ItemTouchHelper(it) }
|
||||
itemTouchHelper?.attachToRecyclerView(recyclerView)
|
||||
|
|
@ -241,6 +231,23 @@ open class TaskRecyclerViewFragment : BaseFragment(), androidx.swiperefreshlayou
|
|||
if (recyclerView.adapter == null) {
|
||||
this.setInnerAdapter()
|
||||
}
|
||||
if (this.classType != null) {
|
||||
recyclerAdapter?.errorButtonEvents
|
||||
recyclerAdapter?.errorButtonEvents?.subscribe(Consumer {
|
||||
taskRepository.syncErroredTasks().subscribe(Consumer {}, RxErrorHandler.handleEmptyError())
|
||||
}, RxErrorHandler.handleEmptyError())?.let { compositeSubscription.add(it) }
|
||||
recyclerAdapter?.taskOpenEvents?.subscribeWithErrorHandler(Consumer {
|
||||
openTaskForm(it)
|
||||
})?.let { compositeSubscription.add(it) }
|
||||
recyclerAdapter?.taskScoreEvents
|
||||
?.doOnNext { playSound(it.second) }
|
||||
?.flatMap { taskRepository.taskChecked(user, it.first, it.second == TaskDirection.UP, false) { result ->
|
||||
handleTaskResult(result, it.first.value.toInt())
|
||||
}}?.subscribeWithErrorHandler(Consumer {})?.let { compositeSubscription.add(it) }
|
||||
recyclerAdapter?.checklistItemScoreEvents
|
||||
?.flatMap { taskRepository.scoreChecklistItem(it.first.id ?: "", it.second.id ?: "")
|
||||
}?.subscribeWithErrorHandler(Consumer {})?.let { compositeSubscription.add(it) }
|
||||
}
|
||||
|
||||
val bottomPadding = (recyclerView.paddingBottom + TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 60f, resources.displayMetrics)).toInt()
|
||||
recyclerView.setPadding(0, 0, 0, bottomPadding)
|
||||
|
|
@ -308,7 +315,7 @@ open class TaskRecyclerViewFragment : BaseFragment(), androidx.swiperefreshlayou
|
|||
}
|
||||
}
|
||||
|
||||
fun openTaskForm(task: Task) {
|
||||
private fun openTaskForm(task: Task) {
|
||||
if (TasksFragment.displayingTaskForm) {
|
||||
return
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import android.view.View
|
|||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.models.members.Member
|
||||
import com.habitrpg.android.habitica.models.user.Stats
|
||||
import com.habitrpg.android.habitica.ui.AvatarView
|
||||
|
|
@ -38,7 +37,7 @@ class GroupMemberViewHolder(itemView: View) : androidx.recyclerview.widget.Recyc
|
|||
fun bind(user: Member, leaderID: String?) {
|
||||
avatarView.setAvatar(user)
|
||||
|
||||
user.stats.notNull {
|
||||
user.stats?.let {
|
||||
healthBar.set(it.hp ?: 0.0, it.maxHealth?.toDouble() ?: 50.0)
|
||||
healthTextView.text = "${it.hp?.toInt()} / ${it.maxHealth?.toInt()}"
|
||||
experienceBar.set(it.exp ?: 0.0, it.toNextLevel?.toDouble() ?: 0.0)
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import android.content.Context
|
|||
import android.view.View
|
||||
import android.widget.*
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.models.responses.TaskDirection
|
||||
import com.habitrpg.android.habitica.models.tasks.Task
|
||||
|
|
@ -134,9 +133,9 @@ abstract class BaseTaskViewHolder constructor(itemView: View, var scoreTaskFunc:
|
|||
notesTextView?.text = data.parsedNotes
|
||||
} else {
|
||||
notesTextView?.text = data.notes
|
||||
data.notes.notNull {notes ->
|
||||
data.notes?.let {notes ->
|
||||
if (notes.isEmpty()) {
|
||||
return@notNull
|
||||
return@let
|
||||
}
|
||||
Single.just(notes)
|
||||
.map { MarkdownParser.parseMarkdown(it) }
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@ import android.widget.TextView
|
|||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.events.commands.ChecklistCheckedCommand
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.models.responses.TaskDirection
|
||||
import com.habitrpg.android.habitica.models.tasks.ChecklistItem
|
||||
|
|
@ -25,9 +24,8 @@ import io.reactivex.Observable
|
|||
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.functions.Consumer
|
||||
import io.reactivex.schedulers.Schedulers
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
|
||||
abstract class ChecklistedViewHolder(itemView: View, scoreTaskFunc: ((Task, TaskDirection) -> Unit), openTaskFunc: ((Task) -> Unit)) : BaseTaskViewHolder(itemView, scoreTaskFunc, openTaskFunc), CompoundButton.OnCheckedChangeListener {
|
||||
abstract class ChecklistedViewHolder(itemView: View, scoreTaskFunc: ((Task, TaskDirection) -> Unit), var scoreChecklistItemFunc: ((Task, ChecklistItem) -> Unit), openTaskFunc: ((Task) -> Unit)) : BaseTaskViewHolder(itemView, scoreTaskFunc, openTaskFunc), CompoundButton.OnCheckedChangeListener {
|
||||
|
||||
private val checkboxHolder: ViewGroup by bindView(itemView, R.id.checkBoxHolder)
|
||||
internal val checkbox: CheckBox by bindView(itemView, R.id.checkBox)
|
||||
|
|
@ -94,10 +92,7 @@ abstract class ChecklistedViewHolder(itemView: View, scoreTaskFunc: ((Task, Task
|
|||
}
|
||||
checkbox?.isChecked = item.completed
|
||||
checkbox?.setOnCheckedChangeListener { _, _ ->
|
||||
val event = ChecklistCheckedCommand()
|
||||
event.task = task
|
||||
event.item = item
|
||||
EventBus.getDefault().post(event)
|
||||
task?.let { scoreChecklistItemFunc(it, item) }
|
||||
}
|
||||
val checkboxHolder = itemView?.findViewById<View>(R.id.checkBoxHolder) as? ViewGroup
|
||||
expandCheckboxTouchArea(checkboxHolder, checkbox)
|
||||
|
|
|
|||
|
|
@ -4,10 +4,11 @@ import android.view.View
|
|||
import android.widget.TextView
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.models.responses.TaskDirection
|
||||
import com.habitrpg.android.habitica.models.tasks.ChecklistItem
|
||||
import com.habitrpg.android.habitica.models.tasks.Task
|
||||
import com.habitrpg.android.habitica.ui.helpers.bindView
|
||||
|
||||
class DailyViewHolder(itemView: View, scoreTaskFunc: ((Task, TaskDirection) -> Unit), openTaskFunc: ((Task) -> Unit)) : ChecklistedViewHolder(itemView, scoreTaskFunc, openTaskFunc) {
|
||||
class DailyViewHolder(itemView: View, scoreTaskFunc: ((Task, TaskDirection) -> Unit), scoreChecklistItemFunc: ((Task, ChecklistItem) -> Unit), openTaskFunc: ((Task) -> Unit)) : ChecklistedViewHolder(itemView, scoreTaskFunc, scoreChecklistItemFunc, openTaskFunc) {
|
||||
|
||||
private val streakTextView: TextView by bindView(itemView, R.id.streakTextView)
|
||||
|
||||
|
|
|
|||
|
|
@ -2,12 +2,13 @@ package com.habitrpg.android.habitica.ui.viewHolders.tasks
|
|||
|
||||
import android.view.View
|
||||
import com.habitrpg.android.habitica.models.responses.TaskDirection
|
||||
import com.habitrpg.android.habitica.models.tasks.ChecklistItem
|
||||
|
||||
import com.habitrpg.android.habitica.models.tasks.Task
|
||||
|
||||
import java.text.DateFormat
|
||||
|
||||
class TodoViewHolder(itemView: View, scoreTaskFunc: ((Task, TaskDirection) -> Unit), openTaskFunc: ((Task) -> Unit)) : ChecklistedViewHolder(itemView, scoreTaskFunc, openTaskFunc) {
|
||||
class TodoViewHolder(itemView: View, scoreTaskFunc: ((Task, TaskDirection) -> Unit), scoreChecklistItemFunc: ((Task, ChecklistItem) -> Unit), openTaskFunc: ((Task) -> Unit)) : ChecklistedViewHolder(itemView, scoreTaskFunc, scoreChecklistItemFunc, openTaskFunc) {
|
||||
|
||||
private val dateFormatter: DateFormat = android.text.format.DateFormat.getDateFormat(context)
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@ import androidx.lifecycle.ViewModel
|
|||
import com.habitrpg.android.habitica.HabiticaBaseApplication
|
||||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
import com.habitrpg.android.habitica.data.UserRepository
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||
|
|
@ -25,7 +24,7 @@ abstract class BaseViewModel: ViewModel() {
|
|||
}
|
||||
|
||||
init {
|
||||
HabiticaBaseApplication.userComponent.notNull { inject(it) }
|
||||
HabiticaBaseApplication.userComponent?.let { inject(it) }
|
||||
}
|
||||
|
||||
abstract fun inject(component: UserComponent)
|
||||
|
|
|
|||
|
|
@ -5,8 +5,10 @@ import androidx.lifecycle.LiveData
|
|||
import androidx.lifecycle.MutableLiveData
|
||||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
import com.habitrpg.android.habitica.data.SocialRepository
|
||||
import com.habitrpg.android.habitica.extensions.*
|
||||
import com.habitrpg.android.habitica.extensions.Optional
|
||||
import com.habitrpg.android.habitica.extensions.asOptional
|
||||
import com.habitrpg.android.habitica.extensions.filterMapEmpty
|
||||
import com.habitrpg.android.habitica.extensions.filterOptionalDoOnEmpty
|
||||
import com.habitrpg.android.habitica.helpers.NotificationsManager
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.models.members.Member
|
||||
|
|
@ -179,7 +181,7 @@ open class GroupViewModel : BaseViewModel() {
|
|||
}
|
||||
|
||||
fun markMessagesSeen() {
|
||||
groupIDSubject.value?.value.notNull {
|
||||
groupIDSubject.value?.value?.let {
|
||||
if (groupViewType != GroupViewType.TAVERN && it.isNotEmpty() && gotNewMessages) {
|
||||
socialRepository.markMessagesSeen(it)
|
||||
}
|
||||
|
|
@ -195,7 +197,7 @@ open class GroupViewModel : BaseViewModel() {
|
|||
}
|
||||
|
||||
fun postGroupChat(chatText: String, onComplete: () -> Unit?) {
|
||||
groupIDSubject.value?.value.notNull {
|
||||
groupIDSubject.value?.value?.let {
|
||||
socialRepository.postGroupChat(it, chatText).subscribe(Consumer {
|
||||
onComplete()
|
||||
}, RxErrorHandler.handleEmptyError())
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import androidx.lifecycle.LiveData
|
|||
import androidx.lifecycle.MutableLiveData
|
||||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
import com.habitrpg.android.habitica.extensions.filterOptionalDoOnEmpty
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.models.members.Member
|
||||
import io.reactivex.BackpressureStrategy
|
||||
|
|
@ -44,13 +43,13 @@ class PartyViewModel: GroupViewModel() {
|
|||
}
|
||||
|
||||
fun acceptQuest() {
|
||||
groupIDSubject.value?.value.notNull {
|
||||
groupIDSubject.value?.value?.let {
|
||||
disposable.add(socialRepository.acceptQuest(null, it).subscribe(Consumer { }, RxErrorHandler.handleEmptyError()))
|
||||
}
|
||||
}
|
||||
|
||||
fun rejectQuest() {
|
||||
groupIDSubject.value?.value.notNull {
|
||||
groupIDSubject.value?.value?.let {
|
||||
disposable.add(socialRepository.rejectQuest(null, it).subscribe(Consumer { }, RxErrorHandler.handleEmptyError()))
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,15 +3,14 @@ package com.habitrpg.android.habitica.ui.views
|
|||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import androidx.core.content.ContextCompat
|
||||
import android.util.AttributeSet
|
||||
import android.view.View
|
||||
import android.widget.ImageView
|
||||
import android.widget.LinearLayout
|
||||
import android.widget.TextView
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.content.edit
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.extensions.notNull
|
||||
import com.habitrpg.android.habitica.ui.helpers.bindView
|
||||
|
||||
class CollapsibleSectionView(context: Context?, attrs: AttributeSet?) : LinearLayout(context, attrs) {
|
||||
|
|
@ -106,7 +105,7 @@ class CollapsibleSectionView(context: Context?, attrs: AttributeSet?) : LinearLa
|
|||
|
||||
init {
|
||||
View.inflate(context, R.layout.view_collapsible_section, this)
|
||||
context.notNull {
|
||||
context?.let {
|
||||
caretColor = ContextCompat.getColor(it, R.color.black_50_alpha)
|
||||
}
|
||||
orientation = VERTICAL
|
||||
|
|
|
|||
Loading…
Reference in a new issue