diff --git a/Habitica/build.gradle b/Habitica/build.gradle
index def42c38b..81f482903 100644
--- a/Habitica/build.gradle
+++ b/Habitica/build.gradle
@@ -158,6 +158,11 @@ android {
lintOptions {
abortOnError false
}
+
+ viewBinding {
+ enabled true
+ }
+
signingConfigs {
release
}
diff --git a/Habitica/res/layout/activity_full_profile.xml b/Habitica/res/layout/activity_full_profile.xml
index 98b8c25c6..f6d00e853 100644
--- a/Habitica/res/layout/activity_full_profile.xml
+++ b/Habitica/res/layout/activity_full_profile.xml
@@ -43,99 +43,11 @@
android:layout_height="wrap_content"
android:orientation="vertical">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_height="wrap_content" />
diff --git a/Habitica/res/layout/activity_main.xml b/Habitica/res/layout/activity_main.xml
index c73c89f99..d8006bbde 100644
--- a/Habitica/res/layout/activity_main.xml
+++ b/Habitica/res/layout/activity_main.xml
@@ -139,7 +139,7 @@
the container. -->
diff --git a/Habitica/res/layout/fragment_subscription.xml b/Habitica/res/layout/fragment_subscription.xml
index 7dfc0e5ec..e55d8cea5 100644
--- a/Habitica/res/layout/fragment_subscription.xml
+++ b/Habitica/res/layout/fragment_subscription.xml
@@ -88,7 +88,7 @@
android:layout_marginRight="26dp"/>
@@ -104,13 +104,13 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:srcCompat="@drawable/ic_keyboard_arrow_down_black_24dp"
- android:id="@+id/subscribe.listitem1.expand"
+ android:id="@+id/subscribe_listitem1_expand"
android:layout_gravity="end"/>
@@ -133,12 +133,12 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:srcCompat="@drawable/ic_keyboard_arrow_down_black_24dp"
- android:id="@+id/subscribe.listitem2.expand"
+ android:id="@+id/subscribe_listitem2_expand"
android:layout_gravity="end"/>
@@ -161,12 +161,12 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:srcCompat="@drawable/ic_keyboard_arrow_down_black_24dp"
- android:id="@+id/subscribe.listitem3.expand"
+ android:id="@+id/subscribe_listitem3_expand"
android:layout_gravity="end"/>
drawable = BitmapDrawable(context.resources, HabiticaIconsHelper.imageOfWarriorDarkBg())
@@ -85,7 +75,7 @@ class AvatarWithBarsViewModel(private val context: Context, view: View, userRepo
Stats.HEALER -> drawable = BitmapDrawable(context.resources, HabiticaIconsHelper.imageOfHealerDarkBg())
}
drawable?.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight)
- lvlText.setCompoundDrawables(drawable, null, null, null)
+ binding.lvlTv.setCompoundDrawables(drawable, null, null, null)
}
setHpBarData(stats.hp?.toFloat() ?: 0.toFloat(), stats.maxHealth ?: 0)
@@ -93,19 +83,19 @@ class AvatarWithBarsViewModel(private val context: Context, view: View, userRepo
setMpBarData(stats.mp?.toFloat() ?: 0.toFloat(), stats.maxMP ?: 0)
if (!stats.isBuffed) {
- buffImageView.visibility = View.GONE
+ binding.buffImageView.visibility = View.GONE
}
- currencyView.gold = stats.gp ?: 0.0
+ binding.currencyView.gold = stats.gp ?: 0.0
if (user is User) {
- currencyView.hourglasses = user.getHourglassCount()?.toDouble() ?: 0.0
- currencyView.gems = user.gemCount.toDouble()
+ binding.currencyView.hourglasses = user.hourglassCount.toDouble()
+ binding.currencyView.gems = user.gemCount.toDouble()
}
- currencyView.setOnClickListener {
+ binding.currencyView.setOnClickListener {
MainNavigationController.navigate(R.id.gemPurchaseActivity, bundleOf(Pair("openSubscription", false)))
}
- avatarView.setOnClickListener {
+ binding.avatarView.setOnClickListener {
MainNavigationController.navigate(R.id.avatarOverviewFragment)
}
}
@@ -114,34 +104,34 @@ class AvatarWithBarsViewModel(private val context: Context, view: View, userRepo
if (valueMax != 0) {
cachedMaxHealth = valueMax
}
- hpBar.set(HealthFormatter.format(value.toDouble()), cachedMaxHealth.toDouble())
+ binding.hpBar.set(HealthFormatter.format(value.toDouble()), cachedMaxHealth.toDouble())
}
private fun setXpBarData(value: Float, valueMax: Int) {
if (valueMax != 0) {
cachedMaxExp = valueMax
}
- xpBar.set(floor(value.toDouble()), cachedMaxExp.toDouble())
+ binding.xpBar.set(floor(value.toDouble()), cachedMaxExp.toDouble())
}
private fun setMpBarData(value: Float, valueMax: Int) {
if (valueMax != 0) {
cachedMaxMana = valueMax
}
- mpBar.set(floor(value.toDouble()), cachedMaxMana.toDouble())
+ binding.mpBar.set(floor(value.toDouble()), cachedMaxMana.toDouble())
}
@Subscribe
fun onEvent(gemsEvent: BoughtGemsEvent) {
var gems = userObject?.gemCount ?: 0
gems += gemsEvent.NewGemsToAdd
- currencyView.gems = gems.toDouble()
+ binding.currencyView.gems = gems.toDouble()
}
fun valueBarLabelsToBlack() {
- hpBar.setLightBackground(true)
- xpBar.setLightBackground(true)
- mpBar.setLightBackground(true)
+ binding.hpBar.setLightBackground(true)
+ binding.xpBar.setLightBackground(true)
+ binding.mpBar.setLightBackground(true)
}
companion object {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BaseActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BaseActivity.kt
index 8133d8f76..b6e09c928 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BaseActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BaseActivity.kt
@@ -1,8 +1,11 @@
package com.habitrpg.android.habitica.ui.activities
+import android.content.Context
import android.content.SharedPreferences
import android.content.res.Configuration
import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.app.AppCompatDelegate
import androidx.appcompat.widget.Toolbar
@@ -29,6 +32,10 @@ abstract class BaseActivity : AppCompatActivity() {
protected abstract fun getLayoutResId(): Int
+ open fun getContentView(): View {
+ return (getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater).inflate(getLayoutResId(), null)
+ }
+
protected var compositeSubscription = CompositeDisposable()
private val habiticaApplication: HabiticaApplication
@@ -49,11 +56,11 @@ abstract class BaseActivity : AppCompatActivity() {
resources.updateConfiguration(configuration, resources.displayMetrics)
loadTheme(sharedPreferences)
- delegate.setLocalNightMode(AppCompatDelegate.MODE_NIGHT_NO)
+ delegate.localNightMode = AppCompatDelegate.MODE_NIGHT_NO
super.onCreate(savedInstanceState)
habiticaApplication
injectActivity(HabiticaBaseApplication.userComponent)
- setContentView(getLayoutResId())
+ setContentView(getContentView())
compositeSubscription = CompositeDisposable()
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.kt
index 68291c144..37d32e598 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.kt
@@ -19,6 +19,8 @@ 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.data.UserRepository
+import com.habitrpg.android.habitica.databinding.ActivityFullProfileBinding
import com.habitrpg.android.habitica.helpers.MainNavigationController
import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.android.habitica.helpers.UserStatComputer
@@ -54,18 +56,18 @@ class FullProfileActivity : BaseActivity() {
lateinit var apiClient: ApiClient
@Inject
lateinit var socialRepository: SocialRepository
+ @Inject
+ lateinit var userRepository: UserRepository
private val toolbar: Toolbar by bindView(R.id.toolbar)
private val profileImage: SimpleDraweeView by bindView(R.id.profile_image)
private val blurbTextView: TextView by bindView(R.id.profile_blurb)
- private val avatarView: AvatarView by bindView(R.id.avatarView)
private val attributesCardView: androidx.cardview.widget.CardView by bindView(R.id.profile_attributes_card)
private val attributesTableLayout: TableLayout by bindView(R.id.attributes_table)
private val attributesCollapseIcon: AppCompatImageView by bindView(R.id.attributes_collapse_icon)
private val equipmentTableLayout: TableLayout by bindView(R.id.equipment_table)
private val costumeTableLayout: TableLayout by bindView(R.id.costume_table)
private val costumeCard: androidx.cardview.widget.CardView by bindView(R.id.profile_costume_card)
- private val avatarWithStatsView: View by bindView(R.id.avatar_with_bars)
private val scrollView: NestedScrollView by bindView(R.id.fullprofile_scrollview)
private val petsFoundCount: TextView by bindView(R.id.profile_pets_found_count)
private val mountsTamedCount: TextView by bindView(R.id.profile_mounts_tamed_count)
@@ -84,7 +86,6 @@ class FullProfileActivity : BaseActivity() {
private var userID = ""
private var username: String? = null
private var userDisplayName: String? = null
- private var avatarWithBars: AvatarWithBarsViewModel? = null
private var attributeStrSum = 0f
private var attributeIntSum = 0f
private var attributeConSum = 0f
@@ -92,6 +93,8 @@ class FullProfileActivity : BaseActivity() {
private var attributeDetailsHidden = true
private val attributeRows = ArrayList()
private val dateFormatter = SimpleDateFormat.getDateInstance()
+ private var avatarWithBars: AvatarWithBarsViewModel? = null
+ lateinit private var binding: ActivityFullProfileBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -105,16 +108,14 @@ class FullProfileActivity : BaseActivity() {
setTitle(R.string.profile_loading_data)
compositeSubscription.add(socialRepository.getMember(this.userID).subscribe(Consumer { this.updateView(it) }, RxErrorHandler.handleEmptyError()))
-
+ avatarWithBars = AvatarWithBarsViewModel(this, binding.avatarWithBars)
avatarWithBars?.valueBarLabelsToBlack()
- avatarWithStatsView.setBackgroundColor(ContextCompat.getColor(this, R.color.transparent))
+ binding.avatarWithBars.root.setBackgroundColor(ContextCompat.getColor(this, R.color.transparent))
attributeRows.clear()
attributesCardView.setOnClickListener { toggleAttributeDetails() }
- avatarWithBars = AvatarWithBarsViewModel(this, avatarWithStatsView)
-
sendMessageButton.setOnClickListener { showSendMessageToUserDialog() }
giftGemsButton.setOnClickListener { MainNavigationController.navigate(R.id.giftGemsActivity, bundleOf(Pair("userID", userID), Pair("username", null))) }
giftSubscriptionButton.setOnClickListener { MainNavigationController.navigate(R.id.giftSubscriptionActivity, bundleOf(Pair("userID", userID), Pair("username", null))) }
@@ -213,7 +214,6 @@ class FullProfileActivity : BaseActivity() {
user.authentication?.timestamps?.lastLoggedIn?.let { lastLoginView.text = dateFormatter.format(it) }
totalCheckinsView.text = user.loginIncentives.toString()
- avatarView.setAvatar(user)
avatarWithBars?.updateData(user)
compositeSubscription.add(loadItemDataByOutfit(user.equipped).subscribe(Consumer { gear -> this.gotGear(gear, user) }, RxErrorHandler.handleEmptyError()))
@@ -465,6 +465,11 @@ class FullProfileActivity : BaseActivity() {
return R.layout.activity_full_profile
}
+ override fun getContentView(): View {
+ binding = ActivityFullProfileBinding.inflate(layoutInflater)
+ return binding.root
+ }
+
override fun injectActivity(component: UserComponent?) {
component?.inject(this)
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt
index 2bfc1ee94..110acce2d 100755
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.kt
@@ -19,16 +19,12 @@ import android.view.*
import android.widget.FrameLayout
import android.widget.TextView
import androidx.appcompat.app.ActionBarDrawerToggle
-import androidx.appcompat.widget.Toolbar
import androidx.core.content.ContextCompat
import androidx.core.content.FileProvider
import androidx.core.content.edit
import androidx.lifecycle.ViewModelProviders
import androidx.navigation.findNavController
import com.facebook.drawee.view.SimpleDraweeView
-import com.google.android.material.appbar.AppBarLayout
-import com.google.android.material.appbar.CollapsingToolbarLayout
-import com.google.android.material.tabs.TabLayout
import com.google.firebase.analytics.FirebaseAnalytics
import com.google.firebase.perf.FirebasePerformance
import com.habitrpg.android.habitica.HabiticaBaseApplication
@@ -37,6 +33,7 @@ import com.habitrpg.android.habitica.api.HostConfig
import com.habitrpg.android.habitica.api.MaintenanceApiService
import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.*
+import com.habitrpg.android.habitica.databinding.ActivityMainBinding
import com.habitrpg.android.habitica.events.*
import com.habitrpg.android.habitica.events.commands.FeedCommand
import com.habitrpg.android.habitica.extensions.DateUtils
@@ -60,8 +57,6 @@ import com.habitrpg.android.habitica.ui.AvatarWithBarsViewModel
import com.habitrpg.android.habitica.ui.TutorialView
import com.habitrpg.android.habitica.ui.fragments.NavigationDrawerFragment
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
-import com.habitrpg.android.habitica.ui.helpers.bindOptionalView
-import com.habitrpg.android.habitica.ui.helpers.bindView
import com.habitrpg.android.habitica.ui.viewmodels.NotificationsViewModel
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
@@ -69,7 +64,6 @@ import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar.SnackbarDisplayTy
import com.habitrpg.android.habitica.ui.views.ValueBar
import com.habitrpg.android.habitica.ui.views.dialogs.AchievementDialog
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
-import com.habitrpg.android.habitica.ui.views.navigation.HabiticaBottomNavigationView
import com.habitrpg.android.habitica.ui.views.yesterdailies.YesterdailyDialog
import com.habitrpg.android.habitica.userpicture.BitmapUtils
import com.habitrpg.android.habitica.widget.AvatarStatsWidgetProvider
@@ -121,21 +115,13 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction {
@Inject
internal lateinit var appConfigManager: AppConfigManager
- val snackbarContainer: ViewGroup by bindView(R.id.snackbar_container)
- internal val bottomNavigation: HabiticaBottomNavigationView by bindView(R.id.bottom_navigation)
+ lateinit var binding: ActivityMainBinding
- private val appBar: AppBarLayout by bindView(R.id.appbar)
- internal val toolbar: Toolbar by bindView(R.id.toolbar)
- internal val toolbarAccessoryContainer: FrameLayout by bindView(R.id.toolbar_accessory_container)
- private val toolbarTitleTextView: TextView by bindView(R.id.toolbar_title)
- private val collapsingToolbar: CollapsingToolbarLayout by bindView(R.id.collapsing_toolbar)
- internal val detailTabs: TabLayout? by bindOptionalView(R.id.detail_tabs)
- val avatarWithBars: View by bindView(R.id.avatar_with_bars)
- private val overlayLayout: ViewGroup by bindView(R.id.overlayFrameLayout)
-
- private val connectionIssueTextView: TextView by bindView(R.id.connection_issue_textview)
+ val snackbarContainer: ViewGroup
+ get() = binding.snackbarContainer
var user: User? = null
+
private var avatarInHeader: AvatarWithBarsViewModel? = null
private var notificationsViewModel: NotificationsViewModel? = null
private var faintDialog: HabiticaAlertDialog? = null
@@ -152,29 +138,34 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction {
get() = user?.id ?: ""
val isAppBarExpanded: Boolean
- get() = appBar.height - appBar.bottom == 0
+ get() = binding.appbar.height - binding.appbar.bottom == 0
override fun getLayoutResId(): Int {
return R.layout.activity_main
}
+ override fun getContentView(): View {
+ binding = ActivityMainBinding.inflate(layoutInflater)
+ return binding.root
+ }
+
private var launchTrace: com.google.firebase.perf.metrics.Trace? = null
@SuppressLint("ObsoleteSdkInt")
public override fun onCreate(savedInstanceState: Bundle?) {
launchTrace = FirebasePerformance.getInstance().newTrace("MainActivityLaunch")
launchTrace?.start()
-
super.onCreate(savedInstanceState)
+
if (!HabiticaBaseApplication.checkUserAuthentication(this, hostConfig)) {
return
}
- setupToolbar(toolbar)
+ setupToolbar(binding.toolbar)
- avatarInHeader = AvatarWithBarsViewModel(this, avatarWithBars, userRepository)
+ avatarInHeader = AvatarWithBarsViewModel(this, binding.avatarWithBars, userRepository)
sideAvatarView = AvatarView(this, showBackground = true, showMount = false, showPet = false)
compositeSubscription.add(userRepository.getUser()
@@ -213,10 +204,10 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction {
val navigationController = findNavController(R.id.nav_host_fragment)
navigationController.addOnDestinationChangedListener { _, destination, _ ->
- if (destination.label.isNullOrEmpty() ) {
- toolbarTitleTextView.text = user?.profile?.name
+ if (destination.label.isNullOrEmpty() && user?.isValid == true) {
+ binding.toolbarTitle.text = user?.profile?.name
} else if (user?.isValid == true && user?.profile != null) {
- toolbarTitleTextView.text = destination.label
+ binding.toolbarTitle.text = destination.label
}
drawerFragment?.setSelection(destination.id, null, false)
}
@@ -239,9 +230,9 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction {
}
private fun setupBottomnavigationLayoutListener() {
- bottomNavigation.viewTreeObserver.addOnGlobalLayoutListener {
- if (bottomNavigation.visibility == View.VISIBLE) {
- snackbarContainer.setPadding(0, 0, 0, bottomNavigation.barHeight + 12.dpToPx(this))
+ binding.bottomNavigation.viewTreeObserver.addOnGlobalLayoutListener {
+ if (binding.bottomNavigation.visibility == View.VISIBLE) {
+ snackbarContainer.setPadding(0, 0, 0, binding.bottomNavigation.barHeight + 12.dpToPx(this))
} else {
snackbarContainer.setPadding(0, 0, 0, 0)
}
@@ -530,7 +521,7 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction {
view.setTutorialText(text)
view.onReaction = this
view.setCanBeDeferred(canBeDeferred)
- this.overlayLayout.addView(view)
+ binding.overlayFrameLayout.addView(view)
val additionalData = HashMap()
additionalData["eventLabel"] = step.identifier + "-android"
@@ -546,7 +537,7 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction {
view.setTutorialTexts(texts)
view.onReaction = this
view.setCanBeDeferred(canBeDeferred)
- this.overlayLayout.addView(view)
+ binding.overlayFrameLayout.addView(view)
val additionalData = HashMap()
additionalData["eventLabel"] = step.identifier + "-android"
@@ -561,7 +552,7 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction {
updateData[path] = true
compositeSubscription.add(userRepository.updateUser(user, updateData)
.subscribe(Consumer { }, RxErrorHandler.handleEmptyError()))
- this.overlayLayout.removeView(this.activeTutorialView)
+ binding.overlayFrameLayout.removeView(this.activeTutorialView)
this.removeActiveTutorialView()
val additionalData = HashMap()
@@ -578,7 +569,7 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction {
private fun removeActiveTutorialView() {
if (this.activeTutorialView != null) {
- this.overlayLayout.removeView(this.activeTutorialView)
+ binding.overlayFrameLayout.removeView(this.activeTutorialView)
this.activeTutorialView = null
}
}
@@ -703,11 +694,11 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction {
super.onEvent(event)
} else {
connectionIssueHandler?.removeCallbacksAndMessages(null)
- connectionIssueTextView.visibility = View.VISIBLE
- connectionIssueTextView.text = event.message
+ binding.connectionIssueTextview.visibility = View.VISIBLE
+ binding.connectionIssueTextview.text = event.message
connectionIssueHandler = Handler()
connectionIssueHandler?.postDelayed({
- connectionIssueTextView.visibility = View.GONE
+ binding.connectionIssueTextview.visibility = View.GONE
}, 5000)
}
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.kt
index 060cfc4b4..9712100a9 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.kt
@@ -4,18 +4,16 @@ import android.content.Context
import android.content.res.Resources
import android.view.View
import android.view.ViewGroup
-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.databinding.ItemItemBinding
import com.habitrpg.android.habitica.events.commands.FeedCommand
-import com.habitrpg.android.habitica.extensions.inflate
+import com.habitrpg.android.habitica.extensions.layoutInflater
import com.habitrpg.android.habitica.models.inventory.*
import com.habitrpg.android.habitica.models.user.OwnedItem
import com.habitrpg.android.habitica.models.user.OwnedPet
import com.habitrpg.android.habitica.ui.fragments.inventory.items.ItemRecyclerFragment
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
-import com.habitrpg.android.habitica.ui.helpers.bindView
import com.habitrpg.android.habitica.ui.menu.BottomSheetMenu
import com.habitrpg.android.habitica.ui.menu.BottomSheetMenuItem
import com.habitrpg.android.habitica.ui.views.dialogs.DetailDialog
@@ -29,7 +27,7 @@ import org.greenrobot.eventbus.EventBus
import java.text.SimpleDateFormat
import java.util.*
-class ItemRecyclerAdapter(data: OrderedRealmCollection?, autoUpdate: Boolean) : RealmRecyclerViewAdapter(data, autoUpdate) {
+class ItemRecyclerAdapter(data: OrderedRealmCollection?, autoUpdate: Boolean, val context: Context) : RealmRecyclerViewAdapter(data, autoUpdate) {
var isHatching: Boolean = false
var isFeeding: Boolean = false
@@ -38,7 +36,6 @@ class ItemRecyclerAdapter(data: OrderedRealmCollection?, autoUpdate:
var fragment: ItemRecyclerFragment? = null
private var existingPets: RealmResults? = null
private var ownedPets: Map? = null
- var context: Context? = null
var items: Map? = null
set(value) {
field = value
@@ -66,7 +63,7 @@ class ItemRecyclerAdapter(data: OrderedRealmCollection?, autoUpdate:
val hatchPetEvents = hatchPetSubject.toFlowable(BackpressureStrategy.DROP)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
- return ItemViewHolder(parent.inflate(R.layout.item_item))
+ return ItemViewHolder(ItemItemBinding.inflate(context?.layoutInflater, parent, false))
}
override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
@@ -86,14 +83,10 @@ class ItemRecyclerAdapter(data: OrderedRealmCollection?, autoUpdate:
notifyDataSetChanged()
}
- inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), View.OnClickListener {
+ inner class ItemViewHolder(val binding: ItemItemBinding) : RecyclerView.ViewHolder(binding.root), View.OnClickListener {
var ownedItem: OwnedItem? = null
var item: Item? = null
- private val titleTextView: TextView by bindView(R.id.titleTextView)
- private val ownedTextView: TextView by bindView(R.id.ownedTextView)
- private val imageView: SimpleDraweeView by bindView(R.id.imageView)
-
var resources: Resources = itemView.resources
private val canHatch: Boolean
@@ -114,8 +107,8 @@ class ItemRecyclerAdapter(data: OrderedRealmCollection?, autoUpdate:
fun bind(ownedItem: OwnedItem, item: Item?) {
this.ownedItem = ownedItem
this.item = item
- titleTextView.text = item?.text
- ownedTextView.text = ownedItem.numberOwned.toString()
+ binding.titleTextView.text = item?.text
+ binding.ownedTextView.text = ownedItem.numberOwned.toString()
var disabled = false
val imageName: String?
@@ -138,15 +131,15 @@ class ItemRecyclerAdapter(data: OrderedRealmCollection?, autoUpdate:
disabled = !this.canHatch
}
}
- DataBindingUtils.loadImage(imageView, imageName)
+ DataBindingUtils.loadImage(binding.imageView, imageName)
var alpha = 1.0f
if (disabled) {
alpha = 0.3f
}
- imageView.alpha = alpha
- titleTextView.alpha = alpha
- ownedTextView.alpha = alpha
+ binding.imageView.alpha = alpha
+ binding.titleTextView.alpha = alpha
+ binding.ownedTextView.alpha = alpha
}
override fun onClick(v: View) {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseMainFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseMainFragment.kt
index bb3121e0e..c66eb044f 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseMainFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/BaseMainFragment.kt
@@ -26,10 +26,10 @@ abstract class BaseMainFragment : BaseFragment() {
lateinit var soundManager: SoundManager
open val activity get() = getActivity() as? MainActivity
- val tabLayout get() = activity?.detailTabs
- val collapsingToolbar get() = activity?.toolbar
- val toolbarAccessoryContainer get() = activity?.toolbarAccessoryContainer
- val bottomNavigation get() = activity?.bottomNavigation
+ val tabLayout get() = activity?.binding?.detailTabs
+ val collapsingToolbar get() = activity?.binding?.toolbar
+ val toolbarAccessoryContainer get() = activity?.binding?.toolbarAccessoryContainer
+ val bottomNavigation get() = activity?.binding?.bottomNavigation
var usesTabLayout: Boolean = false
var hidesToolbar: Boolean = false
var usesBottomNavigation = false
@@ -85,11 +85,11 @@ abstract class BaseMainFragment : BaseFragment() {
}
private fun hideToolbar() {
- activity?.avatarWithBars?.visibility = View.GONE
+ activity?.binding?.avatarWithBars?.root?.visibility = View.GONE
}
private fun showToolbar() {
- activity?.avatarWithBars?.visibility = View.VISIBLE
+ activity?.binding?.avatarWithBars?.root?.visibility = View.VISIBLE
}
private fun disableToolbarScrolling() {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.kt
index 135f78ece..50ed093fd 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.kt
@@ -80,11 +80,12 @@ class ItemRecyclerFragment : BaseFragment() {
adapter = recyclerView?.adapter as? ItemRecyclerAdapter
if (adapter == null) {
- adapter = ItemRecyclerAdapter(null, true)
- adapter?.context = this.activity
- adapter?.isHatching = this.isHatching
- adapter?.isFeeding = this.isFeeding
- adapter?.fragment = this
+ context?.let {
+ adapter = ItemRecyclerAdapter(null, true, context)
+ adapter?.isHatching = this.isHatching
+ adapter?.isFeeding = this.isFeeding
+ adapter?.fragment = this
+ }
if (this.hatchingItem != null) {
adapter?.hatchingItem = this.hatchingItem
}
diff --git a/build.gradle b/build.gradle
index 8c22f0316..3300f2bec 100644
--- a/build.gradle
+++ b/build.gradle
@@ -11,7 +11,7 @@ buildscript {
maven { url "https://plugins.gradle.org/m2/" }
}
dependencies {
- classpath 'com.android.tools.build:gradle:3.5.1'
+ classpath 'com.android.tools.build:gradle:3.6.0-beta02'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
classpath 'com.google.gms:google-services:4.3.2'
classpath "io.realm:realm-gradle-plugin:5.15.0"
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 605b357cc..78ebc9641 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-5.6-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip