Skip to content

Commit

Permalink
fixed scrolling behavior in AllSeriesFragment.kt
Browse files Browse the repository at this point in the history
  • Loading branch information
DatL4g committed Jul 7, 2022
1 parent 8bcc6dc commit 0190cb9
Show file tree
Hide file tree
Showing 6 changed files with 84 additions and 32 deletions.
28 changes: 28 additions & 0 deletions app/src/main/java/de/datlag/burningseries/common/ExtendView.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,14 @@
package de.datlag.burningseries.common

import android.content.Context
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.FrameLayout
import android.widget.ImageView
import android.widget.LinearLayout
import androidx.annotation.GravityInt
import androidx.annotation.LayoutRes
import androidx.core.widget.ImageViewCompat
import androidx.viewbinding.ViewBinding
Expand Down Expand Up @@ -57,3 +61,27 @@ val View.anyHeight: Int?
else -> null
}
}

fun View.setLayoutGravity(@GravityInt gravity: Int) {
val params = this.layoutParams
val asParams = try {
params as LinearLayout.LayoutParams
} catch (ignored: Throwable) {
try {
params as FrameLayout.LayoutParams
} catch (ignored: Throwable) {
params
}
}
when (asParams) {
is LinearLayout.LayoutParams -> {
asParams.gravity = gravity
}
is FrameLayout.LayoutParams -> {
asParams.gravity = gravity
}
}
}

fun View.setLayoutGravityCenter() = this.setLayoutGravity(Gravity.CENTER)
fun View.setLayoutGravityNone() = this.setLayoutGravity(Gravity.NO_GRAVITY)
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import android.os.Build
import android.os.Bundle
import android.util.Size
import android.view.View
import android.view.ViewGroup
import android.view.WindowInsets
import android.view.WindowManager
import android.widget.LinearLayout
Expand Down Expand Up @@ -256,4 +257,7 @@ abstract class AdvancedFragment : Fragment {

val materialToolbar: MaterialToolbar?
get() = toolbarInfo?.toolbar

val fabWrapper: ViewGroup?
get() = (safeActivity as? FABNavigation?)?.fabWrapper
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import android.view.KeyEvent
import android.view.View
import android.widget.ImageView
import androidx.appcompat.widget.LinearLayoutCompat
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat
import androidx.core.graphics.BlendModeColorFilterCompat
import androidx.core.graphics.BlendModeCompat
Expand Down Expand Up @@ -155,4 +156,7 @@ class MainActivity : AdvancedActivity(), FABExtended, FABNavigation, ToolbarInfo
override val sizeHolder: View
get() = binding.collapsingSizeHolder

override val fabWrapper: ConstraintLayout
get() = binding.fabWrapper

}
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package de.datlag.burningseries.ui.connector

import androidx.constraintlayout.widget.ConstraintLayout
import com.google.android.material.floatingactionbutton.FloatingActionButton
import io.michaelrocks.paranoid.Obfuscate

@Obfuscate
interface FABNavigation {
val previousFab: FloatingActionButton
val nextFab: FloatingActionButton
val fabWrapper: ConstraintLayout
}
Original file line number Diff line number Diff line change
Expand Up @@ -62,21 +62,25 @@ class AllSeriesFragment : AdvancedFragment(R.layout.fragment_all_series) {
private fun collectPagination() = burningSeriesViewModel.allSeriesPagination.launchAndCollect {
binding.allSeriesRecycler.gone()
binding.loadingView.visible()
binding.scrollWrapper.setLayoutGravityCenter()
burningSeriesViewModel.getNewPaginationData()
}

private fun collectPaginatedData() = burningSeriesViewModel.allSeriesPaginatedFlat.launchAndCollect {
if (it.second.isEmpty() && burningSeriesViewModel.allSeriesCount.value == 0L) {
binding.allSeriesRecycler.gone()
binding.loadingView.visible()
binding.scrollWrapper.setLayoutGravityCenter()
} else {
if (it.first) {
binding.allSeriesRecycler.gone()
binding.loadingView.visible()
binding.scrollWrapper.setLayoutGravityCenter()
}
allSeriesRecyclerAdapter.submitList(it.second) {
binding.allSeriesRecycler.visible()
binding.loadingView.gone()
binding.scrollWrapper.setLayoutGravityNone()
binding.allSeriesRecycler.smoothScrollToPosition(0)
}
}
Expand All @@ -86,6 +90,7 @@ class AllSeriesFragment : AdvancedFragment(R.layout.fragment_all_series) {
if (it == 0L) {
binding.allSeriesRecycler.gone()
binding.loadingView.visible()
binding.scrollWrapper.setLayoutGravityCenter()
}
}

Expand Down Expand Up @@ -174,5 +179,6 @@ class AllSeriesFragment : AdvancedFragment(R.layout.fragment_all_series) {
setToolbarTitle(R.string.all_series)
appBarLayout?.setExpanded(false, false)
appBarLayout?.setExpandable(false)
fabWrapper?.translationY = 0F
}
}
72 changes: 40 additions & 32 deletions app/src/main/res/layout/fragment_all_series.xml
Original file line number Diff line number Diff line change
@@ -1,42 +1,50 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.core.widget.NestedScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

<androidx.recyclerview.widget.RecyclerView
android:id="@+id/allSeriesRecycler"
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/scrollWrapper"
android:layout_gravity="center"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:animateLayoutChanges="false"
android:nestedScrollingEnabled="false"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
android:layout_height="match_parent">

<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/loadingView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
android:visibility="gone">

<ProgressBar
android:layout_width="?attr/actionBarSize"
android:layout_height="?attr/actionBarSize"
android:layout_margin="8dp"
android:indeterminate="true"
android:indeterminateOnly="true"
android:indeterminateTint="@color/onBackgroundColor" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/allSeriesRecycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:animateLayoutChanges="false"
android:nestedScrollingEnabled="false"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />

<com.google.android.material.textview.MaterialTextView
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/loadingView"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:layout_margin="8dp"
android:layout_height="match_parent"
android:gravity="center"
android:maxLines="1"
android:text="@string/loading"
android:textSize="20sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.constraintlayout.widget.ConstraintLayout>
android:orientation="vertical"
android:visibility="gone">

<ProgressBar
android:layout_width="?attr/actionBarSize"
android:layout_height="?attr/actionBarSize"
android:layout_margin="8dp"
android:indeterminate="true"
android:indeterminateOnly="true"
android:indeterminateTint="@color/onBackgroundColor" />

<com.google.android.material.textview.MaterialTextView
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:layout_margin="8dp"
android:gravity="center"
android:maxLines="1"
android:text="@string/loading"
android:textSize="20sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>

0 comments on commit 0190cb9

Please sign in to comment.