Going to manga chapters now jumps to your last unread chapter

Fixes to dark theme dialogs for custom download amount
This commit is contained in:
Jay 2019-11-03 13:45:30 -08:00
parent 5c80acacb7
commit 2c7f0743db
6 changed files with 50 additions and 17 deletions

View File

@ -33,6 +33,7 @@ import com.google.android.material.floatingactionbutton.FloatingActionButton
import android.content.Context
import android.util.AttributeSet
import androidx.core.view.ViewCompat
import androidx.recyclerview.widget.RecyclerView
import kotlin.math.*
class ChaptersController : NucleusController<ChaptersPresenter>(),
@ -51,6 +52,8 @@ class ChaptersController : NucleusController<ChaptersPresenter>(),
*/
private var adapter: ChaptersAdapter? = null
private var scrollToUnread = true
/**
* Action mode for multiple selection.
*/
@ -84,19 +87,14 @@ class ChaptersController : NucleusController<ChaptersPresenter>(),
adapter = ChaptersAdapter(this, view.context)
recycler.adapter = adapter
recycler.layoutManager = androidx.recyclerview.widget.LinearLayoutManager(view.context)
recycler.addItemDecoration(androidx.recyclerview.widget.DividerItemDecoration(view.context, androidx.recyclerview.widget.DividerItemDecoration.VERTICAL))
recycler.layoutManager = LinearLayoutManager(view.context)
recycler.addItemDecoration(DividerItemDecoration(view.context, DividerItemDecoration.VERTICAL))
recycler.setHasFixedSize(true)
adapter?.fastScroller = fast_scroller
val fabBaseMarginBottom = fab?.marginBottom ?: 0
recycler.doOnApplyWindowInsets { v, insets, padding ->
v.updatePaddingRelative(bottom = padding.bottom + insets.systemWindowInsetBottom)
//if (snack == null) {
//fab?.translationY = -insets.systemWindowInsetBottom.toFloat()
/*}
else
fab?.translationY = 0f*/
fab?.updateLayoutParams<ViewGroup.MarginLayoutParams> {
bottomMargin = fabBaseMarginBottom + insets.systemWindowInsetBottom
}
@ -213,8 +211,9 @@ class ChaptersController : NucleusController<ChaptersPresenter>(),
fun onNextChapters(chapters: List<ChapterItem>) {
// If the list is empty, fetch chapters from source if the conditions are met
// We use presenter chapters instead because they are always unfiltered
if (presenter.chapters.isEmpty())
if (presenter.chapters.isEmpty()) {
initialFetchChapters()
}
val adapter = adapter ?: return
adapter.updateDataSet(chapters)
@ -230,7 +229,17 @@ class ChaptersController : NucleusController<ChaptersPresenter>(),
}
actionMode?.invalidate()
}
scrollToUnread()
}
private fun scrollToUnread() {
if (scrollToUnread) {
val index = presenter.getFirstUnreadIndex()
val centerOfScreen = recycler.height / 2 - 96
(recycler.layoutManager as LinearLayoutManager).scrollToPositionWithOffset(index,
centerOfScreen)
}
scrollToUnread = false
}
private fun initialFetchChapters() {
@ -520,7 +529,3 @@ class ChaptersController : NucleusController<ChaptersPresenter>(),
}
}
}
class ShrinkBehavior(context: Context, attrs: AttributeSet) :
CoordinatorLayout.Behavior<FloatingActionButton>(context, attrs) {
}

View File

@ -415,4 +415,9 @@ class ChaptersPresenter(
return manga.sortDescending()
}
fun getFirstUnreadIndex(): Int {
val index = chapters.sortedByDescending { it.source_order }.indexOfFirst { !it.read }
return if (sortDescending()) (chapters.size - 1) - index
else index
}
}

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/rippleColor">
<item>
<selector>
<item android:state_selected="true">
<color android:color="@color/cardBackground"/>
</item>
<item android:state_activated="true">
<color android:color="@color/dialogBackground"/>
</item>
<item>
<color android:color="@color/dialogBackground"/>
</item>
</selector>
</item>
</ripple>

View File

@ -10,7 +10,7 @@
android:id="@+id/btn_decrease_10"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="?selectable_list_drawable"
android:background="@drawable/dialog_selector"
android:padding="8dp"
android:tint="?colorAccent"
app:srcCompat="@drawable/ic_chevron_left_double_black_24dp" />
@ -19,7 +19,7 @@
android:id="@+id/btn_decrease"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="?selectable_list_drawable"
android:background="@drawable/dialog_selector"
android:tint="?colorAccent"
android:padding="8dp"
app:srcCompat="@drawable/ic_chevron_left_black_24dp" />
@ -38,7 +38,7 @@
android:id="@+id/btn_increase"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="?selectable_list_drawable"
android:background="@drawable/dialog_selector"
android:tint="?colorAccent"
android:padding="8dp"
app:srcCompat="@drawable/ic_chevron_right_black_24dp" />
@ -47,7 +47,7 @@
android:id="@+id/btn_increase_10"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="?selectable_list_drawable"
android:background="@drawable/dialog_selector"
android:tint="?colorAccent"
android:padding="8dp"
app:srcCompat="@drawable/ic_chevron_right_double_black_24dp" />

View File

@ -5,4 +5,6 @@
<color name="oldNavBarBackground">#B3000000</color>
<color name="snackbarBackground">#FFFFFF</color>
<color name="cardBackground">@color/colorDarkPrimary</color>
<color name="rippleColor">@color/md_white_1000_20</color>
<color name="dialogBackground">@color/md_grey_800</color>
</resources>

View File

@ -7,6 +7,8 @@
<color name="drawerPrimary">@color/colorPrimary</color>
<color name="cardBackground">#FFFFFF</color>
<color name="snackbarBackground">#323232</color>
<color name="dialogBackground">@color/md_white_1000</color>
<color name="rippleColor">@color/md_black_1000_12</color>
<!-- Dark Application Colors -->
<color name="colorDarkPrimary">#212121</color>
<color name="colorDarkPrimaryDark">#212121</color>
@ -37,7 +39,7 @@
<color name="textColorSecondaryDark">@color/md_white_1000_70</color>
<color name="textColorHintDark">@color/md_white_1000_50</color>
<color name="dividerDark">@android:color/transparent</color>
<color name="rippleColorDark">@color/md_white_1000_20</color>-
<color name="rippleColorDark">@color/md_white_1000_20</color>
<color name="statusBarDark">@color/md_black_1000</color>
<color name="appBarDark">@color/md_grey_900</color>