Browse Source

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
pull/3707/head^2
Nik Clayton 3 years ago committed by GitHub
parent
commit
5fd532d69b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 3
      app/src/main/java/com/keylesspalace/tusky/components/notifications/NotificationsFragment.kt
  2. 4
      app/src/main/java/com/keylesspalace/tusky/components/notifications/NotificationsPagingAdapter.kt
  3. 5
      app/src/main/java/com/keylesspalace/tusky/components/notifications/NotificationsPagingSource.kt

3
app/src/main/java/com/keylesspalace/tusky/components/notifications/NotificationsFragment.kt

@ -41,6 +41,7 @@ import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.NO_POSITION
import androidx.recyclerview.widget.RecyclerView.SCROLL_STATE_IDLE
import androidx.recyclerview.widget.SimpleItemAnimator
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
// 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 ->
viewModel.accept(InfallibleUiAction.SaveVisibleId(visibleId = id))
}

4
app/src/main/java/com/keylesspalace/tusky/components/notifications/NotificationsPagingAdapter.kt

@ -117,10 +117,6 @@ class NotificationsPagingAdapter(
)
}
init {
stateRestorationPolicy = StateRestorationPolicy.PREVENT_WHEN_EMPTY
}
override fun getItemViewType(position: Int): Int {
return NotificationViewKind.from(getItem(position)?.type).ordinal
}

5
app/src/main/java/com/keylesspalace/tusky/components/notifications/NotificationsPagingSource.kt

@ -204,8 +204,9 @@ class NotificationsPagingSource @Inject constructor(
override fun getRefreshKey(state: PagingState<String, Notification>): String? {
return state.anchorPosition?.let { anchorPosition ->
val anchorPage = state.closestPageToPosition(anchorPosition)
anchorPage?.prevKey ?: anchorPage?.nextKey
val id = state.closestItemToPosition(anchorPosition)?.id
Log.d(TAG, " getRefreshKey returning $id")
return id
}
}

Loading…
Cancel
Save