From 96aa91e75d8ff370e75b6791d660c93ba6ba48bf Mon Sep 17 00:00:00 2001 From: Jays2Kings Date: Mon, 29 Mar 2021 17:25:10 -0400 Subject: [PATCH] Binding for Browse Section --- .../ui/extension/ExtensionBottomSheet.kt | 65 +++++----- .../ui/extension/ExtensionGroupHolder.kt | 6 +- .../tachiyomi/ui/extension/ExtensionHolder.kt | 24 ++-- .../tachiyomi/ui/migration/MangaHolder.kt | 11 +- .../tachiyomi/ui/migration/SourceHolder.kt | 13 +- .../manga/design/MigrationSourceHolder.kt | 22 ++-- .../tachiyomi/ui/source/BrowseController.kt | 121 ++++++++---------- .../tachiyomi/ui/source/SourceHolder.kt | 26 ++-- app/src/main/res/layout/browse_controller.xml | 5 +- .../main/res/layout/extension_card_item.xml | 6 +- .../main/res/layout/migration_card_item.xml | 4 +- .../main/res/layout/migration_source_item.xml | 2 +- app/src/main/res/layout/source_item.xml | 6 +- 13 files changed, 155 insertions(+), 156 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionBottomSheet.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionBottomSheet.kt index 41580339de..2101501af0 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionBottomSheet.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionBottomSheet.kt @@ -2,9 +2,9 @@ package eu.kanade.tachiyomi.ui.extension import android.content.Context import android.util.AttributeSet +import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.FrameLayout import android.widget.LinearLayout import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.tabs.TabLayout @@ -13,15 +13,17 @@ import eu.davidea.flexibleadapter.items.IFlexible import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.getOrDefault +import eu.kanade.tachiyomi.databinding.ExtensionsBottomSheetBinding +import eu.kanade.tachiyomi.databinding.RecyclerWithScrollerBinding import eu.kanade.tachiyomi.extension.model.Extension import eu.kanade.tachiyomi.ui.extension.details.ExtensionDetailsController -import eu.kanade.tachiyomi.ui.main.MainActivity import eu.kanade.tachiyomi.ui.migration.MangaAdapter import eu.kanade.tachiyomi.ui.migration.MangaItem import eu.kanade.tachiyomi.ui.migration.SourceAdapter import eu.kanade.tachiyomi.ui.migration.SourceItem import eu.kanade.tachiyomi.ui.migration.manga.design.PreMigrationController import eu.kanade.tachiyomi.ui.source.BrowseController +import eu.kanade.tachiyomi.util.view.activityBinding import eu.kanade.tachiyomi.util.view.collapse import eu.kanade.tachiyomi.util.view.doOnApplyWindowInsets import eu.kanade.tachiyomi.util.view.expand @@ -29,11 +31,6 @@ import eu.kanade.tachiyomi.util.view.isExpanded import eu.kanade.tachiyomi.util.view.updatePaddingRelative import eu.kanade.tachiyomi.util.view.withFadeTransaction import eu.kanade.tachiyomi.widget.ViewPagerAdapter -import kotlinx.android.synthetic.main.extensions_bottom_sheet.view.* -import kotlinx.android.synthetic.main.main_activity.* -import kotlinx.android.synthetic.main.migration_controller.* -import kotlinx.android.synthetic.main.recents_controller.* -import kotlinx.android.synthetic.main.recycler_with_scroller.view.* import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -59,13 +56,17 @@ class ExtensionBottomSheet @JvmOverloads constructor(context: Context, attrs: At private var extensions: List = emptyList() var canExpand = false + private lateinit var binding: ExtensionsBottomSheetBinding lateinit var controller: BrowseController - val extensionFrameLayout = - inflate(context, R.layout.recycler_with_scroller, null) as FrameLayout - val migrationFrameLayout = - inflate(context, R.layout.recycler_with_scroller, null) as FrameLayout + val extensionFrameLayout = RecyclerWithScrollerBinding.inflate(LayoutInflater.from(context)) + val migrationFrameLayout = RecyclerWithScrollerBinding.inflate(LayoutInflater.from(context)) + + override fun onFinishInflate() { + super.onFinishInflate() + binding = ExtensionsBottomSheetBinding.bind(this) + } fun onCreate(controller: BrowseController) { // Initialize adapter, scroll listener and recycler views @@ -84,17 +85,16 @@ class ExtensionBottomSheet @JvmOverloads constructor(context: Context, attrs: At migRecyler.layoutManager = androidx.recyclerview.widget.LinearLayoutManager(context) migRecyler.setHasFixedSize(true) - adapter?.fastScroller = extensionFrameLayout.fast_scroller + adapter?.fastScroller = extensionFrameLayout.fastScroller this.controller = controller - pager.doOnApplyWindowInsets { _, _, _ -> - val bottomBar = - (this@ExtensionBottomSheet.controller.activity as? MainActivity)?.bottom_nav + binding.pager.doOnApplyWindowInsets { _, _, _ -> + val bottomBar = controller.activityBinding?.bottomNav extRecyler.updatePaddingRelative(bottom = bottomBar?.height ?: 0) migRecyler.updatePaddingRelative(bottom = bottomBar?.height ?: 0) } - pager.adapter = TabbedSheetAdapter() - tabs.setupWithViewPager(pager) - tabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener { + binding.pager.adapter = TabbedSheetAdapter() + binding.tabs.setupWithViewPager(binding.pager) + binding.tabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener { override fun onTabSelected(tab: TabLayout.Tab?) { if (canExpand) { this@ExtensionBottomSheet.sheetBehavior?.expand() @@ -103,34 +103,35 @@ class ExtensionBottomSheet @JvmOverloads constructor(context: Context, attrs: At when (tab?.position) { 0 -> extensionFrameLayout else -> migrationFrameLayout - }.recycler?.isNestedScrollingEnabled = true + }.recycler.isNestedScrollingEnabled = true when (tab?.position) { 0 -> extensionFrameLayout else -> migrationFrameLayout - }.recycler?.requestLayout() + }.recycler.requestLayout() } override fun onTabUnselected(tab: TabLayout.Tab?) { when (tab?.position) { 0 -> extensionFrameLayout else -> migrationFrameLayout - }.recycler?.isNestedScrollingEnabled = false + }.recycler.isNestedScrollingEnabled = false if (tab?.position == 1) { presenter.deselectSource() } } + override fun onTabReselected(tab: TabLayout.Tab?) { this@ExtensionBottomSheet.sheetBehavior?.expand() when (tab?.position) { 0 -> extensionFrameLayout else -> migrationFrameLayout - }.recycler?.isNestedScrollingEnabled = true + }.recycler.isNestedScrollingEnabled = true } }) presenter.onCreate() updateExtTitle() - sheet_layout.setOnClickListener { + binding.sheetLayout.setOnClickListener { if (!sheetBehavior.isExpanded()) { sheetBehavior?.expand() fetchOnlineExtensionsIfNeeded() @@ -150,8 +151,8 @@ class ExtensionBottomSheet @JvmOverloads constructor(context: Context, attrs: At fun updateExtTitle() { val extCount = presenter.getExtensionUpdateCount() - if (extCount > 0) tabs.getTabAt(0)?.orCreateBadge - else tabs.getTabAt(0)?.removeBadge() + if (extCount > 0) binding.tabs.getTabAt(0)?.orCreateBadge + else binding.tabs.getTabAt(0)?.removeBadge() } override fun onButtonClick(position: Int) { @@ -174,7 +175,7 @@ class ExtensionBottomSheet @JvmOverloads constructor(context: Context, attrs: At } override fun onItemClick(view: View?, position: Int): Boolean { - when (tabs.selectedTabPosition) { + when (binding.tabs.selectedTabPosition) { 0 -> { val extension = (adapter?.getItem(position) as? ExtensionItem)?.extension ?: return false @@ -202,7 +203,7 @@ class ExtensionBottomSheet @JvmOverloads constructor(context: Context, attrs: At } override fun onItemLongClick(position: Int) { - if (tabs.selectedTabPosition == 0) { + if (binding.tabs.selectedTabPosition == 0) { val extension = (adapter?.getItem(position) as? ExtensionItem)?.extension ?: return if (extension is Extension.Installed || extension is Extension.Untrusted) { uninstallExtension(extension.pkgName) @@ -246,7 +247,7 @@ class ExtensionBottomSheet @JvmOverloads constructor(context: Context, attrs: At if (migAdapter !is SourceAdapter) { migAdapter = SourceAdapter(this) migRecyler.adapter = migAdapter - migAdapter?.fastScroller = migrationFrameLayout.fast_scroller + migAdapter?.fastScroller = migrationFrameLayout.fastScroller } migAdapter?.updateDataSet(sources, true) } @@ -256,7 +257,7 @@ class ExtensionBottomSheet @JvmOverloads constructor(context: Context, attrs: At if (migAdapter !is MangaAdapter) { migAdapter = MangaAdapter(this) migRecyler.adapter = migAdapter - migAdapter?.fastScroller = migrationFrameLayout.fast_scroller + migAdapter?.fastScroller = migrationFrameLayout.fastScroller } migAdapter?.updateDataSet(manga, true) } @@ -275,7 +276,7 @@ class ExtensionBottomSheet @JvmOverloads constructor(context: Context, attrs: At } fun canGoBack(): Boolean { - if (tabs.selectedTabPosition == 1 && migAdapter is MangaAdapter) { + if (binding.tabs.selectedTabPosition == 1 && migAdapter is MangaAdapter) { presenter.deselectSource() return false } @@ -298,8 +299,8 @@ class ExtensionBottomSheet @JvmOverloads constructor(context: Context, attrs: At override fun createView(container: ViewGroup, position: Int): View { return when (position) { - 0 -> extensionFrameLayout - else -> migrationFrameLayout + 0 -> extensionFrameLayout.root + else -> migrationFrameLayout.root } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionGroupHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionGroupHolder.kt index 849c766227..f6f00096f9 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionGroupHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionGroupHolder.kt @@ -5,14 +5,16 @@ import android.view.View import androidx.recyclerview.widget.RecyclerView import eu.davidea.flexibleadapter.FlexibleAdapter import eu.davidea.flexibleadapter.items.IFlexible +import eu.kanade.tachiyomi.databinding.ExtensionCardHeaderBinding import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder -import kotlinx.android.synthetic.main.extension_card_header.* class ExtensionGroupHolder(view: View, adapter: FlexibleAdapter>) : BaseFlexibleViewHolder(view, adapter) { + private val binding = ExtensionCardHeaderBinding.bind(view) + @SuppressLint("SetTextI18n") fun bind(item: ExtensionGroupItem) { - title.text = item.name + binding.title.text = item.name } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionHolder.kt index 92d5ff5ea9..5ced557e53 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionHolder.kt @@ -15,8 +15,7 @@ import eu.kanade.tachiyomi.util.system.getResourceColor import eu.kanade.tachiyomi.util.view.resetStrokeColor import eu.kanade.tachiyomi.data.image.coil.CoverViewTarget import eu.kanade.tachiyomi.data.preference.PreferencesHelper -import kotlinx.android.synthetic.main.extension_card_item.* -import kotlinx.android.synthetic.main.source_global_search_controller_card_item.* +import eu.kanade.tachiyomi.databinding.ExtensionCardItemBinding import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.util.Locale @@ -24,8 +23,9 @@ import java.util.Locale class ExtensionHolder(view: View, val adapter: ExtensionAdapter) : BaseFlexibleViewHolder(view, adapter) { + private val binding = ExtensionCardItemBinding.bind(view) init { - ext_button.setOnClickListener { + binding.extButton.setOnClickListener { adapter.buttonClickListener.onButtonClick(flexibleAdapterPosition) } } @@ -38,10 +38,10 @@ class ExtensionHolder(view: View, val adapter: ExtensionAdapter) : val extension = item.extension // Set source name - ext_title.text = extension.name - version.text = extension.versionName - lang.text = LocaleHelper.getDisplayName(extension.lang) - warning.text = when { + binding.extTitle.text = extension.name + binding.version.text = extension.versionName + binding.lang.text = LocaleHelper.getDisplayName(extension.lang) + binding.warning.text = when { extension is Extension.Untrusted -> itemView.context.getString(R.string.untrusted) extension is Extension.Installed && extension.isObsolete -> itemView.context.getString(R.string.obsolete) extension is Extension.Installed && extension.isUnofficial -> itemView.context.getString(R.string.unofficial) @@ -49,20 +49,20 @@ class ExtensionHolder(view: View, val adapter: ExtensionAdapter) : else -> "" }.toUpperCase(Locale.ROOT) - edit_button.clear() + binding.sourceImage.clear() if (extension is Extension.Available) { - edit_button.load(extension.iconUrl) { - target(CoverViewTarget(edit_button, progress)) + binding.sourceImage.load(extension.iconUrl) { + target(CoverViewTarget(binding.sourceImage)) } } else { - extension.getApplicationIcon(itemView.context)?.let { edit_button.setImageDrawable(it) } + extension.getApplicationIcon(itemView.context)?.let { binding.sourceImage.setImageDrawable(it) } } bindButton(item) } @Suppress("ResourceType") - fun bindButton(item: ExtensionItem) = with(ext_button) { + fun bindButton(item: ExtensionItem) = with(binding.extButton) { isEnabled = true isClickable = true isActivated = false diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/MangaHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/MangaHolder.kt index 4b142722e0..b90e069647 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/MangaHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/MangaHolder.kt @@ -6,21 +6,22 @@ import coil.api.clear import coil.api.loadAny import eu.davidea.flexibleadapter.FlexibleAdapter import eu.davidea.flexibleadapter.items.IFlexible +import eu.kanade.tachiyomi.databinding.MangaListItemBinding import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder -import kotlinx.android.synthetic.main.manga_list_item.* class MangaHolder( view: View, adapter: FlexibleAdapter> ) : BaseFlexibleViewHolder(view, adapter) { + private val binding = MangaListItemBinding.bind(view) fun bind(item: MangaItem) { // Update the title of the manga. - title.text = item.manga.title - subtitle.text = "" + binding.title.text = item.manga.title + binding.subtitle.text = "" // Update the cover. - cover_thumbnail.clear() - cover_thumbnail.loadAny(item.manga) + binding.coverThumbnail.clear() + binding.coverThumbnail.loadAny(item.manga) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/SourceHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/SourceHolder.kt index e8e82dfcea..b6cb79266e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/SourceHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/SourceHolder.kt @@ -1,18 +1,17 @@ package eu.kanade.tachiyomi.ui.migration import android.view.View +import eu.kanade.tachiyomi.databinding.MigrationCardItemBinding import eu.kanade.tachiyomi.source.icon import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder -import kotlinx.android.synthetic.main.migration_card_item.* -import kotlinx.android.synthetic.main.source_item.edit_button -import kotlinx.android.synthetic.main.source_item.title class SourceHolder(view: View, val adapter: SourceAdapter) : BaseFlexibleViewHolder(view, adapter) { + private val binding = MigrationCardItemBinding.bind(view) init { - migration_all.setOnClickListener { - adapter.allClickListener?.onAllClick(flexibleAdapterPosition) + binding.migrationAll.setOnClickListener { + adapter.allClickListener.onAllClick(flexibleAdapterPosition) } } @@ -20,11 +19,11 @@ class SourceHolder(view: View, val adapter: SourceAdapter) : val source = item.source // Set source name - title.text = source.name + binding.title.text = source.name // Set circle letter image. itemView.post { - edit_button?.setImageDrawable(source.icon()) + binding.sourceImage.setImageDrawable(source.icon()) } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/design/MigrationSourceHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/design/MigrationSourceHolder.kt index 42350135f5..48510a8522 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/design/MigrationSourceHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/design/MigrationSourceHolder.kt @@ -3,16 +3,18 @@ package eu.kanade.tachiyomi.ui.migration.manga.design import android.graphics.Paint.STRIKE_THRU_TEXT_FLAG import android.view.View import eu.kanade.tachiyomi.data.preference.PreferencesHelper +import eu.kanade.tachiyomi.databinding.MigrationSourceItemBinding import eu.kanade.tachiyomi.source.icon import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder -import kotlinx.android.synthetic.main.migration_source_item.* import uy.kohesive.injekt.injectLazy class MigrationSourceHolder(view: View, val adapter: MigrationSourceAdapter) : BaseFlexibleViewHolder(view, adapter) { + + private val binding = MigrationSourceItemBinding.bind(view) init { - setDragHandleView(reorder) + setDragHandleView(binding.reorder) } fun bind(source: HttpSource, sourceEnabled: Boolean) { @@ -20,21 +22,21 @@ class MigrationSourceHolder(view: View, val adapter: MigrationSourceAdapter) : val isMultiLanguage = preferences.enabledLanguages().get().size > 1 // Set capitalized title. val sourceName = if (isMultiLanguage) source.toString() else source.name.capitalize() - title.text = sourceName + binding.title.text = sourceName // Update circle letter image. itemView.post { val icon = source.icon() - if (icon != null) edit_button?.setImageDrawable(icon) + if (icon != null) binding.sourceImage.setImageDrawable(icon) } if (sourceEnabled) { - title.alpha = 1.0f - edit_button.alpha = 1.0f - title.paintFlags = title.paintFlags and STRIKE_THRU_TEXT_FLAG.inv() + binding.title.alpha = 1.0f + binding.sourceImage.alpha = 1.0f + binding.title.paintFlags = binding.title.paintFlags and STRIKE_THRU_TEXT_FLAG.inv() } else { - title.alpha = DISABLED_ALPHA - edit_button.alpha = DISABLED_ALPHA - title.paintFlags = title.paintFlags or STRIKE_THRU_TEXT_FLAG + binding.title.alpha = DISABLED_ALPHA + binding.sourceImage.alpha = DISABLED_ALPHA + binding.title.paintFlags = binding.title.paintFlags or STRIKE_THRU_TEXT_FLAG } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/source/BrowseController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/source/BrowseController.kt index a9d9ec72be..b9837e9694 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/source/BrowseController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/source/BrowseController.kt @@ -54,15 +54,6 @@ import eu.kanade.tachiyomi.util.view.updateLayoutParams import eu.kanade.tachiyomi.util.view.updatePaddingRelative import eu.kanade.tachiyomi.util.view.withFadeTransaction import kotlinx.android.parcel.Parcelize -import kotlinx.android.synthetic.main.extensions_bottom_sheet.* -import kotlinx.android.synthetic.main.extensions_bottom_sheet.ext_bottom_sheet -import kotlinx.android.synthetic.main.extensions_bottom_sheet.sheet_layout -import kotlinx.android.synthetic.main.extensions_bottom_sheet.view.* -import kotlinx.android.synthetic.main.filter_bottom_sheet.* -import kotlinx.android.synthetic.main.main_activity.* -import kotlinx.android.synthetic.main.recycler_with_scroller.view.* -import kotlinx.android.synthetic.main.rounded_category_hopper.* -import kotlinx.android.synthetic.main.browse_controller.* import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import kotlin.math.max @@ -110,7 +101,7 @@ class BrowseController : override fun getTitle(): String? { return if (showingExtensions) { view?.context?.getString( - when (ext_bottom_sheet.tabs.selectedTabPosition) { + when (binding.bottomSheet.tabs.selectedTabPosition) { 0 -> R.string.extensions else -> R.string.source_migration } @@ -130,7 +121,8 @@ class BrowseController : * @return inflated view. */ override fun inflateView(inflater: LayoutInflater, container: ViewGroup): View { - return inflater.inflate(R.layout.browse_controller, container, false) + binding = BrowseControllerBinding.inflate(inflater) + return binding.root } override fun onViewCreated(view: View) { @@ -138,42 +130,41 @@ class BrowseController : adapter = SourceAdapter(this) - // Create recycler and set adapter. - recycler.layoutManager = androidx.recyclerview.widget.LinearLayoutManager(view.context) - recycler.adapter = adapter + // Create binding.recycler and set adapter. + binding.recycler.layoutManager = androidx.recyclerview.widget.LinearLayoutManager(view.context) + binding.recycler.adapter = adapter adapter?.isSwipeEnabled = true - // recycler.addItemDecoration(SourceDividerItemDecoration(view.context)) + // binding.recycler.addItemDecoration(SourceDividerItemDecoration(view.context)) val attrsArray = intArrayOf(android.R.attr.actionBarSize) val array = view.context.obtainStyledAttributes(attrsArray) val appBarHeight = array.getDimensionPixelSize(0, 0) array.recycle() scrollViewWith( - recycler, + binding.recycler, afterInsets = { headerHeight = it.systemWindowInsetTop + appBarHeight - recycler.updatePaddingRelative(bottom = activity?.bottom_nav?.height ?: 0) + binding.recycler.updatePaddingRelative(bottom = activityBinding?.bottomNav?.height ?: 0) }, onBottomNavUpdate = { setBottomPadding() } ) - recycler?.post { - setBottomSheetTabs(if (ext_bottom_sheet?.sheetBehavior.isCollapsed()) 0f else 1f) + binding.recycler?.post { + setBottomSheetTabs(if (binding.bottomSheet.extBottomSheet?.sheetBehavior.isCollapsed()) 0f else 1f) } requestPermissionsSafe(arrayOf(WRITE_EXTERNAL_STORAGE), 301) - ext_bottom_sheet.onCreate(this) + binding.bottomSheet.extBottomSheet.onCreate(this) - ext_bottom_sheet.sheetBehavior?.addBottomSheetCallback( + binding.bottomSheet.extBottomSheet.sheetBehavior?.addBottomSheetCallback( object : BottomSheetBehavior .BottomSheetCallback() { override fun onSlide(bottomSheet: View, progress: Float) { - val recycler = recycler ?: return - shadow2?.alpha = (1 - max(0f, progress)) * 0.25f + binding.shadow2.alpha = (1 - max(0f, progress)) * 0.25f activityBinding?.appBar?.elevation = min( (1f - progress) * 15f, - if (recycler.canScrollVertically(-1)) 15f else 0f + if (binding.recycler.canScrollVertically(-1)) 15f else 0f ) activityBinding?.appBar?.y = max(activityBinding!!.appBar.y, -headerHeight * (1 - progress)) val oldShow = showingExtensions @@ -186,7 +177,7 @@ class BrowseController : } override fun onStateChanged(p0: View, state: Int) { - val extBottomSheet = ext_bottom_sheet ?: return + val extBottomSheet = binding.bottomSheet.extBottomSheet ?: return if (state == BottomSheetBehavior.STATE_EXPANDED) { activityBinding?.appBar?.y = 0f } @@ -204,8 +195,8 @@ class BrowseController : retainViewMode = if (state == BottomSheetBehavior.STATE_EXPANDED) { RetainViewMode.RETAIN_DETACH } else RetainViewMode.RELEASE_DETACH - sheet_layout.isClickable = state == BottomSheetBehavior.STATE_COLLAPSED - sheet_layout.isFocusable = state == BottomSheetBehavior.STATE_COLLAPSED + binding.bottomSheet.sheetLayout.isClickable = state == BottomSheetBehavior.STATE_COLLAPSED + binding.bottomSheet.sheetLayout.isFocusable = state == BottomSheetBehavior.STATE_COLLAPSED if (state == BottomSheetBehavior.STATE_COLLAPSED || state == BottomSheetBehavior.STATE_EXPANDED) { setBottomSheetTabs(if (state == BottomSheetBehavior.STATE_COLLAPSED) 0f else 1f) } @@ -214,7 +205,7 @@ class BrowseController : ) if (showingExtensions) { - ext_bottom_sheet.sheetBehavior?.expand() + binding.bottomSheet.extBottomSheet.sheetBehavior?.expand() } } @@ -224,22 +215,22 @@ class BrowseController : } fun setBottomSheetTabs(progress: Float) { - val bottomSheet = ext_bottom_sheet ?: return - ext_bottom_sheet.tabs.updateLayoutParams { + val bottomSheet = binding.bottomSheet.extBottomSheet ?: return + binding.bottomSheet.tabs.updateLayoutParams { topMargin = ((activityBinding?.appBar?.height?.minus(9f.dpToPx) ?: 0f) * progress).toInt() } val selectedColor = ColorUtils.setAlphaComponent( - ContextCompat.getColor(ext_bottom_sheet.tabs.context, R.color.colorAccent), + ContextCompat.getColor(binding.bottomSheet.tabs.context, R.color.colorAccent), (progress * 255).toInt() ) val unselectedColor = ColorUtils.setAlphaComponent( bottomSheet.context.getResourceColor(R.attr.colorOnBackground), 153 ) - ext_bottom_sheet.sheet_layout.elevation = progress * 5 - ext_bottom_sheet.pager.alpha = progress * 10 - ext_bottom_sheet.tabs.setSelectedTabIndicatorColor(selectedColor) - ext_bottom_sheet.tabs.setTabTextColors( + binding.bottomSheet.sheetLayout.elevation = progress * 5 + binding.bottomSheet.pager.alpha = progress * 10 + binding.bottomSheet.tabs.setSelectedTabIndicatorColor(selectedColor) + binding.bottomSheet.tabs.setTabTextColors( ColorUtils.blendARGB( bottomSheet.context.getResourceColor(R.attr.actionBarTintColor), unselectedColor, @@ -252,7 +243,7 @@ class BrowseController : ) ) - ext_bottom_sheet.sheet_layout.backgroundTintList = ColorStateList.valueOf( + binding.bottomSheet.sheetLayout.backgroundTintList = ColorStateList.valueOf( ColorUtils.blendARGB( bottomSheet.context.getResourceColor(R.attr.colorPrimaryVariant), bottomSheet.context.getResourceColor(R.attr.colorSecondary), @@ -262,43 +253,43 @@ class BrowseController : } private fun setBottomPadding() { - val bottomBar = activity?.bottom_nav ?: return - ext_bottom_sheet ?: return + val bottomBar = activityBinding?.bottomNav ?: return + binding.bottomSheet.extBottomSheet ?: return val pad = bottomBar.translationY - bottomBar.height val padding = max( (-pad).toInt(), - if (ext_bottom_sheet.sheetBehavior.isExpanded()) 0 else { + if (binding.bottomSheet.extBottomSheet.sheetBehavior.isExpanded()) 0 else { view?.rootWindowInsets?.systemWindowInsetBottom ?: 0 } ) - shadow2.translationY = pad - ext_bottom_sheet.sheetBehavior?.peekHeight = 58.spToPx + padding - ext_bottom_sheet.extensionFrameLayout.fast_scroller.updateLayoutParams { + binding.shadow2.translationY = pad + binding.bottomSheet.extBottomSheet.sheetBehavior?.peekHeight = 58.spToPx + padding + binding.bottomSheet.extBottomSheet.extensionFrameLayout.fastScroller.updateLayoutParams { bottomMargin = -pad.toInt() } - ext_bottom_sheet.migrationFrameLayout.fast_scroller.updateLayoutParams { + binding.bottomSheet.extBottomSheet.migrationFrameLayout.fastScroller.updateLayoutParams { bottomMargin = -pad.toInt() } } override fun showSheet() { - ext_bottom_sheet.sheetBehavior?.expand() + binding.bottomSheet.extBottomSheet.sheetBehavior?.expand() } override fun toggleSheet() { - if (!ext_bottom_sheet.sheetBehavior.isCollapsed()) { - ext_bottom_sheet.sheetBehavior?.collapse() + if (!binding.bottomSheet.extBottomSheet.sheetBehavior.isCollapsed()) { + binding.bottomSheet.extBottomSheet.sheetBehavior?.collapse() } else { - ext_bottom_sheet.sheetBehavior?.expand() + binding.bottomSheet.extBottomSheet.sheetBehavior?.expand() } } - override fun sheetIsExpanded(): Boolean = ext_bottom_sheet.sheetBehavior.isExpanded() + override fun sheetIsExpanded(): Boolean = binding.bottomSheet.extBottomSheet.sheetBehavior.isExpanded() override fun handleSheetBack(): Boolean { - if (!ext_bottom_sheet.sheetBehavior.isCollapsed()) { - if (ext_bottom_sheet.canGoBack()) { - ext_bottom_sheet.sheetBehavior?.collapse() + if (!binding.bottomSheet.extBottomSheet.sheetBehavior.isCollapsed()) { + if (binding.bottomSheet.extBottomSheet.canGoBack()) { + binding.bottomSheet.extBottomSheet.sheetBehavior?.collapse() } return true } @@ -313,20 +304,20 @@ class BrowseController : override fun onChangeStarted(handler: ControllerChangeHandler, type: ControllerChangeType) { super.onChangeStarted(handler, type) if (!type.isPush) { - ext_bottom_sheet.updateExtTitle() - ext_bottom_sheet.presenter.refreshExtensions() + binding.bottomSheet.extBottomSheet.updateExtTitle() + binding.bottomSheet.extBottomSheet.presenter.refreshExtensions() presenter.updateSources() } if (!type.isEnter) { - ext_bottom_sheet.canExpand = false + binding.bottomSheet.extBottomSheet.canExpand = false activityBinding?.appBar?.elevation = when { - ext_bottom_sheet.sheetBehavior.isExpanded() -> 0f - recycler.canScrollVertically(-1) -> 15f + binding.bottomSheet.extBottomSheet.sheetBehavior.isExpanded() -> 0f + binding.recycler.canScrollVertically(-1) -> 15f else -> 0f } } else { - ext_bottom_sheet.presenter.refreshMigrations() + binding.bottomSheet.extBottomSheet.presenter.refreshMigrations() } setBottomPadding() } @@ -334,15 +325,15 @@ class BrowseController : override fun onChangeEnded(handler: ControllerChangeHandler, type: ControllerChangeType) { super.onChangeEnded(handler, type) if (type.isEnter) { - ext_bottom_sheet.canExpand = true + binding.bottomSheet.extBottomSheet.canExpand = true setBottomPadding() } } override fun onActivityResumed(activity: Activity) { super.onActivityResumed(activity) - ext_bottom_sheet?.presenter?.refreshExtensions() - ext_bottom_sheet?.presenter?.refreshMigrations() + binding.bottomSheet.extBottomSheet?.presenter?.refreshExtensions() + binding.bottomSheet.extBottomSheet?.presenter?.refreshMigrations() setBottomPadding() } @@ -362,7 +353,7 @@ class BrowseController : presenter.updateSources() snackbar = view?.snack(R.string.source_hidden, Snackbar.LENGTH_INDEFINITE) { - anchorView = ext_bottom_sheet + anchorView = binding.bottomSheet.extBottomSheet setAction(R.string.undo) { val newCurrent = preferences.hiddenSources().get() preferences.hiddenSources().set(newCurrent - source.id.toString()) @@ -410,8 +401,8 @@ class BrowseController : } override fun expandSearch() { - if (showingExtensions) ext_bottom_sheet.sheetBehavior?.collapse() - else activity?.toolbar?.menu?.findItem(R.id.action_search)?.expandActionView() + if (showingExtensions) binding.bottomSheet.extBottomSheet.sheetBehavior?.collapse() + else activityBinding?.toolbar?.menu?.findItem(R.id.action_search)?.expandActionView() } /** @@ -423,7 +414,7 @@ class BrowseController : override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { if (onRoot) (activity as? MainActivity)?.setDismissIcon(showingExtensions) if (showingExtensions) { - if (ext_bottom_sheet.tabs.selectedTabPosition == 0) { + if (binding.bottomSheet.tabs.selectedTabPosition == 0) { // Inflate menu inflater.inflate(R.menu.extension_main, menu) @@ -437,7 +428,7 @@ class BrowseController : // Create query listener which opens the global search view. setOnQueryTextChangeListener(searchView) { extQuery = it ?: "" - ext_bottom_sheet.drawExtensions() + binding.bottomSheet.extBottomSheet.drawExtensions() true } } else { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/source/SourceHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/source/SourceHolder.kt index 1e39b5fe01..7094834388 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/source/SourceHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/source/SourceHolder.kt @@ -3,22 +3,24 @@ package eu.kanade.tachiyomi.ui.source import android.content.res.ColorStateList import android.view.View import eu.kanade.tachiyomi.R +import eu.kanade.tachiyomi.databinding.SourceItemBinding import eu.kanade.tachiyomi.source.LocalSource import eu.kanade.tachiyomi.source.icon import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder import eu.kanade.tachiyomi.util.system.getResourceColor import eu.kanade.tachiyomi.util.view.gone import eu.kanade.tachiyomi.util.view.visible -import kotlinx.android.synthetic.main.source_item.* class SourceHolder(view: View, val adapter: SourceAdapter) : BaseFlexibleViewHolder(view, adapter) { + val binding = SourceItemBinding.bind(view) + init { - source_pin.setOnClickListener { + binding.sourcePin.setOnClickListener { adapter.sourceListener.onPinClick(flexibleAdapterPosition) } - source_latest.setOnClickListener { + binding.sourceLatest.setOnClickListener { adapter.sourceListener.onLatestClick(flexibleAdapterPosition) } } @@ -28,10 +30,10 @@ class SourceHolder(view: View, val adapter: SourceAdapter) : // setCardEdges(item) // Set source name - title.text = source.name + binding.title.text = source.name val isPinned = item.isPinned ?: item.header?.code?.equals(SourcePresenter.PINNED_KEY) ?: false - source_pin.apply { + binding.sourcePin.apply { imageTintList = ColorStateList.valueOf( context.getResourceColor( if (isPinned) R.attr.colorAccent @@ -48,27 +50,27 @@ class SourceHolder(view: View, val adapter: SourceAdapter) : itemView.post { val icon = source.icon() when { - icon != null -> edit_button.setImageDrawable(icon) - item.source.id == LocalSource.ID -> edit_button.setImageResource(R.mipmap.ic_local_source) + icon != null -> binding.sourceImage.setImageDrawable(icon) + item.source.id == LocalSource.ID -> binding.sourceImage.setImageResource(R.mipmap.ic_local_source) } } if (source.supportsLatest) { - source_latest.visible() + binding.sourceLatest.visible() } else { - source_latest.gone() + binding.sourceLatest.gone() } } override fun getFrontView(): View { - return card + return binding.card } override fun getRearLeftView(): View { - return left_view + return binding.leftView } override fun getRearRightView(): View { - return right_view + return binding.rightView } } diff --git a/app/src/main/res/layout/browse_controller.xml b/app/src/main/res/layout/browse_controller.xml index 7dfa076efa..7c92502647 100644 --- a/app/src/main/res/layout/browse_controller.xml +++ b/app/src/main/res/layout/browse_controller.xml @@ -30,9 +30,10 @@ android:background="@drawable/shape_gradient_top_shadow" android:paddingBottom="10dp" app:layout_anchorGravity="top" - app:layout_anchor="@id/ext_bottom_sheet" /> + app:layout_anchor="@id/bottom_sheet" /> - + @@ -47,7 +47,7 @@ android:maxLines="1" android:textSize="12sp" app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintStart_toEndOf="@id/edit_button" + app:layout_constraintStart_toEndOf="@id/source_image" app:layout_constraintTop_toBottomOf="@+id/ext_title" tools:text="English" tools:visibility="visible" /> diff --git a/app/src/main/res/layout/migration_card_item.xml b/app/src/main/res/layout/migration_card_item.xml index 556a91a94c..70c92405a3 100644 --- a/app/src/main/res/layout/migration_card_item.xml +++ b/app/src/main/res/layout/migration_card_item.xml @@ -13,7 +13,7 @@ android:background="@drawable/list_item_selector"> diff --git a/app/src/main/res/layout/migration_source_item.xml b/app/src/main/res/layout/migration_source_item.xml index 24537efc8a..b921b96c9a 100644 --- a/app/src/main/res/layout/migration_source_item.xml +++ b/app/src/main/res/layout/migration_source_item.xml @@ -8,7 +8,7 @@ android:background="@drawable/list_item_selector"> @@ -98,7 +98,7 @@ android:layout_margin="10dp" android:layout_marginEnd="8dp" android:src="@drawable/ic_pin_24dp" - android:tint="?colorAccent" + app:tint="?colorAccent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintDimensionRatio="1:1" app:layout_constraintEnd_toEndOf="parent"