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