mirror of
https://github.com/tachiyomiorg/tachiyomi.git
synced 2024-12-23 18:11:53 +01:00
Binding for Recents
This commit is contained in:
parent
7b91a8a23b
commit
0a36245177
@ -10,6 +10,7 @@ import com.google.android.material.bottomsheet.BottomSheetBehavior
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.download.DownloadService
|
||||
import eu.kanade.tachiyomi.data.download.model.Download
|
||||
import eu.kanade.tachiyomi.databinding.DownloadBottomSheetBinding
|
||||
import eu.kanade.tachiyomi.ui.extension.ExtensionDividerItemDecoration
|
||||
import eu.kanade.tachiyomi.ui.recents.RecentsController
|
||||
import eu.kanade.tachiyomi.util.view.RecyclerWindowInsetsListener
|
||||
@ -21,7 +22,6 @@ import eu.kanade.tachiyomi.util.view.isCollapsed
|
||||
import eu.kanade.tachiyomi.util.view.isExpanded
|
||||
import eu.kanade.tachiyomi.util.view.isHidden
|
||||
import eu.kanade.tachiyomi.util.view.updateLayoutParams
|
||||
import kotlinx.android.synthetic.main.download_bottom_sheet.view.*
|
||||
|
||||
class DownloadBottomSheet @JvmOverloads constructor(
|
||||
context: Context,
|
||||
@ -45,20 +45,26 @@ class DownloadBottomSheet @JvmOverloads constructor(
|
||||
private var isRunning: Boolean = false
|
||||
private var activity: Activity? = null
|
||||
|
||||
lateinit var binding: DownloadBottomSheetBinding
|
||||
override fun onFinishInflate() {
|
||||
super.onFinishInflate()
|
||||
binding = DownloadBottomSheetBinding.bind(this)
|
||||
}
|
||||
|
||||
fun onCreate(controller: RecentsController) {
|
||||
// Initialize adapter, scroll listener and recycler views
|
||||
adapter = DownloadAdapter(this)
|
||||
sheetBehavior = BottomSheetBehavior.from(this)
|
||||
activity = controller.activity
|
||||
// Create recycler and set adapter.
|
||||
dl_recycler.layoutManager = androidx.recyclerview.widget.LinearLayoutManager(context)
|
||||
dl_recycler.adapter = adapter
|
||||
binding.dlRecycler.layoutManager = androidx.recyclerview.widget.LinearLayoutManager(context)
|
||||
binding.dlRecycler.adapter = adapter
|
||||
adapter?.isHandleDragEnabled = true
|
||||
adapter?.isSwipeEnabled = true
|
||||
adapter?.fastScroller = fast_scroller
|
||||
dl_recycler.setHasFixedSize(true)
|
||||
dl_recycler.addItemDecoration(ExtensionDividerItemDecoration(context))
|
||||
dl_recycler.setOnApplyWindowInsetsListener(RecyclerWindowInsetsListener)
|
||||
adapter?.fastScroller = binding.fastScroller
|
||||
binding.dlRecycler.setHasFixedSize(true)
|
||||
binding.dlRecycler.addItemDecoration(ExtensionDividerItemDecoration(context))
|
||||
binding.dlRecycler.setOnApplyWindowInsetsListener(RecyclerWindowInsetsListener)
|
||||
this.controller = controller
|
||||
updateDLTitle()
|
||||
|
||||
@ -66,12 +72,12 @@ class DownloadBottomSheet @JvmOverloads constructor(
|
||||
val array = context.obtainStyledAttributes(attrsArray)
|
||||
val headerHeight = array.getDimensionPixelSize(0, 0)
|
||||
array.recycle()
|
||||
recycler_layout.doOnApplyWindowInsets { v, windowInsets, _ ->
|
||||
binding.recyclerLayout.doOnApplyWindowInsets { v, windowInsets, _ ->
|
||||
v.updateLayoutParams<MarginLayoutParams> {
|
||||
topMargin = windowInsets.systemWindowInsetTop + headerHeight - sheet_layout.height
|
||||
topMargin = windowInsets.systemWindowInsetTop + headerHeight - binding.sheetLayout.height
|
||||
}
|
||||
}
|
||||
sheet_layout.setOnClickListener {
|
||||
binding.sheetLayout.setOnClickListener {
|
||||
if (!sheetBehavior.isExpanded()) {
|
||||
sheetBehavior?.expand()
|
||||
} else {
|
||||
@ -93,7 +99,7 @@ class DownloadBottomSheet @JvmOverloads constructor(
|
||||
|
||||
private fun updateDLTitle() {
|
||||
val extCount = presenter.downloadQueue.firstOrNull()
|
||||
title_text.text = if (extCount != null) resources.getString(
|
||||
binding.titleText.text = if (extCount != null) resources.getString(
|
||||
R.string.downloading_,
|
||||
extCount.chapter.name
|
||||
)
|
||||
@ -153,7 +159,7 @@ class DownloadBottomSheet @JvmOverloads constructor(
|
||||
* @return the holder of the download or null if it's not bound.
|
||||
*/
|
||||
private fun getHolder(download: Download): DownloadHolder? {
|
||||
return dl_recycler?.findViewHolderForItemId(download.chapter.id!!) as? DownloadHolder
|
||||
return binding.dlRecycler?.findViewHolderForItemId(download.chapter.id!!) as? DownloadHolder
|
||||
}
|
||||
|
||||
/**
|
||||
@ -163,12 +169,12 @@ class DownloadBottomSheet @JvmOverloads constructor(
|
||||
updateDLTitle()
|
||||
setBottomSheet()
|
||||
if (presenter.downloadQueue.isEmpty()) {
|
||||
empty_view?.show(
|
||||
binding.emptyView.show(
|
||||
R.drawable.ic_download_off_24dp,
|
||||
R.string.nothing_is_downloading
|
||||
)
|
||||
} else {
|
||||
empty_view?.hide()
|
||||
binding.emptyView.hide()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -8,10 +8,10 @@ import android.widget.FrameLayout
|
||||
import androidx.core.content.ContextCompat
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.download.model.Download
|
||||
import eu.kanade.tachiyomi.databinding.DownloadButtonBinding
|
||||
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.download_button.view.*
|
||||
|
||||
class DownloadButton @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) :
|
||||
FrameLayout(context, attrs) {
|
||||
@ -52,53 +52,60 @@ class DownloadButton @JvmOverloads constructor(context: Context, attrs: Attribut
|
||||
private var isAnimating = false
|
||||
private var iconAnimation: ObjectAnimator? = null
|
||||
|
||||
lateinit var binding: DownloadButtonBinding
|
||||
|
||||
override fun onFinishInflate() {
|
||||
super.onFinishInflate()
|
||||
binding = DownloadButtonBinding.bind(this)
|
||||
}
|
||||
|
||||
fun setDownloadStatus(state: Int, progress: Int = 0) {
|
||||
if (state != Download.DOWNLOADING) {
|
||||
iconAnimation?.cancel()
|
||||
download_icon.alpha = 1f
|
||||
binding.downloadIcon.alpha = 1f
|
||||
isAnimating = false
|
||||
}
|
||||
download_icon.setImageDrawable(
|
||||
binding.downloadIcon.setImageDrawable(
|
||||
if (state == Download.CHECKED) {
|
||||
checkDrawable
|
||||
} else downloadDrawable
|
||||
)
|
||||
when (state) {
|
||||
Download.CHECKED -> {
|
||||
download_progress.gone()
|
||||
download_border.visible()
|
||||
download_progress_indeterminate.gone()
|
||||
download_border.setImageDrawable(filledCircle)
|
||||
download_border.drawable.setTint(activeColor)
|
||||
download_icon.drawable.setTint(Color.WHITE)
|
||||
binding.downloadProgress.gone()
|
||||
binding.downloadBorder.visible()
|
||||
binding.downloadProgressIndeterminate.gone()
|
||||
binding.downloadBorder.setImageDrawable(filledCircle)
|
||||
binding.downloadBorder.drawable.setTint(activeColor)
|
||||
binding.downloadIcon.drawable.setTint(Color.WHITE)
|
||||
}
|
||||
Download.NOT_DOWNLOADED -> {
|
||||
download_border.visible()
|
||||
download_progress.gone()
|
||||
download_progress_indeterminate.gone()
|
||||
download_border.setImageDrawable(borderCircle)
|
||||
download_border.drawable.setTint(activeColor)
|
||||
download_icon.drawable.setTint(activeColor)
|
||||
binding.downloadBorder.visible()
|
||||
binding.downloadProgress.gone()
|
||||
binding.downloadProgressIndeterminate.gone()
|
||||
binding.downloadBorder.setImageDrawable(borderCircle)
|
||||
binding.downloadBorder.drawable.setTint(activeColor)
|
||||
binding.downloadIcon.drawable.setTint(activeColor)
|
||||
}
|
||||
Download.QUEUE -> {
|
||||
download_border.gone()
|
||||
download_progress.gone()
|
||||
download_progress_indeterminate.visible()
|
||||
download_progress.isIndeterminate = true
|
||||
download_icon.drawable.setTint(disabledColor)
|
||||
binding.downloadBorder.gone()
|
||||
binding.downloadProgress.gone()
|
||||
binding.downloadProgressIndeterminate.visible()
|
||||
binding.downloadProgress.isIndeterminate = true
|
||||
binding.downloadIcon.drawable.setTint(disabledColor)
|
||||
}
|
||||
Download.DOWNLOADING -> {
|
||||
download_border.visible()
|
||||
download_progress.visible()
|
||||
download_progress_indeterminate.gone()
|
||||
download_border.setImageDrawable(borderCircle)
|
||||
download_progress.isIndeterminate = false
|
||||
download_progress.progress = progress
|
||||
download_border.drawable.setTint(progressBGColor)
|
||||
download_progress.progressDrawable?.setTint(downloadedColor)
|
||||
download_icon.drawable.setTint(disabledColor)
|
||||
binding.downloadBorder.visible()
|
||||
binding.downloadProgress.visible()
|
||||
binding.downloadProgressIndeterminate.gone()
|
||||
binding.downloadBorder.setImageDrawable(borderCircle)
|
||||
binding.downloadProgress.isIndeterminate = false
|
||||
binding.downloadProgress.progress = progress
|
||||
binding.downloadBorder.drawable.setTint(progressBGColor)
|
||||
binding.downloadProgress.progressDrawable?.setTint(downloadedColor)
|
||||
binding.downloadIcon.drawable.setTint(disabledColor)
|
||||
if (!isAnimating) {
|
||||
iconAnimation = ObjectAnimator.ofFloat(download_icon, "alpha", 1f, 0f).apply {
|
||||
iconAnimation = ObjectAnimator.ofFloat(binding.downloadIcon, "alpha", 1f, 0f).apply {
|
||||
duration = 1000
|
||||
repeatCount = ObjectAnimator.INFINITE
|
||||
repeatMode = ObjectAnimator.REVERSE
|
||||
@ -108,20 +115,20 @@ class DownloadButton @JvmOverloads constructor(context: Context, attrs: Attribut
|
||||
}
|
||||
}
|
||||
Download.DOWNLOADED -> {
|
||||
download_progress.gone()
|
||||
download_border.visible()
|
||||
download_progress_indeterminate.gone()
|
||||
download_border.setImageDrawable(filledCircle)
|
||||
download_border.drawable.setTint(downloadedColor)
|
||||
download_icon.drawable.setTint(Color.WHITE)
|
||||
binding.downloadProgress.gone()
|
||||
binding.downloadBorder.visible()
|
||||
binding.downloadProgressIndeterminate.gone()
|
||||
binding.downloadBorder.setImageDrawable(filledCircle)
|
||||
binding.downloadBorder.drawable.setTint(downloadedColor)
|
||||
binding.downloadIcon.drawable.setTint(Color.WHITE)
|
||||
}
|
||||
Download.ERROR -> {
|
||||
download_progress.gone()
|
||||
download_border.visible()
|
||||
download_progress_indeterminate.gone()
|
||||
download_border.setImageDrawable(borderCircle)
|
||||
download_border.drawable.setTint(errorColor)
|
||||
download_icon.drawable.setTint(errorColor)
|
||||
binding.downloadProgress.gone()
|
||||
binding.downloadBorder.visible()
|
||||
binding.downloadProgressIndeterminate.gone()
|
||||
binding.downloadBorder.setImageDrawable(borderCircle)
|
||||
binding.downloadBorder.drawable.setTint(errorColor)
|
||||
binding.downloadIcon.drawable.setTint(errorColor)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -5,65 +5,66 @@ import android.view.View
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.image.coil.loadLibraryManga
|
||||
import eu.kanade.tachiyomi.data.download.model.Download
|
||||
import eu.kanade.tachiyomi.databinding.RecentMangaItemBinding
|
||||
import eu.kanade.tachiyomi.source.LocalSource
|
||||
import eu.kanade.tachiyomi.ui.manga.chapter.BaseChapterHolder
|
||||
import eu.kanade.tachiyomi.util.chapter.ChapterUtil
|
||||
import eu.kanade.tachiyomi.util.system.timeSpanFromNow
|
||||
import eu.kanade.tachiyomi.util.view.visibleIf
|
||||
import kotlinx.android.synthetic.main.download_button.*
|
||||
import kotlinx.android.synthetic.main.recent_manga_item.*
|
||||
|
||||
class RecentMangaHolder(
|
||||
view: View,
|
||||
val adapter: RecentMangaAdapter
|
||||
) : BaseChapterHolder(view, adapter) {
|
||||
|
||||
private val binding = RecentMangaItemBinding.bind(view)
|
||||
|
||||
init {
|
||||
card_layout?.setOnClickListener { adapter.delegate.onCoverClick(flexibleAdapterPosition) }
|
||||
binding.cardLayout.setOnClickListener { adapter.delegate.onCoverClick(flexibleAdapterPosition) }
|
||||
}
|
||||
|
||||
fun bind(recentsType: Int) {
|
||||
when (recentsType) {
|
||||
RecentMangaHeaderItem.CONTINUE_READING -> {
|
||||
title.setText(R.string.view_history)
|
||||
binding.title.setText(R.string.view_history)
|
||||
}
|
||||
RecentMangaHeaderItem.NEW_CHAPTERS -> {
|
||||
title.setText(R.string.view_all_updates)
|
||||
binding.title.setText(R.string.view_all_updates)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun bind(item: RecentMangaItem) {
|
||||
download_button.visibleIf(item.mch.manga.source != LocalSource.ID)
|
||||
binding.downloadButton.downloadButton.visibleIf(item.mch.manga.source != LocalSource.ID)
|
||||
|
||||
title.apply {
|
||||
binding.title.apply {
|
||||
text = item.chapter.name
|
||||
ChapterUtil.setTextViewForChapter(this, item)
|
||||
}
|
||||
subtitle.apply {
|
||||
binding.subtitle.apply {
|
||||
text = item.mch.manga.title
|
||||
setTextColor(ChapterUtil.readColor(context, item))
|
||||
}
|
||||
val notValidNum = item.mch.chapter.chapter_number <= 0
|
||||
body.text = when {
|
||||
item.mch.chapter.id == null -> body.context.getString(
|
||||
binding.body.text = when {
|
||||
item.mch.chapter.id == null -> binding.body.context.getString(
|
||||
R.string.added_,
|
||||
item.mch.manga.date_added.timeSpanFromNow
|
||||
)
|
||||
item.mch.history.id == null -> body.context.getString(
|
||||
item.mch.history.id == null -> binding.body.context.getString(
|
||||
R.string.updated_,
|
||||
item.chapter.date_upload.timeSpanFromNow
|
||||
)
|
||||
item.chapter.id != item.mch.chapter.id ->
|
||||
body.context.getString(
|
||||
binding.body.context.getString(
|
||||
R.string.read_,
|
||||
item.mch.history.last_read.timeSpanFromNow
|
||||
) + "\n" + body.context.getString(
|
||||
) + "\n" + binding.body.context.getString(
|
||||
if (notValidNum) R.string.last_read_ else R.string.last_read_chapter_,
|
||||
if (notValidNum) item.mch.chapter.name else adapter.decimalFormat.format(item.mch.chapter.chapter_number)
|
||||
)
|
||||
item.chapter.pages_left > 0 && !item.chapter.read ->
|
||||
body.context.getString(
|
||||
binding.body.context.getString(
|
||||
R.string.read_,
|
||||
item.mch.history.last_read.timeSpanFromNow
|
||||
) + "\n" + itemView.resources.getQuantityString(
|
||||
@ -71,13 +72,13 @@ class RecentMangaHolder(
|
||||
item.chapter.pages_left,
|
||||
item.chapter.pages_left
|
||||
)
|
||||
else -> body.context.getString(
|
||||
else -> binding.body.context.getString(
|
||||
R.string.read_,
|
||||
item.mch.history.last_read.timeSpanFromNow
|
||||
)
|
||||
}
|
||||
if ((itemView.context as? Activity)?.isDestroyed != true) {
|
||||
cover_thumbnail.loadLibraryManga(item.mch.manga)
|
||||
binding.coverThumbnail.loadLibraryManga(item.mch.manga)
|
||||
}
|
||||
notifyStatus(
|
||||
if (adapter.isSelected(flexibleAdapterPosition)) Download.CHECKED else item.status,
|
||||
@ -87,7 +88,7 @@ class RecentMangaHolder(
|
||||
}
|
||||
|
||||
private fun resetFrontView() {
|
||||
if (front_view.translationX != 0f) itemView.post { adapter.notifyItemChanged(flexibleAdapterPosition) }
|
||||
if (binding.frontView.translationX != 0f) itemView.post { adapter.notifyItemChanged(flexibleAdapterPosition) }
|
||||
}
|
||||
|
||||
override fun onLongClick(view: View?): Boolean {
|
||||
@ -97,13 +98,13 @@ class RecentMangaHolder(
|
||||
}
|
||||
|
||||
fun notifyStatus(status: Int, progress: Int) =
|
||||
download_button.setDownloadStatus(status, progress)
|
||||
binding.downloadButton.downloadButton.setDownloadStatus(status, progress)
|
||||
|
||||
override fun getFrontView(): View {
|
||||
return front_view
|
||||
return binding.frontView
|
||||
}
|
||||
|
||||
override fun getRearRightView(): View {
|
||||
return right_view
|
||||
return binding.rightView
|
||||
}
|
||||
}
|
||||
|
@ -51,16 +51,6 @@ import eu.kanade.tachiyomi.util.view.snack
|
||||
import eu.kanade.tachiyomi.util.view.updateLayoutParams
|
||||
import eu.kanade.tachiyomi.util.view.updatePaddingRelative
|
||||
import eu.kanade.tachiyomi.util.view.withFadeTransaction
|
||||
import kotlinx.android.synthetic.main.download_bottom_sheet.*
|
||||
import kotlinx.android.synthetic.main.download_bottom_sheet.sheet_layout
|
||||
import kotlinx.android.synthetic.main.download_bottom_sheet.view.*
|
||||
import kotlinx.android.synthetic.main.extensions_bottom_sheet.*
|
||||
import kotlinx.android.synthetic.main.main_activity.*
|
||||
import kotlinx.android.synthetic.main.recents_controller.*
|
||||
import kotlinx.android.synthetic.main.recents_controller.recycler
|
||||
import kotlinx.android.synthetic.main.recents_controller.shadow
|
||||
import kotlinx.android.synthetic.main.recents_controller.shadow2
|
||||
import kotlinx.android.synthetic.main.source_controller.*
|
||||
import kotlin.math.abs
|
||||
import kotlin.math.max
|
||||
|
||||
@ -102,7 +92,8 @@ class RecentsController(bundle: Bundle? = null) :
|
||||
}
|
||||
|
||||
override fun inflateView(inflater: LayoutInflater, container: ViewGroup): View {
|
||||
return inflater.inflate(R.layout.recents_controller, container, false)
|
||||
binding = RecentsControllerBinding.inflate(inflater)
|
||||
return binding.root
|
||||
}
|
||||
|
||||
/**
|
||||
@ -114,11 +105,11 @@ class RecentsController(bundle: Bundle? = null) :
|
||||
super.onViewCreated(view)
|
||||
// Initialize adapter
|
||||
adapter = RecentMangaAdapter(this)
|
||||
recycler.adapter = adapter
|
||||
recycler.layoutManager = LinearLayoutManager(view.context)
|
||||
recycler.setHasFixedSize(true)
|
||||
recycler.recycledViewPool.setMaxRecycledViews(0, 0)
|
||||
recycler.addItemDecoration(
|
||||
binding.recycler.adapter = adapter
|
||||
binding.recycler.layoutManager = LinearLayoutManager(view.context)
|
||||
binding.recycler.setHasFixedSize(true)
|
||||
binding.recycler.recycledViewPool.setMaxRecycledViews(0, 0)
|
||||
binding.recycler.addItemDecoration(
|
||||
RecentMangaDivider(view.context)
|
||||
)
|
||||
adapter.isSwipeEnabled = true
|
||||
@ -129,13 +120,13 @@ class RecentsController(bundle: Bundle? = null) :
|
||||
val array = view.context.obtainStyledAttributes(attrsArray)
|
||||
val appBarHeight = array.getDimensionPixelSize(0, 0)
|
||||
array.recycle()
|
||||
swipe_refresh.setStyle()
|
||||
binding.swipeRefresh.setStyle()
|
||||
scrollViewWith(
|
||||
recycler,
|
||||
swipeRefreshLayout = swipe_refresh,
|
||||
binding.recycler,
|
||||
swipeRefreshLayout = binding.swipeRefresh,
|
||||
afterInsets = {
|
||||
headerHeight = it.systemWindowInsetTop + appBarHeight
|
||||
recycler.updatePaddingRelative(bottom = activity!!.bottom_nav.height)
|
||||
binding.recycler.updatePaddingRelative(bottom = activityBinding?.bottomNav?.height ?: 0)
|
||||
},
|
||||
onBottomNavUpdate = {
|
||||
setBottomPadding()
|
||||
@ -150,25 +141,24 @@ class RecentsController(bundle: Bundle? = null) :
|
||||
}
|
||||
}
|
||||
|
||||
dl_bottom_sheet.onCreate(this)
|
||||
binding.downloadBottomSheet.dlBottomSheet.onCreate(this)
|
||||
|
||||
shadow2.alpha =
|
||||
if (dl_bottom_sheet.sheetBehavior?.state == BottomSheetBehavior.STATE_COLLAPSED) 0.25f else 0f
|
||||
shadow.alpha =
|
||||
if (dl_bottom_sheet.sheetBehavior?.state == BottomSheetBehavior.STATE_COLLAPSED) 0.5f else 0f
|
||||
binding.shadow2.alpha =
|
||||
if (binding.downloadBottomSheet.dlBottomSheet.sheetBehavior?.state == BottomSheetBehavior.STATE_COLLAPSED) 0.25f else 0f
|
||||
binding.shadow.alpha =
|
||||
if (binding.downloadBottomSheet.dlBottomSheet.sheetBehavior?.state == BottomSheetBehavior.STATE_COLLAPSED) 0.5f else 0f
|
||||
|
||||
dl_bottom_sheet.sheetBehavior?.addBottomSheetCallback(
|
||||
binding.downloadBottomSheet.dlBottomSheet.sheetBehavior?.addBottomSheetCallback(
|
||||
object :
|
||||
BottomSheetBehavior.BottomSheetCallback() {
|
||||
override fun onSlide(bottomSheet: View, progress: Float) {
|
||||
val shadow2 = shadow2 ?: return
|
||||
shadow2.alpha = (1 - abs(progress)) * 0.25f
|
||||
shadow.alpha = (1 - abs(progress)) * 0.5f
|
||||
binding.shadow2.alpha = (1 - abs(progress)) * 0.25f
|
||||
binding.shadow.alpha = (1 - abs(progress)) * 0.5f
|
||||
if (progress >= 0) activityBinding?.appBar?.elevation = max(
|
||||
progress * 15f,
|
||||
if (recycler.canScrollVertically(-1)) 15f else 0f
|
||||
if (binding.recycler.canScrollVertically(-1)) 15f else 0f
|
||||
)
|
||||
sheet_layout.alpha = 1 - progress
|
||||
binding.downloadBottomSheet.sheetLayout.alpha = 1 - progress
|
||||
activityBinding?.appBar?.y = max(activityBinding!!.appBar.y, -headerHeight * (1 - progress))
|
||||
val oldShow = showingDownloads
|
||||
showingDownloads = progress > 0.92f
|
||||
@ -182,7 +172,7 @@ class RecentsController(bundle: Bundle? = null) :
|
||||
if (this@RecentsController.view == null) return
|
||||
if (state == BottomSheetBehavior.STATE_EXPANDED) activityBinding?.appBar?.y = 0f
|
||||
if (state == BottomSheetBehavior.STATE_EXPANDED || state == BottomSheetBehavior.STATE_COLLAPSED) {
|
||||
sheet_layout.alpha =
|
||||
binding.downloadBottomSheet.sheetLayout.alpha =
|
||||
if (state == BottomSheetBehavior.STATE_COLLAPSED) 1f else 0f
|
||||
showingDownloads = state == BottomSheetBehavior.STATE_EXPANDED
|
||||
setTitle()
|
||||
@ -191,64 +181,63 @@ class RecentsController(bundle: Bundle? = null) :
|
||||
|
||||
if (state == BottomSheetBehavior.STATE_COLLAPSED) {
|
||||
if (hasQueue()) {
|
||||
dl_bottom_sheet.sheetBehavior?.isHideable = false
|
||||
binding.downloadBottomSheet.dlBottomSheet.sheetBehavior?.isHideable = false
|
||||
} else {
|
||||
dl_bottom_sheet.sheetBehavior?.isHideable = true
|
||||
dl_bottom_sheet.sheetBehavior?.state = BottomSheetBehavior.STATE_HIDDEN
|
||||
binding.downloadBottomSheet.dlBottomSheet.sheetBehavior?.isHideable = true
|
||||
binding.downloadBottomSheet.dlBottomSheet.sheetBehavior?.state = BottomSheetBehavior.STATE_HIDDEN
|
||||
}
|
||||
} else if (state == BottomSheetBehavior.STATE_HIDDEN) {
|
||||
if (!hasQueue()) {
|
||||
dl_bottom_sheet.sheetBehavior?.skipCollapsed = true
|
||||
binding.downloadBottomSheet.dlBottomSheet.sheetBehavior?.skipCollapsed = true
|
||||
} else {
|
||||
dl_bottom_sheet.sheetBehavior?.skipCollapsed = false
|
||||
dl_bottom_sheet.sheetBehavior?.state = BottomSheetBehavior.STATE_COLLAPSED
|
||||
binding.downloadBottomSheet.dlBottomSheet.sheetBehavior?.skipCollapsed = false
|
||||
binding.downloadBottomSheet.dlBottomSheet.sheetBehavior?.state = BottomSheetBehavior.STATE_COLLAPSED
|
||||
}
|
||||
}
|
||||
|
||||
if (state == BottomSheetBehavior.STATE_HIDDEN || state == BottomSheetBehavior.STATE_COLLAPSED) {
|
||||
shadow2.alpha = if (state == BottomSheetBehavior.STATE_COLLAPSED) 0.25f else 0f
|
||||
shadow.alpha = if (state == BottomSheetBehavior.STATE_COLLAPSED) 0.5f else 0f
|
||||
binding.shadow2.alpha = if (state == BottomSheetBehavior.STATE_COLLAPSED) 0.25f else 0f
|
||||
binding.shadow.alpha = if (state == BottomSheetBehavior.STATE_COLLAPSED) 0.5f else 0f
|
||||
}
|
||||
|
||||
sheet_layout?.isClickable = state == BottomSheetBehavior.STATE_COLLAPSED
|
||||
sheet_layout?.isFocusable = state == BottomSheetBehavior.STATE_COLLAPSED
|
||||
setPadding(dl_bottom_sheet.sheetBehavior?.isHideable == true)
|
||||
binding.downloadBottomSheet.sheetLayout.isClickable = state == BottomSheetBehavior.STATE_COLLAPSED
|
||||
binding.downloadBottomSheet.sheetLayout.isFocusable = state == BottomSheetBehavior.STATE_COLLAPSED
|
||||
setPadding(binding.downloadBottomSheet.dlBottomSheet.sheetBehavior?.isHideable == true)
|
||||
}
|
||||
}
|
||||
)
|
||||
swipe_refresh.isRefreshing = LibraryUpdateService.isRunning()
|
||||
swipe_refresh.setOnRefreshListener {
|
||||
binding.swipeRefresh.isRefreshing = LibraryUpdateService.isRunning()
|
||||
binding.swipeRefresh.setOnRefreshListener {
|
||||
if (!LibraryUpdateService.isRunning()) {
|
||||
LibraryUpdateService.start(view.context)
|
||||
}
|
||||
}
|
||||
|
||||
if (showingDownloads) {
|
||||
dl_bottom_sheet.sheetBehavior?.expand()
|
||||
binding.downloadBottomSheet.dlBottomSheet.sheetBehavior?.expand()
|
||||
}
|
||||
setPadding(dl_bottom_sheet.sheetBehavior?.isHideable == true)
|
||||
setPadding(binding.downloadBottomSheet.dlBottomSheet.sheetBehavior?.isHideable == true)
|
||||
requestPermissionsSafe(arrayOf(WRITE_EXTERNAL_STORAGE), 301)
|
||||
}
|
||||
|
||||
fun setBottomPadding() {
|
||||
val bottomBar = activity?.bottom_nav ?: return
|
||||
dl_bottom_sheet ?: return
|
||||
val bottomBar = activityBinding?.bottomNav ?: return
|
||||
val pad = bottomBar.translationY - bottomBar.height
|
||||
val padding = max(
|
||||
(-pad).toInt(),
|
||||
if (dl_bottom_sheet.sheetBehavior.isExpanded()) 0 else {
|
||||
if (binding.downloadBottomSheet.dlBottomSheet.sheetBehavior.isExpanded()) 0 else {
|
||||
view?.rootWindowInsets?.systemWindowInsetBottom ?: 0
|
||||
}
|
||||
)
|
||||
shadow2.translationY = pad
|
||||
dl_bottom_sheet.sheetBehavior?.peekHeight = 48.spToPx + padding
|
||||
dl_bottom_sheet.fast_scroller.updateLayoutParams<ViewGroup.MarginLayoutParams> {
|
||||
binding.shadow2.translationY = pad
|
||||
binding.downloadBottomSheet.dlBottomSheet.sheetBehavior?.peekHeight = 48.spToPx + padding
|
||||
binding.downloadBottomSheet.fastScroller.updateLayoutParams<ViewGroup.MarginLayoutParams> {
|
||||
bottomMargin = -pad.toInt()
|
||||
}
|
||||
}
|
||||
|
||||
fun setRefreshing(refresh: Boolean) {
|
||||
swipe_refresh?.isRefreshing = refresh
|
||||
binding.swipeRefresh.isRefreshing = refresh
|
||||
}
|
||||
|
||||
override fun onItemMove(fromPosition: Int, toPosition: Int) { }
|
||||
@ -256,21 +245,21 @@ class RecentsController(bundle: Bundle? = null) :
|
||||
override fun shouldMoveItem(fromPosition: Int, toPosition: Int) = true
|
||||
|
||||
override fun onActionStateChanged(viewHolder: RecyclerView.ViewHolder?, actionState: Int) {
|
||||
swipe_refresh.isEnabled = actionState != ItemTouchHelper.ACTION_STATE_SWIPE ||
|
||||
swipe_refresh.isRefreshing
|
||||
binding.swipeRefresh.isEnabled = actionState != ItemTouchHelper.ACTION_STATE_SWIPE ||
|
||||
binding.swipeRefresh.isRefreshing
|
||||
}
|
||||
|
||||
override fun handleSheetBack(): Boolean {
|
||||
if (dl_bottom_sheet.sheetBehavior?.state == BottomSheetBehavior.STATE_EXPANDED) {
|
||||
dl_bottom_sheet.dismiss()
|
||||
if (binding.downloadBottomSheet.dlBottomSheet.sheetBehavior?.state == BottomSheetBehavior.STATE_EXPANDED) {
|
||||
binding.downloadBottomSheet.dlBottomSheet.dismiss()
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
fun setPadding(sheetIsHidden: Boolean) {
|
||||
recycler?.updatePaddingRelative(bottom = if (sheetIsHidden) 0 else 20.dpToPx)
|
||||
recycler?.updateLayoutParams<ViewGroup.MarginLayoutParams> {
|
||||
binding.recycler.updatePaddingRelative(bottom = if (sheetIsHidden) 0 else 20.dpToPx)
|
||||
binding.recycler.updateLayoutParams<ViewGroup.MarginLayoutParams> {
|
||||
bottomMargin = if (sheetIsHidden) 0 else 30.dpToPx
|
||||
}
|
||||
}
|
||||
@ -279,7 +268,7 @@ class RecentsController(bundle: Bundle? = null) :
|
||||
super.onActivityResumed(activity)
|
||||
if (view != null) {
|
||||
refresh()
|
||||
dl_bottom_sheet?.update()
|
||||
binding.downloadBottomSheet.dlBottomSheet.update()
|
||||
}
|
||||
}
|
||||
|
||||
@ -294,7 +283,7 @@ class RecentsController(bundle: Bundle? = null) :
|
||||
|
||||
fun showLists(recents: List<RecentMangaItem>) {
|
||||
if (view == null) return
|
||||
swipe_refresh.isRefreshing = LibraryUpdateService.isRunning()
|
||||
binding.swipeRefresh.isRefreshing = LibraryUpdateService.isRunning()
|
||||
adapter.updateItems(recents)
|
||||
adapter.removeAllScrollableHeaders()
|
||||
if (presenter.viewType > 0) {
|
||||
@ -308,11 +297,11 @@ class RecentsController(bundle: Bundle? = null) :
|
||||
|
||||
fun updateChapterDownload(download: Download) {
|
||||
if (view == null) return
|
||||
dl_bottom_sheet.update()
|
||||
dl_bottom_sheet.onUpdateProgress(download)
|
||||
dl_bottom_sheet.onUpdateDownloadedPages(download)
|
||||
binding.downloadBottomSheet.dlBottomSheet.update()
|
||||
binding.downloadBottomSheet.dlBottomSheet.onUpdateProgress(download)
|
||||
binding.downloadBottomSheet.dlBottomSheet.onUpdateDownloadedPages(download)
|
||||
val id = download.chapter.id ?: return
|
||||
val holder = recycler.findViewHolderForItemId(id) as? RecentMangaHolder ?: return
|
||||
val holder = binding.recycler.findViewHolderForItemId(id) as? RecentMangaHolder ?: return
|
||||
holder.notifyStatus(download.status, download.progress)
|
||||
}
|
||||
|
||||
@ -399,7 +388,7 @@ class RecentsController(bundle: Bundle? = null) :
|
||||
lastChapterId = chapter.id
|
||||
presenter.markChapterRead(chapter, true)
|
||||
snack = view?.snack(R.string.marked_as_read, Snackbar.LENGTH_INDEFINITE) {
|
||||
anchorView = activity?.bottom_nav
|
||||
anchorView = activityBinding?.bottomNav
|
||||
var undoing = false
|
||||
setAction(R.string.undo) {
|
||||
presenter.markChapterRead(chapter, false, lastRead, pagesLeft)
|
||||
@ -457,14 +446,14 @@ class RecentsController(bundle: Bundle? = null) :
|
||||
|
||||
override fun onPrepareOptionsMenu(menu: Menu) {
|
||||
super.onPrepareOptionsMenu(menu)
|
||||
if (showingDownloads) dl_bottom_sheet.prepareMenu(menu)
|
||||
if (showingDownloads) binding.downloadBottomSheet.dlBottomSheet.prepareMenu(menu)
|
||||
}
|
||||
|
||||
override fun onChangeStarted(handler: ControllerChangeHandler, type: ControllerChangeType) {
|
||||
super.onChangeStarted(handler, type)
|
||||
if (type.isEnter) {
|
||||
if (type == ControllerChangeType.POP_ENTER) presenter.onCreate()
|
||||
dl_bottom_sheet.dismiss()
|
||||
binding.downloadBottomSheet.dlBottomSheet.dismiss()
|
||||
} else {
|
||||
if (type == ControllerChangeType.POP_EXIT) presenter.onDestroy()
|
||||
snack?.dismiss()
|
||||
@ -480,29 +469,29 @@ class RecentsController(bundle: Bundle? = null) :
|
||||
fun hasQueue() = presenter.downloadManager.hasQueue()
|
||||
|
||||
override fun showSheet() {
|
||||
if (dl_bottom_sheet.sheetBehavior?.isHideable == false || hasQueue()) {
|
||||
dl_bottom_sheet.sheetBehavior?.expand()
|
||||
if (binding.downloadBottomSheet.dlBottomSheet.sheetBehavior?.isHideable == false || hasQueue()) {
|
||||
binding.downloadBottomSheet.dlBottomSheet.sheetBehavior?.expand()
|
||||
}
|
||||
}
|
||||
|
||||
override fun toggleSheet() {
|
||||
if (showingDownloads) dl_bottom_sheet.dismiss()
|
||||
else dl_bottom_sheet.sheetBehavior?.expand()
|
||||
if (showingDownloads) binding.downloadBottomSheet.dlBottomSheet.dismiss()
|
||||
else binding.downloadBottomSheet.dlBottomSheet.sheetBehavior?.expand()
|
||||
}
|
||||
|
||||
override fun sheetIsExpanded(): Boolean = dl_bottom_sheet.sheetBehavior.isExpanded()
|
||||
override fun sheetIsExpanded(): Boolean = binding.downloadBottomSheet.dlBottomSheet.sheetBehavior.isExpanded()
|
||||
|
||||
override fun expandSearch() {
|
||||
if (showingDownloads) {
|
||||
dl_bottom_sheet.dismiss()
|
||||
binding.downloadBottomSheet.dlBottomSheet.dismiss()
|
||||
} else {
|
||||
activity?.toolbar?.menu?.findItem(R.id.action_search)?.expandActionView()
|
||||
activityBinding?.toolbar?.menu?.findItem(R.id.action_search)?.expandActionView()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
if (showingDownloads) {
|
||||
return dl_bottom_sheet.onOptionsItemSelected(item)
|
||||
return binding.downloadBottomSheet.dlBottomSheet.onOptionsItemSelected(item)
|
||||
}
|
||||
when (item.itemId) {
|
||||
R.id.action_group_all, R.id.action_ungroup_all, R.id.action_only_history,
|
||||
|
@ -25,7 +25,7 @@
|
||||
android:layout_gravity="end|center"
|
||||
android:layout_marginEnd="21dp"
|
||||
android:src="@drawable/ic_eye_24dp"
|
||||
android:tint="@color/md_white_1000" />
|
||||
app:tint="@color/md_white_1000" />
|
||||
</FrameLayout>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
@ -151,6 +151,7 @@
|
||||
|
||||
<include
|
||||
layout="@layout/download_button"
|
||||
android:id="@+id/download_button"
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
|
@ -35,10 +35,11 @@
|
||||
android:alpha="0.5"
|
||||
android:background="@drawable/shape_gradient_top_shadow"
|
||||
android:paddingBottom="10dp"
|
||||
app:layout_anchor="@id/dl_bottom_sheet"
|
||||
app:layout_anchor="@id/download_bottom_sheet"
|
||||
app:layout_anchorGravity="top" />
|
||||
<!-- Adding bottom sheet after main content -->
|
||||
<include layout="@layout/download_bottom_sheet" />
|
||||
<include layout="@layout/download_bottom_sheet"
|
||||
android:id="@+id/download_bottom_sheet"/>
|
||||
|
||||
<View
|
||||
android:id="@+id/shadow2"
|
||||
|
Loading…
Reference in New Issue
Block a user