Collapse subscriptions filter when scrolling down (#7990)

This commit is contained in:
Hans-Peter Lehmann 2025-09-15 22:41:23 +02:00 committed by GitHub
parent c92e2f4f07
commit de0f09f1e2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 103 additions and 64 deletions

View File

@ -18,6 +18,8 @@ import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.appbar.CollapsingToolbarLayout;
import com.google.android.material.appbar.MaterialToolbar;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import de.danoeh.antennapod.R;
@ -83,6 +85,7 @@ public class SubscriptionFragment extends Fragment
private MaterialToolbar toolbar;
private SwipeRefreshLayout swipeRefreshLayout;
private ProgressBar progressBar;
private CollapsingToolbarLayout collapsingContainer;
private boolean displayUpArrow;
private Disposable disposable;
@ -132,9 +135,11 @@ public class SubscriptionFragment extends Fragment
}
refreshToolbarState();
collapsingContainer = root.findViewById(R.id.collapsing_container);
subscriptionRecycler = root.findViewById(R.id.subscriptions_grid);
registerForContextMenu(subscriptionRecycler);
subscriptionRecycler.addOnScrollListener(new LiftOnScrollListener(root.findViewById(R.id.appbar)));
subscriptionRecycler.addOnScrollListener(new LiftOnScrollListener(collapsingContainer));
subscriptionAdapter = new SubscriptionsRecyclerAdapter((MainActivity) getActivity()) {
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
@ -428,12 +433,21 @@ public class SubscriptionFragment extends Fragment
loadSubscriptionsAndTags();
}
private void setCollapsingToolbarFlags(int flags) {
AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams) collapsingContainer.getLayoutParams();
params.setScrollFlags(flags);
collapsingContainer.setLayoutParams(params);
}
@Override
public void onEndSelectMode() {
floatingSelectMenu.setVisibility(View.GONE);
subscriptionAddButton.setVisibility(View.VISIBLE);
tagsRecycler.setVisibility(tagAdapter.getItemCount() > 1 ? View.VISIBLE : View.GONE);
updateFilterVisibility();
setCollapsingToolbarFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL
| AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS
| AppBarLayout.LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED);
}
@Override
@ -442,6 +456,8 @@ public class SubscriptionFragment extends Fragment
subscriptionAddButton.setVisibility(View.GONE);
tagsRecycler.setVisibility(tagAdapter.getItemCount() > 1 ? View.INVISIBLE : View.GONE);
updateFilterVisibility();
setCollapsingToolbarFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL
| AppBarLayout.LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED);
}
public Pair<Integer, Integer> getScrollPosition() {

View File

@ -1,10 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:orientation="vertical">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appbar"
@ -16,80 +17,102 @@
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin"
app:title="@string/subscriptions_label"
app:navigationContentDescription="@string/toolbar_back_button_content_description"
app:navigationIcon="?homeAsUpIndicator" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="-16dp"
android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/tags_recycler"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingHorizontal="12dp"
android:clipToPadding="false"
android:visibility="visible"
tools:orientation="horizontal"
tools:listitem="@layout/item_tag_chip" />
<TextView
android:id="@+id/feeds_filtered_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingHorizontal="16dp"
android:paddingVertical="4dp"
android:background="?android:attr/selectableItemBackground"
android:text="@string/filtered_label" />
</LinearLayout>
</com.google.android.material.appbar.AppBarLayout>
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/swipeRefresh"
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/appbar">
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/subscriptions_grid"
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:id="@+id/collapsing_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:titleEnabled="false"
app:contentScrim="#00000000"
app:layout_scrollFlags="scroll|snap|enterAlways|exitUntilCollapsed">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_collapseMode="pin">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/tags_recycler"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingHorizontal="12dp"
android:clipToPadding="false"
android:visibility="visible"
tools:orientation="horizontal"
tools:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/item_tag_chip" />
<TextView
android:id="@+id/feeds_filtered_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingHorizontal="16dp"
android:paddingVertical="4dp"
android:background="?android:attr/selectableItemBackground"
android:text="@string/filtered_label" />
</LinearLayout>
</com.google.android.material.appbar.CollapsingToolbarLayout>
</com.google.android.material.appbar.AppBarLayout>
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/swipeRefresh"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:layout_gravity="center_horizontal"
android:paddingBottom="88dp"
tools:itemCount="2"
tools:listitem="@layout/subscription_grid_item" />
app:layout_behavior="@string/appbar_scrolling_view_behavior">
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/subscriptions_grid"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:layout_gravity="center_horizontal"
android:paddingBottom="88dp"
tools:itemCount="2"
tools:listitem="@layout/subscription_grid_item" />
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:indeterminateOnly="true"
android:visibility="visible" />
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/subscriptions_add"
android:layout_width="56dp"
android:layout_height="56dp"
android:layout_margin="16dp"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:contentDescription="@string/add_feed_label"
app:srcCompat="@drawable/ic_add" />
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:indeterminateOnly="true"
android:visibility="visible" />
<de.danoeh.antennapod.ui.view.FloatingSelectMenu
android:id="@+id/floatingSelectMenu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true" />
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/subscriptions_add"
android:layout_width="56dp"
android:layout_height="56dp"
android:layout_margin="16dp"
android:layout_gravity="bottom|end"
android:contentDescription="@string/add_feed_label"
app:srcCompat="@drawable/ic_add" />
</RelativeLayout>
<de.danoeh.antennapod.ui.view.FloatingSelectMenu
android:id="@+id/floatingSelectMenu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</LinearLayout>