Notification tab cleanups (#3692)
- Use NO_POSITION instead of hardcoding 0. - Don't set a state restoration policy, PagingDataAdapter already does that - Return the closest item, not just the closest page, in getRefreshKey
This commit is contained in:
parent
327254d759
commit
5fd532d69b
3 changed files with 5 additions and 7 deletions
|
@ -41,6 +41,7 @@ import androidx.recyclerview.widget.DiffUtil
|
||||||
import androidx.recyclerview.widget.DividerItemDecoration
|
import androidx.recyclerview.widget.DividerItemDecoration
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
|
import androidx.recyclerview.widget.RecyclerView.NO_POSITION
|
||||||
import androidx.recyclerview.widget.RecyclerView.SCROLL_STATE_IDLE
|
import androidx.recyclerview.widget.RecyclerView.SCROLL_STATE_IDLE
|
||||||
import androidx.recyclerview.widget.SimpleItemAnimator
|
import androidx.recyclerview.widget.SimpleItemAnimator
|
||||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener
|
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener
|
||||||
|
@ -201,7 +202,7 @@ class NotificationsFragment :
|
||||||
|
|
||||||
// Save the ID of the first notification visible in the list, so the user's
|
// Save the ID of the first notification visible in the list, so the user's
|
||||||
// reading position is always restorable.
|
// reading position is always restorable.
|
||||||
layoutManager.findFirstVisibleItemPosition().takeIf { it >= 0 }?.let { position ->
|
layoutManager.findFirstVisibleItemPosition().takeIf { it != NO_POSITION }?.let { position ->
|
||||||
adapter.snapshot().getOrNull(position)?.id?.let { id ->
|
adapter.snapshot().getOrNull(position)?.id?.let { id ->
|
||||||
viewModel.accept(InfallibleUiAction.SaveVisibleId(visibleId = id))
|
viewModel.accept(InfallibleUiAction.SaveVisibleId(visibleId = id))
|
||||||
}
|
}
|
||||||
|
|
|
@ -117,10 +117,6 @@ class NotificationsPagingAdapter(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
init {
|
|
||||||
stateRestorationPolicy = StateRestorationPolicy.PREVENT_WHEN_EMPTY
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getItemViewType(position: Int): Int {
|
override fun getItemViewType(position: Int): Int {
|
||||||
return NotificationViewKind.from(getItem(position)?.type).ordinal
|
return NotificationViewKind.from(getItem(position)?.type).ordinal
|
||||||
}
|
}
|
||||||
|
|
|
@ -204,8 +204,9 @@ class NotificationsPagingSource @Inject constructor(
|
||||||
|
|
||||||
override fun getRefreshKey(state: PagingState<String, Notification>): String? {
|
override fun getRefreshKey(state: PagingState<String, Notification>): String? {
|
||||||
return state.anchorPosition?.let { anchorPosition ->
|
return state.anchorPosition?.let { anchorPosition ->
|
||||||
val anchorPage = state.closestPageToPosition(anchorPosition)
|
val id = state.closestItemToPosition(anchorPosition)?.id
|
||||||
anchorPage?.prevKey ?: anchorPage?.nextKey
|
Log.d(TAG, " getRefreshKey returning $id")
|
||||||
|
return id
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue